From: jstebbins Date: Tue, 8 Feb 2011 01:24:07 +0000 (+0000) Subject: Fix issue with decoding DTS-HD streams X-Git-Url: http://git.sourceforge.jp/view?p=handbrake-jp%2Fhandbrake-jp-git.git;a=commitdiff_plain;h=e69abb1fceec763f3081ca831617ad7eaa3965fb Fix issue with decoding DTS-HD streams We now inspect the new profile member of AVCodecContext to determine if the stream is DTS or DTS-HD and send it to the appropriate decoder. git-svn-id: svn://localhost/HandBrake/trunk@3785 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- diff --git a/libhb/stream.c b/libhb/stream.c index c90f9490..bd2cee38 100644 --- a/libhb/stream.c +++ b/libhb/stream.c @@ -1540,21 +1540,6 @@ int hb_stream_seek_ts( hb_stream_t * stream, int64_t ts ) return -1; } -static const char* make_upper( const char* s ) -{ - static char name[8]; - char *cp = name; - char *ep = cp + sizeof(name)-1; - - while ( *s && cp < ep ) - { - *cp++ = islower(*s)? toupper(*s) : *s; - ++s; - } - *cp = 0; - return name; -} - static void set_audio_description( hb_audio_t *audio, iso639_lang_t *lang ) { /* XXX @@ -1570,11 +1555,23 @@ static void set_audio_description( hb_audio_t *audio, iso639_lang_t *lang ) ( cc = hb_ffmpeg_context( audio->config.in.codec_param ) ) && avcodec_find_decoder( cc->codec_id ) ) { - codec_name = make_upper( avcodec_find_decoder( cc->codec_id )->name ); + AVCodec *codec = avcodec_find_decoder( cc->codec_id ); + codec_name = codec->name; if ( !strcmp( codec_name, "LIBFAAD" ) ) { codec_name = "AAC"; } + if ( !strcmp( codec_name, "DCA" ) ) + { + codec_name = "DTS"; + } + + char *profile_name; + profile_name = av_get_profile_name( codec, cc->profile ); + if ( profile_name ) + { + codec_name = profile_name; + } } else if ( audio->config.in.codec == HB_ACODEC_MPGA && avcodec_find_decoder( audio->config.in.codec_param ) ) @@ -3014,7 +3011,10 @@ static void add_ffmpeg_audio( hb_title_t *title, hb_stream_t *stream, int id ) { audio->config.in.codec = HB_ACODEC_AC3; } - else if ( codec->codec_id == CODEC_ID_DTS ) + else if ( codec->codec_id == CODEC_ID_DTS && + ( codec->profile == FF_PROFILE_DTS || + codec->profile == FF_PROFILE_DTS_ES || + codec->profile == FF_PROFILE_DTS_96_24 ) ) { audio->config.in.codec = HB_ACODEC_DCA; }