Mercurial > libavcodec.hg
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 } |