comparison h264_loopfilter.c @ 10970:eb5f0ccb6a98 libavcodec

Optimize filter_mb_mbaff_edge*()
author michael
date Sat, 23 Jan 2010 14:50:56 +0000
parents 2e8fbfc278d5
children 214adf5e303b
comparison
equal deleted inserted replaced
10969:2e8fbfc278d5 10970:eb5f0ccb6a98
134 } 134 }
135 } 135 }
136 136
137 static void filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int bsi, int qp ) { 137 static void filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int bsi, int qp ) {
138 int i; 138 int i;
139 int index_a = qp + h->slice_alpha_c0_offset;
140 int alpha = (alpha_table+52)[index_a];
141 int beta = (beta_table+52)[qp + h->slice_beta_offset];
139 for( i = 0; i < 8; i++, pix += stride) { 142 for( i = 0; i < 8; i++, pix += stride) {
140 int index_a;
141 int alpha;
142 int beta;
143 const int bS_index = (i >> 1) * bsi; 143 const int bS_index = (i >> 1) * bsi;
144 144
145 if( bS[bS_index] == 0 ) { 145 if( bS[bS_index] == 0 ) {
146 continue; 146 continue;
147 } 147 }
148
149 index_a = qp + h->slice_alpha_c0_offset;
150 alpha = (alpha_table+52)[index_a];
151 beta = (beta_table+52)[qp + h->slice_beta_offset];
152 148
153 if( bS[bS_index] < 4 ) { 149 if( bS[bS_index] < 4 ) {
154 const int tc0 = (tc0_table+52)[index_a][bS[bS_index]]; 150 const int tc0 = (tc0_table+52)[index_a][bS[bS_index]];
155 const int p0 = pix[-1]; 151 const int p0 = pix[-1];
156 const int p1 = pix[-2]; 152 const int p1 = pix[-2];
164 FFABS( q1 - q0 ) < beta ) { 160 FFABS( q1 - q0 ) < beta ) {
165 int tc = tc0; 161 int tc = tc0;
166 int i_delta; 162 int i_delta;
167 163
168 if( FFABS( p2 - p0 ) < beta ) { 164 if( FFABS( p2 - p0 ) < beta ) {
165 if(tc0)
169 pix[-2] = p1 + av_clip( ( p2 + ( ( p0 + q0 + 1 ) >> 1 ) - ( p1 << 1 ) ) >> 1, -tc0, tc0 ); 166 pix[-2] = p1 + av_clip( ( p2 + ( ( p0 + q0 + 1 ) >> 1 ) - ( p1 << 1 ) ) >> 1, -tc0, tc0 );
170 tc++; 167 tc++;
171 } 168 }
172 if( FFABS( q2 - q0 ) < beta ) { 169 if( FFABS( q2 - q0 ) < beta ) {
170 if(tc0)
173 pix[1] = q1 + av_clip( ( q2 + ( ( p0 + q0 + 1 ) >> 1 ) - ( q1 << 1 ) ) >> 1, -tc0, tc0 ); 171 pix[1] = q1 + av_clip( ( q2 + ( ( p0 + q0 + 1 ) >> 1 ) - ( q1 << 1 ) ) >> 1, -tc0, tc0 );
174 tc++; 172 tc++;
175 } 173 }
176 174
177 i_delta = av_clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); 175 i_delta = av_clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc );
225 } 223 }
226 } 224 }
227 } 225 }
228 static void filter_mb_mbaff_edgecv( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int bsi, int qp ) { 226 static void filter_mb_mbaff_edgecv( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int bsi, int qp ) {
229 int i; 227 int i;
228 int index_a = qp + h->slice_alpha_c0_offset;
229 int alpha = (alpha_table+52)[index_a];
230 int beta = (beta_table+52)[qp + h->slice_beta_offset];
230 for( i = 0; i < 4; i++, pix += stride) { 231 for( i = 0; i < 4; i++, pix += stride) {
231 int index_a;
232 int alpha;
233 int beta;
234 const int bS_index = i*bsi; 232 const int bS_index = i*bsi;
235 233
236 if( bS[bS_index] == 0 ) { 234 if( bS[bS_index] == 0 ) {
237 continue; 235 continue;
238 } 236 }
239
240 index_a = qp + h->slice_alpha_c0_offset;
241 alpha = (alpha_table+52)[index_a];
242 beta = (beta_table+52)[qp + h->slice_beta_offset];
243 237
244 if( bS[bS_index] < 4 ) { 238 if( bS[bS_index] < 4 ) {
245 const int tc = (tc0_table+52)[index_a][bS[bS_index]] + 1; 239 const int tc = (tc0_table+52)[index_a][bS[bS_index]] + 1;
246 const int p0 = pix[-1]; 240 const int p0 = pix[-1];
247 const int p1 = pix[-2]; 241 const int p1 = pix[-2];