MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / msmpeg4_decode_dc

Function msmpeg4_decode_dc

libavcodec/msmpeg4dec.c:558–610  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

556}
557
558static 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
612int ff_msmpeg4_decode_block(MSMP4DecContext *const ms, int16_t * block,
613 int n, int coded, const uint8_t *scan_table)

Callers 1

ff_msmpeg4_decode_blockFunction · 0.85

Calls 6

get_vlc2Function · 0.85
av_logFunction · 0.85
get_bits1Function · 0.85
msmpeg4v1_pred_dcFunction · 0.85
ff_msmpeg4_pred_dcFunction · 0.85
get_bitsFunction · 0.70

Tested by

no test coverage detected