| 610 | } |
| 611 | |
| 612 | int ff_msmpeg4_decode_block(MSMP4DecContext *const ms, int16_t * block, |
| 613 | int n, int coded, const uint8_t *scan_table) |
| 614 | { |
| 615 | H263DecContext *const h = &ms->h; |
| 616 | int level, i, last, run, run_diff; |
| 617 | int dc_pred_dir = -1; //unused but its passed around, so it needs to be initialized |
| 618 | const RLTable *rl; |
| 619 | const RL_VLC_ELEM *rl_vlc; |
| 620 | int qmul, qadd; |
| 621 | |
| 622 | if (h->c.mb_intra) { |
| 623 | qmul=1; |
| 624 | qadd=0; |
| 625 | |
| 626 | /* DC coef */ |
| 627 | level = msmpeg4_decode_dc(ms, n, &dc_pred_dir); |
| 628 | |
| 629 | if (level < 0){ |
| 630 | av_log(h->c.avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, h->c.qscale); |
| 631 | if (h->c.inter_intra_pred) |
| 632 | level = 0; |
| 633 | } |
| 634 | if (n < 4) { |
| 635 | rl = &ff_rl_table[ms->rl_table_index]; |
| 636 | if (level > 256 * h->c.y_dc_scale) { |
| 637 | av_log(h->c.avctx, AV_LOG_ERROR, "dc overflow+ L qscale: %d//\n", h->c.qscale); |
| 638 | if (!h->c.inter_intra_pred) |
| 639 | return -1; |
| 640 | } |
| 641 | } else { |
| 642 | rl = &ff_rl_table[3 + ms->rl_chroma_table_index]; |
| 643 | if (level > 256 * h->c.c_dc_scale) { |
| 644 | av_log(h->c.avctx, AV_LOG_ERROR, "dc overflow+ C qscale: %d//\n", h->c.qscale); |
| 645 | if (!h->c.inter_intra_pred) |
| 646 | return -1; |
| 647 | } |
| 648 | } |
| 649 | block[0] = level; |
| 650 | |
| 651 | run_diff = h->c.msmpeg4_version >= MSMP4_WMV1; |
| 652 | i = 0; |
| 653 | if (!coded) { |
| 654 | goto not_coded; |
| 655 | } |
| 656 | if (h->c.ac_pred) { |
| 657 | if (dc_pred_dir == 0) |
| 658 | scan_table = h->permutated_intra_v_scantable; /* left */ |
| 659 | else |
| 660 | scan_table = h->permutated_intra_h_scantable; /* top */ |
| 661 | } else { |
| 662 | scan_table = h->c.intra_scantable.permutated; |
| 663 | } |
| 664 | rl_vlc= rl->rl_vlc[0]; |
| 665 | } else { |
| 666 | qmul = h->c.qscale << 1; |
| 667 | qadd = (h->c.qscale - 1) | 1; |
| 668 | i = -1; |
| 669 | rl = &ff_rl_table[3 + ms->rl_table_index]; |
no test coverage detected