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

Michael Niedermayer michaelni at gmx.at
Tue Dec 16 01:36:58 CET 2014


On Mon, Dec 15, 2014 at 10:55:26PM +0530, arwa arif wrote:
> This patch seems to be working. Sorry for the previous one.

>  doc/filters.texi                  |   24 
>  libavfilter/Makefile              |    1 
>  libavfilter/allfilters.c          |    1 
>  libavfilter/libmpcodecs/vf_fspp.c |    4 
>  libavfilter/version.h             |    2 
>  libavfilter/vf_fspp.c             |  400 ++++++++++
>  libavfilter/vf_fspp.h             |  352 +++++++++
>  libavfilter/x86/Makefile          |    1 
>  libavfilter/x86/vf_fspp.c         | 1391 ++++++++++++++++++++++++++++++++++++++
>  9 files changed, 2173 insertions(+), 3 deletions(-)
> d945d17d2227a2628acbcba387267734c3914841  0001-Port-fspp-to-FFmpeg.patch
> From 97d90c5a1a8c10a1b19a5250c90d02fb74e79735 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] Port fspp to FFmpeg

[...]
> +    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) {
> +
> +            /* 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;
> +            }
> +

> +            filter(fspp , out->data[0] , in->data[0] , out->linesize[0] , in->linesize[0] ,
> +                   inlink->w , inlink->h , qp_table , qp_stride , 1);

> +            filter(fspp , out->data[1] , in->data[1] , out->linesize[1] , in->linesize[1] ,
> +                   inlink->w , inlink->h , qp_table , qp_stride , 0);
> +            filter(fspp , out->data[2] , in->data[2] , out->linesize[2] , in->linesize[2] ,
> +                   inlink->w , inlink->h , qp_table , qp_stride , 0);

the 2 chroma planes are smaller than luma, thus
"inlink->w , inlink->h" is wrong for them

you can calculate the sizes of the chroma plane with
log2_chroma_w and log2_chroma_h from av_pix_fmt_desc_get()
see similar code in other filters

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No human being will ever know the Truth, for even if they happen to say it
by chance, they would not even known they had done so. -- Xenophanes
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141216/08f993d0/attachment.asc>


More information about the ffmpeg-devel mailing list