comparison mpeg12.c @ 568:7e7a7282608c libavcodec

hmm ABS(dc-diff) > 512 fix printing some error messages if some error occurs
author michaelni
date Wed, 17 Jul 2002 15:54:56 +0000
parents 5690779adf16
children 5f7ab2e73bc9
comparison
equal deleted inserted replaced
567:5a6eaaa9fba2 568:7e7a7282608c
586 static int done = 0; 586 static int done = 0;
587 587
588 if (!done) { 588 if (!done) {
589 done = 1; 589 done = 1;
590 590
591 init_vlc(&dc_lum_vlc, DC_VLC_BITS, 10/*12*/, 591 init_vlc(&dc_lum_vlc, DC_VLC_BITS, 12,
592 vlc_dc_lum_bits, 1, 1, 592 vlc_dc_lum_bits, 1, 1,
593 vlc_dc_lum_code, 2, 2); 593 vlc_dc_lum_code, 2, 2);
594 init_vlc(&dc_chroma_vlc, DC_VLC_BITS, 10/*12*/, 594 init_vlc(&dc_chroma_vlc, DC_VLC_BITS, 12,
595 vlc_dc_chroma_bits, 1, 1, 595 vlc_dc_chroma_bits, 1, 1,
596 vlc_dc_chroma_code, 2, 2); 596 vlc_dc_chroma_code, 2, 2);
597 init_vlc(&mv_vlc, MV_VLC_BITS, 17, 597 init_vlc(&mv_vlc, MV_VLC_BITS, 17,
598 &mbMotionVectorTable[0][1], 2, 1, 598 &mbMotionVectorTable[0][1], 2, 1,
599 &mbMotionVectorTable[0][0], 2, 1); 599 &mbMotionVectorTable[0][0], 2, 1);
672 } 672 }
673 } 673 }
674 } 674 }
675 if (++s->mb_x >= s->mb_width) { 675 if (++s->mb_x >= s->mb_width) {
676 s->mb_x = 0; 676 s->mb_x = 0;
677 if (s->mb_y >= (s->mb_height - 1)) 677 if (s->mb_y >= (s->mb_height - 1)){
678 fprintf(stderr, "slice too long\n");
678 return -1; 679 return -1;
680 }
679 s->mb_y++; 681 s->mb_y++;
680 } 682 }
681 dprintf("decode_mb: x=%d y=%d\n", s->mb_x, s->mb_y); 683 dprintf("decode_mb: x=%d y=%d\n", s->mb_x, s->mb_y);
682 684
683 if (--s->mb_incr != 0) { 685 if (--s->mb_incr != 0) {
714 mb_type = MB_INTRA; 716 mb_type = MB_INTRA;
715 } 717 }
716 break; 718 break;
717 case P_TYPE: 719 case P_TYPE:
718 mb_type = get_vlc2(&s->gb, mb_ptype_vlc.table, MB_PTYPE_VLC_BITS, 1); 720 mb_type = get_vlc2(&s->gb, mb_ptype_vlc.table, MB_PTYPE_VLC_BITS, 1);
719 if (mb_type < 0) 721 if (mb_type < 0){
722 fprintf(stderr, "invalid mb type in P Frame at %d %d\n", s->mb_x, s->mb_y);
720 return -1; 723 return -1;
724 }
721 break; 725 break;
722 case B_TYPE: 726 case B_TYPE:
723 mb_type = get_vlc2(&s->gb, mb_btype_vlc.table, MB_BTYPE_VLC_BITS, 1); 727 mb_type = get_vlc2(&s->gb, mb_btype_vlc.table, MB_BTYPE_VLC_BITS, 1);
724 if (mb_type < 0) 728 if (mb_type < 0){
729 fprintf(stderr, "invalid mb type in B Frame at %d %d\n", s->mb_x, s->mb_y);
725 return -1; 730 return -1;
731 }
726 break; 732 break;
727 } 733 }
728 dprintf("mb_type=%x\n", mb_type); 734 dprintf("mb_type=%x\n", mb_type);
729 motion_type = 0; /* avoid warning */ 735 motion_type = 0; /* avoid warning */
730 if (mb_type & (MB_FOR|MB_BACK)) { 736 if (mb_type & (MB_FOR|MB_BACK)) {
889 skip_bits1(&s->gb); /* marker */ 895 skip_bits1(&s->gb); /* marker */
890 } 896 }
891 897
892 if (mb_type & MB_PAT) { 898 if (mb_type & MB_PAT) {
893 cbp = get_vlc2(&s->gb, mb_pat_vlc.table, MB_PAT_VLC_BITS, 1); 899 cbp = get_vlc2(&s->gb, mb_pat_vlc.table, MB_PAT_VLC_BITS, 1);
894 if (cbp < 0) 900 if (cbp < 0){
901 fprintf(stderr, "invalid cbp at %d %d\n", s->mb_x, s->mb_y);
895 return -1; 902 return -1;
903 }
896 cbp++; 904 cbp++;
897 } 905 }
898 dprintf("cbp=%x\n", cbp); 906 dprintf("cbp=%x\n", cbp);
899 907
900 if (s->mpeg2) { 908 if (s->mpeg2) {
966 static inline int decode_dc(MpegEncContext *s, int component) 974 static inline int decode_dc(MpegEncContext *s, int component)
967 { 975 {
968 int code, diff; 976 int code, diff;
969 977
970 if (component == 0) { 978 if (component == 0) {
971 code = get_vlc2(&s->gb, dc_lum_vlc.table, DC_VLC_BITS, 1); 979 code = get_vlc2(&s->gb, dc_lum_vlc.table, DC_VLC_BITS, 2);
972 } else { 980 } else {
973 code = get_vlc2(&s->gb, dc_chroma_vlc.table, DC_VLC_BITS, 1); 981 code = get_vlc2(&s->gb, dc_chroma_vlc.table, DC_VLC_BITS, 2);
974 } 982 }
975 if (code < 0) 983 if (code < 0){
984 fprintf(stderr, "invalid dc code at %d %d\n", s->mb_x, s->mb_y);
976 return 0xffff; 985 return 0xffff;
986 }
977 if (code == 0) { 987 if (code == 0) {
978 diff = 0; 988 diff = 0;
979 } else { 989 } else {
980 diff = get_bits(&s->gb, code); 990 diff = get_bits(&s->gb, code);
981 if ((diff & (1 << (code - 1))) == 0) 991 if ((diff & (1 << (code - 1))) == 0)
1100 } 1110 }
1101 1111
1102 /* now quantify & encode AC coefs */ 1112 /* now quantify & encode AC coefs */
1103 for(;;) { 1113 for(;;) {
1104 code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2); 1114 code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2);
1105 if (code < 0) 1115 if (code < 0){
1116 fprintf(stderr, "invalid ac code at %d %d\n", s->mb_x, s->mb_y);
1106 return -1; 1117 return -1;
1118 }
1107 if (code == 112) { 1119 if (code == 112) {
1108 break; 1120 break;
1109 } else if (code == 111) { 1121 } else if (code == 111) {
1110 /* escape */ 1122 /* escape */
1111 run = get_bits(&s->gb, 6); 1123 run = get_bits(&s->gb, 6);
1116 level = rl->table_level[code]; 1128 level = rl->table_level[code];
1117 if (get_bits1(&s->gb)) 1129 if (get_bits1(&s->gb))
1118 level = -level; 1130 level = -level;
1119 } 1131 }
1120 i += run; 1132 i += run;
1121 if (i >= 64) 1133 if (i >= 64){
1134 fprintf(stderr, "run too long at %d %d\n", s->mb_x, s->mb_y);
1122 return -1; 1135 return -1;
1136 }
1123 add_coef: 1137 add_coef:
1124 j = scan_table[i]; 1138 j = scan_table[i];
1125 dprintf("%d: run=%d level=%d\n", n, run, level); 1139 dprintf("%d: run=%d level=%d\n", n, run, level);
1126 /* XXX: optimize */ 1140 /* XXX: optimize */
1127 if (level > 0) { 1141 if (level > 0) {
1179 matrix = s->chroma_intra_matrix; 1193 matrix = s->chroma_intra_matrix;
1180 1194
1181 /* now quantify & encode AC coefs */ 1195 /* now quantify & encode AC coefs */
1182 for(;;) { 1196 for(;;) {
1183 code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2); 1197 code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2);
1184 if (code < 0) 1198 if (code < 0){
1199 fprintf(stderr, "invalid ac code at %d %d\n", s->mb_x, s->mb_y);
1185 return -1; 1200 return -1;
1201 }
1186 if (code == 112) { 1202 if (code == 112) {
1187 break; 1203 break;
1188 } else if (code == 111) { 1204 } else if (code == 111) {
1189 /* escape */ 1205 /* escape */
1190 run = get_bits(&s->gb, 6); 1206 run = get_bits(&s->gb, 6);
1195 level = rl->table_level[code]; 1211 level = rl->table_level[code];
1196 if (get_bits1(&s->gb)) 1212 if (get_bits1(&s->gb))
1197 level = -level; 1213 level = -level;
1198 } 1214 }
1199 i += run; 1215 i += run;
1200 if (i >= 64) 1216 if (i >= 64){
1217 fprintf(stderr, "run too long at %d %d\n", s->mb_x, s->mb_y);
1201 return -1; 1218 return -1;
1219 }
1202 j = scan_table[i]; 1220 j = scan_table[i];
1203 dprintf("%d: run=%d level=%d\n", n, run, level); 1221 dprintf("%d: run=%d level=%d\n", n, run, level);
1204 level = (level * s->qscale * matrix[j]) / 16; 1222 level = (level * s->qscale * matrix[j]) / 16;
1205 /* XXX: is it really necessary to saturate since the encoder 1223 /* XXX: is it really necessary to saturate since the encoder
1206 knows whats going on ? */ 1224 knows whats going on ? */
1438 Mpeg1Context *s1 = avctx->priv_data; 1456 Mpeg1Context *s1 = avctx->priv_data;
1439 MpegEncContext *s = &s1->mpeg_enc_ctx; 1457 MpegEncContext *s = &s1->mpeg_enc_ctx;
1440 int ret; 1458 int ret;
1441 1459
1442 start_code = (start_code - 1) & 0xff; 1460 start_code = (start_code - 1) & 0xff;
1443 if (start_code >= s->mb_height) 1461 if (start_code >= s->mb_height){
1462 fprintf(stderr, "slice below image\n");
1444 return -1; 1463 return -1;
1464 }
1445 s->last_dc[0] = 1 << (7 + s->intra_dc_precision); 1465 s->last_dc[0] = 1 << (7 + s->intra_dc_precision);
1446 s->last_dc[1] = s->last_dc[0]; 1466 s->last_dc[1] = s->last_dc[0];
1447 s->last_dc[2] = s->last_dc[0]; 1467 s->last_dc[2] = s->last_dc[0];
1448 memset(s->last_mv, 0, sizeof(s->last_mv)); 1468 memset(s->last_mv, 0, sizeof(s->last_mv));
1449 s->mb_x = -1; 1469 s->mb_x = -1;
1733 avctx->repeat_pict = 1; 1753 avctx->repeat_pict = 1;
1734 } 1754 }
1735 } 1755 }
1736 *data_size = sizeof(AVPicture); 1756 *data_size = sizeof(AVPicture);
1737 goto the_end; 1757 goto the_end;
1758 }else if(ret==-1){
1759 printf("Error while decoding slice\n");
1738 } 1760 }
1739 } 1761 }
1740 break; 1762 break;
1741 } 1763 }
1742 } 1764 }