]> git.sesse.net Git - vlc/commitdiff
demux: mp4: add support for FFV1 v2 (fix #13131)
authorFrancois Cartegnie <fcvlcdev@free.fr>
Tue, 30 Dec 2014 15:19:03 +0000 (16:19 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Tue, 30 Dec 2014 15:21:05 +0000 (16:21 +0100)
V2 has global tables, and then needs it to be passed as
extradata IV.

modules/demux/mp4/essetup.c
modules/demux/mp4/libmp4.c
modules/demux/mp4/libmp4.h

index 2ffacbed943c55d8e9d010f837c855da5dc04729..842744aa917bad9b6bf44dad0e694ba70cc58d50 100644 (file)
@@ -265,6 +265,22 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample )
             break;
         }
 
+        case VLC_CODEC_FFV1:
+        {
+            MP4_Box_t *p_binary = MP4_BoxGet( p_sample, "glbl" );
+            if( p_binary && BOXDATA(p_binary) && BOXDATA(p_binary)->i_blob )
+            {
+                p_track->fmt.p_extra = malloc( BOXDATA(p_binary)->i_blob );
+                if( p_track->fmt.p_extra )
+                {
+                    p_track->fmt.i_extra = BOXDATA(p_binary)->i_blob;
+                    memcpy( p_track->fmt.p_extra, BOXDATA(p_binary)->p_blob,
+                            p_track->fmt.i_extra );
+                }
+            }
+            break;
+        }
+
         case VLC_FOURCC( 'v', 'c', '-', '1' ):
         {
             MP4_Box_t *p_dvc1 = MP4_BoxGet( p_sample, "dvc1" );
index d3263cd73fc67eaa710322c87f0de54bb8ef0cd8..08c669c0a285ff49a712b0a237b809b7e0fc79bb 100644 (file)
@@ -3666,6 +3666,7 @@ static const struct
     { ATOM_dac3,    MP4_ReadBox_dac3,         MP4_FreeBox_Common, 0 },
     { ATOM_dec3,    MP4_ReadBox_dec3,         MP4_FreeBox_Common, 0 },
     { ATOM_dvc1,    MP4_ReadBox_dvc1,         MP4_FreeBox_Common, 0 },
+    { ATOM_glbl,    MP4_ReadBox_Binary,       MP4_FreeBox_Binary, ATOM_FFV1 },
     { ATOM_enda,    MP4_ReadBox_enda,         MP4_FreeBox_Common, 0 },
     { ATOM_iods,    MP4_ReadBox_iods,         MP4_FreeBox_Common, 0 },
     { ATOM_pasp,    MP4_ReadBox_pasp,         MP4_FreeBox_Common, 0 },
@@ -3738,6 +3739,7 @@ static const struct
     { ATOM_3ivd,    MP4_ReadBox_sample_vide,  MP4_FreeBox_sample_vide, ATOM_stsd },
     { ATOM_3VID,    MP4_ReadBox_sample_vide,  MP4_FreeBox_sample_vide, ATOM_stsd },
     { ATOM_3vid,    MP4_ReadBox_sample_vide,  MP4_FreeBox_sample_vide, ATOM_stsd },
+    { ATOM_FFV1,    MP4_ReadBox_sample_vide,  MP4_FreeBox_sample_vide, ATOM_stsd },
     { ATOM_mjpa,    MP4_ReadBox_sample_vide,  MP4_FreeBox_sample_vide, ATOM_stsd },
     { ATOM_mjpb,    MP4_ReadBox_sample_vide,  MP4_FreeBox_sample_vide, ATOM_stsd },
     { ATOM_qdrw,    MP4_ReadBox_sample_vide,  MP4_FreeBox_sample_vide, ATOM_stsd },
index f00d17c0c58d4e767f2f9f1465005ec14b8b0338..0486ed94dbf101d55d6503aa52795edb14a51d37 100644 (file)
 #define ATOM_3ivd VLC_FOURCC( '3', 'i', 'v', 'd' )
 #define ATOM_3VID VLC_FOURCC( '3', 'V', 'I', 'D' )
 #define ATOM_3vid VLC_FOURCC( '3', 'v', 'i', 'd' )
+#define ATOM_FFV1 VLC_FOURCC( 'F', 'F', 'V', '1' )
 #define ATOM_h263 VLC_FOURCC( 'h', '2', '6', '3' )
 #define ATOM_s263 VLC_FOURCC( 's', '2', '6', '3' )
 #define ATOM_DIVX VLC_FOURCC( 'D', 'I', 'V', 'X' )
 #define ATOM_avcC VLC_FOURCC( 'a', 'v', 'c', 'C' )
 #define ATOM_m4ds VLC_FOURCC( 'm', '4', 'd', 's' )
 
+#define ATOM_glbl VLC_FOURCC( 'g', 'l', 'b', 'l' )
 #define ATOM_hvcC VLC_FOURCC( 'h', 'v', 'c', 'C' )
 
 #define ATOM_dvc  VLC_FOURCC( 'd', 'v', 'c', ' ' )