Browse Source

proresenc: Reuse proper dsputil infrastructure for FDCT

tags/n2.2-rc1
Diego Biurrun 11 years ago
parent
commit
a55546f48d
1 changed files with 15 additions and 11 deletions
  1. +15
    -11
      libavcodec/proresenc.c

+ 15
- 11
libavcodec/proresenc.c View File

@@ -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)) {


Loading…
Cancel
Save