[FFmpeg-devel] [PATCH] lavfi: USPP filter

arwa arif arwaarif1994 at gmail.com
Tue Dec 9 11:33:56 CET 2014


On Tue, Dec 9, 2014 at 11:05 AM, arwa arif <arwaarif1994 at gmail.com> wrote:

>
>
> On Tue, Dec 9, 2014 at 5:48 AM, Michael Niedermayer <michaelni at gmx.at>
> wrote:
>
>> On Mon, Dec 08, 2014 at 11:15:10PM +0530, arwa arif wrote:
>> [...]
>> >  doc/filters.texi         |   24 ++
>> >  libavfilter/Makefile     |    1
>> >  libavfilter/allfilters.c |    1
>> >  libavfilter/vf_uspp.c    |  514
>> +++++++++++++++++++++++++++++++++++++++++++++++
>> >  libavfilter/vf_uspp.h    |   55 +++++
>> >  5 files changed, 594 insertions(+), 1 deletion(-)
>> > 128eed16f074aa1448d37eea1d32c9bcb10c3796  0001-lavfi-USPP-Filter.patch
>> > From 0e2778bd848cff1ac4ea5125354c27a4bfcaee1b Mon Sep 17 00:00:00 2001
>> > From: Arwa Arif <arwaarif1994 at gmail.com>
>> > Date: Sun, 7 Dec 2014 18:56:46 +0530
>> > Subject: [PATCH] lavfi: USPP Filter
>> >
>> > ---
>> >  doc/filters.texi         |   24 ++-
>> >  libavfilter/Makefile     |    1 +
>> >  libavfilter/allfilters.c |    1 +
>> >  libavfilter/vf_uspp.c    |  514
>> ++++++++++++++++++++++++++++++++++++++++++++++
>> >  libavfilter/vf_uspp.h    |   55 +++++
>> >  5 files changed, 594 insertions(+), 1 deletion(-)
>> >  create mode 100644 libavfilter/vf_uspp.c
>> >  create mode 100644 libavfilter/vf_uspp.h
>> >
>> > diff --git a/doc/filters.texi b/doc/filters.texi
>> > index 8c16c7a..322899d 100644
>> > --- a/doc/filters.texi
>> > +++ b/doc/filters.texi
>> > @@ -6120,7 +6120,6 @@ The list of the currently supported filters
>> follows:
>> >  @item ilpack
>> >  @item pp7
>> >  @item softpulldown
>> > - at item uspp
>> >  @end table
>> >
>> >  The parameter syntax and behavior for the listed filters are the same
>> > @@ -8804,6 +8803,29 @@ unsharp=7:7:-2:7:7:-2
>> >  @end example
>> >  @end itemize
>> >
>> > + at section uspp
>> > +
>> > +Apply ultra slow/simple postprocessing filter that compresses and
>> decompresses
>> > +the image at several (or - in the case of @option{quality} level
>> @code{8} - all)
>> > +shifts and average the results.The way this differs from the behavior
>> of spp is
>> > +that uspp actually encodes & decodes each case with libavcodec Snow,
>> whereas spp
>> > +uses a simplified intra only 8x8 DCT similar to MJPEG.
>> > +
>> > +The filter accepts the following options:
>> > +
>> > + at table @option
>> > + at item quality
>> > +Set quality. This option defines the number of levels for averaging.
>> It accepts
>> > +an integer in the range 0-8. If set to @code{0}, the filter will have
>> no
>> > +effect. A value of @code{8} means the higher quality. For each
>> increment of
>> > +that value the speed drops by a factor of approximately 2.  Default
>> value is
>> > + at code{3}.
>> > +
>> > + at item qp
>> > +Force a constant quantization parameter. If not set, the filter will
>> use the QP
>> > +from the video stream (if available).
>> > + at end table
>> > +
>>
>> [...]
>>
>> > +static void hardthresh_c(int16_t dst[DEST_SIZE], const int16_t
>> src[DEST_SIZE],
>> > +                         int qp, const uint8_t *permutation)
>> > +{
>> > +    int i;
>> > +    int bias = 0; // FIXME
>> > +
>> > +    unsigned threshold1 = qp * ((1<<4) - bias) - 1;
>> > +    unsigned threshold2 = threshold1 << 1;
>> > +
>> > +    memset(dst, 0, DEST_SIZE * sizeof(dst[0]));
>> > +    dst[0] = (src[0] + 4) >> 3;
>> > +
>> > +    for (i = 1; i < DEST_SIZE; i++) {
>> > +        int level = src[i];
>> > +        if (((unsigned)(level + threshold1)) > threshold2) {
>> > +            const int j = permutation[i];
>> > +            dst[j] = (level + 4) >> 3;
>> > +        }
>> > +    }
>> > +}
>> > +
>> > +static void softthresh_c(int16_t dst[DEST_SIZE], const int16_t
>> src[DEST_SIZE],
>> > +                         int qp, const uint8_t *permutation)
>> > +{
>> > +    int i;
>> > +    int bias = 0; //FIXME
>> > +
>> > +    unsigned threshold1 = qp * ((1<<4) - bias) - 1;
>> > +    unsigned threshold2 = threshold1 << 1;
>> > +
>> > +    memset(dst, 0, DEST_SIZE * sizeof(dst[0]));
>> > +    dst[0] = (src[0] + 4) >> 3;
>> > +
>> > +    for (i = 1; i < DEST_SIZE; i++) {
>> > +        int level = src[i];
>> > +        if (((unsigned)(level + threshold1)) > threshold2) {
>> > +            const int j = permutation[i];
>> > +            if (level > 0) dst[j] = (level - threshold1 + 4) >> 3;
>> > +            else           dst[j] = (level + threshold1 + 4) >> 3;
>> > +        }
>> > +    }
>> > +}
>>
>> these 2 functions are unused, they can be removed
>>
>>
>> [...]
>> > +    for(i=0; i<count; i++){
>> > +        const int x1= offset[i+count-1][0];
>> > +        const int y1= offset[i+count-1][1];
>> > +        int offset;
>> > +        p->frame->data[0]= p->src[0] + x1 + y1 * p->frame->linesize[0];
>> > +        p->frame->data[1]= p->src[1] + x1/2 + y1/2 *
>> p->frame->linesize[1];
>> > +        p->frame->data[2]= p->src[2] + x1/2 + y1/2 *
>> p->frame->linesize[2];
>> > +
>> > +        avcodec_encode_video(p->avctx_enc[i], p->outbuf,
>> p->outbuf_size, p->frame);
>> > +        p->frame_dec = p->avctx_enc[i]->coded_frame;
>> > +
>> > +        p->frame->format = p->avctx_enc[i]->pix_fmt;
>>
>> p->frame width and height should be set too
>>
>>
>> [...]
>> > diff --git a/libavfilter/vf_uspp.h b/libavfilter/vf_uspp.h
>> > new file mode 100644
>> > index 0000000..143e6a5
>> > --- /dev/null
>> > +++ b/libavfilter/vf_uspp.h
>> > @@ -0,0 +1,55 @@
>> > +/*
>> > + * Copyright (c) 2003 Michael Niedermayer <michaelni at gmx.at>
>> > + * Copyright (c) 2014 Arwa Arif <arwaarif1994 at gmail.com>
>> > + *
>> > + * This file is part of FFmpeg.
>> > + *
>> > + * FFmpeg is free software; you can redistribute it and/or modify
>> > + * it under the terms of the GNU General Public License as published by
>> > + * the Free Software Foundation; either version 2 of the License, or
>> > + * (at your option) any later version.
>> > + *
>> > + * FFmpeg is distributed in the hope that it will be useful,
>> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> > + * GNU General Public License for more details.
>> > + *
>> > + * You should have received a copy of the GNU General Public License
>> along
>> > + * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
>> > + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>> > + */
>> > +
>> > +#ifndef AVFILTER_USPP_H
>> > +#define AVFILTER_USPP_H
>> > +
>> > +#include "libavcodec/avcodec.h"
>> > +#include "avfilter.h"
>> > +
>> > +#define MAX_LEVEL 8 /* quality levels */
>> > +#define BLOCK 16
>> > +
>> > +typedef struct {
>> > +    const AVClass *av_class;
>> > +    int log2_count;
>> > +    int qp;
>> > +    int mode;
>> > +    int qscale_type;
>> > +    int temp_stride[3];
>> > +    uint8_t *src[3];
>> > +    int16_t *temp[3];
>> > +    int outbuf_size;
>> > +    uint8_t *outbuf;
>> > +    AVCodecContext *avctx_enc[BLOCK*BLOCK];
>> > +    AVFrame *frame;
>> > +    AVFrame *frame_dec;
>> > +    uint8_t *non_b_qp_table;
>> > +    int non_b_qp_alloc_size;
>> > +    int use_bframe_qp;
>>
>> > +    void (*requantize)(int16_t dst[64], const int16_t src[64],
>> > +                       int qp, const uint8_t *permutation);
>>
>> this function pointer is never called, it can be removed
>>
>> [...]
>> --
>> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>>
>> Breaking DRM is a little like attempting to break through a door even
>> though the window is wide open and the only thing in the house is a bunch
>> of things you dont want and which you would get tomorrow for free anyway
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>>
>
Improved the coding style and replaced avcodec_encode_video with
avcodec_encode_video2.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-lavfi-USPP-Filter.patch
Type: text/x-patch
Size: 24383 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141209/e3acbd7a/attachment.bin>


More information about the ffmpeg-devel mailing list