History

avcodec/intrax8: Don't pretend to need more than one int16_t[64]

Intrax8 needs only a single block.

Andreas Rheinhardt committed 1 year ago

Commit aa4a5b11 parent 25e4bae4 files · +12 −12Browse files

Unified · Split

4 files
  1. libavcodec/intrax8.c +8 −8
  2. libavcodec/intrax8.h +2 −2
  3. libavcodec/vc1dec.c +1 −1
  4. libavcodec/wmv2dec.c +1 −1
libavcodec/intrax8.c+8−8
@@ -437,7 +437,7 @@ static void x8_ac_compensation(IntraX8Context *const w, const int direction, · 436 unmodified lines
437 const int dc_level)437 const int dc_level)
438{438{
439 int t;439 int t;
440#define B(x,y) w->block[0][w->idct_permutation[(x) + (y) * 8]]440#define B(x,y) w->block[w->idct_permutation[(x) + (y) * 8]]
441#define T(x) ((x) * dc_level + 0x8000) >> 16;441#define T(x) ((x) * dc_level + 0x8000) >> 16;
442 switch (direction) {442 switch (direction) {
443 case 0:443 case 0:
@@ -530,7 +530,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma) · 86 unmodified lines
530 int sign;530 int sign;
531 531
532 av_assert2(w->orient < 12);532 av_assert2(w->orient < 12);
533 w->bdsp.clear_block(w->block[0]);533 w->bdsp.clear_block(w->block);
534 534
535 if (chroma)535 if (chroma)
536 dc_mode = 2;536 dc_mode = 2;
@@ -591,7 +591,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma) · 54 unmodified lines
591 if (use_quant_matrix)591 if (use_quant_matrix)
592 level = (level * quant_table[pos]) >> 8;592 level = (level * quant_table[pos]) >> 8;
593 593
594 w->block[0][scantable[pos]] = level;594 w->block[scantable[pos]] = level;
595 } while (!final);595 } while (!final);
596 } else { // DC only596 } else { // DC only
597 if (w->flat_dc && ((unsigned) (dc_level + 1)) < 3) { // [-1; 1]597 if (w->flat_dc && ((unsigned) (dc_level + 1)) < 3) { // [-1; 1]
@@ -613,9 +613,9 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma) · 15 unmodified lines
613 zeros_only = dc_level == 0;613 zeros_only = dc_level == 0;
614 }614 }
615 if (!chroma)615 if (!chroma)
616 w->block[0][0] = dc_level * w->quant;616 w->block[0] = dc_level * w->quant;
617 else617 else
618 w->block[0][0] = dc_level * w->quant_dc_chroma;618 w->block[0] = dc_level * w->quant_dc_chroma;
619 619
620 // there is !zero_only check in the original, but dc_level check is enough620 // there is !zero_only check in the original, but dc_level check is enough
621 if ((unsigned int) (dc_level + 1) >= 3 && (w->edges & 3) != 3) {621 if ((unsigned int) (dc_level + 1) >= 3 && (w->edges & 3) != 3) {
@@ -624,7 +624,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma) · 2 unmodified lines
624 * -> 01'10' 10'10' 00'00' 00'01' 01'11' 11'00 => 0x6A017C */624 * -> 01'10' 10'10' 00'00' 00'01' 01'11' 11'00 => 0x6A017C */
625 direction = (0x6A017C >> (w->orient * 2)) & 3;625 direction = (0x6A017C >> (w->orient * 2)) & 3;
626 if (direction != 3) {626 if (direction != 3) {
627 x8_ac_compensation(w, direction, w->block[0][0]);627 x8_ac_compensation(w, direction, w->block[0]);
628 }628 }
629 }629 }
630 630
@@ -639,7 +639,7 @@ static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma) · 8 unmodified lines
639 if (!zeros_only)639 if (!zeros_only)
640 w->wdsp.idct_add(w->dest[chroma],640 w->wdsp.idct_add(w->dest[chroma],
641 w->frame->linesize[!!chroma],641 w->frame->linesize[!!chroma],
642 w->block[0]);642 w->block);
643 643
644block_placed:644block_placed:
645 if (!chroma)645 if (!chroma)
@@ -678,7 +678,7 @@ static void x8_init_block_index(IntraX8Context *w, AVFrame *frame) · 32 unmodified lines
678 678
679av_cold int ff_intrax8_common_init(AVCodecContext *avctx,679av_cold int ff_intrax8_common_init(AVCodecContext *avctx,
680 IntraX8Context *w,680 IntraX8Context *w,
681 int16_t (*block)[64],681 int16_t block[64],
682 int mb_width, int mb_height)682 int mb_width, int mb_height)
683{683{
684 static AVOnce init_static_once = AV_ONCE_INIT;684 static AVOnce init_static_once = AV_ONCE_INIT;
libavcodec/intrax8.h+2−2
@@ -38,7 +38,7 @@ typedef struct IntraX8Context { · 37 unmodified lines
38 WMV2DSPContext wdsp;38 WMV2DSPContext wdsp;
39 uint8_t idct_permutation[64];39 uint8_t idct_permutation[64];
40 AVCodecContext *avctx;40 AVCodecContext *avctx;
41 int16_t (*block)[64];41 int16_t *block;
42 42
43 // set by the caller codec43 // set by the caller codec
44 IntraX8DSPContext dsp;44 IntraX8DSPContext dsp;
@@ -82,7 +82,7 @@ typedef struct IntraX8Context { · 37 unmodified lines
82 */82 */
83int ff_intrax8_common_init(AVCodecContext *avctx,83int ff_intrax8_common_init(AVCodecContext *avctx,
84 IntraX8Context *w,84 IntraX8Context *w,
85 int16_t (*block)[64],85 int16_t block[64],
86 int mb_width, int mb_height);86 int mb_width, int mb_height);
87 87
88/**88/**
libavcodec/vc1dec.c+1−1
@@ -420,7 +420,7 @@ static av_cold int vc1_decode_init_alloc_tables(VC1Context *v) · 419 unmodified lines
420 return AVERROR(ENOMEM);420 return AVERROR(ENOMEM);
421 }421 }
422 422
423 ret = ff_intrax8_common_init(s->avctx, &v->x8, s->block,423 ret = ff_intrax8_common_init(s->avctx, &v->x8, s->block[0],
424 s->mb_width, s->mb_height);424 s->mb_width, s->mb_height);
425 if (ret < 0)425 if (ret < 0)
426 return ret;426 return ret;
libavcodec/wmv2dec.c+1−1
@@ -581,7 +581,7 @@ static av_cold int wmv2_decode_init(AVCodecContext *avctx) · 580 unmodified lines
581 581
582 decode_ext_header(w);582 decode_ext_header(w);
583 583
584 return ff_intrax8_common_init(avctx, &w->x8, s->block,584 return ff_intrax8_common_init(avctx, &w->x8, s->block[0],
585 s->mb_width, s->mb_height);585 s->mb_width, s->mb_height);
586}586}
587 587

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t