Mercurial > libavcodec.hg
comparison h261.c @ 2045:9447bbd8a7e9 libavcodec
rewrite h261 loop filter
no malloc(64) memcpy free stuff
no filter1 A->B then filter2 A->B (yes not B->A)
no incorrect rouding after the 1d filter
author | michael |
---|---|
date | Sun, 30 May 2004 21:21:13 +0000 |
parents | b6f2add2511e |
children | 863ce5459aec |
comparison
equal
deleted
inserted
replaced
2044:b6f2add2511e | 2045:9447bbd8a7e9 |
---|---|
62 const int linesize = s->linesize; | 62 const int linesize = s->linesize; |
63 const int uvlinesize= s->uvlinesize; | 63 const int uvlinesize= s->uvlinesize; |
64 uint8_t *dest_y = s->dest[0]; | 64 uint8_t *dest_y = s->dest[0]; |
65 uint8_t *dest_cb= s->dest[1]; | 65 uint8_t *dest_cb= s->dest[1]; |
66 uint8_t *dest_cr= s->dest[2]; | 66 uint8_t *dest_cr= s->dest[2]; |
67 uint8_t *src; | 67 |
68 | 68 s->dsp.h261_loop_filter(dest_y , linesize); |
69 CHECKED_ALLOCZ((src),sizeof(uint8_t) * 64 ); | 69 s->dsp.h261_loop_filter(dest_y + 8, linesize); |
70 | 70 s->dsp.h261_loop_filter(dest_y + 8 * linesize , linesize); |
71 for(i=0; i<8;i++) | 71 s->dsp.h261_loop_filter(dest_y + 8 * linesize + 8, linesize); |
72 memcpy(src+i*8,dest_y+i*linesize,sizeof(uint8_t) * 8 ); | 72 s->dsp.h261_loop_filter(dest_cb, uvlinesize); |
73 s->dsp.h261_v_loop_filter(dest_y, src, linesize); | 73 s->dsp.h261_loop_filter(dest_cr, uvlinesize); |
74 s->dsp.h261_h_loop_filter(dest_y, src, linesize); | |
75 | |
76 for(i=0; i<8;i++) | |
77 memcpy(src+i*8,dest_y+i*linesize + 8,sizeof(uint8_t) * 8 ); | |
78 s->dsp.h261_v_loop_filter(dest_y + 8, src, linesize); | |
79 s->dsp.h261_h_loop_filter(dest_y + 8, src, linesize); | |
80 | |
81 for(i=0; i<8;i++) | |
82 memcpy(src+i*8,dest_y+(i+8)*linesize,sizeof(uint8_t) * 8 ); | |
83 s->dsp.h261_v_loop_filter(dest_y + 8 * linesize, src, linesize); | |
84 s->dsp.h261_h_loop_filter(dest_y + 8 * linesize, src, linesize); | |
85 | |
86 for(i=0; i<8;i++) | |
87 memcpy(src+i*8,dest_y+(i+8)*linesize + 8,sizeof(uint8_t) * 8 ); | |
88 s->dsp.h261_v_loop_filter(dest_y + 8 * linesize + 8, src, linesize); | |
89 s->dsp.h261_h_loop_filter(dest_y + 8 * linesize + 8, src, linesize); | |
90 | |
91 for(i=0; i<8;i++) | |
92 memcpy(src+i*8,dest_cb+i*uvlinesize,sizeof(uint8_t) * 8 ); | |
93 s->dsp.h261_v_loop_filter(dest_cb, src, uvlinesize); | |
94 s->dsp.h261_h_loop_filter(dest_cb, src, uvlinesize); | |
95 | |
96 for(i=0; i<8;i++) | |
97 memcpy(src+i*8,dest_cr+i*uvlinesize,sizeof(uint8_t) * 8 ); | |
98 s->dsp.h261_v_loop_filter(dest_cr, src, uvlinesize); | |
99 s->dsp.h261_h_loop_filter(dest_cr, src, uvlinesize); | |
100 | |
101 fail: | |
102 av_free(src); | |
103 | |
104 return; | |
105 } | 74 } |
106 | 75 |
107 static int h261_decode_block(H261Context *h, DCTELEM *block, | 76 static int h261_decode_block(H261Context *h, DCTELEM *block, |
108 int n, int coded); | 77 int n, int coded); |
109 static int h261_decode_mb(H261Context *h, | 78 static int h261_decode_mb(H261Context *h, |