diff options
author | Diego Biurrun <diego@biurrun.de> | 2014-02-27 14:49:55 -0800 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2014-02-28 11:19:47 +0100 |
commit | a55546f48d55e3d1155840541b2be5f4f8cf18ab (patch) | |
tree | 9f73c19aa9d613a66700ba1656a347d48f13a7de /libavcodec/proresenc.c | |
parent | 92e598a57a7ce4b8ac9ea56274af39f5fd888311 (diff) | |
download | ffmpeg-a55546f48d55e3d1155840541b2be5f4f8cf18ab.tar.gz |
proresenc: Reuse proper dsputil infrastructure for FDCT
Diffstat (limited to 'libavcodec/proresenc.c')
-rw-r--r-- | libavcodec/proresenc.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/libavcodec/proresenc.c b/libavcodec/proresenc.c index d7d4af0158..51e3783e50 100644 --- a/libavcodec/proresenc.c +++ b/libavcodec/proresenc.c @@ -192,7 +192,9 @@ typedef struct ProresContext { const uint8_t *quant_mat; const uint8_t *scantable; - void (* fdct) (const uint16_t *src, int linesize, int16_t *block); + void (* fdct)(DSPContext *dsp, const uint16_t *src, + int linesize, int16_t *block); + DSPContext dsp; int mb_width, mb_height; int mbs_per_slice; @@ -261,27 +263,27 @@ static void get_slice_data(ProresContext *ctx, const uint16_t *src, mb_width * sizeof(*emu_buf)); } if (!is_chroma) { - ctx->fdct(esrc, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc, elinesize, blocks); blocks += 64; if (blocks_per_mb > 2) { - ctx->fdct(esrc + 8, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc + 8, elinesize, blocks); blocks += 64; } - ctx->fdct(esrc + elinesize * 4, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc + elinesize * 4, elinesize, blocks); blocks += 64; if (blocks_per_mb > 2) { - ctx->fdct(esrc + elinesize * 4 + 8, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc + elinesize * 4 + 8, elinesize, blocks); blocks += 64; } } else { - ctx->fdct(esrc, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc, elinesize, blocks); blocks += 64; - ctx->fdct(esrc + elinesize * 4, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc + elinesize * 4, elinesize, blocks); blocks += 64; if (blocks_per_mb > 2) { - ctx->fdct(esrc + 8, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc + 8, elinesize, blocks); blocks += 64; - ctx->fdct(esrc + elinesize * 4 + 8, elinesize, blocks); + ctx->fdct(&ctx->dsp, esrc + elinesize * 4 + 8, elinesize, blocks); blocks += 64; } } @@ -1066,7 +1068,8 @@ static av_cold int encode_close(AVCodecContext *avctx) return 0; } -static void prores_fdct(const uint16_t *src, int linesize, int16_t *block) +static void prores_fdct(DSPContext *dsp, const uint16_t *src, + int linesize, int16_t *block) { int x, y; const uint16_t *tsrc = src; @@ -1076,7 +1079,7 @@ static void prores_fdct(const uint16_t *src, int linesize, int16_t *block) block[y * 8 + x] = tsrc[x]; tsrc += linesize >> 1; } - ff_jpeg_fdct_islow_10(block); + dsp->fdct(block); } static av_cold int encode_init(AVCodecContext *avctx) @@ -1095,6 +1098,7 @@ static av_cold int encode_init(AVCodecContext *avctx) ctx->fdct = prores_fdct; ctx->scantable = interlaced ? ff_prores_interlaced_scan : ff_prores_progressive_scan; + ff_dsputil_init(&ctx->dsp, avctx); mps = ctx->mbs_per_slice; if (mps & (mps - 1)) { |