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