Browse Source

demux: mp4: add support for XiphQt vorbis

pull/46/head
Francois Cartegnie 10 years ago
parent
commit
e085cdceb4
  1. 31
      modules/demux/mp4/essetup.c
  2. 6
      modules/demux/mp4/libmp4.c
  3. 6
      modules/demux/mp4/libmp4.h

31
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 );

6
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 },

6
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' )

Loading…
Cancel
Save