[FFmpeg-devel] [PATCH] lavfi: Port fspp to FFmpeg

Reimar Döffinger Reimar.Doeffinger at gmx.de
Mon Dec 22 17:57:34 CET 2014


On 22.12.2014, at 17:23, Stefano Sabatini <stefasab at gmail.com> wrote:
> On date Monday 2014-12-22 13:07:03 +0100, Stefano Sabatini encoded:
>> On date Friday 2014-12-19 16:46:40 +0530, arwa arif encoded:
>> [...]
>>> From c1c3255203226663fc382a0994182df3d558afe6 Mon Sep 17 00:00:00 2001
>>> From: Arwa Arif <arwaarif1994 at gmail.com>
>>> Date: Sun, 14 Dec 2014 12:03:31 +0530
>>> Subject: [PATCH] lavfi: port mp=fspp to a native libavfilter filter
> [...]
>>> +    if (fspp->log2_count && !ctx->is_disabled) {
>>> +        if (!fspp->use_bframe_qp && fspp->non_b_qp_table)
>>> +            qp_table = fspp->non_b_qp_table;
>>> +
>>> +        if (qp_table || fspp->qp) {
>>> +            const int cw = FF_CEIL_RSHIFT(inlink->w, fspp->hsub);
>>> +            const int ch = FF_CEIL_RSHIFT(inlink->h, fspp->vsub);
>>> +
>>> +            /* get a new frame if in-place is not possible or if the dimensions
>>> +             * are not multiple of 8 */
>>> +            if (!av_frame_is_writable(in) || (inlink->w & 7) || (inlink->h & 7)) {
>>> +                const int aligned_w = FFALIGN(inlink->w, 8);
>>> +                const int aligned_h = FFALIGN(inlink->h, 8);
>>> +
>>> +                out = ff_get_video_buffer(outlink, aligned_w, aligned_h);
>>> +                if (!out) {
>>> +                    av_frame_free(&in);
>>> +                    return AVERROR(ENOMEM);
>>> +                }
>>> +                av_frame_copy_props(out, in);
>> 
>>> +                out->width  = in->width;
>>> +                out->height = in->height;
>> 
>> is this required?
>> 
>> [...]
>> 
>> LGTM otherwise. I'm going to test and see if it works on this machine.
>> 
>> What about adding a FATE test?
> 
> Note: I had to rebase the patch because of a conflict in version.h,
> please always rebase against latest master.
> 
> @all
> 
> I'm testing with:
> ffmpeg -i matrixbench_mpeg2.mpg -b:v 200k matrixbench_mpeg2-lq.mpg
> 
> ffplay -f lavfi -i "nullsrc=s=720x576 [bg]; movie=matrixbench_mpeg2-lq.mpg:s=dv+da [v][out1]; [v]split[v1][v2]; [v1]crop=in_w/2:in_h:0:0 [v1pp]; [v2]crop=in_w/2:in_h:in_w/2:0,fspp [v2pp]; [bg][v1pp] overlay[bg+v1pp]; [bg+v1pp][v2pp] overlay=W/2 [out0]"
> 
> I'm unable to see significant differences in terms of quality between
> left and right part of the output (same with mp=fspp, so it doesn't
> depend on the port).
> 
> Is this expected?
> 
> What's the use case of fspp?

What codec did your lq version end up using? I suspect fspp is most tested and works best with MPEG-4 ASP.
It should significantly reduce blocking - obviously only if your video has significant blocking.
It used to work fairly well on early flv streaming videos.


More information about the ffmpeg-devel mailing list