comparison msmpeg4.c @ 1598:932d306bf1dc libavcodec

av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
author michael
date Mon, 03 Nov 2003 13:26:22 +0000
parents 08f82699fc71
children ccf7c96a630f
comparison
equal deleted inserted replaced
1597:4c9165372ab3 1598:932d306bf1dc
1236 1236
1237 if(s->msmpeg4_version==1){ 1237 if(s->msmpeg4_version==1){
1238 int start_code, num; 1238 int start_code, num;
1239 start_code = (get_bits(&s->gb, 16)<<16) | get_bits(&s->gb, 16); 1239 start_code = (get_bits(&s->gb, 16)<<16) | get_bits(&s->gb, 16);
1240 if(start_code!=0x00000100){ 1240 if(start_code!=0x00000100){
1241 fprintf(stderr, "invalid startcode\n"); 1241 av_log(s->avctx, AV_LOG_ERROR, "invalid startcode\n");
1242 return -1; 1242 return -1;
1243 } 1243 }
1244 1244
1245 num= get_bits(&s->gb, 5); // frame number */ 1245 num= get_bits(&s->gb, 5); // frame number */
1246 } 1246 }
1247 1247
1248 s->pict_type = get_bits(&s->gb, 2) + 1; 1248 s->pict_type = get_bits(&s->gb, 2) + 1;
1249 if (s->pict_type != I_TYPE && 1249 if (s->pict_type != I_TYPE &&
1250 s->pict_type != P_TYPE){ 1250 s->pict_type != P_TYPE){
1251 fprintf(stderr, "invalid picture type\n"); 1251 av_log(s->avctx, AV_LOG_ERROR, "invalid picture type\n");
1252 return -1; 1252 return -1;
1253 } 1253 }
1254 #if 0 1254 #if 0
1255 { 1255 {
1256 static int had_i=0; 1256 static int had_i=0;
1258 if(!had_i) return -1; 1258 if(!had_i) return -1;
1259 } 1259 }
1260 #endif 1260 #endif
1261 s->qscale = get_bits(&s->gb, 5); 1261 s->qscale = get_bits(&s->gb, 5);
1262 if(s->qscale==0){ 1262 if(s->qscale==0){
1263 fprintf(stderr, "invalid qscale\n"); 1263 av_log(s->avctx, AV_LOG_ERROR, "invalid qscale\n");
1264 return -1; 1264 return -1;
1265 } 1265 }
1266 1266
1267 if (s->pict_type == I_TYPE) { 1267 if (s->pict_type == I_TYPE) {
1268 code = get_bits(&s->gb, 5); 1268 code = get_bits(&s->gb, 5);
1269 if(s->msmpeg4_version==1){ 1269 if(s->msmpeg4_version==1){
1270 if(code==0 || code>s->mb_height){ 1270 if(code==0 || code>s->mb_height){
1271 fprintf(stderr, "invalid slice height %d\n", code); 1271 av_log(s->avctx, AV_LOG_ERROR, "invalid slice height %d\n", code);
1272 return -1; 1272 return -1;
1273 } 1273 }
1274 1274
1275 s->slice_height = code; 1275 s->slice_height = code;
1276 }else{ 1276 }else{
1277 /* 0x17: one slice, 0x18: two slices, ... */ 1277 /* 0x17: one slice, 0x18: two slices, ... */
1278 if (code < 0x17){ 1278 if (code < 0x17){
1279 fprintf(stderr, "error, slice code was %X\n", code); 1279 av_log(s->avctx, AV_LOG_ERROR, "error, slice code was %X\n", code);
1280 return -1; 1280 return -1;
1281 } 1281 }
1282 1282
1283 s->slice_height = s->mb_height / (code - 0x16); 1283 s->slice_height = s->mb_height / (code - 0x16);
1284 } 1284 }
1312 s->inter_intra_pred= 0; 1312 s->inter_intra_pred= 0;
1313 break; 1313 break;
1314 } 1314 }
1315 s->no_rounding = 1; 1315 s->no_rounding = 1;
1316 if(s->avctx->debug&FF_DEBUG_PICT_INFO) 1316 if(s->avctx->debug&FF_DEBUG_PICT_INFO)
1317 printf("qscale:%d rlc:%d rl:%d dc:%d mbrl:%d slice:%d \n", 1317 av_log(s->avctx, AV_LOG_DEBUG, "qscale:%d rlc:%d rl:%d dc:%d mbrl:%d slice:%d \n",
1318 s->qscale, 1318 s->qscale,
1319 s->rl_chroma_table_index, 1319 s->rl_chroma_table_index,
1320 s->rl_table_index, 1320 s->rl_table_index,
1321 s->dc_table_index, 1321 s->dc_table_index,
1322 s->per_mb_rl_table, 1322 s->per_mb_rl_table,
1360 s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE); 1360 s->inter_intra_pred= (s->width*s->height < 320*240 && s->bit_rate<=II_BITRATE);
1361 break; 1361 break;
1362 } 1362 }
1363 1363
1364 if(s->avctx->debug&FF_DEBUG_PICT_INFO) 1364 if(s->avctx->debug&FF_DEBUG_PICT_INFO)
1365 printf("skip:%d rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d \n", 1365 av_log(s->avctx, AV_LOG_DEBUG, "skip:%d rl:%d rlc:%d dc:%d mv:%d mbrl:%d qp:%d \n",
1366 s->use_skip_mb_code, 1366 s->use_skip_mb_code,
1367 s->rl_table_index, 1367 s->rl_table_index,
1368 s->rl_chroma_table_index, 1368 s->rl_chroma_table_index,
1369 s->dc_table_index, 1369 s->dc_table_index,
1370 s->mv_table_index, 1370 s->mv_table_index,
1408 } 1408 }
1409 else if(left<length+8) 1409 else if(left<length+8)
1410 { 1410 {
1411 s->flipflop_rounding= 0; 1411 s->flipflop_rounding= 0;
1412 if(s->msmpeg4_version != 2) 1412 if(s->msmpeg4_version != 2)
1413 printf("ext header missing, %d left\n", left); 1413 av_log(s->avctx, AV_LOG_ERROR, "ext header missing, %d left\n", left);
1414 } 1414 }
1415 else 1415 else
1416 { 1416 {
1417 fprintf(stderr, "I frame too long, ignoring ext header\n"); 1417 av_log(s->avctx, AV_LOG_ERROR, "I frame too long, ignoring ext header\n");
1418 } 1418 }
1419 1419
1420 return 0; 1420 return 0;
1421 } 1421 }
1422 1422
1515 if(s->msmpeg4_version==2) 1515 if(s->msmpeg4_version==2)
1516 code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1); 1516 code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1);
1517 else 1517 else
1518 code = get_vlc2(&s->gb, v1_inter_cbpc_vlc.table, V1_INTER_CBPC_VLC_BITS, 3); 1518 code = get_vlc2(&s->gb, v1_inter_cbpc_vlc.table, V1_INTER_CBPC_VLC_BITS, 3);
1519 if(code<0 || code>7){ 1519 if(code<0 || code>7){
1520 fprintf(stderr, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y); 1520 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y);
1521 return -1; 1521 return -1;
1522 } 1522 }
1523 1523
1524 s->mb_intra = code >>2; 1524 s->mb_intra = code >>2;
1525 1525
1529 if(s->msmpeg4_version==2) 1529 if(s->msmpeg4_version==2)
1530 cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1); 1530 cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1);
1531 else 1531 else
1532 cbp= get_vlc2(&s->gb, v1_intra_cbpc_vlc.table, V1_INTRA_CBPC_VLC_BITS, 1); 1532 cbp= get_vlc2(&s->gb, v1_intra_cbpc_vlc.table, V1_INTRA_CBPC_VLC_BITS, 1);
1533 if(cbp<0 || cbp>3){ 1533 if(cbp<0 || cbp>3){
1534 fprintf(stderr, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y); 1534 av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1535 return -1; 1535 return -1;
1536 } 1536 }
1537 } 1537 }
1538 1538
1539 if (!s->mb_intra) { 1539 if (!s->mb_intra) {
1540 int mx, my, cbpy; 1540 int mx, my, cbpy;
1541 1541
1542 cbpy= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); 1542 cbpy= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1543 if(cbpy<0){ 1543 if(cbpy<0){
1544 fprintf(stderr, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y); 1544 av_log(s->avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1545 return -1; 1545 return -1;
1546 } 1546 }
1547 1547
1548 cbp|= cbpy<<2; 1548 cbp|= cbpy<<2;
1549 if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C; 1549 if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C;
1568 } 1568 }
1569 1569
1570 for (i = 0; i < 6; i++) { 1570 for (i = 0; i < 6; i++) {
1571 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0) 1571 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1572 { 1572 {
1573 fprintf(stderr,"\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i); 1573 av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1574 return -1; 1574 return -1;
1575 } 1575 }
1576 } 1576 }
1577 return 0; 1577 return 0;
1578 } 1578 }
1660 } 1660 }
1661 1661
1662 for (i = 0; i < 6; i++) { 1662 for (i = 0; i < 6; i++) {
1663 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0) 1663 if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1664 { 1664 {
1665 fprintf(stderr,"\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i); 1665 av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1666 return -1; 1666 return -1;
1667 } 1667 }
1668 } 1668 }
1669 1669
1670 return 0; 1670 return 0;
1686 /* DC coef */ 1686 /* DC coef */
1687 set_stat(ST_DC); 1687 set_stat(ST_DC);
1688 level = msmpeg4_decode_dc(s, n, &dc_pred_dir); 1688 level = msmpeg4_decode_dc(s, n, &dc_pred_dir);
1689 1689
1690 if (level < 0){ 1690 if (level < 0){
1691 fprintf(stderr, "dc overflow- block: %d qscale: %d//\n", n, s->qscale); 1691 av_log(s->avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, s->qscale);
1692 if(s->inter_intra_pred) level=0; 1692 if(s->inter_intra_pred) level=0;
1693 else return -1; 1693 else return -1;
1694 } 1694 }
1695 if (n < 4) { 1695 if (n < 4) {
1696 rl = &rl_table[s->rl_table_index]; 1696 rl = &rl_table[s->rl_table_index];
1697 if(level > 256*s->y_dc_scale){ 1697 if(level > 256*s->y_dc_scale){
1698 fprintf(stderr, "dc overflow+ L qscale: %d//\n", s->qscale); 1698 av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ L qscale: %d//\n", s->qscale);
1699 if(!s->inter_intra_pred) return -1; 1699 if(!s->inter_intra_pred) return -1;
1700 } 1700 }
1701 } else { 1701 } else {
1702 rl = &rl_table[3 + s->rl_chroma_table_index]; 1702 rl = &rl_table[3 + s->rl_chroma_table_index];
1703 if(level > 256*s->c_dc_scale){ 1703 if(level > 256*s->c_dc_scale){
1704 fprintf(stderr, "dc overflow+ C qscale: %d//\n", s->qscale); 1704 av_log(s->avctx, AV_LOG_ERROR, "dc overflow+ C qscale: %d//\n", s->qscale);
1705 if(!s->inter_intra_pred) return -1; 1705 if(!s->inter_intra_pred) return -1;
1706 } 1706 }
1707 } 1707 }
1708 block[0] = level; 1708 block[0] = level;
1709 1709
1768 int ll; 1768 int ll;
1769 //printf("ESC-3 %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y); 1769 //printf("ESC-3 %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y);
1770 if(s->qscale<8){ 1770 if(s->qscale<8){
1771 ll= SHOW_UBITS(re, &s->gb, 3); SKIP_BITS(re, &s->gb, 3); 1771 ll= SHOW_UBITS(re, &s->gb, 3); SKIP_BITS(re, &s->gb, 3);
1772 if(ll==0){ 1772 if(ll==0){
1773 if(SHOW_UBITS(re, &s->gb, 1)) printf("cool a new vlc code ,contact the ffmpeg developers and upload the file\n"); 1773 if(SHOW_UBITS(re, &s->gb, 1)) av_log(s->avctx, AV_LOG_ERROR, "cool a new vlc code ,contact the ffmpeg developers and upload the file\n");
1774 SKIP_BITS(re, &s->gb, 1); 1774 SKIP_BITS(re, &s->gb, 1);
1775 ll=8; 1775 ll=8;
1776 } 1776 }
1777 }else{ 1777 }else{
1778 ll=2; 1778 ll=2;
1889 if (i > 62){ 1889 if (i > 62){
1890 i-= 192; 1890 i-= 192;
1891 if(i&(~63)){ 1891 if(i&(~63)){
1892 const int left= s->gb.size_in_bits - get_bits_count(&s->gb); 1892 const int left= s->gb.size_in_bits - get_bits_count(&s->gb);
1893 if(((i+192 == 64 && level/qmul==-1) || s->error_resilience<=1) && left>=0){ 1893 if(((i+192 == 64 && level/qmul==-1) || s->error_resilience<=1) && left>=0){
1894 fprintf(stderr, "ignoring overflow at %d %d\n", s->mb_x, s->mb_y); 1894 av_log(s->avctx, AV_LOG_ERROR, "ignoring overflow at %d %d\n", s->mb_x, s->mb_y);
1895 break; 1895 break;
1896 }else{ 1896 }else{
1897 fprintf(stderr, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y); 1897 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
1898 return -1; 1898 return -1;
1899 } 1899 }
1900 } 1900 }
1901 1901
1902 block[scan_table[i]] = level; 1902 block[scan_table[i]] = level;
1938 level = get_vlc2(&s->gb, dc_lum_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); 1938 level = get_vlc2(&s->gb, dc_lum_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
1939 } else { 1939 } else {
1940 level = get_vlc2(&s->gb, dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3); 1940 level = get_vlc2(&s->gb, dc_chroma_vlc[s->dc_table_index].table, DC_VLC_BITS, 3);
1941 } 1941 }
1942 if (level < 0){ 1942 if (level < 0){
1943 fprintf(stderr, "illegal dc vlc\n"); 1943 av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
1944 return -1; 1944 return -1;
1945 } 1945 }
1946 1946
1947 if (level == DC_MAX) { 1947 if (level == DC_MAX) {
1948 level = get_bits(&s->gb, 8); 1948 level = get_bits(&s->gb, 8);
1985 1985
1986 mv = &mv_tables[s->mv_table_index]; 1986 mv = &mv_tables[s->mv_table_index];
1987 1987
1988 code = get_vlc2(&s->gb, mv->vlc.table, MV_VLC_BITS, 2); 1988 code = get_vlc2(&s->gb, mv->vlc.table, MV_VLC_BITS, 2);
1989 if (code < 0){ 1989 if (code < 0){
1990 fprintf(stderr, "illegal MV code at %d %d\n", s->mb_x, s->mb_y); 1990 av_log(s->avctx, AV_LOG_ERROR, "illegal MV code at %d %d\n", s->mb_x, s->mb_y);
1991 return -1; 1991 return -1;
1992 } 1992 }
1993 if (code == mv->n) { 1993 if (code == mv->n) {
1994 //printf("MV ESC %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y); 1994 //printf("MV ESC %X at %d %d\n", show_bits(&s->gb, 24), s->mb_x, s->mb_y);
1995 mx = get_bits(&s->gb, 6); 1995 mx = get_bits(&s->gb, 6);