summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2011-02-08 01:24:07 +0000
committerjstebbins <[email protected]>2011-02-08 01:24:07 +0000
commit44be77bcc5dc96cec69a30d50dfa30d8c07fe198 (patch)
tree05bd39015e6b62085832d8988b9ec77be37d7701
parente9ec3108916b42f1c9616c825d3dd0671a413765 (diff)
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://svn.handbrake.fr/HandBrake/trunk@3785 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r--libhb/stream.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/libhb/stream.c b/libhb/stream.c
index c90f9490a..bd2cee38e 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;
}