Mercurial > libavcodec.hg
comparison h263.c @ 1092:f59c3f66363b libavcodec
MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
bitexact cleanup
author | michaelni |
---|---|
date | Mon, 03 Mar 2003 14:54:00 +0000 |
parents | 8216533dd959 |
children | 1e39f273ecd6 |
comparison
equal
deleted
inserted
replaced
1091:03df246fb06b | 1092:f59c3f66363b |
---|---|
295 /* top prediction */ | 295 /* top prediction */ |
296 ac_val-= s->block_wrap[n]*16; | 296 ac_val-= s->block_wrap[n]*16; |
297 if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){ | 297 if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){ |
298 /* same qscale */ | 298 /* same qscale */ |
299 for(i=1; i<8; i++){ | 299 for(i=1; i<8; i++){ |
300 const int level= block[n][s->idct_permutation[i ]]; | 300 const int level= block[n][s->dsp.idct_permutation[i ]]; |
301 score0+= ABS(level); | 301 score0+= ABS(level); |
302 score1+= ABS(level - ac_val[i+8]); | 302 score1+= ABS(level - ac_val[i+8]); |
303 ac_val1[i ]= block[n][s->idct_permutation[i<<3]]; | 303 ac_val1[i ]= block[n][s->dsp.idct_permutation[i<<3]]; |
304 ac_val1[i+8]= level; | 304 ac_val1[i+8]= level; |
305 } | 305 } |
306 }else{ | 306 }else{ |
307 /* different qscale, we must rescale */ | 307 /* different qscale, we must rescale */ |
308 for(i=1; i<8; i++){ | 308 for(i=1; i<8; i++){ |
309 const int level= block[n][s->idct_permutation[i ]]; | 309 const int level= block[n][s->dsp.idct_permutation[i ]]; |
310 score0+= ABS(level); | 310 score0+= ABS(level); |
311 score1+= ABS(level - ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale)); | 311 score1+= ABS(level - ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale)); |
312 ac_val1[i ]= block[n][s->idct_permutation[i<<3]]; | 312 ac_val1[i ]= block[n][s->dsp.idct_permutation[i<<3]]; |
313 ac_val1[i+8]= level; | 313 ac_val1[i+8]= level; |
314 } | 314 } |
315 } | 315 } |
316 }else{ | 316 }else{ |
317 const int xy= s->mb_x-1 + s->mb_y*s->mb_width; | 317 const int xy= s->mb_x-1 + s->mb_y*s->mb_width; |
318 /* left prediction */ | 318 /* left prediction */ |
319 ac_val-= 16; | 319 ac_val-= 16; |
320 if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){ | 320 if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){ |
321 /* same qscale */ | 321 /* same qscale */ |
322 for(i=1; i<8; i++){ | 322 for(i=1; i<8; i++){ |
323 const int level= block[n][s->idct_permutation[i<<3]]; | 323 const int level= block[n][s->dsp.idct_permutation[i<<3]]; |
324 score0+= ABS(level); | 324 score0+= ABS(level); |
325 score1+= ABS(level - ac_val[i]); | 325 score1+= ABS(level - ac_val[i]); |
326 ac_val1[i ]= level; | 326 ac_val1[i ]= level; |
327 ac_val1[i+8]= block[n][s->idct_permutation[i ]]; | 327 ac_val1[i+8]= block[n][s->dsp.idct_permutation[i ]]; |
328 } | 328 } |
329 }else{ | 329 }else{ |
330 /* different qscale, we must rescale */ | 330 /* different qscale, we must rescale */ |
331 for(i=1; i<8; i++){ | 331 for(i=1; i<8; i++){ |
332 const int level= block[n][s->idct_permutation[i<<3]]; | 332 const int level= block[n][s->dsp.idct_permutation[i<<3]]; |
333 score0+= ABS(level); | 333 score0+= ABS(level); |
334 score1+= ABS(level - ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale)); | 334 score1+= ABS(level - ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale)); |
335 ac_val1[i ]= level; | 335 ac_val1[i ]= level; |
336 ac_val1[i+8]= block[n][s->idct_permutation[i ]]; | 336 ac_val1[i+8]= block[n][s->dsp.idct_permutation[i ]]; |
337 } | 337 } |
338 } | 338 } |
339 } | 339 } |
340 } | 340 } |
341 | 341 |
829 | 829 |
830 ac_val = s->ac_val[0][0] + s->block_index[i] * 16; | 830 ac_val = s->ac_val[0][0] + s->block_index[i] * 16; |
831 | 831 |
832 if(dir[i]){ | 832 if(dir[i]){ |
833 for(j=1; j<8; j++) | 833 for(j=1; j<8; j++) |
834 block[i][s->idct_permutation[j ]]= ac_val[j+8]; | 834 block[i][s->dsp.idct_permutation[j ]]= ac_val[j+8]; |
835 }else{ | 835 }else{ |
836 for(j=1; j<8; j++) | 836 for(j=1; j<8; j++) |
837 block[i][s->idct_permutation[j<<3]]= ac_val[j ]; | 837 block[i][s->dsp.idct_permutation[j<<3]]= ac_val[j ]; |
838 } | 838 } |
839 s->block_last_index[i]= zigzag_last_index[i]; | 839 s->block_last_index[i]= zigzag_last_index[i]; |
840 } | 840 } |
841 } | 841 } |
842 } | 842 } |
1057 if (s->h263_aic_dir) { | 1057 if (s->h263_aic_dir) { |
1058 /* left prediction */ | 1058 /* left prediction */ |
1059 if (a != 1024) { | 1059 if (a != 1024) { |
1060 ac_val -= 16; | 1060 ac_val -= 16; |
1061 for(i=1;i<8;i++) { | 1061 for(i=1;i<8;i++) { |
1062 block[s->idct_permutation[i<<3]] += ac_val[i]; | 1062 block[s->dsp.idct_permutation[i<<3]] += ac_val[i]; |
1063 } | 1063 } |
1064 pred_dc = a; | 1064 pred_dc = a; |
1065 } | 1065 } |
1066 } else { | 1066 } else { |
1067 /* top prediction */ | 1067 /* top prediction */ |
1068 if (c != 1024) { | 1068 if (c != 1024) { |
1069 ac_val -= 16 * wrap; | 1069 ac_val -= 16 * wrap; |
1070 for(i=1;i<8;i++) { | 1070 for(i=1;i<8;i++) { |
1071 block[s->idct_permutation[i ]] += ac_val[i + 8]; | 1071 block[s->dsp.idct_permutation[i ]] += ac_val[i + 8]; |
1072 } | 1072 } |
1073 pred_dc = c; | 1073 pred_dc = c; |
1074 } | 1074 } |
1075 } | 1075 } |
1076 } else { | 1076 } else { |
1094 /* Update AC/DC tables */ | 1094 /* Update AC/DC tables */ |
1095 dc_val[(x) + (y) * wrap] = block[0]; | 1095 dc_val[(x) + (y) * wrap] = block[0]; |
1096 | 1096 |
1097 /* left copy */ | 1097 /* left copy */ |
1098 for(i=1;i<8;i++) | 1098 for(i=1;i<8;i++) |
1099 ac_val1[i ] = block[s->idct_permutation[i<<3]]; | 1099 ac_val1[i ] = block[s->dsp.idct_permutation[i<<3]]; |
1100 /* top copy */ | 1100 /* top copy */ |
1101 for(i=1;i<8;i++) | 1101 for(i=1;i<8;i++) |
1102 ac_val1[8 + i] = block[s->idct_permutation[i ]]; | 1102 ac_val1[8 + i] = block[s->dsp.idct_permutation[i ]]; |
1103 } | 1103 } |
1104 | 1104 |
1105 int16_t *h263_pred_motion(MpegEncContext * s, int block, | 1105 int16_t *h263_pred_motion(MpegEncContext * s, int block, |
1106 int *px, int *py) | 1106 int *px, int *py) |
1107 { | 1107 { |
1750 put_bits(&s->pb, 1, 0); /* scalability */ | 1750 put_bits(&s->pb, 1, 0); /* scalability */ |
1751 | 1751 |
1752 ff_mpeg4_stuffing(&s->pb); | 1752 ff_mpeg4_stuffing(&s->pb); |
1753 | 1753 |
1754 /* user data */ | 1754 /* user data */ |
1755 if(!ff_bit_exact){ | 1755 if(!(s->flags & CODEC_FLAG_BITEXACT)){ |
1756 put_bits(&s->pb, 16, 0); | 1756 put_bits(&s->pb, 16, 0); |
1757 put_bits(&s->pb, 16, 0x1B2); /* user_data */ | 1757 put_bits(&s->pb, 16, 0x1B2); /* user_data */ |
1758 sprintf(buf, "FFmpeg%sb%s", FFMPEG_VERSION, LIBAVCODEC_BUILD_STR); | 1758 sprintf(buf, "FFmpeg%sb%s", FFMPEG_VERSION, LIBAVCODEC_BUILD_STR); |
1759 put_string(&s->pb, buf); | 1759 put_string(&s->pb, buf); |
1760 ff_mpeg4_stuffing(&s->pb); | 1760 ff_mpeg4_stuffing(&s->pb); |
1924 ac_val -= 16; | 1924 ac_val -= 16; |
1925 | 1925 |
1926 if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){ | 1926 if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){ |
1927 /* same qscale */ | 1927 /* same qscale */ |
1928 for(i=1;i<8;i++) { | 1928 for(i=1;i<8;i++) { |
1929 block[s->idct_permutation[i<<3]] += ac_val[i]; | 1929 block[s->dsp.idct_permutation[i<<3]] += ac_val[i]; |
1930 } | 1930 } |
1931 }else{ | 1931 }else{ |
1932 /* different qscale, we must rescale */ | 1932 /* different qscale, we must rescale */ |
1933 for(i=1;i<8;i++) { | 1933 for(i=1;i<8;i++) { |
1934 block[s->idct_permutation[i<<3]] += ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale); | 1934 block[s->dsp.idct_permutation[i<<3]] += ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale); |
1935 } | 1935 } |
1936 } | 1936 } |
1937 } else { | 1937 } else { |
1938 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width; | 1938 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width; |
1939 /* top prediction */ | 1939 /* top prediction */ |
1940 ac_val -= 16 * s->block_wrap[n]; | 1940 ac_val -= 16 * s->block_wrap[n]; |
1941 | 1941 |
1942 if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){ | 1942 if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){ |
1943 /* same qscale */ | 1943 /* same qscale */ |
1944 for(i=1;i<8;i++) { | 1944 for(i=1;i<8;i++) { |
1945 block[s->idct_permutation[i]] += ac_val[i + 8]; | 1945 block[s->dsp.idct_permutation[i]] += ac_val[i + 8]; |
1946 } | 1946 } |
1947 }else{ | 1947 }else{ |
1948 /* different qscale, we must rescale */ | 1948 /* different qscale, we must rescale */ |
1949 for(i=1;i<8;i++) { | 1949 for(i=1;i<8;i++) { |
1950 block[s->idct_permutation[i]] += ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale); | 1950 block[s->dsp.idct_permutation[i]] += ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale); |
1951 } | 1951 } |
1952 } | 1952 } |
1953 } | 1953 } |
1954 } | 1954 } |
1955 /* left copy */ | 1955 /* left copy */ |
1956 for(i=1;i<8;i++) | 1956 for(i=1;i<8;i++) |
1957 ac_val1[i ] = block[s->idct_permutation[i<<3]]; | 1957 ac_val1[i ] = block[s->dsp.idct_permutation[i<<3]]; |
1958 | 1958 |
1959 /* top copy */ | 1959 /* top copy */ |
1960 for(i=1;i<8;i++) | 1960 for(i=1;i<8;i++) |
1961 ac_val1[8 + i] = block[s->idct_permutation[i ]]; | 1961 ac_val1[8 + i] = block[s->dsp.idct_permutation[i ]]; |
1962 | 1962 |
1963 } | 1963 } |
1964 | 1964 |
1965 #ifdef CONFIG_ENCODERS | 1965 #ifdef CONFIG_ENCODERS |
1966 | 1966 |
1979 /* left prediction */ | 1979 /* left prediction */ |
1980 ac_val -= 16; | 1980 ac_val -= 16; |
1981 if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){ | 1981 if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){ |
1982 /* same qscale */ | 1982 /* same qscale */ |
1983 for(i=1;i<8;i++) { | 1983 for(i=1;i<8;i++) { |
1984 block[s->idct_permutation[i<<3]] -= ac_val[i]; | 1984 block[s->dsp.idct_permutation[i<<3]] -= ac_val[i]; |
1985 } | 1985 } |
1986 }else{ | 1986 }else{ |
1987 /* different qscale, we must rescale */ | 1987 /* different qscale, we must rescale */ |
1988 for(i=1;i<8;i++) { | 1988 for(i=1;i<8;i++) { |
1989 block[s->idct_permutation[i<<3]] -= ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale); | 1989 block[s->dsp.idct_permutation[i<<3]] -= ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale); |
1990 } | 1990 } |
1991 } | 1991 } |
1992 } else { | 1992 } else { |
1993 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width; | 1993 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width; |
1994 /* top prediction */ | 1994 /* top prediction */ |
1995 ac_val -= 16 * s->block_wrap[n]; | 1995 ac_val -= 16 * s->block_wrap[n]; |
1996 if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){ | 1996 if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){ |
1997 /* same qscale */ | 1997 /* same qscale */ |
1998 for(i=1;i<8;i++) { | 1998 for(i=1;i<8;i++) { |
1999 block[s->idct_permutation[i]] -= ac_val[i + 8]; | 1999 block[s->dsp.idct_permutation[i]] -= ac_val[i + 8]; |
2000 } | 2000 } |
2001 }else{ | 2001 }else{ |
2002 /* different qscale, we must rescale */ | 2002 /* different qscale, we must rescale */ |
2003 for(i=1;i<8;i++) { | 2003 for(i=1;i<8;i++) { |
2004 block[s->idct_permutation[i]] -= ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale); | 2004 block[s->dsp.idct_permutation[i]] -= ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale); |
2005 } | 2005 } |
2006 } | 2006 } |
2007 } | 2007 } |
2008 } | 2008 } |
2009 | 2009 |
4404 if((s->mpeg_quant=get_bits1(gb))){ /* vol_quant_type */ | 4404 if((s->mpeg_quant=get_bits1(gb))){ /* vol_quant_type */ |
4405 int i, v; | 4405 int i, v; |
4406 | 4406 |
4407 /* load default matrixes */ | 4407 /* load default matrixes */ |
4408 for(i=0; i<64; i++){ | 4408 for(i=0; i<64; i++){ |
4409 int j= s->idct_permutation[i]; | 4409 int j= s->dsp.idct_permutation[i]; |
4410 v= ff_mpeg4_default_intra_matrix[i]; | 4410 v= ff_mpeg4_default_intra_matrix[i]; |
4411 s->intra_matrix[j]= v; | 4411 s->intra_matrix[j]= v; |
4412 s->chroma_intra_matrix[j]= v; | 4412 s->chroma_intra_matrix[j]= v; |
4413 | 4413 |
4414 v= ff_mpeg4_default_non_intra_matrix[i]; | 4414 v= ff_mpeg4_default_non_intra_matrix[i]; |
4423 int j; | 4423 int j; |
4424 v= get_bits(gb, 8); | 4424 v= get_bits(gb, 8); |
4425 if(v==0) break; | 4425 if(v==0) break; |
4426 | 4426 |
4427 last= v; | 4427 last= v; |
4428 j= s->idct_permutation[ ff_zigzag_direct[i] ]; | 4428 j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ]; |
4429 s->intra_matrix[j]= v; | 4429 s->intra_matrix[j]= v; |
4430 s->chroma_intra_matrix[j]= v; | 4430 s->chroma_intra_matrix[j]= v; |
4431 } | 4431 } |
4432 | 4432 |
4433 /* replicate last value */ | 4433 /* replicate last value */ |
4434 for(; i<64; i++){ | 4434 for(; i<64; i++){ |
4435 int j= s->idct_permutation[ ff_zigzag_direct[i] ]; | 4435 int j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ]; |
4436 s->intra_matrix[j]= v; | 4436 s->intra_matrix[j]= v; |
4437 s->chroma_intra_matrix[j]= v; | 4437 s->chroma_intra_matrix[j]= v; |
4438 } | 4438 } |
4439 } | 4439 } |
4440 | 4440 |
4445 int j; | 4445 int j; |
4446 v= get_bits(gb, 8); | 4446 v= get_bits(gb, 8); |
4447 if(v==0) break; | 4447 if(v==0) break; |
4448 | 4448 |
4449 last= v; | 4449 last= v; |
4450 j= s->idct_permutation[ ff_zigzag_direct[i] ]; | 4450 j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ]; |
4451 s->inter_matrix[j]= v; | 4451 s->inter_matrix[j]= v; |
4452 s->chroma_inter_matrix[j]= v; | 4452 s->chroma_inter_matrix[j]= v; |
4453 } | 4453 } |
4454 | 4454 |
4455 /* replicate last value */ | 4455 /* replicate last value */ |
4456 for(; i<64; i++){ | 4456 for(; i<64; i++){ |
4457 int j= s->idct_permutation[ ff_zigzag_direct[i] ]; | 4457 int j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ]; |
4458 s->inter_matrix[j]= last; | 4458 s->inter_matrix[j]= last; |
4459 s->chroma_inter_matrix[j]= last; | 4459 s->chroma_inter_matrix[j]= last; |
4460 } | 4460 } |
4461 } | 4461 } |
4462 | 4462 |