For all encoders and all decoders except MPEG-4 the unquantize functions to use don't change at all and therefore needn't be kept in the context. So discard them after setting them; for MPEG-4, the functions get assigned on a per-frame basis. Decoders not using any unquantize functions (H.261, MPEG-1/2) as well as decoders that only call ff_mpv_reconstruct_mb() through error resilience (RV30/40, the VC-1 family) don't have the remaining pointers set at all.
Showing the changes to libavcodec (15 of 15 files). Show all
Unified · Split
| @@ -46,12 +46,12 @@ void ff_dct_unquantize_h263_inter_neon(MpegEncContext *s, int16_t *block, · 45 unmodified lines | ||
| 46 | 46 | void ff_dct_unquantize_h263_intra_neon(MpegEncContext *s, int16_t *block, |
| 47 | 47 | int n, int qscale); |
| 48 | 48 | |
| 49 | −av_cold void ff_mpv_common_init_arm(MpegEncContext *s) | |
| 49 | +av_cold void ff_mpv_unquantize_init_arm(MPVUnquantDSPContext *s, int bitexact) | |
| 50 | 50 | { |
| 51 | 51 | int cpu_flags = av_get_cpu_flags(); |
| 52 | 52 | |
| 53 | 53 | if (have_armv5te(cpu_flags)) |
| 54 | − ff_mpv_common_init_armv5te(s); | |
| 54 | + ff_mpv_unquantize_init_armv5te(s); | |
| 55 | 55 | |
| 56 | 56 | if (have_neon(cpu_flags)) { |
| 57 | 57 | s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_neon; |
| @@ -19,8 +19,8 @@ · 18 unmodified lines | ||
| 19 | 19 | #ifndef AVCODEC_ARM_MPEGVIDEO_ARM_H |
| 20 | 20 | #define AVCODEC_ARM_MPEGVIDEO_ARM_H |
| 21 | 21 | |
| 22 | −#include "libavcodec/mpegvideo.h" | |
| 22 | +#include "libavcodec/mpegvideo_unquantize.h" | |
| 23 | 23 | |
| 24 | −void ff_mpv_common_init_armv5te(MpegEncContext *s); | |
| 24 | +void ff_mpv_unquantize_init_armv5te(MPVUnquantDSPContext *s); | |
| 25 | 25 | |
| 26 | 26 | #endif /* AVCODEC_ARM_MPEGVIDEO_ARM_H */ |
| @@ -95,7 +95,7 @@ static void dct_unquantize_h263_inter_armv5te(MpegEncContext *s, · 94 unmodified lines | ||
| 95 | 95 | ff_dct_unquantize_h263_armv5te(block, qmul, qadd, nCoeffs + 1); |
| 96 | 96 | } |
| 97 | 97 | |
| 98 | −av_cold void ff_mpv_common_init_armv5te(MpegEncContext *s) | |
| 98 | +av_cold void ff_mpv_unquantize_init_armv5te(MPVUnquantDSPContext *s) | |
| 99 | 99 | { |
| 100 | 100 | s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te; |
| 101 | 101 | s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te; |
| @@ -44,6 +44,7 @@ · 43 unmodified lines | ||
| 44 | 44 | #include "mpegvideo.h" |
| 45 | 45 | #include "mpegvideodata.h" |
| 46 | 46 | #include "mpegvideodec.h" |
| 47 | +#include "mpegvideo_unquantize.h" | |
| 47 | 48 | #include "msmpeg4dec.h" |
| 48 | 49 | #include "thread.h" |
| 49 | 50 | #include "wmv2dec.h" |
| @@ -90,6 +91,7 @@ static enum AVPixelFormat h263_get_format(AVCodecContext *avctx) · 40 unmodified lines | ||
| 90 | 91 | av_cold int ff_h263_decode_init(AVCodecContext *avctx) |
| 91 | 92 | { |
| 92 | 93 | MpegEncContext *s = avctx->priv_data; |
| 94 | + MPVUnquantDSPContext unquant_dsp_ctx; | |
| 93 | 95 | int ret; |
| 94 | 96 | |
| 95 | 97 | s->out_format = FMT_H263; |
| @@ -105,10 +107,12 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx) · 9 unmodified lines | ||
| 105 | 107 | s->y_dc_scale_table = |
| 106 | 108 | s->c_dc_scale_table = ff_mpeg1_dc_scale_table; |
| 107 | 109 | |
| 110 | + ff_mpv_unquantize_init(&unquant_dsp_ctx, | |
| 111 | + avctx->flags & AV_CODEC_FLAG_BITEXACT, 0); | |
| 108 | 112 | // dct_unquantize defaults for H.263; |
| 109 | 113 | // they might change on a per-frame basis for MPEG-4. |
| 110 | − s->dct_unquantize_intra = s->dct_unquantize_h263_intra; | |
| 111 | − s->dct_unquantize_inter = s->dct_unquantize_h263_inter; | |
| 114 | + s->dct_unquantize_intra = unquant_dsp_ctx.dct_unquantize_h263_intra; | |
| 115 | + s->dct_unquantize_inter = unquant_dsp_ctx.dct_unquantize_h263_inter; | |
| 112 | 116 | |
| 113 | 117 | /* select sub codec */ |
| 114 | 118 | switch (avctx->codec->id) { |
| @@ -117,9 +121,6 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx) · 2 unmodified lines | ||
| 117 | 121 | avctx->chroma_sample_location = AVCHROMA_LOC_CENTER; |
| 118 | 122 | break; |
| 119 | 123 | case AV_CODEC_ID_MPEG4: |
| 120 | − // dct_unquantize_inter is only used with MPEG-2 quantizers, | |
| 121 | − // so we can already set dct_unquantize_inter here once and for all. | |
| 122 | − s->dct_unquantize_inter = s->dct_unquantize_mpeg2_inter; | |
| 123 | 124 | break; |
| 124 | 125 | case AV_CODEC_ID_MSMPEG4V1: |
| 125 | 126 | s->h263_pred = 1; |
| @@ -508,11 +509,6 @@ retry: · 382 unmodified lines | ||
| 508 | 509 | goto retry; |
| 509 | 510 | if (s->studio_profile != (s->idsp.idct == NULL)) |
| 510 | 511 | ff_mpv_idct_init(s); |
| 511 | − if (s->mpeg_quant) { | |
| 512 | − s->dct_unquantize_intra = s->dct_unquantize_mpeg2_intra; | |
| 513 | − } else { | |
| 514 | − s->dct_unquantize_intra = s->dct_unquantize_h263_intra; | |
| 515 | − } | |
| 516 | 512 | } |
| 517 | 513 | |
| 518 | 514 | /* After H.263 & MPEG-4 header decode we have the height, width, |
| @@ -24,7 +24,8 @@ · 23 unmodified lines | ||
| 24 | 24 | #include "h263dsp_mips.h" |
| 25 | 25 | #include "mpegvideo_mips.h" |
| 26 | 26 | |
| 27 | −av_cold void ff_mpv_common_init_mips(MpegEncContext *s) | |
| 27 | +av_cold void ff_mpv_unquantize_init_mips(MPVUnquantDSPContext *s, | |
| 28 | + int bitexact, int q_scale_type) | |
| 28 | 29 | { |
| 29 | 30 | int cpu_flags = av_get_cpu_flags(); |
| 30 | 31 | |
| @@ -34,15 +35,15 @@ av_cold void ff_mpv_common_init_mips(MpegEncContext *s) · 3 unmodified lines | ||
| 34 | 35 | s->dct_unquantize_mpeg1_intra = ff_dct_unquantize_mpeg1_intra_mmi; |
| 35 | 36 | s->dct_unquantize_mpeg1_inter = ff_dct_unquantize_mpeg1_inter_mmi; |
| 36 | 37 | |
| 37 | − if (!(s->avctx->flags & AV_CODEC_FLAG_BITEXACT)) | |
| 38 | − if (!s->q_scale_type) | |
| 38 | + if (!bitexact) | |
| 39 | + if (!q_scale_type) | |
| 39 | 40 | s->dct_unquantize_mpeg2_intra = ff_dct_unquantize_mpeg2_intra_mmi; |
| 40 | 41 | } |
| 41 | 42 | |
| 42 | 43 | if (have_msa(cpu_flags)) { |
| 43 | 44 | s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_msa; |
| 44 | 45 | s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_msa; |
| 45 | − if (!s->q_scale_type) | |
| 46 | + if (!q_scale_type) | |
| 46 | 47 | s->dct_unquantize_mpeg2_inter = ff_dct_unquantize_mpeg2_inter_msa; |
| 47 | 48 | } |
| 48 | 49 | } |
| @@ -35,6 +35,7 @@ · 34 unmodified lines | ||
| 35 | 35 | #include "mpegvideo.h" |
| 36 | 36 | #include "mpegvideodata.h" |
| 37 | 37 | #include "mpegvideodec.h" |
| 38 | +#include "mpegvideo_unquantize.h" | |
| 38 | 39 | #include "mpeg4video.h" |
| 39 | 40 | #include "mpeg4videodata.h" |
| 40 | 41 | #include "mpeg4videodec.h" |
| @@ -3390,6 +3391,9 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb, · 3349 unmodified lines | ||
| 3390 | 3391 | } |
| 3391 | 3392 | } |
| 3392 | 3393 | |
| 3394 | + s->dct_unquantize_intra = s->mpeg_quant ? ctx->dct_unquantize_mpeg2_intra | |
| 3395 | + : ctx->dct_unquantize_h263_intra; | |
| 3396 | + | |
| 3393 | 3397 | end: |
| 3394 | 3398 | /* detect buggy encoders which don't set the low_delay flag |
| 3395 | 3399 | * (divx4/xvid/opendivx). Note we cannot detect divx5 without B-frames |
| @@ -3862,6 +3866,7 @@ static av_cold int decode_init(AVCodecContext *avctx) · 466 unmodified lines | ||
| 3862 | 3866 | static AVOnce init_static_once = AV_ONCE_INIT; |
| 3863 | 3867 | Mpeg4DecContext *ctx = avctx->priv_data; |
| 3864 | 3868 | MpegEncContext *s = &ctx->m; |
| 3869 | + MPVUnquantDSPContext unquant_dsp_ctx; | |
| 3865 | 3870 | int ret; |
| 3866 | 3871 | |
| 3867 | 3872 | ctx->divx_version = |
| @@ -3872,6 +3877,15 @@ static av_cold int decode_init(AVCodecContext *avctx) · 4 unmodified lines | ||
| 3872 | 3877 | if ((ret = ff_h263_decode_init(avctx)) < 0) |
| 3873 | 3878 | return ret; |
| 3874 | 3879 | |
| 3880 | + ff_mpv_unquantize_init(&unquant_dsp_ctx, | |
| 3881 | + avctx->flags & AV_CODEC_FLAG_BITEXACT, 0); | |
| 3882 | + | |
| 3883 | + ctx->dct_unquantize_h263_intra = unquant_dsp_ctx.dct_unquantize_h263_intra; | |
| 3884 | + ctx->dct_unquantize_mpeg2_intra = unquant_dsp_ctx.dct_unquantize_mpeg2_intra; | |
| 3885 | + // dct_unquantize_inter is only used with MPEG-2 quantizers, | |
| 3886 | + // so we can already set dct_unquantize_inter here once and for all. | |
| 3887 | + s->dct_unquantize_inter = unquant_dsp_ctx.dct_unquantize_mpeg2_inter; | |
| 3888 | + | |
| 3875 | 3889 | s->h263_pred = 1; |
| 3876 | 3890 | s->low_delay = 0; /* default, might be overridden in the vol header during header parsing */ |
| 3877 | 3891 | s->decode_mb = mpeg4_decode_mb; |
| @@ -88,6 +88,11 @@ typedef struct Mpeg4DecContext { · 87 unmodified lines | ||
| 88 | 88 | |
| 89 | 89 | Mpeg4VideoDSPContext mdsp; |
| 90 | 90 | |
| 91 | + void (*dct_unquantize_mpeg2_intra)(MpegEncContext *s, | |
| 92 | + int16_t *block, int n, int qscale); | |
| 93 | + void (*dct_unquantize_h263_intra)(MpegEncContext *s, | |
| 94 | + int16_t *block, int n, int qscale); | |
| 95 | + | |
| 91 | 96 | DECLARE_ALIGNED(8, int32_t, block32)[12][64]; |
| 92 | 97 | // 0 = DCT, 1 = DPCM top to bottom scan, -1 = DPCM bottom to top scan |
| 93 | 98 | int dpcm_direction; |
| @@ -112,8 +112,6 @@ av_cold void ff_mpv_idct_init(MpegEncContext *s) · 111 unmodified lines | ||
| 112 | 112 | s->idsp.idct_permutation); |
| 113 | 113 | ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan, |
| 114 | 114 | s->idsp.idct_permutation); |
| 115 | − | |
| 116 | − ff_mpv_unquantize_init(s); | |
| 117 | 115 | } |
| 118 | 116 | |
| 119 | 117 | static av_cold int init_duplicate_context(MpegEncContext *s) |
| @@ -326,18 +326,6 @@ typedef struct MpegEncContext { · 325 unmodified lines | ||
| 326 | 326 | #define SLICE_END -2 ///<end marker found |
| 327 | 327 | #define SLICE_NOEND -3 ///<no end marker or error found but mb count exceeded |
| 328 | 328 | |
| 329 | − void (*dct_unquantize_mpeg1_intra)(struct MpegEncContext *s, | |
| 330 | − int16_t *block/*align 16*/, int n, int qscale); | |
| 331 | − void (*dct_unquantize_mpeg1_inter)(struct MpegEncContext *s, | |
| 332 | − int16_t *block/*align 16*/, int n, int qscale); | |
| 333 | − void (*dct_unquantize_mpeg2_intra)(struct MpegEncContext *s, | |
| 334 | − int16_t *block/*align 16*/, int n, int qscale); | |
| 335 | − void (*dct_unquantize_mpeg2_inter)(struct MpegEncContext *s, | |
| 336 | − int16_t *block/*align 16*/, int n, int qscale); | |
| 337 | − void (*dct_unquantize_h263_intra)(struct MpegEncContext *s, | |
| 338 | − int16_t *block/*align 16*/, int n, int qscale); | |
| 339 | − void (*dct_unquantize_h263_inter)(struct MpegEncContext *s, | |
| 340 | − int16_t *block/*align 16*/, int n, int qscale); | |
| 341 | 329 | void (*dct_unquantize_intra)(struct MpegEncContext *s, // unquantizer to use (MPEG-4 can use both) |
| 342 | 330 | int16_t *block/*align 16*/, int n, int qscale); |
| 343 | 331 | void (*dct_unquantize_inter)(struct MpegEncContext *s, // unquantizer to use (MPEG-4 can use both) |
| @@ -60,6 +60,7 @@ · 59 unmodified lines | ||
| 60 | 60 | #include "mjpegenc_common.h" |
| 61 | 61 | #include "mathops.h" |
| 62 | 62 | #include "mpegutils.h" |
| 63 | +#include "mpegvideo_unquantize.h" | |
| 63 | 64 | #include "mjpegenc.h" |
| 64 | 65 | #include "speedhqenc.h" |
| 65 | 66 | #include "msmpeg4enc.h" |
| @@ -309,6 +310,25 @@ av_cold void ff_dct_encode_init(MPVEncContext *const s) · 243 unmodified lines | ||
| 309 | 310 | s->dct_quantize = dct_quantize_trellis_c; |
| 310 | 311 | } |
| 311 | 312 | |
| 313 | +static av_cold void init_unquantize(MpegEncContext *const s, AVCodecContext *avctx) | |
| 314 | +{ | |
| 315 | + MPVUnquantDSPContext unquant_dsp_ctx; | |
| 316 | + | |
| 317 | + ff_mpv_unquantize_init(&unquant_dsp_ctx, | |
| 318 | + avctx->flags & AV_CODEC_FLAG_BITEXACT, s->q_scale_type); | |
| 319 | + | |
| 320 | + if (s->mpeg_quant || s->codec_id == AV_CODEC_ID_MPEG2VIDEO) { | |
| 321 | + s->dct_unquantize_intra = unquant_dsp_ctx.dct_unquantize_mpeg2_intra; | |
| 322 | + s->dct_unquantize_inter = unquant_dsp_ctx.dct_unquantize_mpeg2_inter; | |
| 323 | + } else if (s->out_format == FMT_H263 || s->out_format == FMT_H261) { | |
| 324 | + s->dct_unquantize_intra = unquant_dsp_ctx.dct_unquantize_h263_intra; | |
| 325 | + s->dct_unquantize_inter = unquant_dsp_ctx.dct_unquantize_h263_inter; | |
| 326 | + } else { | |
| 327 | + s->dct_unquantize_intra = unquant_dsp_ctx.dct_unquantize_mpeg1_intra; | |
| 328 | + s->dct_unquantize_inter = unquant_dsp_ctx.dct_unquantize_mpeg1_inter; | |
| 329 | + } | |
| 330 | +} | |
| 331 | + | |
| 312 | 332 | static av_cold int me_cmp_init(MPVMainEncContext *const m, AVCodecContext *avctx) |
| 313 | 333 | { |
| 314 | 334 | MPVEncContext *const s = &m->s; |
| @@ -1012,6 +1032,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) · 697 unmodified lines | ||
| 1012 | 1032 | * to the slice contexts, so we initialize various fields of it |
| 1013 | 1033 | * before calling ff_mpv_common_init(). */ |
| 1014 | 1034 | ff_mpv_idct_init(&s->c); |
| 1035 | + init_unquantize(&s->c, avctx); | |
| 1015 | 1036 | ff_fdctdsp_init(&s->fdsp, avctx); |
| 1016 | 1037 | ff_mpegvideoencdsp_init(&s->mpvencdsp, avctx); |
| 1017 | 1038 | ff_pixblockdsp_init(&s->pdsp, avctx); |
| @@ -1030,17 +1051,6 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) · 12 unmodified lines | ||
| 1030 | 1051 | |
| 1031 | 1052 | ff_dct_encode_init(s); |
| 1032 | 1053 | |
| 1033 | − if (s->c.mpeg_quant || s->c.codec_id == AV_CODEC_ID_MPEG2VIDEO) { | |
| 1034 | − s->c.dct_unquantize_intra = s->c.dct_unquantize_mpeg2_intra; | |
| 1035 | − s->c.dct_unquantize_inter = s->c.dct_unquantize_mpeg2_inter; | |
| 1036 | − } else if (s->c.out_format == FMT_H263 || s->c.out_format == FMT_H261) { | |
| 1037 | − s->c.dct_unquantize_intra = s->c.dct_unquantize_h263_intra; | |
| 1038 | − s->c.dct_unquantize_inter = s->c.dct_unquantize_h263_inter; | |
| 1039 | − } else { | |
| 1040 | − s->c.dct_unquantize_intra = s->c.dct_unquantize_mpeg1_intra; | |
| 1041 | − s->c.dct_unquantize_inter = s->c.dct_unquantize_mpeg1_inter; | |
| 1042 | − } | |
| 1043 | − | |
| 1044 | 1054 | if (CONFIG_H263_ENCODER && s->c.out_format == FMT_H263) { |
| 1045 | 1055 | ff_h263_encode_init(m); |
| 1046 | 1056 | #if CONFIG_MSMPEG4ENC |
| @@ -246,28 +246,29 @@ static void dct_unquantize_h263_inter_c(MpegEncContext *s, · 245 unmodified lines | ||
| 246 | 246 | } |
| 247 | 247 | } |
| 248 | 248 | |
| 249 | −av_cold void ff_mpv_unquantize_init(MpegEncContext *s) | |
| 249 | +av_cold void ff_mpv_unquantize_init(MPVUnquantDSPContext *s, | |
| 250 | + int bitexact, int q_scale_type) | |
| 250 | 251 | { |
| 251 | 252 | s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_c; |
| 252 | 253 | s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_c; |
| 253 | 254 | s->dct_unquantize_mpeg1_intra = dct_unquantize_mpeg1_intra_c; |
| 254 | 255 | s->dct_unquantize_mpeg1_inter = dct_unquantize_mpeg1_inter_c; |
| 255 | 256 | s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_c; |
| 256 | − if (s->avctx->flags & AV_CODEC_FLAG_BITEXACT) | |
| 257 | + if (bitexact) | |
| 257 | 258 | s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_bitexact; |
| 258 | 259 | s->dct_unquantize_mpeg2_inter = dct_unquantize_mpeg2_inter_c; |
| 259 | 260 | |
| 260 | 261 | #if HAVE_INTRINSICS_NEON |
| 261 | − ff_mpv_common_init_neon(s); | |
| 262 | + ff_mpv_unquantize_init_neon(s, bitexact); | |
| 262 | 263 | #endif |
| 263 | 264 | |
| 264 | 265 | #if ARCH_ARM |
| 265 | − ff_mpv_common_init_arm(s); | |
| 266 | + ff_mpv_unquantize_init_arm(s, bitexact); | |
| 266 | 267 | #elif ARCH_PPC |
| 267 | − ff_mpv_common_init_ppc(s); | |
| 268 | + ff_mpv_unquantize_init_ppc(s, bitexact); | |
| 268 | 269 | #elif ARCH_X86 |
| 269 | − ff_mpv_common_init_x86(s); | |
| 270 | + ff_mpv_unquantize_init_x86(s, bitexact); | |
| 270 | 271 | #elif ARCH_MIPS |
| 271 | − ff_mpv_common_init_mips(s); | |
| 272 | + ff_mpv_unquantize_init_mips(s, bitexact, q_scale_type); | |
| 272 | 273 | #endif |
| 273 | 274 | } |
| @@ -25,13 +25,38 @@ · 24 unmodified lines | ||
| 25 | 25 | #ifndef AVCODEC_MPEGVIDEO_UNQUANTIZE_H |
| 26 | 26 | #define AVCODEC_MPEGVIDEO_UNQUANTIZE_H |
| 27 | 27 | |
| 28 | +#include <stdint.h> | |
| 29 | + | |
| 30 | +#include "config.h" | |
| 31 | + | |
| 28 | 32 | typedef struct MpegEncContext MpegEncContext; |
| 29 | 33 | |
| 30 | −void ff_mpv_unquantize_init(MpegEncContext *s); | |
| 31 | −void ff_mpv_common_init_arm(MpegEncContext *s); | |
| 32 | −void ff_mpv_common_init_neon(MpegEncContext *s); | |
| 33 | −void ff_mpv_common_init_ppc(MpegEncContext *s); | |
| 34 | −void ff_mpv_common_init_x86(MpegEncContext *s); | |
| 35 | −void ff_mpv_common_init_mips(MpegEncContext *s); | |
| 34 | +typedef struct MPVUnquantDSPContext { | |
| 35 | + void (*dct_unquantize_mpeg1_intra)(struct MpegEncContext *s, | |
| 36 | + int16_t *block/*align 16*/, int n, int qscale); | |
| 37 | + void (*dct_unquantize_mpeg1_inter)(struct MpegEncContext *s, | |
| 38 | + int16_t *block/*align 16*/, int n, int qscale); | |
| 39 | + void (*dct_unquantize_mpeg2_intra)(struct MpegEncContext *s, | |
| 40 | + int16_t *block/*align 16*/, int n, int qscale); | |
| 41 | + void (*dct_unquantize_mpeg2_inter)(struct MpegEncContext *s, | |
| 42 | + int16_t *block/*align 16*/, int n, int qscale); | |
| 43 | + void (*dct_unquantize_h263_intra)(struct MpegEncContext *s, | |
| 44 | + int16_t *block/*align 16*/, int n, int qscale); | |
| 45 | + void (*dct_unquantize_h263_inter)(struct MpegEncContext *s, | |
| 46 | + int16_t *block/*align 16*/, int n, int qscale); | |
| 47 | +} MPVUnquantDSPContext; | |
| 48 | + | |
| 49 | +#if !ARCH_MIPS | |
| 50 | +#define ff_mpv_unquantize_init(s, bitexact, q_scale_type) ff_mpv_unquantize_init(s, bitexact) | |
| 51 | +#endif | |
| 52 | + | |
| 53 | +void ff_mpv_unquantize_init(MPVUnquantDSPContext *s, | |
| 54 | + int bitexact, int q_scale_type); | |
| 55 | +void ff_mpv_unquantize_init_arm (MPVUnquantDSPContext *s, int bitexact); | |
| 56 | +void ff_mpv_unquantize_init_neon(MPVUnquantDSPContext *s, int bitexact); | |
| 57 | +void ff_mpv_unquantize_init_ppc (MPVUnquantDSPContext *s, int bitexact); | |
| 58 | +void ff_mpv_unquantize_init_x86 (MPVUnquantDSPContext *s, int bitexact); | |
| 59 | +void ff_mpv_unquantize_init_mips(MPVUnquantDSPContext *s, int bitexact, | |
| 60 | + int q_scale_type); | |
| 36 | 61 | |
| 37 | 62 | #endif /* AVCODEC_MPEGVIDEO_UNQUANTIZE_H */ |
| @@ -125,7 +125,7 @@ static void dct_unquantize_h263_intra_neon(MpegEncContext *s, int16_t *block, · 124 unmodified lines | ||
| 125 | 125 | } |
| 126 | 126 | |
| 127 | 127 | |
| 128 | −av_cold void ff_mpv_common_init_neon(MpegEncContext *s) | |
| 128 | +av_cold void ff_mpv_unquantize_init_neon(MPVUnquantDSPContext *s, int bitexact) | |
| 129 | 129 | { |
| 130 | 130 | int cpu_flags = av_get_cpu_flags(); |
| 131 | 131 | |
| @@ -103,7 +103,7 @@ static void dct_unquantize_h263_altivec(MpegEncContext *s, · 102 unmodified lines | ||
| 103 | 103 | |
| 104 | 104 | #endif /* HAVE_ALTIVEC */ |
| 105 | 105 | |
| 106 | −av_cold void ff_mpv_common_init_ppc(MpegEncContext *s) | |
| 106 | +av_cold void ff_mpv_unquantize_init_ppc(MPVUnquantDSPContext *s, int bitexact) | |
| 107 | 107 | { |
| 108 | 108 | #if HAVE_ALTIVEC |
| 109 | 109 | if (!PPC_ALTIVEC(av_get_cpu_flags())) |
| @@ -450,7 +450,7 @@ __asm__ volatile( · 449 unmodified lines | ||
| 450 | 450 | |
| 451 | 451 | #endif /* HAVE_MMX_INLINE */ |
| 452 | 452 | |
| 453 | −av_cold void ff_mpv_common_init_x86(MpegEncContext *s) | |
| 453 | +av_cold void ff_mpv_unquantize_init_x86(MPVUnquantDSPContext *s, int bitexact) | |
| 454 | 454 | { |
| 455 | 455 | #if HAVE_MMX_INLINE |
| 456 | 456 | int cpu_flags = av_get_cpu_flags(); |
| @@ -460,7 +460,7 @@ av_cold void ff_mpv_common_init_x86(MpegEncContext *s) · 3 unmodified lines | ||
| 460 | 460 | s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_mmx; |
| 461 | 461 | s->dct_unquantize_mpeg1_intra = dct_unquantize_mpeg1_intra_mmx; |
| 462 | 462 | s->dct_unquantize_mpeg1_inter = dct_unquantize_mpeg1_inter_mmx; |
| 463 | − if (!(s->avctx->flags & AV_CODEC_FLAG_BITEXACT)) | |
| 463 | + if (!bitexact) | |
| 464 | 464 | s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_mmx; |
| 465 | 465 | s->dct_unquantize_mpeg2_inter = dct_unquantize_mpeg2_inter_mmx; |
| 466 | 466 | } |