Commit c57c770d authored by Justin Ruggles's avatar Justin Ruggles Committed by Michael Niedermayer

vbr audio encode patch by (Justin Ruggles: jruggle, earthlink net)

with changes by me
    int->float as video uses float too
    remove silent cliping to some per codec range, this should result in an error instead
    remove change to utils.c as its inconsistant with video

Originally committed as revision 4533 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 32fbf33e
...@@ -217,6 +217,8 @@ static int gop_size = 12; ...@@ -217,6 +217,8 @@ static int gop_size = 12;
static int intra_only = 0; static int intra_only = 0;
static int audio_sample_rate = 44100; static int audio_sample_rate = 44100;
static int audio_bit_rate = 64000; static int audio_bit_rate = 64000;
#define QSCALE_NONE -99999
static float audio_qscale = QSCALE_NONE;
static int audio_disable = 0; static int audio_disable = 0;
static int audio_channels = 1; static int audio_channels = 1;
static int audio_codec_id = CODEC_ID_NONE; static int audio_codec_id = CODEC_ID_NONE;
...@@ -3501,6 +3503,10 @@ static void new_audio_stream(AVFormatContext *oc) ...@@ -3501,6 +3503,10 @@ static void new_audio_stream(AVFormatContext *oc)
audio_enc->codec_id = codec_id; audio_enc->codec_id = codec_id;
audio_enc->bit_rate = audio_bit_rate; audio_enc->bit_rate = audio_bit_rate;
if (audio_qscale > QSCALE_NONE) {
audio_enc->flags |= CODEC_FLAG_QSCALE;
audio_enc->global_quality = st->quality = FF_QP2LAMBDA * audio_qscale;
}
audio_enc->strict_std_compliance = strict; audio_enc->strict_std_compliance = strict;
audio_enc->thread_count = thread_count; audio_enc->thread_count = thread_count;
/* For audio codecs other than AC3 or DTS we limit */ /* For audio codecs other than AC3 or DTS we limit */
...@@ -4348,6 +4354,7 @@ const OptionDef options[] = { ...@@ -4348,6 +4354,7 @@ const OptionDef options[] = {
/* audio options */ /* audio options */
{ "ab", HAS_ARG | OPT_AUDIO, {(void*)opt_audio_bitrate}, "set audio bitrate (in kbit/s)", "bitrate", }, { "ab", HAS_ARG | OPT_AUDIO, {(void*)opt_audio_bitrate}, "set audio bitrate (in kbit/s)", "bitrate", },
{ "aq", OPT_FLOAT | HAS_ARG | OPT_AUDIO, {(void*)&audio_qscale}, "set audio quality (codec-specific)", "quality", },
{ "ar", HAS_ARG | OPT_AUDIO, {(void*)opt_audio_rate}, "set audio sampling rate (in Hz)", "rate" }, { "ar", HAS_ARG | OPT_AUDIO, {(void*)opt_audio_rate}, "set audio sampling rate (in Hz)", "rate" },
{ "ac", HAS_ARG | OPT_AUDIO, {(void*)opt_audio_channels}, "set number of audio channels", "channels" }, { "ac", HAS_ARG | OPT_AUDIO, {(void*)opt_audio_channels}, "set number of audio channels", "channels" },
{ "an", OPT_BOOL | OPT_AUDIO, {(void*)&audio_disable}, "disable audio" }, { "an", OPT_BOOL | OPT_AUDIO, {(void*)&audio_disable}, "disable audio" },
......
...@@ -56,7 +56,11 @@ static int Faac_encode_init(AVCodecContext *avctx) ...@@ -56,7 +56,11 @@ static int Faac_encode_init(AVCodecContext *avctx)
faac_cfg->mpegVersion = MPEG4; faac_cfg->mpegVersion = MPEG4;
faac_cfg->useTns = 0; faac_cfg->useTns = 0;
faac_cfg->allowMidside = 1; faac_cfg->allowMidside = 1;
faac_cfg->bitRate = avctx->bit_rate; faac_cfg->bitRate = avctx->bit_rate / avctx->channels;
if(avctx->flags & CODEC_FLAG_QSCALE) {
faac_cfg->bitRate = 0;
faac_cfg->quantqual = avctx->global_quality / FF_QP2LAMBDA;
}
faac_cfg->outputFormat = 0; faac_cfg->outputFormat = 0;
faac_cfg->inputFormat = FAAC_INPUT_16BIT; faac_cfg->inputFormat = FAAC_INPUT_16BIT;
......
...@@ -53,6 +53,11 @@ static int MP3lame_encode_init(AVCodecContext *avctx) ...@@ -53,6 +53,11 @@ static int MP3lame_encode_init(AVCodecContext *avctx)
/* lame 3.91 doesn't work in mono */ /* lame 3.91 doesn't work in mono */
lame_set_mode(s->gfp, JOINT_STEREO); lame_set_mode(s->gfp, JOINT_STEREO);
lame_set_brate(s->gfp, avctx->bit_rate/1000); lame_set_brate(s->gfp, avctx->bit_rate/1000);
if(avctx->flags & CODEC_FLAG_QSCALE) {
lame_set_brate(s->gfp, 0);
lame_set_VBR(s->gfp, vbr_default);
lame_set_VBR_q(s->gfp, avctx->global_quality / (float)FF_QP2LAMBDA);
}
lame_set_bWriteVbrTag(s->gfp,0); lame_set_bWriteVbrTag(s->gfp,0);
if (lame_init_params(s->gfp) < 0) if (lame_init_params(s->gfp) < 0)
goto err_close; goto err_close;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment