# HG changeset patch # User rtogni # Date 1155337053 0 # Node ID 2e3981fa938ca7556be861af3662bf6f33c3bef4 # Parent 3a998ae2f952faa4f02039926294b183f8cee662 Add support for 13k Voice (Qclp) in 3g2 files Fix vorbis detection so that it doesn't misdetect other codecs diff -r 3a998ae2f952 -r 2e3981fa938c libmpdemux/demux_mov.c --- a/libmpdemux/demux_mov.c Fri Aug 11 17:10:57 2006 +0000 +++ b/libmpdemux/demux_mov.c Fri Aug 11 22:57:33 2006 +0000 @@ -807,7 +807,9 @@ if(atom_len > 8) { esds_t esds; if(!mp4_parse_esds(&trak->stdata[36+adjust], atom_len-8, &esds)) { - if(sh->format==0x6134706D && esds.decoderConfigLen > 8) + /* 0xdd is a "user private" id, not an official allocated id (see http://www.mp4ra.org/object.html), + so perform some extra checks to be sure that this is really vorbis audio */ + if(esds.objectTypeId==0xdd && esds.streamType==0x15 && sh->format==0x6134706D && esds.decoderConfigLen > 8) { //vorbis audio unsigned char *buf[3]; @@ -861,6 +863,12 @@ if(esds.objectTypeId==MP4OTI_MPEG1Audio || esds.objectTypeId==MP4OTI_MPEG2AudioPart3) sh->format=0x55; // .mp3 + if(esds.objectTypeId==MP4OTI_13kVoice) { // 13K Voice, defined by 3GPP2 + sh->format=mmioFOURCC('Q', 'c', 'l', 'p'); + trak->nchannels=sh->channels=1; + trak->samplebytes=sh->samplesize=1; + } + // dump away the codec specific configuration for the AAC decoder if(esds.decoderConfigLen){ if( (esds.decoderConfig[0]>>3) == 29 ) diff -r 3a998ae2f952 -r 2e3981fa938c libmpdemux/parse_mp4.h --- a/libmpdemux/parse_mp4.h Fri Aug 11 17:10:57 2006 +0000 +++ b/libmpdemux/parse_mp4.h Fri Aug 11 22:57:33 2006 +0000 @@ -59,6 +59,8 @@ #define MP4OTI_MPEG1Audio 0x6B /* JPEG visual stream */ #define MP4OTI_JPEG 0x6C +/* 3GPP2 */ +#define MP4OTI_13kVoice 0xE1 /* I define uint24 here for better understanding */ #ifndef uint24_t