diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-10-02 16:08:20 -0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-12-05 11:23:37 -0500 |
commit | 9a71d362a6b77ec215045e5a9d6bdfc427e37ce4 (patch) | |
tree | d5f7aaa3856f071b51f7cb2fefcb00881d6c69e5 | |
parent | b30a363331ac79331c1d002992689b5ff35bf813 (diff) | |
download | ffmpeg-9a71d362a6b77ec215045e5a9d6bdfc427e37ce4.tar.gz |
avconv: deprecate the -vol option
Remove the code for volume scaling in avconv.c and instead auto-insert a
volume filter into the beginning of the filter chain.
-rw-r--r-- | avconv.c | 59 | ||||
-rw-r--r-- | avconv_filter.c | 23 |
2 files changed, 23 insertions, 59 deletions
@@ -1081,7 +1081,6 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output) { AVFrame *decoded_frame; AVCodecContext *avctx = ist->st->codec; - int bps = av_get_bytes_per_sample(ist->st->codec->sample_fmt); int i, ret, resample_changed; if (!ist->decoded_frame && !(ist->decoded_frame = avcodec_alloc_frame())) @@ -1106,64 +1105,6 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output) pkt->pts = AV_NOPTS_VALUE; } - // preprocess audio (volume) - if (audio_volume != 256) { - int decoded_data_size = decoded_frame->nb_samples * avctx->channels * bps; - void *samples = decoded_frame->data[0]; - switch (avctx->sample_fmt) { - case AV_SAMPLE_FMT_U8: - { - uint8_t *volp = samples; - for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) { - int v = (((*volp - 128) * audio_volume + 128) >> 8) + 128; - *volp++ = av_clip_uint8(v); - } - break; - } - case AV_SAMPLE_FMT_S16: - { - int16_t *volp = samples; - for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) { - int v = ((*volp) * audio_volume + 128) >> 8; - *volp++ = av_clip_int16(v); - } - break; - } - case AV_SAMPLE_FMT_S32: - { - int32_t *volp = samples; - for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) { - int64_t v = (((int64_t)*volp * audio_volume + 128) >> 8); - *volp++ = av_clipl_int32(v); - } - break; - } - case AV_SAMPLE_FMT_FLT: - { - float *volp = samples; - float scale = audio_volume / 256.f; - for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) { - *volp++ *= scale; - } - break; - } - case AV_SAMPLE_FMT_DBL: - { - double *volp = samples; - double scale = audio_volume / 256.; - for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) { - *volp++ *= scale; - } - break; - } - default: - av_log(NULL, AV_LOG_FATAL, - "Audio volume adjustment on sample format %s is not supported.\n", - av_get_sample_fmt_name(ist->st->codec->sample_fmt)); - exit(1); - } - } - rate_emu_sleep(ist); resample_changed = ist->resample_sample_fmt != decoded_frame->format || diff --git a/avconv_filter.c b/avconv_filter.c index 8f430b0be4..e9412abc96 100644 --- a/avconv_filter.c +++ b/avconv_filter.c @@ -452,6 +452,29 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter, first_filter = async; pad_idx = 0; } + if (audio_volume != 256) { + AVFilterContext *volume; + + av_log(NULL, AV_LOG_WARNING, "-vol has been deprecated. Use the volume " + "audio filter instead.\n"); + + snprintf(args, sizeof(args), "volume=%f", audio_volume / 256.0); + + snprintf(name, sizeof(name), "graph %d volume for input stream %d:%d", + fg->index, ist->file_index, ist->st->index); + ret = avfilter_graph_create_filter(&volume, + avfilter_get_by_name("volume"), + name, args, NULL, fg->graph); + if (ret < 0) + return ret; + + ret = avfilter_link(volume, 0, first_filter, pad_idx); + if (ret < 0) + return ret; + + first_filter = volume; + pad_idx = 0; + } if ((ret = avfilter_link(ifilter->filter, 0, first_filter, pad_idx)) < 0) return ret; |