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