You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avfilter/af_volume: Use avpriv_float_dsp_alloc()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -111,6 +111,11 @@ static int set_expr(AVExpr **pexpr, const char *expr, void *log_ctx)
|
|||||||
static av_cold int init(AVFilterContext *ctx)
|
static av_cold int init(AVFilterContext *ctx)
|
||||||
{
|
{
|
||||||
VolumeContext *vol = ctx->priv;
|
VolumeContext *vol = ctx->priv;
|
||||||
|
|
||||||
|
vol->fdsp = avpriv_float_dsp_alloc(0);
|
||||||
|
if (!vol->fdsp)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
return set_expr(&vol->volume_pexpr, vol->volume_expr, ctx);
|
return set_expr(&vol->volume_pexpr, vol->volume_expr, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,6 +124,7 @@ static av_cold void uninit(AVFilterContext *ctx)
|
|||||||
VolumeContext *vol = ctx->priv;
|
VolumeContext *vol = ctx->priv;
|
||||||
av_expr_free(vol->volume_pexpr);
|
av_expr_free(vol->volume_pexpr);
|
||||||
av_opt_free(vol);
|
av_opt_free(vol);
|
||||||
|
av_freep(&vol->fdsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int query_formats(AVFilterContext *ctx)
|
static int query_formats(AVFilterContext *ctx)
|
||||||
@@ -233,11 +239,9 @@ static av_cold void volume_init(VolumeContext *vol)
|
|||||||
vol->scale_samples = scale_samples_s32;
|
vol->scale_samples = scale_samples_s32;
|
||||||
break;
|
break;
|
||||||
case AV_SAMPLE_FMT_FLT:
|
case AV_SAMPLE_FMT_FLT:
|
||||||
avpriv_float_dsp_init(&vol->fdsp, 0);
|
|
||||||
vol->samples_align = 4;
|
vol->samples_align = 4;
|
||||||
break;
|
break;
|
||||||
case AV_SAMPLE_FMT_DBL:
|
case AV_SAMPLE_FMT_DBL:
|
||||||
avpriv_float_dsp_init(&vol->fdsp, 0);
|
|
||||||
vol->samples_align = 8;
|
vol->samples_align = 8;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -428,13 +432,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
|
|||||||
}
|
}
|
||||||
} else if (av_get_packed_sample_fmt(vol->sample_fmt) == AV_SAMPLE_FMT_FLT) {
|
} else if (av_get_packed_sample_fmt(vol->sample_fmt) == AV_SAMPLE_FMT_FLT) {
|
||||||
for (p = 0; p < vol->planes; p++) {
|
for (p = 0; p < vol->planes; p++) {
|
||||||
vol->fdsp.vector_fmul_scalar((float *)out_buf->extended_data[p],
|
vol->fdsp->vector_fmul_scalar((float *)out_buf->extended_data[p],
|
||||||
(const float *)buf->extended_data[p],
|
(const float *)buf->extended_data[p],
|
||||||
vol->volume, plane_samples);
|
vol->volume, plane_samples);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (p = 0; p < vol->planes; p++) {
|
for (p = 0; p < vol->planes; p++) {
|
||||||
vol->fdsp.vector_dmul_scalar((double *)out_buf->extended_data[p],
|
vol->fdsp->vector_dmul_scalar((double *)out_buf->extended_data[p],
|
||||||
(const double *)buf->extended_data[p],
|
(const double *)buf->extended_data[p],
|
||||||
vol->volume, plane_samples);
|
vol->volume, plane_samples);
|
||||||
}
|
}
|
||||||
|
@@ -67,7 +67,7 @@ enum ReplayGainType {
|
|||||||
|
|
||||||
typedef struct VolumeContext {
|
typedef struct VolumeContext {
|
||||||
const AVClass *class;
|
const AVClass *class;
|
||||||
AVFloatDSPContext fdsp;
|
AVFloatDSPContext *fdsp;
|
||||||
enum PrecisionType precision;
|
enum PrecisionType precision;
|
||||||
enum EvalMode eval_mode;
|
enum EvalMode eval_mode;
|
||||||
const char *volume_expr;
|
const char *volume_expr;
|
||||||
|
Reference in New Issue
Block a user