| 556 | } |
| 557 | |
| 558 | static int msmpeg4_decode_dc(MSMP4DecContext *const ms, int n, int *dir_ptr) |
| 559 | { |
| 560 | H263DecContext *const h = &ms->h; |
| 561 | int level, pred; |
| 562 | |
| 563 | if (h->c.msmpeg4_version <= MSMP4_V2) { |
| 564 | if (n < 4) { |
| 565 | level = get_vlc2(&h->gb, v2_dc_lum_vlc, MSMP4_DC_VLC_BITS, 3); |
| 566 | } else { |
| 567 | level = get_vlc2(&h->gb, v2_dc_chroma_vlc, MSMP4_DC_VLC_BITS, 3); |
| 568 | } |
| 569 | if (level < 0) { |
| 570 | av_log(h->c.avctx, AV_LOG_ERROR, "illegal dc vlc\n"); |
| 571 | *dir_ptr = 0; |
| 572 | return -1; |
| 573 | } |
| 574 | level-=256; |
| 575 | } else { |
| 576 | level = get_vlc2(&h->gb, ff_msmp4_dc_vlc[ms->dc_table_index][n >= 4], |
| 577 | MSMP4_DC_VLC_BITS, 3); |
| 578 | |
| 579 | if (level == DC_MAX) { |
| 580 | level = get_bits(&h->gb, 8); |
| 581 | if (get_bits1(&h->gb)) |
| 582 | level = -level; |
| 583 | } else if (level != 0) { |
| 584 | if (get_bits1(&h->gb)) |
| 585 | level = -level; |
| 586 | } |
| 587 | } |
| 588 | |
| 589 | if (h->c.msmpeg4_version == MSMP4_V1) { |
| 590 | int32_t *dc_val; |
| 591 | pred = msmpeg4v1_pred_dc(h, n, &dc_val); |
| 592 | level += pred; |
| 593 | |
| 594 | /* update predictor */ |
| 595 | *dc_val= level; |
| 596 | }else{ |
| 597 | int16_t *dc_val; |
| 598 | pred = ff_msmpeg4_pred_dc(&h->c, n, &dc_val, dir_ptr); |
| 599 | level += pred; |
| 600 | |
| 601 | /* update predictor */ |
| 602 | if (n < 4) { |
| 603 | *dc_val = level * h->c.y_dc_scale; |
| 604 | } else { |
| 605 | *dc_val = level * h->c.c_dc_scale; |
| 606 | } |
| 607 | } |
| 608 | |
| 609 | return level; |
| 610 | } |
| 611 | |
| 612 | int ff_msmpeg4_decode_block(MSMP4DecContext *const ms, int16_t * block, |
| 613 | int n, int coded, const uint8_t *scan_table) |
no test coverage detected