diff options
author | jstebbins <[email protected]> | 2011-06-10 18:20:30 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2011-06-10 18:20:30 +0000 |
commit | bf638bca8ae57005b4d570b4260d10af45d1c7a0 (patch) | |
tree | 582f371110d7a1ab53b0ee107d3f35599b9495b7 /libhb/sync.c | |
parent | 8b804a5e65b322aa2a0cbbfd43e0c54b62b5f5f5 (diff) |
libhb: clean up AVCodecContext initializations
also fixes warning message generated by libav when initializing "silence"
sample about channel layout setting.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4038 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'libhb/sync.c')
-rw-r--r-- | libhb/sync.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/libhb/sync.c b/libhb/sync.c index f4cb29f25..670c019f2 100644 --- a/libhb/sync.c +++ b/libhb/sync.c @@ -1112,13 +1112,55 @@ static void InitAudio( hb_job_t * job, hb_sync_common_t * common, int i ) short * zeros; codec = avcodec_find_encoder( CODEC_ID_AC3 ); - c = avcodec_alloc_context(); + c = avcodec_alloc_context3( codec ); c->bit_rate = w->audio->config.in.bitrate; c->sample_rate = w->audio->config.in.samplerate; c->channels = HB_INPUT_CH_LAYOUT_GET_DISCRETE_COUNT( w->audio->config.in.channel_layout ); c->sample_fmt = AV_SAMPLE_FMT_FLT; + switch( w->audio->config.in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK ) + { + case HB_INPUT_CH_LAYOUT_MONO: + c->channel_layout = AV_CH_LAYOUT_MONO; + break; + + case HB_INPUT_CH_LAYOUT_STEREO: + case HB_INPUT_CH_LAYOUT_DOLBY: + c->channel_layout = AV_CH_LAYOUT_STEREO; + break; + + case HB_INPUT_CH_LAYOUT_3F2R: + c->channel_layout = AV_CH_LAYOUT_5POINT0; + break; + + case HB_INPUT_CH_LAYOUT_3F1R: + c->channel_layout = AV_CH_LAYOUT_4POINT0; + break; + + case HB_INPUT_CH_LAYOUT_3F: + c->channel_layout = AV_CH_LAYOUT_SURROUND; + break; + + case HB_INPUT_CH_LAYOUT_2F1R: + c->channel_layout = AV_CH_LAYOUT_2_1; + break; + + case HB_INPUT_CH_LAYOUT_2F2R: + c->channel_layout = AV_CH_LAYOUT_QUAD; + break; + + default: + c->channel_layout = AV_CH_LAYOUT_STEREO; + hb_log("sync: unrecognized channel layout" ); + break; + } + + if ( w->audio->config.in.channel_layout & HB_INPUT_CH_LAYOUT_HAS_LFE ) + { + c->channel_layout |= AV_CH_LOW_FREQUENCY; + } + if( hb_avcodec_open( c, codec, 0 ) < 0 ) { hb_log( "sync: avcodec_open failed" ); |