Mercurial > libavcodec.hg
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]; |