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,