* libmp4.c : LibMP4 library for mp4 module for vlc
*****************************************************************************
* Copyright (C) 2001-2004 VideoLAN
- * $Id: libmp4.c,v 1.45 2004/01/25 20:05:28 hartman Exp $
+ * $Id$
*
* Author: Laurent Aimar <fenrir@via.ecp.fr>
*
MP4_READBOX_EXIT( 1 );
}
+static int MP4_ReadBox_0xa9xxx( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
+{
+ int16_t i_length, i_dummy;
+
+ MP4_READBOX_ENTER( MP4_Box_data_0xa9xxx_t );
+
+ p_box->data.p_0xa9xxx->psz_text = NULL;
+
+ MP4_GET2BYTES( i_length );
+ MP4_GET2BYTES( i_dummy );
+
+ if( i_length > 0 )
+ {
+ if( i_length > i_read ) i_length = i_read;
+
+ p_box->data.p_0xa9xxx->psz_text = malloc( i_length + 1 );
+
+ memcpy( p_box->data.p_0xa9xxx->psz_text,
+ p_peek, i_length );
+ p_box->data.p_0xa9xxx->psz_text[i_length] = '\0';
+
+#ifdef MP4_VERBOSE
+ msg_Dbg( p_stream->p_input,
+ "read box: \"%4.4s\" text=`%s'",
+ (char*)&p_box->i_type,
+ p_box->data.p_0xa9xxx->psz_text );
+#endif
+ }
+
+ MP4_READBOX_EXIT( 1 );
+}
+static void MP4_FreeBox_0xa9xxx( MP4_Box_t *p_box )
+{
+ FREE( p_box->data.p_0xa9xxx->psz_text );
+}
/**** ------------------------------------------------------------------- ****/
/**** "Higher level" Functions ****/
{ FOURCC_dvp, MP4_ReadBox_sample_vide, MP4_FreeBox_Common },
{ FOURCC_VP31, MP4_ReadBox_sample_vide, MP4_FreeBox_Common },
{ FOURCC_vp31, MP4_ReadBox_sample_vide, MP4_FreeBox_Common },
+ { FOURCC_h264, MP4_ReadBox_sample_vide, MP4_FreeBox_Common },
{ FOURCC_jpeg, MP4_ReadBox_sample_vide, MP4_FreeBox_Common },
{ FOURCC_name, MP4_ReadBox_drms, MP4_FreeBox_Common },
{ FOURCC_priv, MP4_ReadBox_drms, MP4_FreeBox_Common },
+ /* found in udta */
+ { FOURCC_0xa9nam,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9aut,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9cpy,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9swr,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9inf,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9ART,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9dir,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9cmt,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9req,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9day,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9fmt,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9prd,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9prf,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+ { FOURCC_0xa9src,MP4_ReadBox_0xa9xxx, MP4_FreeBox_0xa9xxx },
+
/* Last entry */
{ 0, NULL, NULL }
};
* libmp4.h : LibMP4 library for mp4 module for vlc
*****************************************************************************
* Copyright (C) 2001-2004 VideoLAN
- * $Id: libmp4.h,v 1.20 2004/01/25 20:05:28 hartman Exp $
+ * $Id$
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
#define FOURCC_mjht VLC_FOURCC( 'm', 'j', 'p', 'b' )
#define FOURCC_VP31 VLC_FOURCC( 'V', 'P', '3', '1' )
#define FOURCC_vp31 VLC_FOURCC( 'v', 'p', '3', '1' )
+#define FOURCC_h264 VLC_FOURCC( 'h', '2', '6', '4' )
#define FOURCC_dvc VLC_FOURCC( 'd', 'v', 'c', ' ' )
#define FOURCC_dvp VLC_FOURCC( 'd', 'v', 'p', ' ' )
#define FOURCC_name VLC_FOURCC( 'n', 'a', 'm', 'e' )
#define FOURCC_priv VLC_FOURCC( 'p', 'r', 'i', 'v' )
+#define FOURCC_0xa9nam VLC_FOURCC( 0xa9, 'n', 'a', 'm' )
+#define FOURCC_0xa9aut VLC_FOURCC( 0xa9, 'a', 'u', 't' )
+#define FOURCC_0xa9swr VLC_FOURCC( 0xa9, 's', 'w', 'r' )
+#define FOURCC_0xa9cpy VLC_FOURCC( 0xa9, 'c', 'p', 'y' )
+#define FOURCC_0xa9inf VLC_FOURCC( 0xa9, 'i', 'n', 'f' )
+#define FOURCC_0xa9ART VLC_FOURCC( 0xa9, 'A', 'R', 'T' )
+#define FOURCC_0xa9dir VLC_FOURCC( 0xa9, 'd', 'i', 'r' )
+#define FOURCC_0xa9cmt VLC_FOURCC( 0xa9, 'c', 'm', 't' )
+#define FOURCC_0xa9req VLC_FOURCC( 0xa9, 'r', 'e', 'q' )
+#define FOURCC_0xa9day VLC_FOURCC( 0xa9, 'd', 'a', 'y' )
+#define FOURCC_0xa9fmt VLC_FOURCC( 0xa9, 'f', 'm', 't' )
+#define FOURCC_0xa9prd VLC_FOURCC( 0xa9, 'p', 'r', 'd' )
+#define FOURCC_0xa9prf VLC_FOURCC( 0xa9, 'p', 'r', 'f' )
+#define FOURCC_0xa9src VLC_FOURCC( 0xa9, 's', 'r', 'c' )
+
/* Do you want some debug information on all read boxes ? */
#define MP4_VERBOSE 1
} MP4_Box_data_cmov_t;
-typedef struct MP4_Box_data_rdrf_s
+typedef struct
{
uint8_t i_version;
uint32_t i_flags;
} MP4_Box_data_rdrf_t;
-typedef struct MP4_Box_data_rmdr_s
+typedef struct
{
uint8_t i_version;
uint32_t i_flags;
} MP4_Box_data_rmdr_t;
-typedef struct MP4_Box_data_rmvc_s
+typedef struct
{
uint8_t i_version;
uint32_t i_flags;
} MP4_Box_data_rmvc_t;
-typedef struct MP4_Box_data_rmcd_s
+typedef struct
{
uint8_t i_version;
uint32_t i_flags;
} MP4_Box_data_rmcd_t;
-typedef struct MP4_Box_data_rmqu_s
+typedef struct
{
uint32_t i_quality;
} MP4_Box_data_rmqu_t;
+typedef struct
+{
+ char *psz_text;
+
+} MP4_Box_data_0xa9xxx_t;
+
/*
typedef struct MP4_Box_data__s
{
MP4_Box_data_rmqu_t *p_rmqu;
MP4_Box_data_rmvc_t *p_rmvc;
+ MP4_Box_data_0xa9xxx_t *p_0xa9xxx;
+
void *p_data; /* for unknow type */
} MP4_Box_data_t;
* mp4.c : MP4 file input module for vlc
*****************************************************************************
* Copyright (C) 2001-2004 VideoLAN
- * $Id: mp4.c,v 1.59 2004/02/07 13:26:24 fenrir Exp $
+ * $Id$
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
#include <vlc/input.h>
#include <vlc_playlist.h>
#include "iso_lang.h"
+#include "vlc_meta.h"
#include "libmp4.h"
#include "mp4.h"
return VLC_EGENERIC;
case DEMUX_GET_META:
- return VLC_EGENERIC;
+ {
+ vlc_meta_t **pp_meta = (vlc_meta_t**)va_arg( args, vlc_meta_t** );
+ vlc_meta_t *meta;
+ MP4_Box_t *p_udta = MP4_BoxGet( p_sys->p_root, "/moov/udta" );
+ MP4_Box_t *p_0xa9xxx;
+ if( p_udta == NULL )
+ {
+ return VLC_EGENERIC;
+ }
+ *pp_meta = meta = vlc_meta_New();
+ for( p_0xa9xxx = p_udta->p_first; p_0xa9xxx != NULL; p_0xa9xxx = p_0xa9xxx->p_next )
+ {
+ switch( p_0xa9xxx->i_type )
+ {
+ case FOURCC_0xa9nam:
+ vlc_meta_Add( meta, VLC_META_TITLE, p_0xa9xxx->data.p_0xa9xxx->psz_text );
+ break;
+ case FOURCC_0xa9aut:
+ vlc_meta_Add( meta, VLC_META_AUTHOR, p_0xa9xxx->data.p_0xa9xxx->psz_text );
+ break;
+ case FOURCC_0xa9ART:
+ vlc_meta_Add( meta, VLC_META_ARTIST, p_0xa9xxx->data.p_0xa9xxx->psz_text );
+ break;
+ case FOURCC_0xa9cpy:
+ vlc_meta_Add( meta, VLC_META_COPYRIGHT, p_0xa9xxx->data.p_0xa9xxx->psz_text );
+ break;
+ case FOURCC_0xa9day:
+ vlc_meta_Add( meta, VLC_META_DATE, p_0xa9xxx->data.p_0xa9xxx->psz_text );
+ break;
+
+ case FOURCC_0xa9swr:
+ case FOURCC_0xa9inf:
+ case FOURCC_0xa9dir:
+ case FOURCC_0xa9cmt:
+ case FOURCC_0xa9req:
+ case FOURCC_0xa9fmt:
+ case FOURCC_0xa9prd:
+ case FOURCC_0xa9prf:
+ case FOURCC_0xa9src:
+ /* TODO one day, but they aren't really meaningfull */
+ break;
+
+ default:
+ break;
+ }
+ }
+ return VLC_SUCCESS;
+ }
default:
msg_Err( p_input, "control query unimplemented !!!" );