mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
proresenc: Drop unnecessary DCT permutation bits
No permutation is necessary for the FDCT.
This commit is contained in:
parent
b23650491f
commit
d6acefe058
@ -86,8 +86,5 @@ av_cold void ff_proresdsp_init(ProresDSPContext *dsp)
|
|||||||
#endif
|
#endif
|
||||||
#if CONFIG_PRORES_ENCODER
|
#if CONFIG_PRORES_ENCODER
|
||||||
dsp->fdct = prores_fdct_c;
|
dsp->fdct = prores_fdct_c;
|
||||||
dsp->dct_permutation_type = FF_NO_IDCT_PERM;
|
|
||||||
ff_init_scantable_permutation(dsp->dct_permutation,
|
|
||||||
dsp->dct_permutation_type);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -30,8 +30,6 @@
|
|||||||
typedef struct ProresDSPContext {
|
typedef struct ProresDSPContext {
|
||||||
int idct_permutation_type;
|
int idct_permutation_type;
|
||||||
uint8_t idct_permutation[64];
|
uint8_t idct_permutation[64];
|
||||||
int dct_permutation_type;
|
|
||||||
uint8_t dct_permutation[64];
|
|
||||||
void (* idct_put) (uint16_t *out, int linesize, int16_t *block, const int16_t *qmat);
|
void (* idct_put) (uint16_t *out, int linesize, int16_t *block, const int16_t *qmat);
|
||||||
void (* fdct) (const uint16_t *src, int linesize, int16_t *block);
|
void (* fdct) (const uint16_t *src, int linesize, int16_t *block);
|
||||||
} ProresDSPContext;
|
} ProresDSPContext;
|
||||||
|
@ -190,9 +190,9 @@ typedef struct ProresContext {
|
|||||||
int16_t quants[MAX_STORED_Q][64];
|
int16_t quants[MAX_STORED_Q][64];
|
||||||
int16_t custom_q[64];
|
int16_t custom_q[64];
|
||||||
const uint8_t *quant_mat;
|
const uint8_t *quant_mat;
|
||||||
|
const uint8_t *scantable;
|
||||||
|
|
||||||
ProresDSPContext dsp;
|
ProresDSPContext dsp;
|
||||||
ScanTable scantable;
|
|
||||||
|
|
||||||
int mb_width, mb_height;
|
int mb_width, mb_height;
|
||||||
int mbs_per_slice;
|
int mbs_per_slice;
|
||||||
@ -426,7 +426,7 @@ static int encode_slice_plane(ProresContext *ctx, PutBitContext *pb,
|
|||||||
|
|
||||||
encode_dcs(pb, blocks, blocks_per_slice, qmat[0]);
|
encode_dcs(pb, blocks, blocks_per_slice, qmat[0]);
|
||||||
encode_acs(pb, blocks, blocks_per_slice, plane_size_factor,
|
encode_acs(pb, blocks, blocks_per_slice, plane_size_factor,
|
||||||
ctx->scantable.permutated, qmat);
|
ctx->scantable, qmat);
|
||||||
flush_put_bits(pb);
|
flush_put_bits(pb);
|
||||||
|
|
||||||
return (put_bits_count(pb) - saved_pos) >> 3;
|
return (put_bits_count(pb) - saved_pos) >> 3;
|
||||||
@ -673,7 +673,7 @@ static int estimate_slice_plane(ProresContext *ctx, int *error, int plane,
|
|||||||
|
|
||||||
bits = estimate_dcs(error, td->blocks[plane], blocks_per_slice, qmat[0]);
|
bits = estimate_dcs(error, td->blocks[plane], blocks_per_slice, qmat[0]);
|
||||||
bits += estimate_acs(error, td->blocks[plane], blocks_per_slice,
|
bits += estimate_acs(error, td->blocks[plane], blocks_per_slice,
|
||||||
plane_size_factor, ctx->scantable.permutated, qmat);
|
plane_size_factor, ctx->scantable, qmat);
|
||||||
|
|
||||||
return FFALIGN(bits, 8);
|
return FFALIGN(bits, 8);
|
||||||
}
|
}
|
||||||
@ -1080,9 +1080,8 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
ff_proresdsp_init(&ctx->dsp);
|
ff_proresdsp_init(&ctx->dsp);
|
||||||
ff_init_scantable(ctx->dsp.dct_permutation, &ctx->scantable,
|
ctx->scantable = interlaced ? ff_prores_interlaced_scan
|
||||||
interlaced ? ff_prores_interlaced_scan
|
: ff_prores_progressive_scan;
|
||||||
: ff_prores_progressive_scan);
|
|
||||||
|
|
||||||
mps = ctx->mbs_per_slice;
|
mps = ctx->mbs_per_slice;
|
||||||
if (mps & (mps - 1)) {
|
if (mps & (mps - 1)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user