[FFmpeg-devel] [PATCH] avfilter: add backgroundkey video filter
Paul B Mahol
onemda at gmail.com
Thu Nov 3 09:43:41 EET 2022
On 11/2/22, Andreas Rheinhardt <andreas.rheinhardt at outlook.com> wrote:
> Paul B Mahol:
>> +static int filter_frame(AVFilterLink *link, AVFrame *frame)
>> +{
>> + AVFilterContext *avctx = link->dst;
>> + BackgroundkeyContext *s = avctx->priv;
>> + int64_t sum = 0;
>> + int ret;
>> +
>> + if (!s->background) {
>> + s->background = av_frame_clone(frame);
>> + if (!s->background)
>> + return AVERROR(ENOMEM);
>> + av_frame_make_writable(s->background);
>
> You are never writing to the background frame, so there is no point in
> making it writable; what you actually want to achieve here is making
> frame writable again and to achieve this you should make frame, not
> background writable (and of course you should check said call).
>
This is invalid, input pad receives always writable frames as there is flag.
> (Actually, you never
>
>> + }
>> +
>> + if (ret = ff_filter_execute(avctx, s->do_slice, frame, NULL,
>> + FFMIN(frame->height, s->nb_threads)))
>> + return ret;
>> +
>> + for (int n = 0; n < s->nb_threads; n++)
>> + sum += s->sums[n];
>> + if (s->max_sum * s->threshold < sum) {
>> + av_frame_free(&s->background);
>> + s->background = av_frame_clone(frame);
>> + if (!s->background)
>> + return AVERROR(ENOMEM);
>> + av_frame_make_writable(s->background);
>
> Given that you never write to background, there is no need to make it
> writable. This time, there is also no need to make frame writable (the
> next filter in the chain may not need a writable frame anyway), so just
> remove this.
> And the av_frame_free+av_frame_clone can become an
> av_frame_unref+av_frame_ref (this will necessitate modifying the check
> above to not only check for to existence of s->background).
>
>> + }
>> +
>> + return ff_filter_frame(avctx->outputs[0], frame);
>> +}
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
More information about the ffmpeg-devel
mailing list