diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-07-02 21:19:41 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-07-02 21:19:41 +0200 |
commit | b286383bd2b13fdf59aecdb23d8514323460483b (patch) | |
tree | 4f8ee9745d719e2918843d0d8ebcf053ac220ef4 /libavcodec/snow.c | |
parent | 7c84e7d33762a4bccc0002476a3b20e0b8f26fcc (diff) | |
parent | 5e745cefc0f89cf698c4cf0104182472fe0f603e (diff) | |
download | ffmpeg-b286383bd2b13fdf59aecdb23d8514323460483b.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
asfdec: read attached pictures.
apetag: reindent
apetag: export attached covers as video streams.
apetag: fix the amount of data read from binary tags.
apetag: make sure avio_get_str() doesn't read more than it should.
mov: read itunes cover art.
snow: remove VLA in mc_block()
intfloat: Don't use designated initializers in the public headers
snow: remove a VLA.
doc: Remind devs to check return values, especially for malloc() et al
MS ATC Screen (aka MSS3) decoder
vf_yadif: move x86 init code to x86/yadif.c
vf_gradfun: move x86 init code to x86/gradfun.c
roqvideo: Remove a totally unused dspcontext
smacker: remove some unused code
dsicin: remove dead assignment
aacdec: remove dead assignment
rl2: remove dead assignment
proresenc: make a variable local to the loop where it is used
alsdec: remove dead assignments
Conflicts:
Changelog
doc/developer.texi
libavcodec/allcodecs.c
libavcodec/avcodec.h
libavcodec/version.h
libavfilter/gradfun.h
libavfilter/x86/gradfun.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/snow.c')
-rw-r--r-- | libavcodec/snow.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/libavcodec/snow.c b/libavcodec/snow.c index 245efbd36e..309e1bf040 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -140,7 +140,7 @@ static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, int stride, int int x, y, b, r, l; int16_t tmpIt [64*(32+HTAPS_MAX)]; - uint8_t tmp2t[3][stride*(32+HTAPS_MAX)]; + uint8_t tmp2t[3][64*(32+HTAPS_MAX)]; int16_t *tmpI= tmpIt; uint8_t *tmp2= tmp2t[0]; const uint8_t *hpel[11]; @@ -178,7 +178,7 @@ static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, int stride, int tmp2[x]= am; } tmpI+= 64; - tmp2+= stride; + tmp2+= 64; src += stride; } src -= stride*y; @@ -207,7 +207,7 @@ static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, int stride, int tmp2[x]= am; } src += stride; - tmp2+= stride; + tmp2+= 64; } src -= stride*y; } @@ -234,12 +234,12 @@ static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, int stride, int tmp2[x]= am; } tmpI+= 64; - tmp2+= stride; + tmp2+= 64; } } hpel[ 0]= src; - hpel[ 1]= tmp2t[0] + stride*(HTAPS_MAX/2-1); + hpel[ 1]= tmp2t[0] + 64*(HTAPS_MAX/2-1); hpel[ 2]= src + 1; hpel[ 4]= tmp2t[1]; @@ -247,14 +247,21 @@ static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, int stride, int hpel[ 6]= tmp2t[1] + 1; hpel[ 8]= src + stride; - hpel[ 9]= hpel[1] + stride; + hpel[ 9]= hpel[1] + 64; hpel[10]= hpel[8] + 1; +#define MC_STRIDE(x) (needs[x] ? 64 : stride) + if(b==15){ - const uint8_t *src1= hpel[dx/8 + dy/8*4 ]; - const uint8_t *src2= hpel[dx/8 + dy/8*4+1]; - const uint8_t *src3= hpel[dx/8 + dy/8*4+4]; - const uint8_t *src4= hpel[dx/8 + dy/8*4+5]; + int dxy = dx / 8 + dy / 8 * 4; + const uint8_t *src1 = hpel[dxy ]; + const uint8_t *src2 = hpel[dxy + 1]; + const uint8_t *src3 = hpel[dxy + 4]; + const uint8_t *src4 = hpel[dxy + 5]; + int stride1 = MC_STRIDE(dxy); + int stride2 = MC_STRIDE(dxy + 1); + int stride3 = MC_STRIDE(dxy + 4); + int stride4 = MC_STRIDE(dxy + 5); dx&=7; dy&=7; for(y=0; y < b_h; y++){ @@ -262,23 +269,25 @@ static void mc_block(Plane *p, uint8_t *dst, const uint8_t *src, int stride, int dst[x]= ((8-dx)*(8-dy)*src1[x] + dx*(8-dy)*src2[x]+ (8-dx)* dy *src3[x] + dx* dy *src4[x]+32)>>6; } - src1+=stride; - src2+=stride; - src3+=stride; - src4+=stride; + src1+=stride1; + src2+=stride2; + src3+=stride3; + src4+=stride4; dst +=stride; } }else{ const uint8_t *src1= hpel[l]; const uint8_t *src2= hpel[r]; + int stride1 = MC_STRIDE(l); + int stride2 = MC_STRIDE(r); int a= weight[((dx&7) + (8*(dy&7)))]; int b= 8-a; for(y=0; y < b_h; y++){ for(x=0; x < b_w; x++){ dst[x]= (a*src1[x] + b*src2[x] + 4)>>3; } - src1+=stride; - src2+=stride; + src1+=stride1; + src2+=stride2; dst +=stride; } } |