History

VC1: merge idct8x8, coeff adjustments and put_pixels.

Merging these functions allows merging some loops, which makes the results (particularly after SIMD optimizations) much faster.

Ronald S. Bultje committed 15 years ago

Commit f8bed301 parent 8d9ac965 files · +170 −40Browse files

Unified · Split

5 files
  1. libavcodec/ppc/vc1dsp_altivec.c +61 −3
  2. libavcodec/vc1.c +27 −1
  3. libavcodec/vc1dec.c +33 −25
  4. libavcodec/vc1dsp.c +44 −10
  5. libavcodec/vc1dsp.h +5 −1
libavcodec/ppc/vc1dsp_altivec.c+61−3
@@ -130,7 +130,8 @@ do { \ · 129 unmodified lines
130130
131131 /** Do inverse transform on 8x8 block
132132 */
133−static void vc1_inv_trans_8x8_altivec(DCTELEM block[64])
133+static void vc1_inv_trans_8x8_altivec(DCTELEM block[64],
134+ int sign, int rangered)
134135 {
135136 vector signed short src0, src1, src2, src3, src4, src5, src6, src7;
136137 vector signed int s0, s1, s2, s3, s4, s5, s6, s7;
@@ -144,7 +145,9 @@ static void vc1_inv_trans_8x8_altivec(DCTELEM block[64]) · 7 unmodified lines
144145 const vector unsigned int vec_2 = vec_splat_u32(2);
145146 const vector signed int vec_1s = vec_splat_s32(1);
146147 const vector unsigned int vec_1 = vec_splat_u32(1);
147−
148+ const vector unsigned short rangered_shift = vec_splat_u16(1);
149+ const vector signed short signed_bias = vec_sl(vec_splat_u16(4),
150+ vec_splat_u16(4));
148151
149152 src0 = vec_ld( 0, block);
150153 src1 = vec_ld( 16, block);
@@ -214,6 +217,27 @@ static void vc1_inv_trans_8x8_altivec(DCTELEM block[64]) · 63 unmodified lines
214217 src6 = vec_pack(sE, s6);
215218 src7 = vec_pack(sF, s7);
216219
220+ if (rangered) {
221+ if (!sign) {
222+ vec_sub(src0, signed_bias);
223+ vec_sub(src1, signed_bias);
224+ vec_sub(src2, signed_bias);
225+ vec_sub(src3, signed_bias);
226+ vec_sub(src4, signed_bias);
227+ vec_sub(src5, signed_bias);
228+ vec_sub(src6, signed_bias);
229+ vec_sub(src7, signed_bias);
230+ }
231+ vec_sl(src0, rangered_shift);
232+ vec_sl(src1, rangered_shift);
233+ vec_sl(src2, rangered_shift);
234+ vec_sl(src3, rangered_shift);
235+ vec_sl(src4, rangered_shift);
236+ vec_sl(src5, rangered_shift);
237+ vec_sl(src6, rangered_shift);
238+ vec_sl(src7, rangered_shift);
239+ }
240+
217241 vec_st(src0, 0, block);
218242 vec_st(src1, 16, block);
219243 vec_st(src2, 32, block);
@@ -224,6 +248,36 @@ static void vc1_inv_trans_8x8_altivec(DCTELEM block[64]) · 4 unmodified lines
224248 vec_st(src7,112, block);
225249 }
226250
251+static void vc1_inv_trans_8x8_add_altivec(uint8_t *dest, int stride, DCTELEM *b)
252+{
253+ vc1_inv_trans_8x8_altivec(b, 0, 0);
254+ ff_add_pixels_clamped_c(b, dest, stride);
255+}
256+
257+static void vc1_inv_trans_8x8_put_signed_altivec(uint8_t *dest, int stride, DCTELEM *b)
258+{
259+ vc1_inv_trans_8x8_altivec(b, 1, 0);
260+ ff_put_signed_pixels_clamped_c(b, dest, stride);
261+}
262+
263+static void vc1_inv_trans_8x8_put_signed_rangered_altivec(uint8_t *dest, int stride, DCTELEM *b)
264+{
265+ vc1_inv_trans_8x8_altivec(b, 1, 1);
266+ ff_put_signed_pixels_clamped_c(b, dest, stride);
267+}
268+
269+static void vc1_inv_trans_8x8_put_altivec(uint8_t *dest, int stride, DCTELEM *b)
270+{
271+ vc1_inv_trans_8x8_altivec(b, 0, 0);
272+ ff_put_pixels_clamped_c(b, dest, stride);
273+}
274+
275+static void vc1_inv_trans_8x8_put_rangered_altivec(uint8_t *dest, int stride, DCTELEM *b)
276+{
277+ vc1_inv_trans_8x8_altivec(b, 0, 1);
278+ ff_put_pixels_clamped_c(b, dest, stride);
279+}
280+
227281 /** Do inverse transform on 8x4 part of block
228282 */
229283 static void vc1_inv_trans_8x4_altivec(uint8_t *dest, int stride, DCTELEM *block)
@@ -342,7 +396,11 @@ void ff_vc1dsp_init_altivec(VC1DSPContext* dsp) · 112 unmodified lines
342396 if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
343397 return;
344398
345− dsp->vc1_inv_trans_8x8 = vc1_inv_trans_8x8_altivec;
399+ dsp->vc1_inv_trans_8x8_add = vc1_inv_trans_8x8_add_altivec;
400+ dsp->vc1_inv_trans_8x8_put_signed[0] = vc1_inv_trans_8x8_put_signed_altivec;
401+ dsp->vc1_inv_trans_8x8_put_signed[1] = vc1_inv_trans_8x8_put_signed_rangered_altivec;
402+ dsp->vc1_inv_trans_8x8_put[0] = vc1_inv_trans_8x8_put_altivec;
403+ dsp->vc1_inv_trans_8x8_put[1] = vc1_inv_trans_8x8_put_rangered_altivec;
346404 dsp->vc1_inv_trans_8x4 = vc1_inv_trans_8x4_altivec;
347405 dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = put_no_rnd_vc1_chroma_mc8_altivec;
348406 dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = avg_no_rnd_vc1_chroma_mc8_altivec;
libavcodec/vc1.c+27−1
@@ -280,6 +280,28 @@ static int vop_dquant_decoding(VC1Context *v) · 279 unmodified lines
280280
281281 static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb);
282282
283+static void simple_idct_put_rangered(uint8_t *dest, int line_size, DCTELEM *block)
284+{
285+ int i;
286+ ff_simple_idct(block);
287+ for (i = 0; i < 64; i++) block[i] = (block[i] - 64) << 1;
288+ ff_put_pixels_clamped_c(block, dest, line_size);
289+}
290+
291+static void simple_idct_put_signed(uint8_t *dest, int line_size, DCTELEM *block)
292+{
293+ ff_simple_idct(block);
294+ ff_put_signed_pixels_clamped_c(block, dest, line_size);
295+}
296+
297+static void simple_idct_put_signed_rangered(uint8_t *dest, int line_size, DCTELEM *block)
298+{
299+ int i;
300+ ff_simple_idct(block);
301+ for (i = 0; i < 64; i++) block[i] <<= 1;
302+ ff_put_signed_pixels_clamped_c(block, dest, line_size);
303+}
304+
283305 /**
284306 * Decode Simple/Main Profiles sequence header
285307 * @see Figure 7-8, p16-17
@@ -337,7 +359,11 @@ int vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitConte · 51 unmodified lines
337359 v->res_fasttx = get_bits1(gb);
338360 if (!v->res_fasttx)
339361 {
340− v->vc1dsp.vc1_inv_trans_8x8 = ff_simple_idct;
362+ v->vc1dsp.vc1_inv_trans_8x8_add = ff_simple_idct_add;
363+ v->vc1dsp.vc1_inv_trans_8x8_put[0] = ff_simple_idct_put;
364+ v->vc1dsp.vc1_inv_trans_8x8_put[1] = simple_idct_put_rangered;
365+ v->vc1dsp.vc1_inv_trans_8x8_put_signed[0] = simple_idct_put_signed;
366+ v->vc1dsp.vc1_inv_trans_8x8_put_signed[1] = simple_idct_put_signed_rangered;
341367 v->vc1dsp.vc1_inv_trans_8x4 = ff_simple_idct84_add;
342368 v->vc1dsp.vc1_inv_trans_4x8 = ff_simple_idct48_add;
343369 v->vc1dsp.vc1_inv_trans_4x4 = ff_simple_idct44_add;
libavcodec/vc1dec.c+33−25
@@ -2009,8 +2009,7 @@ static int vc1_decode_p_block(VC1Context *v, DCTELEM block[64], int n, int mquan · 2008 unmodified lines
20092009 if(i==1)
20102010 v->vc1dsp.vc1_inv_trans_8x8_dc(dst, linesize, block);
20112011 else{
2012− v->vc1dsp.vc1_inv_trans_8x8(block);
2013− s->dsp.add_pixels_clamped(block, dst, linesize);
2012+ v->vc1dsp.vc1_inv_trans_8x8_add(dst, linesize, block);
20142013 }
20152014 if(apply_filter && cbp_top & 0xC)
20162015 v->vc1dsp.vc1_v_loop_filter8(dst, linesize, v->pq);
@@ -2117,7 +2116,7 @@ static int vc1_decode_p_mb(VC1Context *v) · 100 unmodified lines
21172116 {
21182117 MpegEncContext *s = &v->s;
21192118 GetBitContext *gb = &s->gb;
2120− int i, j;
2119+ int i;
21212120 int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
21222121 int cbp; /* cbp decoding stuff */
21232122 int mqdiff, mquant; /* MB quantization */
@@ -2149,6 +2148,8 @@ static int vc1_decode_p_mb(VC1Context *v) · 25 unmodified lines
21492148 {
21502149 if (!skipped)
21512150 {
2151+ vc1_idct_func idct8x8_fn;
2152+
21522153 GET_MVDATA(dmv_x, dmv_y);
21532154
21542155 if (s->mb_intra) {
@@ -2183,6 +2184,7 @@ static int vc1_decode_p_mb(VC1Context *v) · 28 unmodified lines
21832184 VC1_TTMB_VLC_BITS, 2);
21842185 if(!s->mb_intra) vc1_mc_1mv(v, 0);
21852186 dst_idx = 0;
2187+ idct8x8_fn = v->vc1dsp.vc1_inv_trans_8x8_put_signed[!!v->rangeredfrm];
21862188 for (i=0; i<6; i++)
21872189 {
21882190 s->dc_val[0][s->block_index[i]] = 0;
@@ -2200,9 +2202,9 @@ static int vc1_decode_p_mb(VC1Context *v) · 11 unmodified lines
22002202
22012203 vc1_decode_intra_block(v, s->block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset);
22022204 if((i>3) && (s->flags & CODEC_FLAG_GRAY)) continue;
2203− v->vc1dsp.vc1_inv_trans_8x8(s->block[i]);
2204− if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1;
2205− s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize);
2205+ idct8x8_fn(s->dest[dst_idx] + off,
2206+ i & 4 ? s->uvlinesize : s->linesize,
2207+ s->block[i]);
22062208 if(v->pq >= 9 && v->overlap) {
22072209 if(v->c_avail)
22082210 v->vc1dsp.vc1_h_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize);
@@ -2267,6 +2269,7 @@ static int vc1_decode_p_mb(VC1Context *v) · 58 unmodified lines
22672269 {
22682270 int intra_count = 0, coded_inter = 0;
22692271 int is_intra[6], is_coded[6];
2272+ vc1_idct_func idct8x8_fn;
22702273 /* Get CBPCY */
22712274 cbp = get_vlc2(&v->s.gb, v->cbpcy_vlc->table, VC1_CBPCY_P_VLC_BITS, 2);
22722275 for (i=0; i<6; i++)
@@ -2316,6 +2319,7 @@ static int vc1_decode_p_mb(VC1Context *v) · 43 unmodified lines
23162319 }
23172320 if (!v->ttmbf && coded_inter)
23182321 ttmb = get_vlc2(gb, ff_vc1_ttmb_vlc[v->tt_index].table, VC1_TTMB_VLC_BITS, 2);
2322+ idct8x8_fn = v->vc1dsp.vc1_inv_trans_8x8_put_signed[!!v->rangeredfrm];
23192323 for (i=0; i<6; i++)
23202324 {
23212325 dst_idx += i >> 2;
@@ -2331,9 +2335,9 @@ static int vc1_decode_p_mb(VC1Context *v) · 9 unmodified lines
23312335
23322336 vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, (i&4)?v->codingset2:v->codingset);
23332337 if((i>3) && (s->flags & CODEC_FLAG_GRAY)) continue;
2334− v->vc1dsp.vc1_inv_trans_8x8(s->block[i]);
2335− if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1;
2336− s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize);
2338+ idct8x8_fn(s->dest[dst_idx] + off,
2339+ (i&4)?s->uvlinesize:s->linesize,
2340+ s->block[i]);
23372341 if(v->pq >= 9 && v->overlap) {
23382342 if(v->c_avail)
23392343 v->vc1dsp.vc1_h_overlap(s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize);
@@ -2409,7 +2413,7 @@ static void vc1_decode_b_mb(VC1Context *v) · 69 unmodified lines
24092413 {
24102414 MpegEncContext *s = &v->s;
24112415 GetBitContext *gb = &s->gb;
2412− int i, j;
2416+ int i;
24132417 int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
24142418 int cbp = 0; /* cbp decoding stuff */
24152419 int mqdiff, mquant; /* MB quantization */
@@ -2422,6 +2426,7 @@ static void vc1_decode_b_mb(VC1Context *v) · 6 unmodified lines
24222426 int skipped, direct;
24232427 int dmv_x[2], dmv_y[2];
24242428 int bmvtype = BMV_TYPE_BACKWARD;
2429+ vc1_idct_func idct8x8_fn;
24252430
24262431 mquant = v->pq; /* Loosy initialization */
24272432 s->mb_intra = 0;
@@ -2519,6 +2524,7 @@ static void vc1_decode_b_mb(VC1Context *v) · 91 unmodified lines
25192524 }
25202525 }
25212526 dst_idx = 0;
2527+ idct8x8_fn = v->vc1dsp.vc1_inv_trans_8x8_put_signed[!!v->rangeredfrm];
25222528 for (i=0; i<6; i++)
25232529 {
25242530 s->dc_val[0][s->block_index[i]] = 0;
@@ -2536,9 +2542,9 @@ static void vc1_decode_b_mb(VC1Context *v) · 11 unmodified lines
25362542
25372543 vc1_decode_intra_block(v, s->block[i], i, val, mquant, (i&4)?v->codingset2:v->codingset);
25382544 if((i>3) && (s->flags & CODEC_FLAG_GRAY)) continue;
2539− v->vc1dsp.vc1_inv_trans_8x8(s->block[i]);
2540− if(v->rangeredfrm) for(j = 0; j < 64; j++) s->block[i][j] <<= 1;
2541− s->dsp.put_signed_pixels_clamped(s->block[i], s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize);
2545+ idct8x8_fn(s->dest[dst_idx] + off,
2546+ i & 4 ? s->uvlinesize : s->linesize,
2547+ s->block[i]);
25422548 } else if(val) {
25432549 vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i&4)?s->uvlinesize:s->linesize, (i&4) && (s->flags & CODEC_FLAG_GRAY), 0, 0, 0);
25442550 if(!v->ttmbf && ttmb < 8) ttmb = -1;
@@ -2551,11 +2557,12 @@ static void vc1_decode_b_mb(VC1Context *v) · 6 unmodified lines
25512557 */
25522558 static void vc1_decode_i_blocks(VC1Context *v)
25532559 {
2554− int k, j;
2560+ int k;
25552561 MpegEncContext *s = &v->s;
25562562 int cbp, val;
25572563 uint8_t *coded_val;
25582564 int mb_pos;
2565+ vc1_idct_func idct8x8_fn;
25592566
25602567 /* select codingmode used for VLC tables selection */
25612568 switch(v->y_ac_table_index){
@@ -2590,6 +2597,10 @@ static void vc1_decode_i_blocks(VC1Context *v) · 28 unmodified lines
25902597 s->mb_x = s->mb_y = 0;
25912598 s->mb_intra = 1;
25922599 s->first_slice_line = 1;
2600+ if(v->pq >= 9 && v->overlap) {
2601+ idct8x8_fn = v->vc1dsp.vc1_inv_trans_8x8_put_signed[!!v->rangeredfrm];
2602+ } else
2603+ idct8x8_fn = v->vc1dsp.vc1_inv_trans_8x8_put[!!v->rangeredfrm];
25932604 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) {
25942605 s->mb_x = 0;
25952606 ff_init_block_index(s);
@@ -2626,14 +2637,9 @@ static void vc1_decode_i_blocks(VC1Context *v) · 30 unmodified lines
26262637 vc1_decode_i_block(v, s->block[k], k, val, (k<4)? v->codingset : v->codingset2);
26272638
26282639 if (k > 3 && (s->flags & CODEC_FLAG_GRAY)) continue;
2629− v->vc1dsp.vc1_inv_trans_8x8(s->block[k]);
2630− if(v->pq >= 9 && v->overlap) {
2631− if (v->rangeredfrm) for(j = 0; j < 64; j++) s->block[k][j] <<= 1;
2632− s->dsp.put_signed_pixels_clamped(s->block[k], dst[k], k & 4 ? s->uvlinesize : s->linesize);
2633− } else {
2634− if (v->rangeredfrm) for(j = 0; j < 64; j++) s->block[k][j] = (s->block[k][j] - 64) << 1;
2635− s->dsp.put_pixels_clamped(s->block[k], dst[k], k & 4 ? s->uvlinesize : s->linesize);
2636− }
2640+ idct8x8_fn(dst[k],
2641+ k & 4 ? s->uvlinesize : s->linesize,
2642+ s->block[k]);
26372643 }
26382644
26392645 if(v->pq >= 9 && v->overlap) {
@@ -2691,6 +2697,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v) · 51 unmodified lines
26912697 int mqdiff;
26922698 int overlap;
26932699 GetBitContext *gb = &s->gb;
2700+ vc1_idct_func idct8x8_fn;
26942701
26952702 /* select codingmode used for VLC tables selection */
26962703 switch(v->y_ac_table_index){
@@ -2721,6 +2728,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v) · 24 unmodified lines
27212728 s->mb_x = s->mb_y = 0;
27222729 s->mb_intra = 1;
27232730 s->first_slice_line = 1;
2731+ idct8x8_fn = v->vc1dsp.vc1_inv_trans_8x8_put_signed[0];
27242732 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) {
27252733 s->mb_x = 0;
27262734 ff_init_block_index(s);
@@ -2777,9 +2785,9 @@ static void vc1_decode_i_blocks_adv(VC1Context *v) · 50 unmodified lines
27772785 vc1_decode_i_block_adv(v, s->block[k], k, val, (k<4)? v->codingset : v->codingset2, mquant);
27782786
27792787 if (k > 3 && (s->flags & CODEC_FLAG_GRAY)) continue;
2780− v->vc1dsp.vc1_inv_trans_8x8(s->block[k]);
2781− s->dsp.put_signed_pixels_clamped(s->block[k], dst[k],
2782− k & 4 ? s->uvlinesize : s->linesize);
2788+ idct8x8_fn(dst[k],
2789+ k & 4 ? s->uvlinesize : s->linesize,
2790+ s->block[k]);
27832791 }
27842792
27852793 if(overlap) {
libavcodec/vc1dsp.c+44−10
@@ -199,7 +199,7 @@ static void vc1_inv_trans_8x8_dc_c(uint8_t *dest, int linesize, DCTELEM *block) · 198 unmodified lines
199199 }
200200 }
201201
202−static void vc1_inv_trans_8x8_c(DCTELEM block[64])
202+static av_always_inline void vc1_inv_trans_8x8_c(DCTELEM block[64], int shl, int sub)
203203 {
204204 int i;
205205 register int t1,t2,t3,t4,t5,t6,t7,t8;
@@ -254,20 +254,50 @@ static void vc1_inv_trans_8x8_c(DCTELEM block[64]) · 48 unmodified lines
254254 t3 = 9 * src[ 8] - 16 * src[24] + 4 * src[40] + 15 * src[56];
255255 t4 = 4 * src[ 8] - 9 * src[24] + 15 * src[40] - 16 * src[56];
256256
257− dst[ 0] = (t5 + t1) >> 7;
258− dst[ 8] = (t6 + t2) >> 7;
259− dst[16] = (t7 + t3) >> 7;
260− dst[24] = (t8 + t4) >> 7;
261− dst[32] = (t8 - t4 + 1) >> 7;
262− dst[40] = (t7 - t3 + 1) >> 7;
263− dst[48] = (t6 - t2 + 1) >> 7;
264− dst[56] = (t5 - t1 + 1) >> 7;
257+ dst[ 0] = (((t5 + t1 ) >> 7) - sub) << shl;
258+ dst[ 8] = (((t6 + t2 ) >> 7) - sub) << shl;
259+ dst[16] = (((t7 + t3 ) >> 7) - sub) << shl;
260+ dst[24] = (((t8 + t4 ) >> 7) - sub) << shl;
261+ dst[32] = (((t8 - t4 + 1) >> 7) - sub) << shl;
262+ dst[40] = (((t7 - t3 + 1) >> 7) - sub) << shl;
263+ dst[48] = (((t6 - t2 + 1) >> 7) - sub) << shl;
264+ dst[56] = (((t5 - t1 + 1) >> 7) - sub) << shl;
265265
266266 src++;
267267 dst++;
268268 }
269269 }
270270
271+static void vc1_inv_trans_8x8_add_c(uint8_t *dest, int linesize, DCTELEM *block)
272+{
273+ vc1_inv_trans_8x8_c(block, 0, 0);
274+ ff_add_pixels_clamped_c(block, dest, linesize);
275+}
276+
277+static void vc1_inv_trans_8x8_put_signed_c(uint8_t *dest, int linesize, DCTELEM *block)
278+{
279+ vc1_inv_trans_8x8_c(block, 0, 0);
280+ ff_put_signed_pixels_clamped_c(block, dest, linesize);
281+}
282+
283+static void vc1_inv_trans_8x8_put_signed_rangered_c(uint8_t *dest, int linesize, DCTELEM *block)
284+{
285+ vc1_inv_trans_8x8_c(block, 1, 0);
286+ ff_put_signed_pixels_clamped_c(block, dest, linesize);
287+}
288+
289+static void vc1_inv_trans_8x8_put_c(uint8_t *dest, int linesize, DCTELEM *block)
290+{
291+ vc1_inv_trans_8x8_c(block, 0, 0);
292+ ff_put_pixels_clamped_c(block, dest, linesize);
293+}
294+
295+static void vc1_inv_trans_8x8_put_rangered_c(uint8_t *dest, int linesize, DCTELEM *block)
296+{
297+ vc1_inv_trans_8x8_c(block, 1, 64);
298+ ff_put_pixels_clamped_c(block, dest, linesize);
299+}
300+
271301 /** Do inverse transform on 8x4 part of block
272302 */
273303 static void vc1_inv_trans_8x4_dc_c(uint8_t *dest, int linesize, DCTELEM *block)
@@ -662,7 +692,11 @@ static void avg_no_rnd_vc1_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*a · 388 unmodified lines
662692 }
663693
664694 av_cold void ff_vc1dsp_init(VC1DSPContext* dsp) {
665− dsp->vc1_inv_trans_8x8 = vc1_inv_trans_8x8_c;
695+ dsp->vc1_inv_trans_8x8_add = vc1_inv_trans_8x8_add_c;
696+ dsp->vc1_inv_trans_8x8_put_signed[0] = vc1_inv_trans_8x8_put_signed_c;
697+ dsp->vc1_inv_trans_8x8_put_signed[1] = vc1_inv_trans_8x8_put_signed_rangered_c;
698+ dsp->vc1_inv_trans_8x8_put[0] = vc1_inv_trans_8x8_put_c;
699+ dsp->vc1_inv_trans_8x8_put[1] = vc1_inv_trans_8x8_put_rangered_c;
666700 dsp->vc1_inv_trans_4x8 = vc1_inv_trans_4x8_c;
667701 dsp->vc1_inv_trans_8x4 = vc1_inv_trans_8x4_c;
668702 dsp->vc1_inv_trans_4x4 = vc1_inv_trans_4x4_c;
libavcodec/vc1dsp.h+5−1
@@ -30,9 +30,13 @@ · 29 unmodified lines
3030
3131 #include "dsputil.h"
3232
33+typedef void (*vc1_idct_func)(uint8_t *dest, int line_size, DCTELEM *block);
34+
3335 typedef struct VC1DSPContext {
3436 /* vc1 functions */
35− void (*vc1_inv_trans_8x8)(DCTELEM *b);
37+ vc1_idct_func vc1_inv_trans_8x8_add;
38+ vc1_idct_func vc1_inv_trans_8x8_put_signed[2];
39+ vc1_idct_func vc1_inv_trans_8x8_put[2];
3640 void (*vc1_inv_trans_8x4)(uint8_t *dest, int line_size, DCTELEM *block);
3741 void (*vc1_inv_trans_4x8)(uint8_t *dest, int line_size, DCTELEM *block);
3842 void (*vc1_inv_trans_4x4)(uint8_t *dest, int line_size, DCTELEM *block);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t