Browse code

(e)ac3enc: select a default bit rate based on the channel layout

Justin Ruggles authored on 2012/02/23 11:45:06
Showing 5 changed files
... ...
@@ -2141,6 +2141,17 @@ static av_cold int validate_options(AC3EncodeContext *s)
2141 2141
     s->bit_alloc.sr_code  = i % 3;
2142 2142
     s->bitstream_id       = s->eac3 ? 16 : 8 + s->bit_alloc.sr_shift;
2143 2143
 
2144
+    /* select a default bit rate if not set by the user */
2145
+    if (!avctx->bit_rate) {
2146
+        switch (s->fbw_channels) {
2147
+        case 1: avctx->bit_rate =  96000; break;
2148
+        case 2: avctx->bit_rate = 192000; break;
2149
+        case 3: avctx->bit_rate = 320000; break;
2150
+        case 4: avctx->bit_rate = 384000; break;
2151
+        case 5: avctx->bit_rate = 448000; break;
2152
+        }
2153
+    }
2154
+
2144 2155
     /* validate bit rate */
2145 2156
     if (s->eac3) {
2146 2157
         int max_br, min_br, wpf, min_br_dist, min_br_code;
... ...
@@ -151,4 +151,5 @@ AVCodec ff_ac3_fixed_encoder = {
151 151
     .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
152 152
     .priv_class = &ac3enc_class,
153 153
     .channel_layouts = ff_ac3_channel_layouts,
154
+    .defaults        = ac3_defaults,
154 155
 };
... ...
@@ -149,5 +149,6 @@ AVCodec ff_ac3_encoder = {
149 149
     .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
150 150
     .priv_class = &ac3enc_class,
151 151
     .channel_layouts = ff_ac3_channel_layouts,
152
+    .defaults        = ac3_defaults,
152 153
 };
153 154
 #endif
... ...
@@ -20,6 +20,7 @@
20 20
  */
21 21
 
22 22
 #include "libavutil/opt.h"
23
+#include "internal.h"
23 24
 #include "ac3.h"
24 25
 
25 26
 #if AC3ENC_TYPE == AC3ENC_TYPE_AC3_FIXED
... ...
@@ -78,3 +79,8 @@ static const AVOption eac3_options[] = {
78 78
     {"auto", "Selected by the Encoder", 0, AV_OPT_TYPE_CONST, {.dbl = AC3ENC_OPT_AUTO }, INT_MIN, INT_MAX, AC3ENC_PARAM, "cpl_start_band"},
79 79
 {NULL}
80 80
 };
81
+
82
+static const AVCodecDefault ac3_defaults[] = {
83
+    { "b",  "0" },
84
+    { NULL }
85
+};
... ...
@@ -258,5 +258,6 @@ AVCodec ff_eac3_encoder = {
258 258
     .long_name       = NULL_IF_CONFIG_SMALL("ATSC A/52 E-AC-3"),
259 259
     .priv_class      = &eac3enc_class,
260 260
     .channel_layouts = ff_ac3_channel_layouts,
261
+    .defaults        = ac3_defaults,
261 262
 };
262 263
 #endif