summaryrefslogtreecommitdiffstats
path: root/libhb/sync.c
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2011-06-10 18:20:30 +0000
committerjstebbins <[email protected]>2011-06-10 18:20:30 +0000
commitbf638bca8ae57005b4d570b4260d10af45d1c7a0 (patch)
tree582f371110d7a1ab53b0ee107d3f35599b9495b7 /libhb/sync.c
parent8b804a5e65b322aa2a0cbbfd43e0c54b62b5f5f5 (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.c44
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" );