vlc | branch: master | Francois Cartegnie <[email protected]> | Wed May 18 14:04:14 2016 +0200| [e085cdceb4f6c30de67f30a4ef314331311decae] | committer: Francois Cartegnie
demux: mp4: add support for XiphQt vorbis > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e085cdceb4f6c30de67f30a4ef314331311decae --- modules/demux/mp4/essetup.c | 31 +++++++++++++++++++++++++++++++ modules/demux/mp4/libmp4.c | 6 ++++++ modules/demux/mp4/libmp4.h | 6 ++++++ 3 files changed, 43 insertions(+) diff --git a/modules/demux/mp4/essetup.c b/modules/demux/mp4/essetup.c index c8f8c23..408ad5d 100644 --- a/modules/demux/mp4/essetup.c +++ b/modules/demux/mp4/essetup.c @@ -26,6 +26,7 @@ #include "mp4.h" #include "avci.h" +#include "../xiph.h" #include <vlc_demux.h> #include <vlc_aout.h> @@ -753,6 +754,36 @@ int SetupAudioES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample ) p_track->fmt.i_codec = VLC_CODEC_MPGA; break; } + case VLC_FOURCC( 'X', 'i', 'V', 's' ): + { + const MP4_Box_t *p_vCtH = MP4_BoxGet( p_sample, "wave/vCtH" ); /* kCookieTypeVorbisHeader */ + const MP4_Box_t *p_vCtd = MP4_BoxGet( p_sample, "wave/vCt#" ); /* kCookieTypeVorbisComments */ + const MP4_Box_t *p_vCtC = MP4_BoxGet( p_sample, "wave/vCtC" ); /* kCookieTypeVorbisCodebooks */ + if( p_vCtH && p_vCtH->data.p_binary && + p_vCtd && p_vCtd->data.p_binary && + p_vCtC && p_vCtC->data.p_binary ) + { + unsigned headers_sizes[3] = { + p_vCtH->data.p_binary->i_blob, + p_vCtd->data.p_binary->i_blob, + p_vCtC->data.p_binary->i_blob + }; + + const void * headers[3] = { + p_vCtH->data.p_binary->p_blob, + p_vCtd->data.p_binary->p_blob, + p_vCtC->data.p_binary->p_blob + }; + + if( xiph_PackHeaders( &p_track->fmt.i_extra, &p_track->fmt.p_extra, + headers_sizes, headers, 3 ) == VLC_SUCCESS ) + { + p_track->fmt.i_codec = VLC_CODEC_VORBIS; + p_track->fmt.b_packetized = false; + } + } + 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 1015422..017712c8 100644 --- a/modules/demux/mp4/libmp4.c +++ b/modules/demux/mp4/libmp4.c @@ -3919,6 +3919,7 @@ static const struct { ATOM_wave, MP4_ReadBoxContainer, ATOM_fl64 }, { ATOM_wave, MP4_ReadBoxContainer, ATOM_QDMC }, { ATOM_wave, MP4_ReadBoxContainer, ATOM_QDM2 }, + { ATOM_wave, MP4_ReadBoxContainer, ATOM_XiVs }, /* XiphQT */ { ATOM_ilst, MP4_ReadBox_ilst, ATOM_meta }, { ATOM_mvex, MP4_ReadBoxContainer, ATOM_moov }, { ATOM_mvex, MP4_ReadBoxContainer, ATOM_ftyp }, @@ -3976,6 +3977,11 @@ static const struct { ATOM_keys, MP4_ReadBox_keys, ATOM_meta }, { ATOM_colr, MP4_ReadBox_colr, 0 }, + /* XiphQT */ + { ATOM_vCtH, MP4_ReadBox_Binary, ATOM_wave }, + { ATOM_vCtC, MP4_ReadBox_Binary, ATOM_wave }, + { ATOM_vCtd, MP4_ReadBox_Binary, ATOM_wave }, + /* Samples groups specific information */ { ATOM_sbgp, MP4_ReadBox_sbgp, ATOM_stbl }, { ATOM_sbgp, MP4_ReadBox_sbgp, ATOM_traf }, diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h index 3c3a37a..d1e987b 100644 --- a/modules/demux/mp4/libmp4.h +++ b/modules/demux/mp4/libmp4.h @@ -155,6 +155,7 @@ typedef int64_t stime_t; #define ATOM_sowt VLC_FOURCC( 's', 'o', 'w', 't' ) #define ATOM_QDMC VLC_FOURCC( 'Q', 'D', 'M', 'C' ) #define ATOM_QDM2 VLC_FOURCC( 'Q', 'D', 'M', '2' ) +#define ATOM_XiVs VLC_FOURCC( 'X', 'i', 'V', 's' ) #define ATOM_ima4 VLC_FOURCC( 'i', 'm', 'a', '4' ) #define ATOM_IMA4 VLC_FOURCC( 'I', 'M', 'A', '4' ) #define ATOM_dvi VLC_FOURCC( 'd', 'v', 'i', ' ' ) @@ -186,6 +187,11 @@ typedef int64_t stime_t; #define ATOM_fl64 VLC_FOURCC( 'f', 'l', '6', '4' ) #define ATOM_Opus VLC_FOURCC( 'O', 'p', 'u', 's' ) +/* XiphQT */ +#define ATOM_vCtH VLC_FOURCC( 'v', 'C', 't', 'H' ) +#define ATOM_vCtC VLC_FOURCC( 'v', 'C', 't', 'C' ) +#define ATOM_vCtd VLC_FOURCC( 'v', 'C', 't', '#' ) + #define ATOM_zlib VLC_FOURCC( 'z', 'l', 'i', 'b' ) #define ATOM_SVQ1 VLC_FOURCC( 'S', 'V', 'Q', '1' ) #define ATOM_SVQ3 VLC_FOURCC( 'S', 'V', 'Q', '3' ) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
