summaryrefslogtreecommitdiff
path: root/libavcodec/vc1dec.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-10-30 18:22:16 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-11-06 17:41:26 +0100
commitcbe6ef10314e570b7fa28572f0de57ae5eaebf1e (patch)
tree87f64fe4a544466517d2c9b392fc1ea055e12f87 /libavcodec/vc1dec.c
parentd1d30edf42da29fe4ab33c529112381cfea0a254 (diff)
avcodec/vc1dec: Split VC-1 decoders from msmpeg4
The only msmpeg4 code that is ever executed by the VC-1 based decoders is ff_msmpeg4_decode_init() and what is directly reachable from it. This is: a) A call to av_image_check_size(), then ff_h263_decode_init(), b) followed by setting [yc]_dc_scale_table and initializing scantable/permutations. c) Afterwards, some static tables are initialized. d) Finally, slice_height is set. The replacement for ff_msmpeg4_decode_init() performs a) just like now; it also sets [yc]_dc_scale_table, but it only initializes inter_scantable and intra_scantable and not permutated_intra_[hv]_scantable: The latter are only used inside decode_mb callbacks which are only called in ff_h263_decode_frame() which is unused for VC-1.* The static tables initialized in c) are not used at all by VC-1 (the ones that are used have been factored out in previous commits); this avoids touching 327KiB of .bss. slice_height is also not used by the VC-1 decoder (setting it in ff_msmpeg4_decode_init() is probably redundant after b34397b4cd780b5692548e7d021ec884c7217dba). *: It follows from this that the VC-1 decoder is not really based upon the H.263 decoder either; changing this will be done in a future commit. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/vc1dec.c')
-rw-r--r--libavcodec/vc1dec.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index b50f5b45aa..bcfd2bae0b 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -33,12 +33,12 @@
#include "codec_internal.h"
#include "decode.h"
#include "get_bits.h"
+#include "h263dec.h"
#include "hwconfig.h"
#include "mpeg_er.h"
#include "mpegvideo.h"
#include "mpegvideodec.h"
#include "msmpeg4_vc1_data.h"
-#include "msmpeg4dec.h"
#include "profiles.h"
#include "simple_idct.h"
#include "vc1.h"
@@ -46,6 +46,7 @@
#include "vc1_vlc_data.h"
#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
+#include "libavutil/imgutils.h"
#include "libavutil/thread.h"
@@ -406,11 +407,26 @@ static av_cold int vc1_decode_init_alloc_tables(VC1Context *v)
av_cold int ff_vc1_decode_init(AVCodecContext *avctx)
{
- int ret = ff_msmpeg4_decode_init(avctx);
VC1Context *const v = avctx->priv_data;
+ MpegEncContext *const s = &v->s;
+ int ret;
+
+ ret = av_image_check_size(avctx->width, avctx->height, 0, avctx);
if (ret < 0)
return ret;
+ ret = ff_h263_decode_init(avctx);
+ if (ret < 0)
+ return ret;
+
+ s->y_dc_scale_table = ff_wmv3_dc_scale_table;
+ s->c_dc_scale_table = ff_wmv3_dc_scale_table;
+
+ ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable,
+ ff_wmv1_scantable[0]);
+ ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable,
+ ff_wmv1_scantable[1]);
+
ret = vc1_decode_init_alloc_tables(v);
if (ret < 0) {
ff_vc1_decode_end(avctx);