[FFmpeg-devel] [PATCH] avfilter: add framerate video filter

Paul B Mahol onemda at gmail.com
Sun Aug 2 18:57:15 CEST 2015


On 7/24/15, Michael Niedermayer <michael at niedermayer.cc> wrote:
> On Fri, Jul 24, 2015 at 07:09:16AM +0000, Paul B Mahol wrote:
> [..]
>
>> +static av_cold void uninit(AVFilterContext *ctx)
>> +{
>> +    FrameRateContext *s = ctx->priv;
>> +    int i;
>> +
>> +    for (i = s->frst + 1; i > s->last; i++) {
>> +        if (s->srce[i] && (s->srce[i] != s->srce[i + 1]))
>> +            av_frame_free(&s->srce[i]);
>> +    }
>> +    av_frame_free(&s->srce[s->last]);
>> +}
>> +
>> +static int query_formats(AVFilterContext *ctx)
>> +{
>
>> +    static const enum PixelFormat pix_fmts[] = {
>
> AVPixelFormat

Will replace.

>
>> +        PIX_FMT_YUV410P,
>> +        PIX_FMT_YUV411P,
>> +        PIX_FMT_YUV420P,
>> +        PIX_FMT_YUV422P,
>> +        PIX_FMT_YUV440P,
>> +        PIX_FMT_YUV444P,
>> +        PIX_FMT_NONE
>
> AV_PIX_FMT_*
>

Will replace.

>
>> +    };
>> +
>> +    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
>> +    if (!fmts_list)
>> +        return AVERROR(ENOMEM);
>> +    return ff_set_common_formats(ctx, fmts_list);
>> +}
>> +
>> +static int config_input(AVFilterLink *inlink)
>> +{
>> +    AVFilterContext *ctx = inlink->dst;
>> +    FrameRateContext *s = ctx->priv;
>> +    const AVPixFmtDescriptor *pix_desc =
>> av_pix_fmt_desc_get(inlink->format);
>> +    int plane;
>> +
>
>> +    /** full an array with the number of bytes that the video
>> +     *  data occupies per line for each plane of the input video */
>> +    for (plane = 0; plane < 4; plane++) {
>
> doxygen comment in the middle looks a bit odd
>

Will remove.

>
>> +        s->line_size[plane] = av_image_get_linesize(
>> +                inlink->format,
>> +                inlink->w,
>> +                plane);
>> +    }
>> +
>> +    s->vsub = pix_desc->log2_chroma_h;
>> +
>> +    s->sad = av_pixelutils_get_sad_fn(3, 3, 2, s); // 8x8 both sources
>> aligned
>> +    if (!s->sad)
>> +        return AVERROR(EINVAL);
>> +
>> +    s->srce_time_base = inlink->time_base;
>> +
>> +    return 0;
>> +}
>> +
>> +static int filter_frame(AVFilterLink *inlink, AVFrame *inpicref)
>> +{
>> +    AVFilterContext *ctx = inlink->dst;
>> +    FrameRateContext *s = ctx->priv;
>> +    AVFilterLink *outlink = ctx->outputs[0];
>> +
>> +    // we have one new frame
>> +    s->pending_srce_frames++;
>> +
>> +    if (inpicref->interlaced_frame)
>> +        av_log(ctx, AV_LOG_WARNING, "Interlaced frame found - the output
>> will not be correct\n");
>> +
>> +    // store the pointer to the new frame
>> +    av_frame_free(&s->srce[s->frst]);
>> +    s->srce[s->frst] = inpicref;
>> +
>> +    if (!s->pending_end_frame && s->srce[s->crnt]) {
>> +        s->work = ff_get_video_buffer(outlink, outlink->w, outlink->h);
>> +        av_frame_copy_props(s->work, s->srce[s->crnt]);
>> +        set_work_frame_pts(ctx);
>> +
>> +        s->pending_end_frame = 1;
>> +    } else {
>> +        set_srce_frame_dest_pts(ctx);
>> +    }
>> +
>
>> +//    if (!s->srce[s->crnt]) {
>> +//        av_dlog(ctx, "end_frame() no current frame\n");
>> +//        return;
>> +//    }
>
> the patch contains several outcomented pieces of code, is that
> intended ?

I can remove them if they seems to not be wanted.

>
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> He who knows, does not speak. He who speaks, does not know. -- Lao Tsu
>


More information about the ffmpeg-devel mailing list