diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-06-02 16:17:09 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-06-02 16:17:09 +0200 |
commit | f2361593ca1b542f0e9284d2d4276387f8fec1e3 (patch) | |
tree | 9dc30baf879be65f86889bcec9edd6f468a53f11 /libavcodec/h264chroma_template.c | |
parent | 96e6d4da374ffef3705e0dfcf312685d059484b4 (diff) | |
download | ffmpeg-f2361593ca1b542f0e9284d2d4276387f8fec1e3.tar.gz |
mpegvideo: implement ff_put_h264_chroma_mc1 & ff_avg_h264_chroma_mc2
These are needed for lowres 3
Fixes Ticket2538
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit c2625c26c5e58edfa39360b51125f1ddd593e4db)
Signed-off-by: Carl Eugen Hoyos <cehoyos@ag.or.at>
Diffstat (limited to 'libavcodec/h264chroma_template.c')
-rw-r--r-- | libavcodec/h264chroma_template.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libavcodec/h264chroma_template.c b/libavcodec/h264chroma_template.c index 93559d7c68..b64172aadf 100644 --- a/libavcodec/h264chroma_template.c +++ b/libavcodec/h264chroma_template.c @@ -24,6 +24,34 @@ #include "bit_depth_template.c" #define H264_CHROMA_MC(OPNAME, OP)\ +static void FUNCC(OPNAME ## h264_chroma_mc1)(uint8_t *_dst/*align 8*/, uint8_t *_src/*align 1*/, int stride, int h, int x, int y){\ + pixel *dst = (pixel*)_dst;\ + pixel *src = (pixel*)_src;\ + const int A=(8-x)*(8-y);\ + const int B=( x)*(8-y);\ + const int C=(8-x)*( y);\ + const int D=( x)*( y);\ + int i;\ + stride >>= sizeof(pixel)-1;\ + \ + av_assert2(x<8 && y<8 && x>=0 && y>=0);\ +\ + if(D){\ + for(i=0; i<h; i++){\ + OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ + dst+= stride;\ + src+= stride;\ + }\ + }else{\ + const int E= B+C;\ + const int step= C ? stride : 1;\ + for(i=0; i<h; i++){\ + OP(dst[0], (A*src[0] + E*src[step+0]));\ + dst+= stride;\ + src+= stride;\ + }\ + }\ +}\ static void FUNCC(OPNAME ## h264_chroma_mc2)(uint8_t *_dst/*align 8*/, uint8_t *_src/*align 1*/, int stride, int h, int x, int y){\ pixel *dst = (pixel*)_dst;\ pixel *src = (pixel*)_src;\ |