Mercurial > mplayer.hg
changeset 13006:8639d064d3a1
DTS support via lavc and libdts
Patch by Aurelien Jacobs ( aurel at gnuage dot org )
dts in wav by me
author | rtognimp |
---|---|
date | Thu, 12 Aug 2004 12:36:08 +0000 |
parents | 8d37cc41a272 |
children | 2a91140108fe |
files | Makefile configure etc/codecs.conf libmpdemux/demux_audio.c libmpdemux/demuxer.c |
diffstat | 5 files changed, 94 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Thu Aug 12 10:22:04 2004 +0000 +++ b/Makefile Thu Aug 12 12:36:08 2004 +0000 @@ -32,7 +32,7 @@ VO_LIBS = $(AA_LIB) $(X_LIB) $(SDL_LIB) $(GGI_LIB) $(MP1E_LIB) $(MLIB_LIB) $(SVGA_LIB) $(DIRECTFB_LIB) $(CACA_LIB) AO_LIBS = $(ARTS_LIB) $(ESD_LIB) $(JACK_LIB) $(NAS_LIB) $(SGIAUDIO_LIB) -CODEC_LIBS = $(AV_LIB) $(FAME_LIB) $(MAD_LIB) $(VORBIS_LIB) $(THEORA_LIB) $(FAAD_LIB) $(LIBLZO_LIB) $(DECORE_LIB) $(XVID_LIB) $(PNG_LIB) $(Z_LIB) $(JPEG_LIB) $(ALSA_LIB) $(XMMS_LIB) +CODEC_LIBS = $(AV_LIB) $(FAME_LIB) $(MAD_LIB) $(VORBIS_LIB) $(THEORA_LIB) $(FAAD_LIB) $(LIBLZO_LIB) $(DECORE_LIB) $(XVID_LIB) $(DTS_LIB) $(PNG_LIB) $(Z_LIB) $(JPEG_LIB) $(ALSA_LIB) $(XMMS_LIB) COMMON_LIBS = libmpcodecs/libmpcodecs.a mp3lib/libMP3.a liba52/liba52.a libmpeg2/libmpeg2.a $(W32_LIB) $(DS_LIB) libaf/libaf.a libmpdemux/libmpdemux.a input/libinput.a postproc/libswscale.a osdep/libosdep.a $(DVDREAD_LIB) $(CODEC_LIBS) $(FREETYPE_LIB) $(TERMCAP_LIB) $(CDPARANOIA_LIB) $(MPLAYER_NETWORK_LIB) $(WIN32_LIB) $(GIF_LIB) $(MACOSX_FRAMEWORKS) $(SMBSUPPORT_LIB) $(FRIBIDI_LIB) $(FONTCONFIG_LIB) $(ENCA_LIB) CFLAGS = $(OPTFLAGS) -Ilibmpdemux -Iloader -Ilibvo $(FREETYPE_INC) $(EXTRA_INC) $(CDPARANOIA_INC) $(SDL_INC) $(X11_INC) $(FRIBIDI_INC) $(DVB_INC) $(XVID_INC) $(FONTCONFIG_INC) $(CACA_INC) # -Wall
--- a/configure Thu Aug 12 10:22:04 2004 +0000 +++ b/configure Thu Aug 12 12:36:08 2004 +0000 @@ -214,6 +214,7 @@ --enable-xmms build with XMMS inputplugin support [disabled] --disable-mp3lib disable builtin mp3lib [enabled] --disable-liba52 disable builtin liba52 [enabled] + --enable-libdts enable libdts support [autodetect] --disable-libmpeg2 disable builtin libmpeg2 [enabled] Video output: @@ -319,6 +320,8 @@ --with-xvmclib=PATH path to adapter specific XvMCxxxxx.so (e.g. NVIDIA) --with-xvidlibdir=DIR libxvidcore (XviD) in DIR --with-xvidincdir=DIR XviD header in DIR + --with-dtslibdir=DIR libdts library in DIR + --with-dtsincdir=DIR libdts header in DIR --with-livelibdir=DIR path to LIVE.COM Streaming Media libraries --with-xmmsplugindir=DIR path to XMMS plugins --with-xmmslibdir=DIR path to libxmms.so.1 @@ -1217,6 +1220,7 @@ _theora=auto _mp3lib=yes _liba52=yes +_libdts=auto _libmpeg2=yes _matroska_internal=yes _tremor=no @@ -1394,6 +1398,8 @@ --disable-mp3lib) _mp3lib=no ;; --enable-liba52) _liba52=yes ;; --disable-liba52) _liba52=no ;; + --enable-libdts) _libdts=yes ;; + --disable-libdts) _libdts=no ;; --enable-libmpeg2) _libmpeg2=yes ;; --disable-libmpeg2) _libmpeg2=no ;; --enable-internal-matroska) _matroska_internal=yes ;; @@ -1657,6 +1663,12 @@ --with-xvidincdir=*) _inc_xvid=-I`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -I,g'` ;; + --with-dtslibdir=*) + _ld_libdts=-L`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -L,g'` + ;; + --with-dtsincdir=*) + _inc_libdts=-I`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -I,g'` + ;; --with-sdl-config=*) _sdlconfig=`echo $ac_option | cut -d '=' -f 2` ;; @@ -4852,6 +4864,26 @@ fi echores "$_liba52" +echocheck "libdts support" +if test "$_libdts" = auto ; then + _libdts=no + cat > $TMPC << EOF +#include <stdint.h> +#include <dts.h> +int main(void) { dts_init (0); return 0; } +EOF + cc_check $_inc_libdts $_ld_libdts -ldts -lm && _libdts=yes +fi +if test "$_libdts" = yes ; then + _def_libdts='#define CONFIG_DTS 1' + _ld_libdts="$_ld_libdts -ldts -lm" + _codecmodules="libdts $_codecmodules" +else + _def_libdts='#undef CONFIG_DTS' + _nocodecmodules="libdts $_nocodecmodules" +fi +echores "$_libdts" + echocheck "libmpeg2 support" if test "$_libmpeg2" = yes ; then _def_libmpeg2='#define USE_LIBMPEG2 1' @@ -6192,6 +6224,9 @@ XVID = $_xvid XVID_INC = $_inc_xvid XVID_LIB = $_ld_xvid +CONFIG_DTS = $_libdts +DTS_INC = $_inc_libdts +DTS_LIB = $_ld_libdts DECORE_LIB = $_ld_decore $_ld_mp3lame MENCODER = $_mencoder ENCORE_LIB = $_ld_encore $_ld_mp3lame @@ -6533,6 +6568,7 @@ /* Use codec libs included in mplayer CVS / source dist: */ $_def_mp3lib $_def_liba52 +$_def_libdts $_def_libmpeg2 /* Use libfame encoder filter */
--- a/etc/codecs.conf Thu Aug 12 10:22:04 2004 +0000 +++ b/etc/codecs.conf Thu Aug 12 12:36:08 2004 +0000 @@ -2216,6 +2216,13 @@ driver libac3 dll "libac3" +audiocodec ffdts + info "DTS" + status working + format 0x2001 + driver ffmpeg + dll "dts" + audiocodec voxware info "VoxWare" status working @@ -2254,6 +2261,12 @@ fourcc dnet driver hwac3 +audiocodec hwdts + info "DTS through SPDIF" + status working + format 0x2001 + driver hwac3 + audiocodec vorbis info "OggVorbis Audio Decoder" status working
--- a/libmpdemux/demux_audio.c Thu Aug 12 10:22:04 2004 +0000 +++ b/libmpdemux/demux_audio.c Thu Aug 12 12:36:08 2004 +0000 @@ -206,6 +206,46 @@ demuxer->movi_start = stream_tell(s); demuxer->movi_end = s->end_pos; // printf("wav: %X .. %X\n",(int)demuxer->movi_start,(int)demuxer->movi_end); + // Check if it contains dts audio + if((w->wFormatTag == 0x01) && (w->nChannels == 2) && (w->nSamplesPerSec == 44100)) { + unsigned char buf[16384]; // vlc uses 16384*4 (4 dts frames) + unsigned int i; + stream_read(s, buf, sizeof(buf)); + for (i = 0; i < sizeof(buf); i += 2) { + // DTS, 14 bit, LE + if((buf[i] == 0xff) && (buf[i+1] == 0x1f) && (buf[i+2] == 0x00) && + (buf[i+3] == 0xe8) && ((buf[i+4] & 0xfe) == 0xf0) && (buf[i+5] == 0x07)) { + sh_audio->format = 0x2001; + mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 14 bit, LE\n"); + break; + } + // DTS, 14 bit, BE + if((buf[i] == 0x1f) && (buf[i+1] == 0xff) && (buf[i+2] == 0xe8) && + (buf[i+3] == 0x00) && (buf[i+4] == 0x07) && ((buf[i+5] & 0xfe) == 0xf0)) { + sh_audio->format = 0x2001; + mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 14 bit, BE\n"); + break; + } + // DTS, 16 bit, BE + if((buf[i] == 0x7f) && (buf[i+1] == 0xfe) && (buf[i+2] == 0x80) && + (buf[i+3] == 0x01)) { + sh_audio->format = 0x2001; + mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 16 bit, BE\n"); + break; + } + // DTS, 16 bit, LE + if((buf[i] == 0xfe) && (buf[i+1] == 0x7f) && (buf[i+2] == 0x01) && + (buf[i+3] == 0x80)) { + sh_audio->format = 0x2001; + mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 16 bit, LE\n"); + break; + } + } + if (sh_audio->format == 0x2001) + mp_msg(MSGT_DEMUX,MSGL_DBG2,"[demux_audio] DTS sync offset = %u\n", i); + + } + stream_seek(s,demuxer->movi_start); } break; case fLaC: sh_audio->format = mmioFOURCC('f', 'L', 'a', 'C');
--- a/libmpdemux/demuxer.c Thu Aug 12 10:22:04 2004 +0000 +++ b/libmpdemux/demuxer.c Thu Aug 12 12:36:08 2004 +0000 @@ -1308,7 +1308,8 @@ switch(d_audio->id & 0xE0){ // 1110 0000 b (high 3 bit: type low 5: id) case 0x00: sh_audio->format=0x50;break; // mpeg case 0xA0: sh_audio->format=0x10001;break; // dvd pcm - case 0x80: sh_audio->format=0x2000;break; // ac3 + case 0x80: if((d_audio->id & 0xF8) == 0x88) sh_audio->format=0x2001;//dts + else sh_audio->format=0x2000;break; // ac3 default: sh_audio=NULL; // unknown type } } @@ -1328,7 +1329,8 @@ switch(d_audio->id & 0xE0){ // 1110 0000 b (high 3 bit: type low 5: id) case 0x00: sh_audio->format=0x50;break; // mpeg case 0xA0: sh_audio->format=0x10001;break; // dvd pcm - case 0x80: sh_audio->format=0x2000;break; // ac3 + case 0x80: if((d_audio->id & 0xF8) == 0x88) sh_audio->format=0x2001;//dts + else sh_audio->format=0x2000;break; // ac3 default: sh_audio=NULL; // unknown type } }