[vlc-commits] demux: mp4: add support for isoflac

Francois Cartegnie git at videolan.org
Thu Apr 6 17:30:49 CEST 2017


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Apr  6 17:28:40 2017 +0200| [08a2eb612cfec72bbdff30a89200f9a9998038f3] | committer: Francois Cartegnie

demux: mp4: add support for isoflac

3rd flavour of metadata storing. yay

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=08a2eb612cfec72bbdff30a89200f9a9998038f3
---

 modules/demux/mp4/essetup.c | 18 ++++++++++++++++++
 modules/demux/mp4/libmp4.c  |  2 ++
 modules/demux/mp4/libmp4.h  |  2 ++
 3 files changed, 22 insertions(+)

diff --git a/modules/demux/mp4/essetup.c b/modules/demux/mp4/essetup.c
index 5a7f36d..1feb6fb 100644
--- a/modules/demux/mp4/essetup.c
+++ b/modules/demux/mp4/essetup.c
@@ -905,6 +905,24 @@ int SetupAudioES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample )
             }
             break;
         }
+        case ATOM_fLaC:
+        {
+            const MP4_Box_t *p_dfLa = MP4_BoxGet(  p_sample, "dfLa", 0 );
+            if( p_dfLa && p_dfLa->data.p_binary->i_blob > 4 &&
+                GetDWBE(p_dfLa->data.p_binary->p_blob) == 0 ) /* fullbox header, avoids creating dedicated parser */
+            {
+                size_t i_extra = p_dfLa->data.p_binary->i_blob;
+                uint8_t *p_extra = malloc(i_extra);
+                {
+                    p_track->fmt.i_extra = i_extra;
+                    p_track->fmt.p_extra = p_extra;
+                    memcpy( p_extra, p_dfLa->data.p_binary->p_blob, p_dfLa->data.p_binary->i_blob);
+                    memcpy( p_extra, "fLaC", 4 );
+                    p_track->fmt.i_codec = VLC_CODEC_FLAC;
+                }
+            }
+            break;
+        }
         case( ATOM_eac3 ):
         {
             const MP4_Box_t *p_dec3 = MP4_BoxGet(  p_sample, "dec3", 0 );
diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 8d2701c..fe09925 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -4221,6 +4221,7 @@ static const struct
     { ATOM_esds,    MP4_ReadBox_esds,         ATOM_mp4v },
     { ATOM_esds,    MP4_ReadBox_esds,         ATOM_mp4s },
     { ATOM_dcom,    MP4_ReadBox_dcom,         0 },
+    { ATOM_dfLa,    MP4_ReadBox_Binary,       ATOM_fLaC },
     { ATOM_cmvd,    MP4_ReadBox_cmvd,         0 },
     { ATOM_avcC,    MP4_ReadBox_avcC,         ATOM_avc1 },
     { ATOM_avcC,    MP4_ReadBox_avcC,         ATOM_avc3 },
@@ -4277,6 +4278,7 @@ static const struct
     { ATOM_agsm,    MP4_ReadBox_sample_soun,  ATOM_stsd },
     { ATOM_ac3,     MP4_ReadBox_sample_soun,  ATOM_stsd },
     { ATOM_eac3,    MP4_ReadBox_sample_soun,  ATOM_stsd },
+    { ATOM_fLaC,    MP4_ReadBox_sample_soun,  ATOM_stsd },
     { ATOM_lpcm,    MP4_ReadBox_sample_soun,  ATOM_stsd },
     { ATOM_ms02,    MP4_ReadBox_sample_soun,  ATOM_stsd },
     { ATOM_ms11,    MP4_ReadBox_sample_soun,  ATOM_stsd },
diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index c4cbb94..de4e0e0 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -193,6 +193,8 @@ typedef int64_t stime_t;
 #define ATOM_fl32 VLC_FOURCC( 'f', 'l', '3', '2' )
 #define ATOM_fl64 VLC_FOURCC( 'f', 'l', '6', '4' )
 #define ATOM_Opus VLC_FOURCC( 'O', 'p', 'u', 's' )
+#define ATOM_fLaC VLC_FOURCC( 'f', 'L', 'a', 'C' )
+#define ATOM_dfLa VLC_FOURCC( 'd', 'f', 'L', 'a' )
 
 /* XiphQT */
 #define ATOM_fCtS VLC_FOURCC( 'f', 'C', 't', 'S' )



More information about the vlc-commits mailing list