[FFmpeg-devel] [PATCH 1/2] VP56: move vp56_edge_filter to new VP56DSPContext

Måns Rullgård mans
Fri Apr 30 23:30:45 CEST 2010


Aurelien Jacobs <aurel at gnuage.org> writes:

> On Fri, Apr 23, 2010 at 03:24:33PM +0100, Mans Rullgard wrote:
>> Using macro templates allows the vp[56]_adjust functions to be
>> inlined instead of called through function pointers.  The new
>> function pointers enable optimised implementations of the filters.
>> 
>> 4% faster VP6 decoding on Cortex-A8.
>
> I'm not very fond of macro templates, but the result seems worth it.
>
>> --- /dev/null
>> +++ b/libavcodec/vp56dsp.c
>> [...]
>> +
>> +#define VP56_EDGE_FILTER(pfx, suf, pix_inc, line_inc, adjust)           \
>> +static void pfx##_edge_filter_##suf(uint8_t *yuv, int stride, int t)    \
>> +{                                                                       \
>> +    int pix2_inc = 2 * pix_inc;                                         \
>> +    int i, v;                                                           \
>> +                                                                        \
>> +    for (i=0; i<12; i++) {                                              \
>> +        v = (yuv[-pix2_inc] + 3*(yuv[0]-yuv[-pix_inc]) - yuv[pix_inc] + 4)>>3;\
>> +        v = adjust(v, t);                                               \
>
> Here you may use pfx##_adjust() and simplify the macro by removing its
> adjust paramer.

Quite so, applied with that fix.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list