aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-09-25 08:37:21 +0300
committerMartin Storsjö <martin@martin.st>2012-09-25 20:51:47 +0300
commit375bff7084fd836a6c60b1f5d28a427ab55b66bc (patch)
tree90cab79fb3b052ff9c772783cb4e5efff1f8b05d /libavcodec
parenta10190dcd8e4f357119676510bd182699b61cf36 (diff)
downloadffmpeg-375bff7084fd836a6c60b1f5d28a427ab55b66bc.tar.gz
libfdk-aac: Allow setting VBR modes via a private option
This avoids using the global_quality field and QSCALE flag for passing the VBR modes, since the value range of the global_quality field doesn't really map cleanly to this codec's VBR modes. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/libfdk-aacenc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c
index 362a17ccdf..fada1c2550 100644
--- a/libavcodec/libfdk-aacenc.c
+++ b/libavcodec/libfdk-aacenc.c
@@ -36,6 +36,7 @@ typedef struct AACContext {
int signaling;
int latm;
int header_period;
+ int vbr;
AudioFrameQueue afq;
} AACContext;
@@ -50,6 +51,7 @@ static const AVOption aac_enc_options[] = {
{ "explicit_hierarchical", "Explicit hierarchical signaling", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, "signaling" },
{ "latm", "Output LATM/LOAS encapsulated data", offsetof(AACContext, latm), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
{ "header_period", "StreamMuxConfig and PCE repetition period (in frames)", offsetof(AACContext, header_period), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 0xffff, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
+ { "vbr", "VBR mode (1-5)", offsetof(AACContext, vbr), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 5, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
{ NULL }
};
@@ -173,8 +175,8 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
goto error;
}
- if (avctx->flags & CODEC_FLAG_QSCALE) {
- int mode = avctx->global_quality;
+ if (avctx->flags & CODEC_FLAG_QSCALE || s->vbr) {
+ int mode = s->vbr ? s->vbr : avctx->global_quality;
if (mode < 1 || mode > 5) {
av_log(avctx, AV_LOG_WARNING,
"VBR quality %d out of range, should be 1-5\n", mode);