|
|
|
@ -47,29 +47,29 @@ av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation, |
|
|
|
|
int idct_permutation_type) |
|
|
|
|
enum idct_permutation_type perm_type) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
if (ARCH_X86) |
|
|
|
|
if (ff_init_scantable_permutation_x86(idct_permutation, |
|
|
|
|
idct_permutation_type)) |
|
|
|
|
perm_type)) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
switch (idct_permutation_type) { |
|
|
|
|
case FF_NO_IDCT_PERM: |
|
|
|
|
switch (perm_type) { |
|
|
|
|
case FF_IDCT_PERM_NONE: |
|
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
|
idct_permutation[i] = i; |
|
|
|
|
break; |
|
|
|
|
case FF_LIBMPEG2_IDCT_PERM: |
|
|
|
|
case FF_IDCT_PERM_LIBMPEG2: |
|
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
|
idct_permutation[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2); |
|
|
|
|
break; |
|
|
|
|
case FF_TRANSPOSE_IDCT_PERM: |
|
|
|
|
case FF_IDCT_PERM_TRANSPOSE: |
|
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
|
idct_permutation[i] = ((i & 7) << 3) | (i >> 3); |
|
|
|
|
break; |
|
|
|
|
case FF_PARTTRANS_IDCT_PERM: |
|
|
|
|
case FF_IDCT_PERM_PARTTRANS: |
|
|
|
|
for (i = 0; i < 64; i++) |
|
|
|
|
idct_permutation[i] = (i & 0x24) | ((i & 3) << 3) | ((i >> 3) & 3); |
|
|
|
|
break; |
|
|
|
@ -253,44 +253,44 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) |
|
|
|
|
c->idct_put = ff_jref_idct4_put; |
|
|
|
|
c->idct_add = ff_jref_idct4_add; |
|
|
|
|
c->idct = ff_j_rev_dct4; |
|
|
|
|
c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_NONE; |
|
|
|
|
} else if (avctx->lowres==2) { |
|
|
|
|
c->idct_put = ff_jref_idct2_put; |
|
|
|
|
c->idct_add = ff_jref_idct2_add; |
|
|
|
|
c->idct = ff_j_rev_dct2; |
|
|
|
|
c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_NONE; |
|
|
|
|
} else if (avctx->lowres==3) { |
|
|
|
|
c->idct_put = ff_jref_idct1_put; |
|
|
|
|
c->idct_add = ff_jref_idct1_add; |
|
|
|
|
c->idct = ff_j_rev_dct1; |
|
|
|
|
c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_NONE; |
|
|
|
|
} else { |
|
|
|
|
if (avctx->bits_per_raw_sample == 10) { |
|
|
|
|
c->idct_put = ff_simple_idct_put_10; |
|
|
|
|
c->idct_add = ff_simple_idct_add_10; |
|
|
|
|
c->idct = ff_simple_idct_10; |
|
|
|
|
c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_NONE; |
|
|
|
|
} else if (avctx->bits_per_raw_sample == 12) { |
|
|
|
|
c->idct_put = ff_simple_idct_put_12; |
|
|
|
|
c->idct_add = ff_simple_idct_add_12; |
|
|
|
|
c->idct = ff_simple_idct_12; |
|
|
|
|
c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_NONE; |
|
|
|
|
} else { |
|
|
|
|
if (avctx->idct_algo == FF_IDCT_INT) { |
|
|
|
|
c->idct_put = jref_idct_put; |
|
|
|
|
c->idct_add = jref_idct_add; |
|
|
|
|
c->idct = ff_j_rev_dct; |
|
|
|
|
c->idct_permutation_type = FF_LIBMPEG2_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_LIBMPEG2; |
|
|
|
|
} else if (avctx->idct_algo == FF_IDCT_FAAN) { |
|
|
|
|
c->idct_put = ff_faanidct_put; |
|
|
|
|
c->idct_add = ff_faanidct_add; |
|
|
|
|
c->idct = ff_faanidct; |
|
|
|
|
c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_NONE; |
|
|
|
|
} else { // accurate/default
|
|
|
|
|
c->idct_put = ff_simple_idct_put_8; |
|
|
|
|
c->idct_add = ff_simple_idct_add_8; |
|
|
|
|
c->idct = ff_simple_idct_8; |
|
|
|
|
c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
|
|
|
c->perm_type = FF_IDCT_PERM_NONE; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -309,5 +309,5 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) |
|
|
|
|
ff_idctdsp_init_x86(c, avctx, high_bit_depth); |
|
|
|
|
|
|
|
|
|
ff_init_scantable_permutation(c->idct_permutation, |
|
|
|
|
c->idct_permutation_type); |
|
|
|
|
c->perm_type); |
|
|
|
|
} |
|
|
|
|