History

avcodec/mpegvideo: Only keep the actually used unquantize funcs

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.

Andreas Rheinhardt committed 1 year ago

Commit e5a33c81 parent 917652d15 files · +99 −61Browse files

Unified · Split

15 files
  1. libavcodec/arm/mpegvideo_arm.c +2 −2
  2. libavcodec/arm/mpegvideo_arm.h +2 −2
  3. libavcodec/arm/mpegvideo_armv5te.c +1 −1
  4. libavcodec/h263dec.c +6 −10
  5. libavcodec/mips/mpegvideo_init_mips.c +5 −4
  6. libavcodec/mpeg4videodec.c +14 −0
  7. libavcodec/mpeg4videodec.h +5 −0
  8. libavcodec/mpegvideo.c +0 −2
  9. libavcodec/mpegvideo.h +0 −12
  10. libavcodec/mpegvideo_enc.c +21 −11
  11. libavcodec/mpegvideo_unquantize.c +8 −7
  12. libavcodec/mpegvideo_unquantize.h +31 −6
  13. libavcodec/neon/mpegvideo.c +1 −1
  14. libavcodec/ppc/mpegvideo_altivec.c +1 −1
  15. libavcodec/x86/mpegvideo.c +2 −2
libavcodec/arm/mpegvideo_arm.c+2−2
@@ -46,12 +46,12 @@ void ff_dct_unquantize_h263_inter_neon(MpegEncContext *s, int16_t *block, · 45 unmodified lines
46void ff_dct_unquantize_h263_intra_neon(MpegEncContext *s, int16_t *block,46void ff_dct_unquantize_h263_intra_neon(MpegEncContext *s, int16_t *block,
47 int n, int qscale);47 int n, int qscale);
48 48
49av_cold void ff_mpv_common_init_arm(MpegEncContext *s)49av_cold void ff_mpv_unquantize_init_arm(MPVUnquantDSPContext *s, int bitexact)
50{50{
51 int cpu_flags = av_get_cpu_flags();51 int cpu_flags = av_get_cpu_flags();
52 52
53 if (have_armv5te(cpu_flags))53 if (have_armv5te(cpu_flags))
54 ff_mpv_common_init_armv5te(s);54 ff_mpv_unquantize_init_armv5te(s);
55 55
56 if (have_neon(cpu_flags)) {56 if (have_neon(cpu_flags)) {
57 s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_neon;57 s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_neon;
libavcodec/arm/mpegvideo_arm.h+2−2
@@ -19,8 +19,8 @@ · 18 unmodified lines
19#ifndef AVCODEC_ARM_MPEGVIDEO_ARM_H19#ifndef AVCODEC_ARM_MPEGVIDEO_ARM_H
20#define AVCODEC_ARM_MPEGVIDEO_ARM_H20#define AVCODEC_ARM_MPEGVIDEO_ARM_H
21 21
22#include "libavcodec/mpegvideo.h"22#include "libavcodec/mpegvideo_unquantize.h"
23 23
24void ff_mpv_common_init_armv5te(MpegEncContext *s);24void ff_mpv_unquantize_init_armv5te(MPVUnquantDSPContext *s);
25 25
26#endif /* AVCODEC_ARM_MPEGVIDEO_ARM_H */26#endif /* AVCODEC_ARM_MPEGVIDEO_ARM_H */
libavcodec/arm/mpegvideo_armv5te.c+1−1
@@ -95,7 +95,7 @@ static void dct_unquantize_h263_inter_armv5te(MpegEncContext *s, · 94 unmodified lines
95 ff_dct_unquantize_h263_armv5te(block, qmul, qadd, nCoeffs + 1);95 ff_dct_unquantize_h263_armv5te(block, qmul, qadd, nCoeffs + 1);
96}96}
97 97
98av_cold void ff_mpv_common_init_armv5te(MpegEncContext *s)98av_cold void ff_mpv_unquantize_init_armv5te(MPVUnquantDSPContext *s)
99{99{
100 s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te;100 s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te;
101 s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te;101 s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te;
libavcodec/h263dec.c+6−10
@@ -44,6 +44,7 @@ · 43 unmodified lines
44#include "mpegvideo.h"44#include "mpegvideo.h"
45#include "mpegvideodata.h"45#include "mpegvideodata.h"
46#include "mpegvideodec.h"46#include "mpegvideodec.h"
47#include "mpegvideo_unquantize.h"
47#include "msmpeg4dec.h"48#include "msmpeg4dec.h"
48#include "thread.h"49#include "thread.h"
49#include "wmv2dec.h"50#include "wmv2dec.h"
@@ -90,6 +91,7 @@ static enum AVPixelFormat h263_get_format(AVCodecContext *avctx) · 40 unmodified lines
90av_cold int ff_h263_decode_init(AVCodecContext *avctx)91av_cold int ff_h263_decode_init(AVCodecContext *avctx)
91{92{
92 MpegEncContext *s = avctx->priv_data;93 MpegEncContext *s = avctx->priv_data;
94 MPVUnquantDSPContext unquant_dsp_ctx;
93 int ret;95 int ret;
94 96
95 s->out_format = FMT_H263;97 s->out_format = FMT_H263;
@@ -105,10 +107,12 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx) · 9 unmodified lines
105 s->y_dc_scale_table =107 s->y_dc_scale_table =
106 s->c_dc_scale_table = ff_mpeg1_dc_scale_table;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 // dct_unquantize defaults for H.263;112 // dct_unquantize defaults for H.263;
109 // they might change on a per-frame basis for MPEG-4.113 // they might change on a per-frame basis for MPEG-4.
110 s->dct_unquantize_intra = s->dct_unquantize_h263_intra;114 s->dct_unquantize_intra = unquant_dsp_ctx.dct_unquantize_h263_intra;
111 s->dct_unquantize_inter = s->dct_unquantize_h263_inter;115 s->dct_unquantize_inter = unquant_dsp_ctx.dct_unquantize_h263_inter;
112 116
113 /* select sub codec */117 /* select sub codec */
114 switch (avctx->codec->id) {118 switch (avctx->codec->id) {
@@ -117,9 +121,6 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx) · 2 unmodified lines
117 avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;121 avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
118 break;122 break;
119 case AV_CODEC_ID_MPEG4: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 break;124 break;
124 case AV_CODEC_ID_MSMPEG4V1:125 case AV_CODEC_ID_MSMPEG4V1:
125 s->h263_pred = 1;126 s->h263_pred = 1;
@@ -508,11 +509,6 @@ retry: · 382 unmodified lines
508 goto retry;509 goto retry;
509 if (s->studio_profile != (s->idsp.idct == NULL))510 if (s->studio_profile != (s->idsp.idct == NULL))
510 ff_mpv_idct_init(s);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 /* After H.263 & MPEG-4 header decode we have the height, width,514 /* After H.263 & MPEG-4 header decode we have the height, width,
libavcodec/mips/mpegvideo_init_mips.c+5−4
@@ -24,7 +24,8 @@ · 23 unmodified lines
24#include "h263dsp_mips.h"24#include "h263dsp_mips.h"
25#include "mpegvideo_mips.h"25#include "mpegvideo_mips.h"
26 26
27av_cold void ff_mpv_common_init_mips(MpegEncContext *s)27av_cold void ff_mpv_unquantize_init_mips(MPVUnquantDSPContext *s,
28 int bitexact, int q_scale_type)
28{29{
29 int cpu_flags = av_get_cpu_flags();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 s->dct_unquantize_mpeg1_intra = ff_dct_unquantize_mpeg1_intra_mmi;35 s->dct_unquantize_mpeg1_intra = ff_dct_unquantize_mpeg1_intra_mmi;
35 s->dct_unquantize_mpeg1_inter = ff_dct_unquantize_mpeg1_inter_mmi;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 (!bitexact)
38 if (!s->q_scale_type)39 if (!q_scale_type)
39 s->dct_unquantize_mpeg2_intra = ff_dct_unquantize_mpeg2_intra_mmi;40 s->dct_unquantize_mpeg2_intra = ff_dct_unquantize_mpeg2_intra_mmi;
40 }41 }
41 42
42 if (have_msa(cpu_flags)) {43 if (have_msa(cpu_flags)) {
43 s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_msa;44 s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_msa;
44 s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_msa;45 s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_msa;
45 if (!s->q_scale_type)46 if (!q_scale_type)
46 s->dct_unquantize_mpeg2_inter = ff_dct_unquantize_mpeg2_inter_msa;47 s->dct_unquantize_mpeg2_inter = ff_dct_unquantize_mpeg2_inter_msa;
47 }48 }
48}49}
libavcodec/mpeg4videodec.c+14−0
@@ -35,6 +35,7 @@ · 34 unmodified lines
35#include "mpegvideo.h"35#include "mpegvideo.h"
36#include "mpegvideodata.h"36#include "mpegvideodata.h"
37#include "mpegvideodec.h"37#include "mpegvideodec.h"
38#include "mpegvideo_unquantize.h"
38#include "mpeg4video.h"39#include "mpeg4video.h"
39#include "mpeg4videodata.h"40#include "mpeg4videodata.h"
40#include "mpeg4videodec.h"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
3393end:3397end:
3394 /* detect buggy encoders which don't set the low_delay flag3398 /* detect buggy encoders which don't set the low_delay flag
3395 * (divx4/xvid/opendivx). Note we cannot detect divx5 without B-frames3399 * (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 static AVOnce init_static_once = AV_ONCE_INIT;3866 static AVOnce init_static_once = AV_ONCE_INIT;
3863 Mpeg4DecContext *ctx = avctx->priv_data;3867 Mpeg4DecContext *ctx = avctx->priv_data;
3864 MpegEncContext *s = &ctx->m;3868 MpegEncContext *s = &ctx->m;
3869 MPVUnquantDSPContext unquant_dsp_ctx;
3865 int ret;3870 int ret;
3866 3871
3867 ctx->divx_version =3872 ctx->divx_version =
@@ -3872,6 +3877,15 @@ static av_cold int decode_init(AVCodecContext *avctx) · 4 unmodified lines
3872 if ((ret = ff_h263_decode_init(avctx)) < 0)3877 if ((ret = ff_h263_decode_init(avctx)) < 0)
3873 return ret;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 s->h263_pred = 1;3889 s->h263_pred = 1;
3876 s->low_delay = 0; /* default, might be overridden in the vol header during header parsing */3890 s->low_delay = 0; /* default, might be overridden in the vol header during header parsing */
3877 s->decode_mb = mpeg4_decode_mb;3891 s->decode_mb = mpeg4_decode_mb;
libavcodec/mpeg4videodec.h+5−0
@@ -88,6 +88,11 @@ typedef struct Mpeg4DecContext { · 87 unmodified lines
88 88
89 Mpeg4VideoDSPContext mdsp;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 DECLARE_ALIGNED(8, int32_t, block32)[12][64];96 DECLARE_ALIGNED(8, int32_t, block32)[12][64];
92 // 0 = DCT, 1 = DPCM top to bottom scan, -1 = DPCM bottom to top scan97 // 0 = DCT, 1 = DPCM top to bottom scan, -1 = DPCM bottom to top scan
93 int dpcm_direction;98 int dpcm_direction;
libavcodec/mpegvideo.c+0−2
@@ -112,8 +112,6 @@ av_cold void ff_mpv_idct_init(MpegEncContext *s) · 111 unmodified lines
112 s->idsp.idct_permutation);112 s->idsp.idct_permutation);
113 ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan,113 ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan,
114 s->idsp.idct_permutation);114 s->idsp.idct_permutation);
115
116 ff_mpv_unquantize_init(s);
117}115}
118 116
119static av_cold int init_duplicate_context(MpegEncContext *s)117static av_cold int init_duplicate_context(MpegEncContext *s)
libavcodec/mpegvideo.h+0−12
@@ -326,18 +326,6 @@ typedef struct MpegEncContext { · 325 unmodified lines
326#define SLICE_END -2 ///<end marker found326#define SLICE_END -2 ///<end marker found
327#define SLICE_NOEND -3 ///<no end marker or error found but mb count exceeded327#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 void (*dct_unquantize_intra)(struct MpegEncContext *s, // unquantizer to use (MPEG-4 can use both)329 void (*dct_unquantize_intra)(struct MpegEncContext *s, // unquantizer to use (MPEG-4 can use both)
342 int16_t *block/*align 16*/, int n, int qscale);330 int16_t *block/*align 16*/, int n, int qscale);
343 void (*dct_unquantize_inter)(struct MpegEncContext *s, // unquantizer to use (MPEG-4 can use both)331 void (*dct_unquantize_inter)(struct MpegEncContext *s, // unquantizer to use (MPEG-4 can use both)
libavcodec/mpegvideo_enc.c+21−11
@@ -60,6 +60,7 @@ · 59 unmodified lines
60#include "mjpegenc_common.h"60#include "mjpegenc_common.h"
61#include "mathops.h"61#include "mathops.h"
62#include "mpegutils.h"62#include "mpegutils.h"
63#include "mpegvideo_unquantize.h"
63#include "mjpegenc.h"64#include "mjpegenc.h"
64#include "speedhqenc.h"65#include "speedhqenc.h"
65#include "msmpeg4enc.h"66#include "msmpeg4enc.h"
@@ -309,6 +310,25 @@ av_cold void ff_dct_encode_init(MPVEncContext *const s) · 243 unmodified lines
309 s->dct_quantize = dct_quantize_trellis_c;310 s->dct_quantize = dct_quantize_trellis_c;
310}311}
311 312
313static 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
312static av_cold int me_cmp_init(MPVMainEncContext *const m, AVCodecContext *avctx)332static av_cold int me_cmp_init(MPVMainEncContext *const m, AVCodecContext *avctx)
313{333{
314 MPVEncContext *const s = &m->s;334 MPVEncContext *const s = &m->s;
@@ -1012,6 +1032,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) · 697 unmodified lines
1012 * to the slice contexts, so we initialize various fields of it1032 * to the slice contexts, so we initialize various fields of it
1013 * before calling ff_mpv_common_init(). */1033 * before calling ff_mpv_common_init(). */
1014 ff_mpv_idct_init(&s->c);1034 ff_mpv_idct_init(&s->c);
1035 init_unquantize(&s->c, avctx);
1015 ff_fdctdsp_init(&s->fdsp, avctx);1036 ff_fdctdsp_init(&s->fdsp, avctx);
1016 ff_mpegvideoencdsp_init(&s->mpvencdsp, avctx);1037 ff_mpegvideoencdsp_init(&s->mpvencdsp, avctx);
1017 ff_pixblockdsp_init(&s->pdsp, avctx);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 ff_dct_encode_init(s);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 if (CONFIG_H263_ENCODER && s->c.out_format == FMT_H263) {1054 if (CONFIG_H263_ENCODER && s->c.out_format == FMT_H263) {
1045 ff_h263_encode_init(m);1055 ff_h263_encode_init(m);
1046#if CONFIG_MSMPEG4ENC1056#if CONFIG_MSMPEG4ENC
libavcodec/mpegvideo_unquantize.c+8−7
@@ -246,28 +246,29 @@ static void dct_unquantize_h263_inter_c(MpegEncContext *s, · 245 unmodified lines
246 }246 }
247}247}
248 248
249av_cold void ff_mpv_unquantize_init(MpegEncContext *s)249av_cold void ff_mpv_unquantize_init(MPVUnquantDSPContext *s,
250 int bitexact, int q_scale_type)
250{251{
251 s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_c;252 s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_c;
252 s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_c;253 s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_c;
253 s->dct_unquantize_mpeg1_intra = dct_unquantize_mpeg1_intra_c;254 s->dct_unquantize_mpeg1_intra = dct_unquantize_mpeg1_intra_c;
254 s->dct_unquantize_mpeg1_inter = dct_unquantize_mpeg1_inter_c;255 s->dct_unquantize_mpeg1_inter = dct_unquantize_mpeg1_inter_c;
255 s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_c;256 s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_c;
256 if (s->avctx->flags & AV_CODEC_FLAG_BITEXACT)257 if (bitexact)
257 s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_bitexact;258 s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_bitexact;
258 s->dct_unquantize_mpeg2_inter = dct_unquantize_mpeg2_inter_c;259 s->dct_unquantize_mpeg2_inter = dct_unquantize_mpeg2_inter_c;
259 260
260#if HAVE_INTRINSICS_NEON261#if HAVE_INTRINSICS_NEON
261 ff_mpv_common_init_neon(s);262 ff_mpv_unquantize_init_neon(s, bitexact);
262#endif263#endif
263 264
264#if ARCH_ARM265#if ARCH_ARM
265 ff_mpv_common_init_arm(s);266 ff_mpv_unquantize_init_arm(s, bitexact);
266#elif ARCH_PPC267#elif ARCH_PPC
267 ff_mpv_common_init_ppc(s);268 ff_mpv_unquantize_init_ppc(s, bitexact);
268#elif ARCH_X86269#elif ARCH_X86
269 ff_mpv_common_init_x86(s);270 ff_mpv_unquantize_init_x86(s, bitexact);
270#elif ARCH_MIPS271#elif ARCH_MIPS
271 ff_mpv_common_init_mips(s);272 ff_mpv_unquantize_init_mips(s, bitexact, q_scale_type);
272#endif273#endif
273}274}
libavcodec/mpegvideo_unquantize.h+31−6
@@ -25,13 +25,38 @@ · 24 unmodified lines
25#ifndef AVCODEC_MPEGVIDEO_UNQUANTIZE_H25#ifndef AVCODEC_MPEGVIDEO_UNQUANTIZE_H
26#define AVCODEC_MPEGVIDEO_UNQUANTIZE_H26#define AVCODEC_MPEGVIDEO_UNQUANTIZE_H
27 27
28#include <stdint.h>
29
30#include "config.h"
31
28typedef struct MpegEncContext MpegEncContext;32typedef struct MpegEncContext MpegEncContext;
29 33
30void ff_mpv_unquantize_init(MpegEncContext *s);34typedef struct MPVUnquantDSPContext {
31void ff_mpv_common_init_arm(MpegEncContext *s);35 void (*dct_unquantize_mpeg1_intra)(struct MpegEncContext *s,
32void ff_mpv_common_init_neon(MpegEncContext *s);36 int16_t *block/*align 16*/, int n, int qscale);
33void ff_mpv_common_init_ppc(MpegEncContext *s);37 void (*dct_unquantize_mpeg1_inter)(struct MpegEncContext *s,
34void ff_mpv_common_init_x86(MpegEncContext *s);38 int16_t *block/*align 16*/, int n, int qscale);
35void ff_mpv_common_init_mips(MpegEncContext *s);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
53void ff_mpv_unquantize_init(MPVUnquantDSPContext *s,
54 int bitexact, int q_scale_type);
55void ff_mpv_unquantize_init_arm (MPVUnquantDSPContext *s, int bitexact);
56void ff_mpv_unquantize_init_neon(MPVUnquantDSPContext *s, int bitexact);
57void ff_mpv_unquantize_init_ppc (MPVUnquantDSPContext *s, int bitexact);
58void ff_mpv_unquantize_init_x86 (MPVUnquantDSPContext *s, int bitexact);
59void ff_mpv_unquantize_init_mips(MPVUnquantDSPContext *s, int bitexact,
60 int q_scale_type);
36 61
37#endif /* AVCODEC_MPEGVIDEO_UNQUANTIZE_H */62#endif /* AVCODEC_MPEGVIDEO_UNQUANTIZE_H */
libavcodec/neon/mpegvideo.c+1−1
@@ -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
128av_cold void ff_mpv_common_init_neon(MpegEncContext *s)128av_cold void ff_mpv_unquantize_init_neon(MPVUnquantDSPContext *s, int bitexact)
129{129{
130 int cpu_flags = av_get_cpu_flags();130 int cpu_flags = av_get_cpu_flags();
131 131
libavcodec/ppc/mpegvideo_altivec.c+1−1
@@ -103,7 +103,7 @@ static void dct_unquantize_h263_altivec(MpegEncContext *s, · 102 unmodified lines
103 103
104#endif /* HAVE_ALTIVEC */104#endif /* HAVE_ALTIVEC */
105 105
106av_cold void ff_mpv_common_init_ppc(MpegEncContext *s)106av_cold void ff_mpv_unquantize_init_ppc(MPVUnquantDSPContext *s, int bitexact)
107{107{
108#if HAVE_ALTIVEC108#if HAVE_ALTIVEC
109 if (!PPC_ALTIVEC(av_get_cpu_flags()))109 if (!PPC_ALTIVEC(av_get_cpu_flags()))
libavcodec/x86/mpegvideo.c+2−2
@@ -450,7 +450,7 @@ __asm__ volatile( · 449 unmodified lines
450 450
451#endif /* HAVE_MMX_INLINE */451#endif /* HAVE_MMX_INLINE */
452 452
453av_cold void ff_mpv_common_init_x86(MpegEncContext *s)453av_cold void ff_mpv_unquantize_init_x86(MPVUnquantDSPContext *s, int bitexact)
454{454{
455#if HAVE_MMX_INLINE455#if HAVE_MMX_INLINE
456 int cpu_flags = av_get_cpu_flags();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 s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_mmx;460 s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_mmx;
461 s->dct_unquantize_mpeg1_intra = dct_unquantize_mpeg1_intra_mmx;461 s->dct_unquantize_mpeg1_intra = dct_unquantize_mpeg1_intra_mmx;
462 s->dct_unquantize_mpeg1_inter = dct_unquantize_mpeg1_inter_mmx;462 s->dct_unquantize_mpeg1_inter = dct_unquantize_mpeg1_inter_mmx;
463 if (!(s->avctx->flags & AV_CODEC_FLAG_BITEXACT))463 if (!bitexact)
464 s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_mmx;464 s->dct_unquantize_mpeg2_intra = dct_unquantize_mpeg2_intra_mmx;
465 s->dct_unquantize_mpeg2_inter = dct_unquantize_mpeg2_inter_mmx;465 s->dct_unquantize_mpeg2_inter = dct_unquantize_mpeg2_inter_mmx;
466 }466 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t