]> git.sesse.net Git - vlc/blobdiff - modules/demux/mkv.cpp
Merge back branch 0.8.6-playlist-vlm to trunk.
[vlc] / modules / demux / mkv.cpp
index 93bd3cf402f5e39ea237140e76a382a4be26cd93..a86f299174a3f5a212657a9055058bbff6895d46 100644 (file)
@@ -19,7 +19,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /*****************************************************************************
@@ -281,19 +281,19 @@ typedef struct {
 } ATTRIBUTE_PACKED hl_gi_t;
 
 
-/** 
- * Button Color Information Table 
+/**
+ * Button Color Information Table
  * Each entry beeing a 32bit word that contains the color indexs and alpha
  * values to use.  They are all represented by 4 bit number and stored
  * like this [Ci3, Ci2, Ci1, Ci0, A3, A2, A1, A0].   The actual palette
  * that the indexes reference is in the PGC.
- * @TODO split the uint32_t into a struct
+ * \todo split the uint32_t into a struct
  */
 typedef struct {
   uint32_t btn_coli[3][2];  /**< [button color number-1][select:0/action:1] */
 } ATTRIBUTE_PACKED btn_colit_t;
 
-/** 
+/**
  * Button Information
  *
  * NOTE: I've had to change the structure from the disk layout to get
@@ -1592,13 +1592,13 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
     int         i_skp;
     size_t      i_idx;
 
-    vlc_meta_t **pp_meta;
+    vlc_meta_t *p_meta;
 
     switch( i_query )
     {
         case DEMUX_GET_META:
-            pp_meta = (vlc_meta_t**)va_arg( args, vlc_meta_t** );
-            *pp_meta = vlc_meta_Duplicate( p_sys->meta );
+            p_meta = (vlc_meta_t*)va_arg( args, vlc_meta_t* );
+            vlc_meta_Merge( p_meta, p_sys->meta );
             return VLC_SUCCESS;
 
         case DEMUX_GET_LENGTH:
@@ -2421,6 +2421,12 @@ bool matroska_segment_c::Select( mtime_t i_start_time )
         {
             tracks[i_track]->fmt.i_codec = VLC_FOURCC( 's', 's', 'a', ' ' );
             tracks[i_track]->fmt.subs.psz_encoding = strdup( "UTF-8" );
+            if( tracks[i_track]->i_extra_data ) 
+            {
+                tracks[i_track]->fmt.i_extra = tracks[i_track]->i_extra_data;
+                tracks[i_track]->fmt.p_extra = malloc( tracks[i_track]->i_extra_data );
+                memcpy( tracks[i_track]->fmt.p_extra, tracks[i_track]->p_extra_data, tracks[i_track]->i_extra_data );
+            }
         }
         else if( !strcmp( tracks[i_track]->psz_codec, "S_VOBSUB" ) )
         {
@@ -4612,7 +4618,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info )
 
             msg_Dbg( &sys.demuxer, "|   |   + family=%d", *(uint32*)uid->GetBuffer() );
         }
-#if defined( HAVE_GMTIME_R ) && !defined( SYS_DARWIN )
+#if defined( HAVE_GMTIME_R ) && !defined( __APPLE__ )
         else if( MKV_IS_ID( l, KaxDateUTC ) )
         {
             KaxDateUTC &date = *(KaxDateUTC*)l;
@@ -4911,54 +4917,30 @@ void matroska_segment_c::InformationCreate( )
 
     if( psz_title )
     {
-        vlc_meta_Add( sys.meta, VLC_META_TITLE, psz_title );
+        vlc_meta_SetTitle( sys.meta, psz_title );
     }
     if( psz_date_utc )
     {
-        vlc_meta_Add( sys.meta, VLC_META_DATE, psz_date_utc );
+        vlc_meta_SetDate( sys.meta, psz_date_utc );
     }
     if( psz_segment_filename )
     {
-        vlc_meta_Add( sys.meta, _("Segment filename"), psz_segment_filename );
+        fprintf( stderr, "***** WARNING: Unhandled meta - Use custom\n" );
     }
     if( psz_muxing_application )
     {
-        vlc_meta_Add( sys.meta, _("Muxing application"), psz_muxing_application );
+        fprintf( stderr, "***** WARNING: Unhandled meta - Use custom\n" );
     }
     if( psz_writing_application )
     {
-        vlc_meta_Add( sys.meta, _("Writing application"), psz_writing_application );
+        fprintf( stderr, "***** WARNING: Unhandled meta - Use custom\n" );
     }
 
     for( i_track = 0; i_track < tracks.size(); i_track++ )
     {
-        mkv_track_t *tk = tracks[i_track];
-        vlc_meta_t *mtk = vlc_meta_New();
-
-        sys.meta->track = (vlc_meta_t**)realloc( sys.meta->track,
-                                                    sizeof( vlc_meta_t * ) * ( sys.meta->i_track + 1 ) );
-        sys.meta->track[sys.meta->i_track++] = mtk;
-
-        if( tk->fmt.psz_description )
-        {
-            vlc_meta_Add( sys.meta, VLC_META_DESCRIPTION, tk->fmt.psz_description );
-        }
-        if( tk->psz_codec_name )
-        {
-            vlc_meta_Add( sys.meta, VLC_META_CODEC_NAME, tk->psz_codec_name );
-        }
-        if( tk->psz_codec_settings )
-        {
-            vlc_meta_Add( sys.meta, VLC_META_SETTING, tk->psz_codec_settings );
-        }
-        if( tk->psz_codec_info_url )
-        {
-            vlc_meta_Add( sys.meta, VLC_META_CODEC_DESCRIPTION, tk->psz_codec_info_url );
-        }
-        if( tk->psz_codec_download_url )
-        {
-            vlc_meta_Add( sys.meta, VLC_META_URL, tk->psz_codec_download_url );
-        }
+//        mkv_track_t *tk = tracks[i_track];
+//        vlc_meta_t *mtk = vlc_meta_New();
+        fprintf( stderr, "***** WARNING: Unhandled child meta\n");
     }
 
     if( i_tags_position >= 0 )