None of the encoder bits are arch-optimized.tags/n2.2-rc1
| @@ -291,7 +291,7 @@ OBJS-$(CONFIG_PNG_ENCODER) += png.o pngenc.o | |||||
| OBJS-$(CONFIG_PPM_DECODER) += pnmdec.o pnm.o | OBJS-$(CONFIG_PPM_DECODER) += pnmdec.o pnm.o | ||||
| OBJS-$(CONFIG_PPM_ENCODER) += pnmenc.o | OBJS-$(CONFIG_PPM_ENCODER) += pnmenc.o | ||||
| OBJS-$(CONFIG_PRORES_DECODER) += proresdec.o proresdata.o proresdsp.o | OBJS-$(CONFIG_PRORES_DECODER) += proresdec.o proresdata.o proresdsp.o | ||||
| OBJS-$(CONFIG_PRORES_ENCODER) += proresenc.o proresdata.o proresdsp.o | |||||
| OBJS-$(CONFIG_PRORES_ENCODER) += proresenc.o proresdata.o | |||||
| OBJS-$(CONFIG_PTX_DECODER) += ptx.o | OBJS-$(CONFIG_PTX_DECODER) += ptx.o | ||||
| OBJS-$(CONFIG_QCELP_DECODER) += qcelpdec.o \ | OBJS-$(CONFIG_QCELP_DECODER) += qcelpdec.o \ | ||||
| celp_filters.o acelp_vectors.o \ | celp_filters.o acelp_vectors.o \ | ||||
| @@ -20,9 +20,9 @@ | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
| */ | */ | ||||
| #include "config.h" | |||||
| #include "libavutil/attributes.h" | #include "libavutil/attributes.h" | ||||
| #include "libavutil/common.h" | #include "libavutil/common.h" | ||||
| #include "dct.h" | |||||
| #include "dsputil.h" | #include "dsputil.h" | ||||
| #include "proresdsp.h" | #include "proresdsp.h" | ||||
| #include "simple_idct.h" | #include "simple_idct.h" | ||||
| @@ -33,7 +33,6 @@ | |||||
| #define CLIP_AND_BIAS(x) (av_clip((x) + BIAS, CLIP_MIN, CLIP_MAX)) | #define CLIP_AND_BIAS(x) (av_clip((x) + BIAS, CLIP_MIN, CLIP_MAX)) | ||||
| #if CONFIG_PRORES_DECODER | |||||
| /** | /** | ||||
| * Add bias value, clamp and output pixels of a slice | * Add bias value, clamp and output pixels of a slice | ||||
| */ | */ | ||||
| @@ -55,26 +54,9 @@ static void prores_idct_put_c(uint16_t *out, int linesize, int16_t *block, const | |||||
| ff_prores_idct(block, qmat); | ff_prores_idct(block, qmat); | ||||
| put_pixels(out, linesize >> 1, block); | put_pixels(out, linesize >> 1, block); | ||||
| } | } | ||||
| #endif | |||||
| #if CONFIG_PRORES_ENCODER | |||||
| static void prores_fdct_c(const uint16_t *src, int linesize, int16_t *block) | |||||
| { | |||||
| int x, y; | |||||
| const uint16_t *tsrc = src; | |||||
| for (y = 0; y < 8; y++) { | |||||
| for (x = 0; x < 8; x++) | |||||
| block[y * 8 + x] = tsrc[x]; | |||||
| tsrc += linesize >> 1; | |||||
| } | |||||
| ff_jpeg_fdct_islow_10(block); | |||||
| } | |||||
| #endif | |||||
| av_cold void ff_proresdsp_init(ProresDSPContext *dsp) | av_cold void ff_proresdsp_init(ProresDSPContext *dsp) | ||||
| { | { | ||||
| #if CONFIG_PRORES_DECODER | |||||
| dsp->idct_put = prores_idct_put_c; | dsp->idct_put = prores_idct_put_c; | ||||
| dsp->idct_permutation_type = FF_NO_IDCT_PERM; | dsp->idct_permutation_type = FF_NO_IDCT_PERM; | ||||
| @@ -83,8 +65,4 @@ av_cold void ff_proresdsp_init(ProresDSPContext *dsp) | |||||
| ff_init_scantable_permutation(dsp->idct_permutation, | ff_init_scantable_permutation(dsp->idct_permutation, | ||||
| dsp->idct_permutation_type); | dsp->idct_permutation_type); | ||||
| #endif | |||||
| #if CONFIG_PRORES_ENCODER | |||||
| dsp->fdct = prores_fdct_c; | |||||
| #endif | |||||
| } | } | ||||
| @@ -31,7 +31,6 @@ typedef struct ProresDSPContext { | |||||
| int idct_permutation_type; | int idct_permutation_type; | ||||
| uint8_t idct_permutation[64]; | uint8_t idct_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); | |||||
| } ProresDSPContext; | } ProresDSPContext; | ||||
| void ff_proresdsp_init(ProresDSPContext *dsp); | void ff_proresdsp_init(ProresDSPContext *dsp); | ||||
| @@ -23,11 +23,11 @@ | |||||
| #include "libavutil/opt.h" | #include "libavutil/opt.h" | ||||
| #include "libavutil/pixdesc.h" | #include "libavutil/pixdesc.h" | ||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| #include "dct.h" | |||||
| #include "dsputil.h" | #include "dsputil.h" | ||||
| #include "put_bits.h" | #include "put_bits.h" | ||||
| #include "bytestream.h" | #include "bytestream.h" | ||||
| #include "internal.h" | #include "internal.h" | ||||
| #include "proresdsp.h" | |||||
| #include "proresdata.h" | #include "proresdata.h" | ||||
| #define CFACTOR_Y422 2 | #define CFACTOR_Y422 2 | ||||
| @@ -192,7 +192,7 @@ typedef struct ProresContext { | |||||
| const uint8_t *quant_mat; | const uint8_t *quant_mat; | ||||
| const uint8_t *scantable; | const uint8_t *scantable; | ||||
| ProresDSPContext dsp; | |||||
| void (* fdct) (const uint16_t *src, int linesize, int16_t *block); | |||||
| int mb_width, mb_height; | int mb_width, mb_height; | ||||
| int mbs_per_slice; | int mbs_per_slice; | ||||
| @@ -261,27 +261,27 @@ static void get_slice_data(ProresContext *ctx, const uint16_t *src, | |||||
| mb_width * sizeof(*emu_buf)); | mb_width * sizeof(*emu_buf)); | ||||
| } | } | ||||
| if (!is_chroma) { | if (!is_chroma) { | ||||
| ctx->dsp.fdct(esrc, elinesize, blocks); | |||||
| ctx->fdct(esrc, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| if (blocks_per_mb > 2) { | if (blocks_per_mb > 2) { | ||||
| ctx->dsp.fdct(esrc + 8, elinesize, blocks); | |||||
| ctx->fdct(esrc + 8, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| } | } | ||||
| ctx->dsp.fdct(esrc + elinesize * 4, elinesize, blocks); | |||||
| ctx->fdct(esrc + elinesize * 4, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| if (blocks_per_mb > 2) { | if (blocks_per_mb > 2) { | ||||
| ctx->dsp.fdct(esrc + elinesize * 4 + 8, elinesize, blocks); | |||||
| ctx->fdct(esrc + elinesize * 4 + 8, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| } | } | ||||
| } else { | } else { | ||||
| ctx->dsp.fdct(esrc, elinesize, blocks); | |||||
| ctx->fdct(esrc, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| ctx->dsp.fdct(esrc + elinesize * 4, elinesize, blocks); | |||||
| ctx->fdct(esrc + elinesize * 4, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| if (blocks_per_mb > 2) { | if (blocks_per_mb > 2) { | ||||
| ctx->dsp.fdct(esrc + 8, elinesize, blocks); | |||||
| ctx->fdct(esrc + 8, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| ctx->dsp.fdct(esrc + elinesize * 4 + 8, elinesize, blocks); | |||||
| ctx->fdct(esrc + elinesize * 4 + 8, elinesize, blocks); | |||||
| blocks += 64; | blocks += 64; | ||||
| } | } | ||||
| } | } | ||||
| @@ -1066,6 +1066,19 @@ static av_cold int encode_close(AVCodecContext *avctx) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| static void prores_fdct(const uint16_t *src, int linesize, int16_t *block) | |||||
| { | |||||
| int x, y; | |||||
| const uint16_t *tsrc = src; | |||||
| for (y = 0; y < 8; y++) { | |||||
| for (x = 0; x < 8; x++) | |||||
| block[y * 8 + x] = tsrc[x]; | |||||
| tsrc += linesize >> 1; | |||||
| } | |||||
| ff_jpeg_fdct_islow_10(block); | |||||
| } | |||||
| static av_cold int encode_init(AVCodecContext *avctx) | static av_cold int encode_init(AVCodecContext *avctx) | ||||
| { | { | ||||
| ProresContext *ctx = avctx->priv_data; | ProresContext *ctx = avctx->priv_data; | ||||
| @@ -1079,7 +1092,7 @@ static av_cold int encode_init(AVCodecContext *avctx) | |||||
| if (!avctx->coded_frame) | if (!avctx->coded_frame) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| ff_proresdsp_init(&ctx->dsp); | |||||
| ctx->fdct = prores_fdct; | |||||
| ctx->scantable = interlaced ? ff_prores_interlaced_scan | ctx->scantable = interlaced ? ff_prores_interlaced_scan | ||||
| : ff_prores_progressive_scan; | : ff_prores_progressive_scan; | ||||