lavfi/volume_justin: add support to option shorthands and introspection

This commit is contained in:
Stefano Sabatini 2012-12-08 11:58:52 +01:00
parent 402ac72bbc
commit 769546631c
3 changed files with 19 additions and 19 deletions

View File

@ -923,7 +923,13 @@ raising it by +5 dB causes clipping for 6 samples, etc.
Adjust the input audio volume. Adjust the input audio volume.
The filter accepts the following named parameters: The filter accepts the following named parameters. If the key of the
first options is omitted, the arguments are interpreted according to
the following syntax:
@example
drawbox=@var{volume}:@var{precision}
@end example
@table @option @table @option
@item volume @item volume

View File

@ -41,37 +41,32 @@ static const char *precision_str[] = {
#define OFFSET(x) offsetof(VolumeContext, x) #define OFFSET(x) offsetof(VolumeContext, x)
#define A AV_OPT_FLAG_AUDIO_PARAM #define A AV_OPT_FLAG_AUDIO_PARAM
#define F AV_OPT_FLAG_FILTERING_PARAM
static const AVOption options[] = { static const AVOption volume_options[] = {
{ "volume", "set volume adjustment", { "volume", "set volume adjustment",
OFFSET(volume), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0, 0x7fffff, A }, OFFSET(volume), AV_OPT_TYPE_DOUBLE, { .dbl = 1.0 }, 0, 0x7fffff, A|F },
{ "precision", "select mathematical precision", { "precision", "select mathematical precision",
OFFSET(precision), AV_OPT_TYPE_INT, { .i64 = PRECISION_FLOAT }, PRECISION_FIXED, PRECISION_DOUBLE, A, "precision" }, OFFSET(precision), AV_OPT_TYPE_INT, { .i64 = PRECISION_FLOAT }, PRECISION_FIXED, PRECISION_DOUBLE, A|F, "precision" },
{ "fixed", "select 8-bit fixed-point", 0, AV_OPT_TYPE_CONST, { .i64 = PRECISION_FIXED }, INT_MIN, INT_MAX, A, "precision" }, { "fixed", "select 8-bit fixed-point", 0, AV_OPT_TYPE_CONST, { .i64 = PRECISION_FIXED }, INT_MIN, INT_MAX, A|F, "precision" },
{ "float", "select 32-bit floating-point", 0, AV_OPT_TYPE_CONST, { .i64 = PRECISION_FLOAT }, INT_MIN, INT_MAX, A, "precision" }, { "float", "select 32-bit floating-point", 0, AV_OPT_TYPE_CONST, { .i64 = PRECISION_FLOAT }, INT_MIN, INT_MAX, A|F, "precision" },
{ "double", "select 64-bit floating-point", 0, AV_OPT_TYPE_CONST, { .i64 = PRECISION_DOUBLE }, INT_MIN, INT_MAX, A, "precision" }, { "double", "select 64-bit floating-point", 0, AV_OPT_TYPE_CONST, { .i64 = PRECISION_DOUBLE }, INT_MIN, INT_MAX, A|F, "precision" },
{ NULL }, { NULL },
}; };
static const AVClass volume_class = { AVFILTER_DEFINE_CLASS(volume);
.class_name = "volume filter",
.item_name = av_default_item_name,
.option = options,
.version = LIBAVUTIL_VERSION_INT,
};
static av_cold int init(AVFilterContext *ctx, const char *args) static av_cold int init(AVFilterContext *ctx, const char *args)
{ {
VolumeContext *vol = ctx->priv; VolumeContext *vol = ctx->priv;
static const char *shorthand[] = { "volume", "precision", NULL };
int ret; int ret;
vol->class = &volume_class; vol->class = &volume_class;
av_opt_set_defaults(vol); av_opt_set_defaults(vol);
if ((ret = av_set_options_string(vol, args, "=", ":")) < 0) { if ((ret = av_opt_set_from_string(vol, args, shorthand, "=", ":")) < 0)
av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args);
return ret; return ret;
}
if (vol->precision == PRECISION_FIXED) { if (vol->precision == PRECISION_FIXED) {
vol->volume_i = (int)(vol->volume * 256 + 0.5); vol->volume_i = (int)(vol->volume * 256 + 0.5);
@ -182,8 +177,6 @@ static inline void scale_samples_s32(uint8_t *dst, const uint8_t *src,
smp_dst[i] = av_clipl_int32((((int64_t)smp_src[i] * volume + 128) >> 8)); smp_dst[i] = av_clipl_int32((((int64_t)smp_src[i] * volume + 128) >> 8));
} }
static void volume_init(VolumeContext *vol) static void volume_init(VolumeContext *vol)
{ {
vol->samples_align = 1; vol->samples_align = 1;
@ -314,4 +307,5 @@ AVFilter avfilter_af_volume_justin = {
.init = init, .init = init,
.inputs = avfilter_af_volume_inputs, .inputs = avfilter_af_volume_inputs,
.outputs = avfilter_af_volume_outputs, .outputs = avfilter_af_volume_outputs,
.priv_class = &volume_class,
}; };

View File

@ -30,7 +30,7 @@
#define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR 25 #define LIBAVFILTER_VERSION_MINOR 25
#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_MICRO 102
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \ LIBAVFILTER_VERSION_MINOR, \