mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 06:03:45 +01:00
DTS support via lavc and libdts
Patch by Aurelien Jacobs ( aurel at gnuage dot org ) dts in wav by me git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13007 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
7b3bcd0751
commit
9c48cc012a
2
Makefile
2
Makefile
@ -32,7 +32,7 @@ OBJS_MPLAYER = $(SRCS_MPLAYER:.c=.o)
|
||||
|
||||
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
|
||||
|
36
configure
vendored
36
configure
vendored
@ -214,6 +214,7 @@ Codecs:
|
||||
--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 @@ Use these options if autodetection fails:
|
||||
--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 @@ _vorbis=auto
|
||||
_theora=auto
|
||||
_mp3lib=yes
|
||||
_liba52=yes
|
||||
_libdts=auto
|
||||
_libmpeg2=yes
|
||||
_matroska_internal=yes
|
||||
_tremor=no
|
||||
@ -1394,6 +1398,8 @@ for ac_option do
|
||||
--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 @@ for ac_option do
|
||||
--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 @@ else
|
||||
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 @@ ARCH_LIB = $_ld_arch $_ld_iconv
|
||||
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 @@ $_def_libavformat_win32
|
||||
/* Use codec libs included in mplayer CVS / source dist: */
|
||||
$_def_mp3lib
|
||||
$_def_liba52
|
||||
$_def_libdts
|
||||
$_def_libmpeg2
|
||||
|
||||
/* Use libfame encoder filter */
|
||||
|
@ -2216,6 +2216,13 @@ audiocodec ac3
|
||||
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 @@ audiocodec hwac3
|
||||
fourcc dnet
|
||||
driver hwac3
|
||||
|
||||
audiocodec hwdts
|
||||
info "DTS through SPDIF"
|
||||
status working
|
||||
format 0x2001
|
||||
driver hwac3
|
||||
|
||||
audiocodec vorbis
|
||||
info "OggVorbis Audio Decoder"
|
||||
status working
|
||||
|
@ -206,6 +206,46 @@ int demux_audio_open(demuxer_t* demuxer) {
|
||||
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');
|
||||
|
@ -1308,7 +1308,8 @@ switch(file_format){
|
||||
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(file_format){
|
||||
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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user