[FFmpeg-devel] [PATCH] ffplay: add startup volume option

Marton Balint cus at passwd.hu
Sun Dec 25 03:00:37 EET 2016


On Thu, 22 Dec 2016, gajjanag at yandex.com wrote:

> From: Ganesh Ajjanagadde <gajjanag at alum.mit.edu>
>
> Fixes Ticket 5389.
>
> Signed-off-by: Ganesh Ajjanagadde <gajjanag at alum.mit.edu>
> ---
> doc/ffplay.texi |  4 ++++
> ffplay.c        | 10 +++++++++-
> 2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/doc/ffplay.texi b/doc/ffplay.texi
> index 073b457256..378a229d67 100644
> --- a/doc/ffplay.texi
> +++ b/doc/ffplay.texi
> @@ -62,6 +62,10 @@ see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1)
> Seek by bytes.
> @item -nodisp
> Disable graphical display.
> + at item -volume
> +Set the startup volume. 0 means silence, 100 means no volume reduction or
> +amplification. Negative values are treated as 0, values above 100 are treated
> +as 100.
> @item -f @var{fmt}
> Force format.
> @item -window_title @var{title}
> diff --git a/ffplay.c b/ffplay.c
> index 911fd7f947..de603c0a27 100644
> --- a/ffplay.c
> +++ b/ffplay.c
> @@ -322,6 +322,7 @@ static int subtitle_disable;
> static const char* wanted_stream_spec[AVMEDIA_TYPE_NB] = {0};
> static int seek_by_bytes = -1;
> static int display_disable;
> +static int startup_volume = 100;
> static int show_status = 1;
> static int av_sync_type = AV_SYNC_AUDIO_MASTER;
> static int64_t start_time = AV_NOPTS_VALUE;
> @@ -3105,7 +3106,13 @@ static VideoState *stream_open(const char *filename, AVInputFormat *iformat)
>     init_clock(&is->audclk, &is->audioq.serial);
>     init_clock(&is->extclk, &is->extclk.serial);
>     is->audio_clock_serial = -1;
> -    is->audio_volume = SDL_MIX_MAXVOLUME;
> +    if (startup_volume < 0)
> +        av_log(NULL, AV_LOG_WARNING, "-volume=%d < 0, setting to 0\n", startup_volume);
> +    if (startup_volume > 100)
> +        av_log(NULL, AV_LOG_WARNING, "-volume=%d > 100, setting to 100\n", startup_volume);
> +    startup_volume = av_clip(startup_volume, 0, 100);
> +    startup_volume = av_clip(SDL_MIX_MAXVOLUME * startup_volume / 100.0, 0, SDL_MIX_MAXVOLUME);

Any reason you use 100.0 here instead of a simple integer (100)?

> +    is->audio_volume = startup_volume;
>     is->muted = 0;
>     is->av_sync_type = av_sync_type;
>     is->read_tid     = SDL_CreateThread(read_thread, "read_thread", is);
> @@ -3586,6 +3593,7 @@ static const OptionDef options[] = {
>     { "t", HAS_ARG, { .func_arg = opt_duration }, "play  \"duration\" seconds of audio/video", "duration" },
>     { "bytes", OPT_INT | HAS_ARG, { &seek_by_bytes }, "seek by bytes 0=off 1=on -1=auto", "val" },
>     { "nodisp", OPT_BOOL, { &display_disable }, "disable graphical display" },
> +    { "volume", OPT_INT | HAS_ARG, { &startup_volume}, "set startup volume 0=min 100=max", "volume" },
>     { "f", HAS_ARG, { .func_arg = opt_format }, "force format", "fmt" },
>     { "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_frame_pix_fmt }, "set pixel format", "format" },
>     { "stats", OPT_BOOL | OPT_EXPERT, { &show_status }, "show status", "" },
> -- 
> 2.11.0

Otherwise LGTM, thanks.

Marton


More information about the ffmpeg-devel mailing list