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]; |
