[FFmpeg-devel] [PATCH 73/80] avcodec/h263dec.h: Add H263DecContext
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Thu Feb 3 03:06:24 EET 2022
This is in preparation for moving fields only used by h263dec-based
decoders from MPVContext.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
libavcodec/dxva2_vc1.c | 16 +++++------
libavcodec/flvdec.c | 6 ++--
libavcodec/flvdec.h | 4 +--
libavcodec/h263dec.c | 34 ++++++++++++-----------
libavcodec/h263dec.h | 10 +++++--
libavcodec/intelh263dec.c | 8 +++---
libavcodec/ituh263dec.c | 10 +++----
libavcodec/mpeg4video_parser.c | 6 ++--
libavcodec/mpeg4videodec.c | 51 +++++++++++++++++++---------------
libavcodec/mpeg4videodec.h | 3 +-
libavcodec/msmpeg4dec.c | 21 +++++++-------
libavcodec/msmpeg4dec.h | 5 ++--
libavcodec/mss2.c | 8 +++---
libavcodec/nvdec_mpeg4.c | 3 +-
libavcodec/nvdec_vc1.c | 4 +--
libavcodec/rv10.c | 10 ++++---
libavcodec/vaapi_mpeg4.c | 2 +-
libavcodec/vaapi_vc1.c | 50 ++++++++++++++++-----------------
libavcodec/vc1.c | 24 ++++++++--------
libavcodec/vc1.h | 4 +--
libavcodec/vc1_block.c | 40 +++++++++++++-------------
libavcodec/vc1_loopfilter.c | 28 +++++++++----------
libavcodec/vc1_mc.c | 14 +++++-----
libavcodec/vc1_parser.c | 8 +++---
libavcodec/vc1_pred.c | 22 +++++++--------
libavcodec/vc1dec.c | 16 +++++------
libavcodec/vdpau_mpeg4.c | 2 +-
libavcodec/vdpau_vc1.c | 6 ++--
libavcodec/wmv2dec.c | 28 +++++++++----------
libavcodec/wmv2dec.h | 5 ++--
30 files changed, 234 insertions(+), 214 deletions(-)
diff --git a/libavcodec/dxva2_vc1.c b/libavcodec/dxva2_vc1.c
index d901f023df..e30b432fc6 100644
--- a/libavcodec/dxva2_vc1.c
+++ b/libavcodec/dxva2_vc1.c
@@ -41,7 +41,7 @@ static void fill_picture_parameters(AVCodecContext *avctx,
AVDXVAContext *ctx, const VC1Context *v,
DXVA_PictureParameters *pp)
{
- const MPVDecContext *const s = &v->s.s;
+ const MPVDecContext *const s = &v->h.m.s;
const Picture *current_picture = s->current_picture_ptr;
int intcomp = 0;
@@ -164,7 +164,7 @@ static void fill_slice(AVCodecContext *avctx, DXVA_SliceInfo *slice,
unsigned position, unsigned size)
{
const VC1Context *v = avctx->priv_data;
- const MPVDecContext *const s = &v->s.s;
+ const MPVDecContext *const s = &v->h.m.s;
memset(slice, 0, sizeof(*slice));
slice->wHorizontalPosition = 0;
@@ -186,7 +186,7 @@ static int commit_bitstream_and_slice_buffer(AVCodecContext *avctx,
{
const VC1Context *v = avctx->priv_data;
AVDXVAContext *ctx = DXVA_CONTEXT(avctx);
- const MPVDecContext *const s = &v->s.s;
+ const MPVDecContext *const s = &v->h.m.s;
struct dxva2_picture_context *ctx_pic = s->current_picture_ptr->hwaccel_picture_private;
static const uint8_t start_code[] = { 0, 0, 1, 0x0d };
@@ -313,7 +313,7 @@ static int dxva2_vc1_start_frame(AVCodecContext *avctx,
{
const VC1Context *v = avctx->priv_data;
AVDXVAContext *ctx = DXVA_CONTEXT(avctx);
- struct dxva2_picture_context *ctx_pic = v->s.s.current_picture_ptr->hwaccel_picture_private;
+ struct dxva2_picture_context *ctx_pic = v->h.m.s.current_picture_ptr->hwaccel_picture_private;
if (!DXVA_CONTEXT_VALID(avctx, ctx))
return -1;
@@ -332,7 +332,7 @@ static int dxva2_vc1_decode_slice(AVCodecContext *avctx,
uint32_t size)
{
const VC1Context *v = avctx->priv_data;
- const Picture *current_picture = v->s.s.current_picture_ptr;
+ const Picture *current_picture = v->h.m.s.current_picture_ptr;
struct dxva2_picture_context *ctx_pic = current_picture->hwaccel_picture_private;
unsigned position;
@@ -360,18 +360,18 @@ static int dxva2_vc1_decode_slice(AVCodecContext *avctx,
static int dxva2_vc1_end_frame(AVCodecContext *avctx)
{
VC1Context *v = avctx->priv_data;
- struct dxva2_picture_context *ctx_pic = v->s.s.current_picture_ptr->hwaccel_picture_private;
+ struct dxva2_picture_context *ctx_pic = v->h.m.s.current_picture_ptr->hwaccel_picture_private;
int ret;
if (ctx_pic->slice_count <= 0 || ctx_pic->bitstream_size <= 0)
return -1;
- ret = ff_dxva2_common_end_frame(avctx, v->s.s.current_picture_ptr->f,
+ ret = ff_dxva2_common_end_frame(avctx, v->h.m.s.current_picture_ptr->f,
&ctx_pic->pp, sizeof(ctx_pic->pp),
NULL, 0,
commit_bitstream_and_slice_buffer);
if (!ret)
- ff_mpeg_draw_horiz_band(&v->s.s, 0, avctx->height);
+ ff_mpeg_draw_horiz_band(&v->h.m.s, 0, avctx->height);
return ret;
}
diff --git a/libavcodec/flvdec.c b/libavcodec/flvdec.c
index 469a8ceae9..3c14f2c54c 100644
--- a/libavcodec/flvdec.c
+++ b/libavcodec/flvdec.c
@@ -26,9 +26,9 @@
#include "mpegvideodata.h"
#include "mpegvideodec.h"
-int ff_flv_decode_picture_header(MPVMainDecContext *m)
+int ff_flv_decode_picture_header(H263DecContext *h)
{
- MPVDecContext *const s = &m->s;
+ MPVDecContext *const s = &h->m.s;
int format, width, height;
/* picture header */
@@ -119,7 +119,7 @@ const AVCodec ff_flv_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_FLV1,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_h263_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
diff --git a/libavcodec/flvdec.h b/libavcodec/flvdec.h
index 9cbd178192..7a9c9ff5c0 100644
--- a/libavcodec/flvdec.h
+++ b/libavcodec/flvdec.h
@@ -21,8 +21,8 @@
#ifndef AVCODEC_FLVDEC_H
#define AVCODEC_FLVDEC_H
-#include "mpegvideodec.h"
+#include "h263dec.h"
-int ff_flv_decode_picture_header(MPVMainDecContext *m);
+int ff_flv_decode_picture_header(H263DecContext *m);
#endif /* AVCODEC_FLVDEC_H */
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index dc09d2e15c..4327aec54d 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -75,7 +75,8 @@ static enum AVPixelFormat h263_get_format(AVCodecContext *avctx)
av_cold int ff_h263_decode_init(AVCodecContext *avctx)
{
- MPVMainDecContext *const m = avctx->priv_data;
+ H263DecContext *const h = avctx->priv_data;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
int ret;
@@ -168,9 +169,9 @@ av_cold int ff_h263_decode_end(AVCodecContext *avctx)
/**
* Return the number of bytes consumed for building the current frame.
*/
-static int get_consumed_bytes(MPVMainDecContext *m, int buf_size)
+static int get_consumed_bytes(H263DecContext *h, int buf_size)
{
- MPVDecContext *const s = &m->s;
+ MPVDecContext *const s = &h->m.s;
int pos = (get_bits_count(&s->gb) + 7) >> 3;
if (s->divx_packed || s->avctx->hwaccel) {
@@ -430,6 +431,7 @@ static int decode_slice(MPVMainDecContext *m)
int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
AVPacket *avpkt)
{
+ H263DecContext *const h = avctx->priv_data;
MPVMainDecContext *const m = avctx->priv_data;
MPVMainContext *const m2 = m;
MPVDecContext *const s = &m2->s;
@@ -505,9 +507,9 @@ retry:
/* let's go :-) */
if (CONFIG_WMV2_DECODER && s->msmpeg4_version == 5) {
- ret = ff_wmv2_decode_picture_header(m);
+ ret = ff_wmv2_decode_picture_header(h);
} else if (CONFIG_MSMPEG4_DECODER && s->msmpeg4_version) {
- ret = ff_msmpeg4_decode_picture_header(m);
+ ret = ff_msmpeg4_decode_picture_header(h);
} else if (CONFIG_MPEG4_DECODER && avctx->codec_id == AV_CODEC_ID_MPEG4) {
if (s->avctx->extradata_size && s->picture_number == 0) {
GetBitContext gb;
@@ -517,11 +519,11 @@ retry:
}
ret = ff_mpeg4_decode_picture_header(avctx->priv_data, &s->gb, 0, 0);
} else if (CONFIG_H263I_DECODER && s->codec_id == AV_CODEC_ID_H263I) {
- ret = ff_intel_h263_decode_picture_header(m);
+ ret = ff_intel_h263_decode_picture_header(h);
} else if (CONFIG_FLV_DECODER && s->h263_flv) {
- ret = ff_flv_decode_picture_header(m);
+ ret = ff_flv_decode_picture_header(h);
} else {
- ret = ff_h263_decode_picture_header(m);
+ ret = ff_h263_decode_picture_header(h);
}
if (ret < 0 || ret == FRAME_SKIPPED) {
@@ -533,7 +535,7 @@ retry:
}
}
if (ret == FRAME_SKIPPED)
- return get_consumed_bytes(m, buf_size);
+ return get_consumed_bytes(h, buf_size);
/* skip if the header was thrashed */
if (ret < 0) {
@@ -601,13 +603,13 @@ retry:
/* skip B-frames if we don't have reference frames */
if (!s->last_picture_ptr &&
(s->pict_type == AV_PICTURE_TYPE_B || s->droppable))
- return get_consumed_bytes(m, buf_size);
+ return get_consumed_bytes(h, buf_size);
if ((avctx->skip_frame >= AVDISCARD_NONREF &&
s->pict_type == AV_PICTURE_TYPE_B) ||
(avctx->skip_frame >= AVDISCARD_NONKEY &&
s->pict_type != AV_PICTURE_TYPE_I) ||
avctx->skip_frame >= AVDISCARD_ALL)
- return get_consumed_bytes(m, buf_size);
+ return get_consumed_bytes(h, buf_size);
if ((!s->no_rounding) || s->pict_type == AV_PICTURE_TYPE_B) {
s->me.qpel_put = s->qdsp.put_qpel_pixels_tab;
@@ -636,7 +638,7 @@ retry:
* are stored in current_picture->mb_type which is not available before
* ff_mpv_frame_start() */
if (CONFIG_WMV2_DECODER && s->msmpeg4_version == 5) {
- ret = ff_wmv2_decode_secondary_picture_header(m);
+ ret = ff_wmv2_decode_secondary_picture_header(h);
if (ret < 0)
return ret;
if (ret == 1)
@@ -671,7 +673,7 @@ retry:
if (s->msmpeg4_version && s->msmpeg4_version < 4 &&
s->pict_type == AV_PICTURE_TYPE_I)
if (!CONFIG_MSMPEG4_DECODER ||
- ff_msmpeg4_decode_ext_header(m, buf_size) < 0)
+ ff_msmpeg4_decode_ext_header(h, buf_size) < 0)
s->er.error_status_table[s->mb_num - 1] = ER_MB_ERROR;
av_assert1(s->bitstream_buffer_size == 0);
@@ -729,7 +731,7 @@ frame_end:
if (slice_ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
return slice_ret;
else
- return get_consumed_bytes(m, buf_size);
+ return get_consumed_bytes(h, buf_size);
}
const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[] = {
@@ -770,7 +772,7 @@ const AVCodec ff_h263_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_H263,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_h263_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
@@ -791,7 +793,7 @@ const AVCodec ff_h263p_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_H263P,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_h263_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
diff --git a/libavcodec/h263dec.h b/libavcodec/h263dec.h
index bab3e03fb3..b007372f64 100644
--- a/libavcodec/h263dec.h
+++ b/libavcodec/h263dec.h
@@ -40,6 +40,10 @@ extern VLC ff_h263_mv_vlc;
extern const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[];
+typedef struct H263DecContext {
+ MPVMainDecContext m;
+} H263DecContext;
+
int ff_h263_decode_motion(MPVDecContext *s, int pred, int f_code);
int ff_h263_decode_init(AVCodecContext *avctx);
int ff_h263_decode_frame(AVCodecContext *avctx,
@@ -47,15 +51,15 @@ int ff_h263_decode_frame(AVCodecContext *avctx,
AVPacket *avpkt);
int ff_h263_decode_end(AVCodecContext *avctx);
void ff_h263_decode_init_vlc(void);
-int ff_h263_decode_picture_header(MPVMainDecContext *m);
+int ff_h263_decode_picture_header(H263DecContext *h);
int ff_h263_decode_mba(MPVDecContext *s);
/**
* Print picture info if FF_DEBUG_PICT_INFO is set.
*/
-void ff_h263_show_pict_info(MPVMainDecContext *m);
+void ff_h263_show_pict_info(H263DecContext *h);
-int ff_intel_h263_decode_picture_header(MPVMainDecContext *m);
+int ff_intel_h263_decode_picture_header(H263DecContext *h);
int ff_h263_decode_mb(MPVDecContext *s,
int16_t block[6][64]);
diff --git a/libavcodec/intelh263dec.c b/libavcodec/intelh263dec.c
index e26d45ec20..deed9152ea 100644
--- a/libavcodec/intelh263dec.c
+++ b/libavcodec/intelh263dec.c
@@ -26,9 +26,9 @@
#include "mpegvideodata.h"
/* don't understand why they choose a different header ! */
-int ff_intel_h263_decode_picture_header(MPVMainDecContext *m)
+int ff_intel_h263_decode_picture_header(H263DecContext *h)
{
- MPVDecContext *const s = &m->s;
+ MPVDecContext *const s = &h->m.s;
int format;
if (get_bits_left(&s->gb) == 64) { /* special dummy frames */
@@ -125,7 +125,7 @@ int ff_intel_h263_decode_picture_header(MPVMainDecContext *m)
s->y_dc_scale_table=
s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
- ff_h263_show_pict_info(m);
+ ff_h263_show_pict_info(h);
return 0;
}
@@ -135,7 +135,7 @@ const AVCodec ff_h263i_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("Intel H.263"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_H263I,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_h263_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c
index 9cfdac63d6..9e92ed94ce 100644
--- a/libavcodec/ituh263dec.c
+++ b/libavcodec/ituh263dec.c
@@ -73,9 +73,9 @@ static const int h263_mb_type_b_map[15]= {
MB_TYPE_INTRA4x4 | MB_TYPE_CBP | MB_TYPE_QUANT,
};
-void ff_h263_show_pict_info(MPVMainDecContext *m)
+void ff_h263_show_pict_info(H263DecContext *h)
{
- MPVDecContext *const s = &m->s;
+ MPVDecContext *const s = &h->m.s;
if(s->avctx->debug&FF_DEBUG_PICT_INFO){
av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n",
s->qscale, av_get_picture_type_char(s->pict_type),
@@ -1088,9 +1088,9 @@ end:
}
/* Most is hardcoded; should extend to handle all H.263 streams. */
-int ff_h263_decode_picture_header(MPVMainDecContext *m)
+int ff_h263_decode_picture_header(H263DecContext *h)
{
- MPVDecContext *const s = &m->s;
+ MPVDecContext *const s = &h->m.s;
int format, width, height, i, ret;
uint32_t startcode;
@@ -1369,7 +1369,7 @@ int ff_h263_decode_picture_header(MPVMainDecContext *m)
s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
}
- ff_h263_show_pict_info(m);
+ ff_h263_show_pict_info(h);
if (s->pict_type == AV_PICTURE_TYPE_I && s->codec_tag == AV_RL32("ZYGO") && get_bits_left(&s->gb) >= 85 + 13*3*16 + 50){
int i,j;
for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
diff --git a/libavcodec/mpeg4video_parser.c b/libavcodec/mpeg4video_parser.c
index a7909d92ec..fc6fffdf99 100644
--- a/libavcodec/mpeg4video_parser.c
+++ b/libavcodec/mpeg4video_parser.c
@@ -92,7 +92,7 @@ static int mpeg4_decode_header(AVCodecParserContext *s1, AVCodecContext *avctx,
{
struct Mp4vParseContext *pc = s1->priv_data;
Mpeg4DecContext *dec_ctx = &pc->dec_ctx;
- MPVDecContext *const s = &dec_ctx->m.s;
+ MPVDecContext *const s = &dec_ctx->h.m.s;
GetBitContext gb1, *gb = &gb1;
int ret;
@@ -131,8 +131,8 @@ static av_cold int mpeg4video_parse_init(AVCodecParserContext *s)
struct Mp4vParseContext *pc = s->priv_data;
pc->first_picture = 1;
- pc->dec_ctx.m.s.quant_precision = 5;
- pc->dec_ctx.m.slice_context_count = 1;
+ pc->dec_ctx.h.m.s.quant_precision = 5;
+ pc->dec_ctx.h.m.slice_context_count = 1;
pc->dec_ctx.showed_packed_warning = 1;
return 0;
}
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index ca6988fc48..854ccd5ade 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -195,7 +195,7 @@ void ff_mpeg4_pred_ac(MPVDecContext *s, int16_t *block, int n, int dir)
*/
static inline int mpeg4_is_resync(Mpeg4DecContext *ctx)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int bits_count = get_bits_count(&s->gb);
int v = show_bits(&s->gb, 16);
@@ -245,7 +245,7 @@ static inline int mpeg4_is_resync(Mpeg4DecContext *ctx)
static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *gb)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int a = 2 << s->sprite_warping_accuracy;
int rho = 3 - s->sprite_warping_accuracy;
int r = 16 / a;
@@ -497,7 +497,7 @@ overflow:
}
static int decode_new_pred(Mpeg4DecContext *ctx, GetBitContext *gb) {
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int len = FFMIN(ctx->time_increment_bits + 3, 15);
get_bits(gb, len);
@@ -514,7 +514,7 @@ static int decode_new_pred(Mpeg4DecContext *ctx, GetBitContext *gb) {
*/
int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int mb_num_bits = av_log2(s->mb_num - 1) + 1;
int header_extension = 0, mb_num, len;
@@ -615,7 +615,7 @@ static void reset_studio_dc_predictors(MPVDecContext *s)
*/
int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
GetBitContext *gb = &s->gb;
unsigned vlc_len;
uint16_t mb_num;
@@ -657,7 +657,7 @@ int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx)
*/
static inline int get_amv(Mpeg4DecContext *ctx, int n)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int x, y, mb_v, sum, dx, dy, shift;
int len = 1 << (s->f_code + 4);
const int a = s->sprite_warping_accuracy;
@@ -757,7 +757,7 @@ static inline int mpeg4_decode_dc(MPVDecContext *s, int n, int *dir_ptr)
*/
static int mpeg4_decode_partition_a(Mpeg4DecContext *ctx)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int mb_num = 0;
static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
@@ -1044,7 +1044,7 @@ static int mpeg4_decode_partition_b(MPVDecContext *s, int mb_count)
*/
int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int mb_num;
int ret;
const int part_a_error = s->pict_type == AV_PICTURE_TYPE_I ? (ER_DC_ERROR | ER_MV_ERROR) : ER_MV_ERROR;
@@ -1111,7 +1111,7 @@ static inline int mpeg4_decode_block(Mpeg4DecContext *ctx, int16_t *block,
int n, int coded, int intra,
int use_intra_dc_vlc, int rvlc)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int level, i, last, run, qmul, qadd;
int av_uninit(dc_pred_dir);
RLTable *rl;
@@ -2288,7 +2288,7 @@ static void extension_and_user_data(MPVDecContext *s, GetBitContext *gb, int id)
static int decode_studio_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
{
- MPVMainDecContext *const m = &ctx->m;
+ MPVMainDecContext *const m = &ctx->h.m;
MPVDecContext *const s = &m->s;
int width, height, aspect_ratio_info;
int bits_per_raw_sample;
@@ -2375,7 +2375,8 @@ static int decode_studio_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
{
- MPVMainDecContext *const m = &ctx->m;
+ H263DecContext *const h = &ctx->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
int width, height, vo_ver_id, aspect_ratio_info;
@@ -2751,7 +2752,8 @@ no_cplx_est:
*/
static int decode_user_data(Mpeg4DecContext *ctx, GetBitContext *gb)
{
- MPVDecContext *const s = &ctx->m.s;
+ H263DecContext *const h = &ctx->h;
+ MPVDecContext *const s = &h->m.s;
char buf[256];
int i;
int e;
@@ -2809,7 +2811,7 @@ static int decode_user_data(Mpeg4DecContext *ctx, GetBitContext *gb)
int ff_mpeg4_workaround_bugs(AVCodecContext *avctx)
{
Mpeg4DecContext *ctx = avctx->priv_data;
- MPVMainDecContext *const m = &ctx->m;
+ MPVMainDecContext *const m = &ctx->h.m;
MPVDecContext *const s = &m->s;
if (ctx->xvid_build == -1 && ctx->divx_version == -1 && ctx->lavc_build == -1) {
@@ -2928,7 +2930,8 @@ int ff_mpeg4_workaround_bugs(AVCodecContext *avctx)
static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb,
int parse_only)
{
- MPVMainDecContext *const m = &ctx->m;
+ H263DecContext *const h = &ctx->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
int time_incr, time_increment;
int64_t pts;
@@ -3211,7 +3214,7 @@ end:
static void decode_smpte_tc(Mpeg4DecContext *ctx, GetBitContext *gb)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
skip_bits(gb, 16); /* Time_code[63..48] */
check_marker(s->avctx, gb, "after Time_code[63..48]");
@@ -3230,7 +3233,8 @@ static void decode_smpte_tc(Mpeg4DecContext *ctx, GetBitContext *gb)
*/
static int decode_studio_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb)
{
- MPVMainDecContext *const m = &ctx->m;
+ H263DecContext *const h = &ctx->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
if (get_bits_left(gb) <= 32)
@@ -3286,7 +3290,7 @@ static int decode_studio_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb)
static int decode_studiovisualobject(Mpeg4DecContext *ctx, GetBitContext *gb)
{
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
int visual_object_type;
skip_bits(gb, 4); /* visual_object_verid */
@@ -3315,7 +3319,8 @@ static int decode_studiovisualobject(Mpeg4DecContext *ctx, GetBitContext *gb)
int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb,
int header, int parse_only)
{
- MPVMainDecContext *const m = &ctx->m;
+ H263DecContext *const h = &ctx->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
unsigned startcode, v;
int ret;
@@ -3474,7 +3479,8 @@ end:
int ff_mpeg4_frame_end(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
{
Mpeg4DecContext *ctx = avctx->priv_data;
- MPVMainDecContext *const m = &ctx->m;
+ H263DecContext *const h = &ctx->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
/* divx 5.01+ bitstream reorder stuff */
@@ -3527,7 +3533,7 @@ static int mpeg4_update_thread_context(AVCodecContext *dst,
{
Mpeg4DecContext *s = dst->priv_data;
const Mpeg4DecContext *s1 = src->priv_data;
- int init = s->m.context_initialized;
+ int init = s->h.m.context_initialized;
int ret = ff_mpeg_update_thread_context(dst, src);
@@ -3563,7 +3569,7 @@ static int mpeg4_update_thread_context(AVCodecContext *dst,
memcpy(s->sprite_traj, s1->sprite_traj, sizeof(s1->sprite_traj));
if (CONFIG_MPEG4_DECODER && !init && s1->xvid_build >= 0)
- ff_xvid_idct_init(&s->m.s.idsp, dst);
+ ff_xvid_idct_init(&s->h.m.s.idsp, dst);
return 0;
}
@@ -3632,7 +3638,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
{
static AVOnce init_static_once = AV_ONCE_INIT;
Mpeg4DecContext *ctx = avctx->priv_data;
- MPVMainDecContext *const m = &ctx->m;
+ H263DecContext *const h = &ctx->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
int ret;
diff --git a/libavcodec/mpeg4videodec.h b/libavcodec/mpeg4videodec.h
index 191fe53836..2d682c0c78 100644
--- a/libavcodec/mpeg4videodec.h
+++ b/libavcodec/mpeg4videodec.h
@@ -26,11 +26,12 @@
#include <stdint.h>
#include "get_bits.h"
+#include "h263dec.h"
#include "mpegvideodec.h"
typedef struct Mpeg4DecContext {
- MPVMainDecContext m;
+ H263DecContext h;
/// number of bits to represent the fractional part of time
int time_increment_bits;
diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c
index f02181e075..b1f4df7aa9 100644
--- a/libavcodec/msmpeg4dec.c
+++ b/libavcodec/msmpeg4dec.c
@@ -296,7 +296,8 @@ static int msmpeg4v34_decode_mb(MPVDecContext *s, int16_t block[6][64])
/* init all vlc decoding tables */
av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
{
- MPVMainDecContext *const m = avctx->priv_data;
+ H263DecContext *const h = avctx->priv_data;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
static volatile int done = 0;
int ret;
@@ -400,9 +401,9 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx)
return 0;
}
-int ff_msmpeg4_decode_picture_header(MPVMainDecContext *m)
+int ff_msmpeg4_decode_picture_header(H263DecContext *h)
{
- MPVDecContext *const s = &m->s;
+ MPVDecContext *const s = &h->m.s;
int code;
// at minimum one bit per macroblock is required at least in a valid frame,
@@ -469,7 +470,7 @@ int ff_msmpeg4_decode_picture_header(MPVMainDecContext *m)
s->dc_table_index = get_bits1(&s->gb);
break;
case 4:
- ff_msmpeg4_decode_ext_header(m, (2+5+5+17+7)/8);
+ ff_msmpeg4_decode_ext_header(h, (2+5+5+17+7)/8);
if(s->bit_rate > MBAC_BITRATE) s->per_mb_rl_table= get_bits1(&s->gb);
else s->per_mb_rl_table= 0;
@@ -557,9 +558,9 @@ int ff_msmpeg4_decode_picture_header(MPVMainDecContext *m)
return 0;
}
-int ff_msmpeg4_decode_ext_header(MPVMainDecContext *m, int buf_size)
+int ff_msmpeg4_decode_ext_header(H263DecContext *h, int buf_size)
{
- MPVDecContext *const s = &m->s;
+ MPVDecContext *const s = &h->m.s;
int left= buf_size*8 - get_bits_count(&s->gb);
int length= s->msmpeg4_version>=3 ? 17 : 16;
/* the alt_bitstream reader could read over the end so we need to check it */
@@ -866,7 +867,7 @@ const AVCodec ff_msmpeg4v1_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 1"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_MSMPEG4V1,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_msmpeg4_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
@@ -884,7 +885,7 @@ const AVCodec ff_msmpeg4v2_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_MSMPEG4V2,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_msmpeg4_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
@@ -902,7 +903,7 @@ const AVCodec ff_msmpeg4v3_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_MSMPEG4V3,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_msmpeg4_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
@@ -920,7 +921,7 @@ const AVCodec ff_wmv1_decoder = {
.long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_WMV1,
- .priv_data_size = sizeof(MPVMainDecContext),
+ .priv_data_size = sizeof(H263DecContext),
.init = ff_msmpeg4_decode_init,
.close = ff_h263_decode_end,
.decode = ff_h263_decode_frame,
diff --git a/libavcodec/msmpeg4dec.h b/libavcodec/msmpeg4dec.h
index 37f0f090e1..d3b18bbe05 100644
--- a/libavcodec/msmpeg4dec.h
+++ b/libavcodec/msmpeg4dec.h
@@ -24,6 +24,7 @@
#include "config.h"
#include "avcodec.h"
+#include "h263dec.h"
#include "mpegvideodec.h"
#define INTER_INTRA_VLC_BITS 3
@@ -34,8 +35,8 @@ extern VLC ff_mb_non_intra_vlc[4];
extern VLC ff_inter_intra_vlc;
int ff_msmpeg4_decode_init(AVCodecContext *avctx);
-int ff_msmpeg4_decode_picture_header(MPVMainDecContext *m);
-int ff_msmpeg4_decode_ext_header(MPVMainDecContext *m, int buf_size);
+int ff_msmpeg4_decode_picture_header(H263DecContext *h);
+int ff_msmpeg4_decode_ext_header(H263DecContext *h, int buf_size);
void ff_msmpeg4_decode_motion(MPVDecContext *s, int *mx_ptr, int *my_ptr);
int ff_msmpeg4_decode_block(MPVDecContext *s, int16_t *block,
int n, int coded, const uint8_t *scan_table);
diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c
index f650a84e8d..5ee156d56a 100644
--- a/libavcodec/mss2.c
+++ b/libavcodec/mss2.c
@@ -382,7 +382,7 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size,
MSS2Context *ctx = avctx->priv_data;
MSS12Context *c = &ctx->c;
VC1Context *v = avctx->priv_data;
- MPVMainDecContext *const m = &v->s;
+ MPVMainDecContext *const m = &v->h.m;
MPVDecContext *const s = &m->s;
AVFrame *f;
int ret;
@@ -751,7 +751,7 @@ static av_cold int wmv9_init(AVCodecContext *avctx)
VC1Context *v = avctx->priv_data;
int ret;
- v->s.s.avctx = avctx;
+ v->h.m.s.avctx = avctx;
ff_vc1_init_common(v);
@@ -797,8 +797,8 @@ static av_cold int wmv9_init(AVCodecContext *avctx)
return ret;
/* error concealment */
- v->s.s.me.qpel_put = v->s.s.qdsp.put_qpel_pixels_tab;
- v->s.s.me.qpel_avg = v->s.s.qdsp.avg_qpel_pixels_tab;
+ v->h.m.s.me.qpel_put = v->h.m.s.qdsp.put_qpel_pixels_tab;
+ v->h.m.s.me.qpel_avg = v->h.m.s.qdsp.avg_qpel_pixels_tab;
return 0;
}
diff --git a/libavcodec/nvdec_mpeg4.c b/libavcodec/nvdec_mpeg4.c
index 5c37dba3e4..6d5ac8cd07 100644
--- a/libavcodec/nvdec_mpeg4.c
+++ b/libavcodec/nvdec_mpeg4.c
@@ -30,7 +30,8 @@
static int nvdec_mpeg4_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
{
Mpeg4DecContext *m = avctx->priv_data;
- MPVDecContext *const s = &m->m.s;
+ H263DecContext *const h = &m->h;
+ MPVDecContext *const s = &h->m.s;
NVDECContext *ctx = avctx->internal->hwaccel_priv_data;
CUVIDPICPARAMS *pp = &ctx->pic_params;
diff --git a/libavcodec/nvdec_vc1.c b/libavcodec/nvdec_vc1.c
index e8cae4d724..78b3213e04 100644
--- a/libavcodec/nvdec_vc1.c
+++ b/libavcodec/nvdec_vc1.c
@@ -28,7 +28,7 @@
static int nvdec_vc1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
{
VC1Context *v = avctx->priv_data;
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
NVDECContext *ctx = avctx->internal->hwaccel_priv_data;
CUVIDPICPARAMS *pp = &ctx->pic_params;
@@ -87,7 +87,7 @@ static int nvdec_vc1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u
.extended_mv = v->extended_mv,
.dquant = v->dquant,
.vstransform = v->vstransform,
- .loopfilter = v->s.s.loop_filter,
+ .loopfilter = v->h.m.s.loop_filter,
.fastuvmc = v->fastuvmc,
.overlap = v->overlap,
.quantizer = v->quantizer_mode,
diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c
index 27e17c8677..1fbd99a965 100644
--- a/libavcodec/rv10.c
+++ b/libavcodec/rv10.c
@@ -52,7 +52,7 @@
#define DC_VLC_BITS 9
typedef struct RVDecContext {
- MPVMainDecContext m;
+ H263DecContext h;
int sub_id;
int orig_width, orig_height;
} RVDecContext;
@@ -157,7 +157,7 @@ static int rv10_decode_picture_header(MPVDecContext *s)
static int rv20_decode_picture_header(RVDecContext *rv, int whole_size)
{
- MPVMainDecContext *const m = &rv->m;
+ MPVMainDecContext *const m = &rv->h.m;
MPVDecContext *const s = &m->s;
int seq, mb_pos, i, ret;
int rpr_max;
@@ -368,7 +368,8 @@ static av_cold int rv10_decode_init(AVCodecContext *avctx)
{
static AVOnce init_static_once = AV_ONCE_INIT;
RVDecContext *rv = avctx->priv_data;
- MPVMainDecContext *const m = &rv->m;
+ H263DecContext *const h = &rv->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
int major_ver, minor_ver, micro_ver, ret;
@@ -445,7 +446,8 @@ static int rv10_decode_packet(AVCodecContext *avctx, const uint8_t *buf,
int buf_size, int buf_size2, int whole_size)
{
RVDecContext *rv = avctx->priv_data;
- MPVMainDecContext *const m = &rv->m;
+ H263DecContext *const h = &rv->h;
+ MPVMainDecContext *const m = &h->m;
MPVDecContext *const s = &m->s;
int mb_count, mb_pos, left, start_mb_x, active_bits_size, ret;
diff --git a/libavcodec/vaapi_mpeg4.c b/libavcodec/vaapi_mpeg4.c
index 0a0c2d0f8e..ccee6fb06e 100644
--- a/libavcodec/vaapi_mpeg4.c
+++ b/libavcodec/vaapi_mpeg4.c
@@ -47,7 +47,7 @@ static int mpeg4_get_intra_dc_vlc_thr(Mpeg4DecContext *s)
static int vaapi_mpeg4_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
{
Mpeg4DecContext *ctx = avctx->priv_data;
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
VAPictureParameterBufferMPEG4 pic_param;
int i, err;
diff --git a/libavcodec/vaapi_vc1.c b/libavcodec/vaapi_vc1.c
index fd3b963e33..e8dc79ba62 100644
--- a/libavcodec/vaapi_vc1.c
+++ b/libavcodec/vaapi_vc1.c
@@ -46,7 +46,7 @@ static inline int vc1_has_MVTYPEMB_bitplane(const VC1Context *v)
if (v->mv_type_is_raw)
return 0;
return v->fcm == PROGRESSIVE &&
- (v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
(v->mv_mode == MV_PMODE_MIXED_MV ||
(v->mv_mode == MV_PMODE_INTENSITY_COMP &&
v->mv_mode2 == MV_PMODE_MIXED_MV));
@@ -58,8 +58,8 @@ static inline int vc1_has_SKIPMB_bitplane(const VC1Context *v)
if (v->skip_is_raw)
return 0;
return (v->fcm == PROGRESSIVE || v->fcm == ILACE_FRAME) &&
- ((v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) ||
- (v->s.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type));
+ ((v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) ||
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type));
}
/** Check whether the DIRECTMB bitplane is present */
@@ -68,7 +68,7 @@ static inline int vc1_has_DIRECTMB_bitplane(const VC1Context *v)
if (v->dmb_is_raw)
return 0;
return (v->fcm == PROGRESSIVE || v->fcm == ILACE_FRAME) &&
- (v->s.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type);
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type);
}
/** Check whether the ACPRED bitplane is present */
@@ -77,8 +77,8 @@ static inline int vc1_has_ACPRED_bitplane(const VC1Context *v)
if (v->acpred_is_raw)
return 0;
return v->profile == PROFILE_ADVANCED &&
- (v->s.s.pict_type == AV_PICTURE_TYPE_I ||
- (v->s.s.pict_type == AV_PICTURE_TYPE_B && v->bi_type));
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_I ||
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && v->bi_type));
}
/** Check whether the OVERFLAGS bitplane is present */
@@ -87,8 +87,8 @@ static inline int vc1_has_OVERFLAGS_bitplane(const VC1Context *v)
if (v->overflg_is_raw)
return 0;
return v->profile == PROFILE_ADVANCED &&
- (v->s.s.pict_type == AV_PICTURE_TYPE_I ||
- (v->s.s.pict_type == AV_PICTURE_TYPE_B && v->bi_type)) &&
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_I ||
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && v->bi_type)) &&
(v->overlap && v->pq <= 8) &&
v->condover == CONDOVER_SELECT;
}
@@ -99,8 +99,8 @@ static inline int vc1_has_FIELDTX_bitplane(const VC1Context *v)
if (v->fieldtx_is_raw)
return 0;
return v->fcm == ILACE_FRAME &&
- (v->s.s.pict_type == AV_PICTURE_TYPE_I ||
- (v->s.s.pict_type == AV_PICTURE_TYPE_B && v->bi_type));
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_I ||
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && v->bi_type));
}
/** Check whether the FORWARDMB bitplane is present */
@@ -109,13 +109,13 @@ static inline int vc1_has_FORWARDMB_bitplane(const VC1Context *v)
if (v->fmb_is_raw)
return 0;
return v->fcm == ILACE_FIELD &&
- (v->s.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type);
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type);
}
/** Reconstruct bitstream PTYPE (7.1.1.4, index into Table-35) */
static int vc1_get_PTYPE(const VC1Context *v)
{
- const MPVDecContext *const s = &v->s.s;
+ const MPVDecContext *const s = &v->h.m.s;
switch (s->pict_type) {
case AV_PICTURE_TYPE_I: return 0;
case AV_PICTURE_TYPE_P: return v->p_frame_skipped ? 4 : 1;
@@ -127,7 +127,7 @@ static int vc1_get_PTYPE(const VC1Context *v)
/** Reconstruct bitstream FPTYPE (9.1.1.42, index into Table-105) */
static int vc1_get_FPTYPE(const VC1Context *v)
{
- const MPVDecContext *const s = &v->s.s;
+ const MPVDecContext *const s = &v->h.m.s;
switch (s->pict_type) {
case AV_PICTURE_TYPE_I: return 0;
case AV_PICTURE_TYPE_P: return 3;
@@ -140,8 +140,8 @@ static int vc1_get_FPTYPE(const VC1Context *v)
static inline VAMvModeVC1 vc1_get_MVMODE(const VC1Context *v)
{
if ((v->fcm == PROGRESSIVE || v->fcm == ILACE_FIELD) &&
- ((v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) ||
- (v->s.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type)))
+ ((v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) ||
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && !v->bi_type)))
return get_VAMvModeVC1(v->mv_mode);
return 0;
}
@@ -150,7 +150,7 @@ static inline VAMvModeVC1 vc1_get_MVMODE(const VC1Context *v)
static inline VAMvModeVC1 vc1_get_MVMODE2(const VC1Context *v)
{
if ((v->fcm == PROGRESSIVE || v->fcm == ILACE_FIELD) &&
- (v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
+ (v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
v->mv_mode == MV_PMODE_INTENSITY_COMP)
return get_VAMvModeVC1(v->mv_mode2);
return 0;
@@ -158,7 +158,7 @@ static inline VAMvModeVC1 vc1_get_MVMODE2(const VC1Context *v)
av_unused static inline int vc1_get_INTCOMPFIELD(const VC1Context *v)
{
- if ((v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
+ if ((v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
v->fcm == ILACE_FIELD &&
v->mv_mode == MV_PMODE_INTENSITY_COMP)
switch (v->intcompfield) {
@@ -171,7 +171,7 @@ av_unused static inline int vc1_get_INTCOMPFIELD(const VC1Context *v)
static inline int vc1_get_LUMSCALE(const VC1Context *v)
{
- if (v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) {
+ if (v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) {
if ((v->fcm == PROGRESSIVE && v->mv_mode == MV_PMODE_INTENSITY_COMP) ||
(v->fcm == ILACE_FRAME && v->intcomp))
return v->lumscale;
@@ -187,7 +187,7 @@ static inline int vc1_get_LUMSCALE(const VC1Context *v)
static inline int vc1_get_LUMSHIFT(const VC1Context *v)
{
- if (v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) {
+ if (v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) {
if ((v->fcm == PROGRESSIVE && v->mv_mode == MV_PMODE_INTENSITY_COMP) ||
(v->fcm == ILACE_FRAME && v->intcomp))
return v->lumshift;
@@ -203,7 +203,7 @@ static inline int vc1_get_LUMSHIFT(const VC1Context *v)
av_unused static inline int vc1_get_LUMSCALE2(const VC1Context *v)
{
- if ((v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
+ if ((v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
v->fcm == ILACE_FIELD &&
v->mv_mode == MV_PMODE_INTENSITY_COMP &&
v->intcompfield == 3)
@@ -213,7 +213,7 @@ av_unused static inline int vc1_get_LUMSCALE2(const VC1Context *v)
av_unused static inline int vc1_get_LUMSHIFT2(const VC1Context *v)
{
- if ((v->s.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
+ if ((v->h.m.s.pict_type == AV_PICTURE_TYPE_P && !v->p_frame_skipped) &&
v->fcm == ILACE_FIELD &&
v->mv_mode == MV_PMODE_INTENSITY_COMP &&
v->intcompfield == 3)
@@ -251,7 +251,7 @@ static inline void vc1_pack_bitplanes(uint8_t *bitplane, int n, const uint8_t *f
static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
{
const VC1Context *v = avctx->priv_data;
- const MPVDecContext *const s = &v->s.s;
+ const MPVDecContext *const s = &v->h.m.s;
VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
VAPictureParameterBufferVC1 pic_param;
int err;
@@ -367,7 +367,7 @@ static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t
.frame_level_transform_type = vc1_get_TTFRM(v),
.transform_ac_codingset_idx1 = v->c_ac_table_index,
.transform_ac_codingset_idx2 = v->y_ac_table_index,
- .intra_transform_dc_table = v->s.s.dc_table_index,
+ .intra_transform_dc_table = v->h.m.s.dc_table_index,
},
};
@@ -448,7 +448,7 @@ fail:
static int vaapi_vc1_end_frame(AVCodecContext *avctx)
{
VC1Context *v = avctx->priv_data;
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
int ret;
@@ -465,7 +465,7 @@ fail:
static int vaapi_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
{
const VC1Context *v = avctx->priv_data;
- const MPVDecContext *const s = &v->s.s;
+ const MPVDecContext *const s = &v->h.m.s;
VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
VASliceParameterBufferVC1 slice_param;
int mb_height;
diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c
index 13a211e916..b923daf732 100644
--- a/libavcodec/vc1.c
+++ b/libavcodec/vc1.c
@@ -97,7 +97,7 @@ static void decode_colskip(uint8_t* plane, int width, int height, int stride,
*/
static int bitplane_decoding(uint8_t* data, int *raw_flag, VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int imode, x, y, code, offset;
@@ -231,7 +231,7 @@ static int bitplane_decoding(uint8_t* data, int *raw_flag, VC1Context *v)
*/
static int vop_dquant_decoding(VC1Context *v)
{
- GetBitContext *gb = &v->s.s.gb;
+ GetBitContext *gb = &v->h.m.s.gb;
int pqdiff;
//variable size
@@ -277,7 +277,7 @@ static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb);
*/
int ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
av_log(avctx, AV_LOG_DEBUG, "Header: %0X\n", show_bits_long(gb, 32));
v->profile = get_bits(gb, 2);
@@ -400,7 +400,7 @@ int ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitCo
static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
v->res_rtm_flag = 1;
v->level = get_bits(gb, 3);
@@ -522,9 +522,9 @@ int ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContex
v->closed_entry = get_bits1(gb);
v->panscanflag = get_bits1(gb);
v->refdist_flag = get_bits1(gb);
- v->s.s.loop_filter = get_bits1(gb);
- if (v->s.s.avctx->skip_loop_filter >= AVDISCARD_ALL)
- v->s.s.loop_filter = 0;
+ v->h.m.s.loop_filter = get_bits1(gb);
+ if (v->h.m.s.avctx->skip_loop_filter >= AVDISCARD_ALL)
+ v->h.m.s.loop_filter = 0;
v->fastuvmc = get_bits1(gb);
v->extended_mv = get_bits1(gb);
v->dquant = get_bits(gb, 2);
@@ -565,7 +565,7 @@ int ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContex
"BrokenLink=%i, ClosedEntry=%i, PanscanFlag=%i\n"
"RefDist=%i, Postproc=%i, FastUVMC=%i, ExtMV=%i\n"
"DQuant=%i, VSTransform=%i, Overlap=%i, Qmode=%i\n",
- v->broken_link, v->closed_entry, v->panscanflag, v->refdist_flag, v->s.s.loop_filter,
+ v->broken_link, v->closed_entry, v->panscanflag, v->refdist_flag, v->h.m.s.loop_filter,
v->fastuvmc, v->extended_mv, v->dquant, v->vstransform, v->overlap, v->quantizer_mode);
return 0;
@@ -597,7 +597,7 @@ int ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContex
static void rotate_luts(VC1Context *v)
{
#define ROTATE(DEF, L, N, C, A) do { \
- if (v->s.s.pict_type == AV_PICTURE_TYPE_BI || v->s.s.pict_type == AV_PICTURE_TYPE_B) { \
+ if (v->h.m.s.pict_type == AV_PICTURE_TYPE_BI || v->h.m.s.pict_type == AV_PICTURE_TYPE_B) { \
C = A; \
} else { \
DEF; \
@@ -621,7 +621,7 @@ static int read_bfraction(VC1Context *v, GetBitContext* gb) {
int bfraction_lut_index = get_vlc2(gb, ff_vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1);
if (bfraction_lut_index == 21 || bfraction_lut_index < 0) {
- av_log(v->s.s.avctx, AV_LOG_ERROR, "bfraction invalid\n");
+ av_log(v->h.m.s.avctx, AV_LOG_ERROR, "bfraction invalid\n");
return AVERROR_INVALIDDATA;
}
v->bfraction_lut_index = bfraction_lut_index;
@@ -631,7 +631,7 @@ static int read_bfraction(VC1Context *v, GetBitContext* gb) {
int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pqindex, lowquant, status;
v->field_mode = 0;
@@ -856,7 +856,7 @@ int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pqindex, lowquant;
int status;
int field_mode, fcm;
diff --git a/libavcodec/vc1.h b/libavcodec/vc1.h
index 6aa1a32352..850bf05d2c 100644
--- a/libavcodec/vc1.h
+++ b/libavcodec/vc1.h
@@ -24,8 +24,8 @@
#define AVCODEC_VC1_H
#include "avcodec.h"
+#include "h263dec.h"
#include "h264chroma.h"
-#include "mpegvideodec.h"
#include "intrax8.h"
#include "vc1_common.h"
#include "vc1dsp.h"
@@ -171,7 +171,7 @@ enum Imode {
* Many members are only used for Advanced Profile
*/
typedef struct VC1Context{
- MPVMainDecContext s;
+ H263DecContext h;
IntraX8Context x8;
H264ChromaContext h264chroma;
VC1DSPContext vc1dsp;
diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c
index 081c47894f..6284b75991 100644
--- a/libavcodec/vc1_block.c
+++ b/libavcodec/vc1_block.c
@@ -59,7 +59,7 @@ static const int block_map[6] = {0, 2, 1, 3, 4, 5};
static inline void init_block_index(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
ff_init_block_index(s);
if (v->field_mode && !(v->second_field ^ v->tff)) {
s->dest[0] += s->current_picture_ptr->f->linesize[0];
@@ -72,7 +72,7 @@ static inline void init_block_index(VC1Context *v)
static void vc1_put_blocks_clamped(VC1Context *v, int put_signed)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
uint8_t *dest;
int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6;
int fieldtx = 0;
@@ -263,9 +263,9 @@ static void vc1_put_blocks_clamped(VC1Context *v, int put_signed)
static av_always_inline void get_mvdata_interlaced(VC1Context *v, int *dmv_x,
int *dmv_y, int *pred_flag)
{
+ GetBitContext *const gb = &v->h.m.s.gb;
int index, index1;
int extend_x, extend_y;
- GetBitContext *const gb = &v->s.s.gb;
int bits, esc;
int val, sign;
@@ -512,7 +512,7 @@ static inline int vc1_coded_block_pred(MPVDecContext * s, int n,
static int vc1_decode_ac_coeff(VC1Context *v, int *last, int *skip,
int *value, int codingset)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int index, run, level, lst, sign;
@@ -580,7 +580,7 @@ static int vc1_decode_ac_coeff(VC1Context *v, int *last, int *skip,
static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
int coded, int codingset)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int dc_pred_dir = 0; /* Direction of the DC prediction used */
int i;
@@ -718,7 +718,7 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n,
static int vc1_decode_i_block_adv(VC1Context *v, int16_t block[64], int n,
int coded, int codingset, int mquant)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int dc_pred_dir = 0; /* Direction of the DC prediction used */
int i;
@@ -910,7 +910,7 @@ static int vc1_decode_i_block_adv(VC1Context *v, int16_t block[64], int n,
static int vc1_decode_intra_block(VC1Context *v, int16_t block[64], int n,
int coded, int mquant, int codingset)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int dc_pred_dir = 0; /* Direction of the DC prediction used */
int i;
@@ -1120,7 +1120,7 @@ static int vc1_decode_p_block(VC1Context *v, int16_t block[64], int n,
uint8_t *dst, int linesize, int skip_block,
int *ttmb_out)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int i, j;
int subblkpat = 0;
@@ -1289,7 +1289,7 @@ static const uint8_t size_table[6] = { 0, 2, 3, 4, 5, 8 };
*/
static int vc1_decode_p_mb(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int i, j;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -1521,7 +1521,7 @@ end:
static int vc1_decode_p_mb_intfr(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int i;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -1731,7 +1731,7 @@ static int vc1_decode_p_mb_intfr(VC1Context *v)
static int vc1_decode_p_mb_intfi(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int i;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -1855,7 +1855,7 @@ static int vc1_decode_p_mb_intfi(VC1Context *v)
*/
static int vc1_decode_b_mb(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int i, j;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -2013,7 +2013,7 @@ static int vc1_decode_b_mb(VC1Context *v)
*/
static int vc1_decode_b_mb_intfi(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int i, j;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -2180,7 +2180,7 @@ static int vc1_decode_b_mb_intfi(VC1Context *v)
*/
static int vc1_decode_b_mb_intfr(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext *gb = &s->gb;
int i, j;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -2530,7 +2530,7 @@ static int vc1_decode_b_mb_intfr(VC1Context *v)
*/
static void vc1_decode_i_blocks(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int k, j;
int cbp, val;
uint8_t *coded_val;
@@ -2655,7 +2655,7 @@ static void vc1_decode_i_blocks(VC1Context *v)
*/
static int vc1_decode_i_blocks_adv(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int k;
int cbp, val;
uint8_t *coded_val;
@@ -2798,7 +2798,7 @@ static int vc1_decode_i_blocks_adv(VC1Context *v)
static void vc1_decode_p_blocks(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int apply_loop_filter;
/* select coding mode used for VLC tables selection */
@@ -2890,7 +2890,7 @@ static void vc1_decode_p_blocks(VC1Context *v)
static void vc1_decode_b_blocks(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
/* select coding mode used for VLC tables selection */
switch (v->c_ac_table_index) {
@@ -2974,7 +2974,7 @@ static void vc1_decode_b_blocks(VC1Context *v)
static void vc1_decode_skip_blocks(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
if (!s->last_picture.f->data[0])
return;
@@ -2996,7 +2996,7 @@ static void vc1_decode_skip_blocks(VC1Context *v)
void ff_vc1_decode_blocks(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
s->esc3_level_length = 0;
if (v->x8_type) {
diff --git a/libavcodec/vc1_loopfilter.c b/libavcodec/vc1_loopfilter.c
index d664392fc4..1438c073e8 100644
--- a/libavcodec/vc1_loopfilter.c
+++ b/libavcodec/vc1_loopfilter.c
@@ -104,7 +104,7 @@ static av_always_inline void vc1_v_overlap_filter(VC1Context *v, int16_t (*top_b
void ff_vc1_i_overlap_filter(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int16_t (*topleft_blk)[64], (*top_blk)[64], (*left_blk)[64], (*cur_blk)[64];
int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -160,7 +160,7 @@ void ff_vc1_i_overlap_filter(VC1Context *v)
void ff_vc1_p_overlap_filter(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int16_t (*topleft_blk)[64], (*top_blk)[64], (*left_blk)[64], (*cur_blk)[64];
int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
@@ -206,7 +206,7 @@ void ff_vc1_p_overlap_filter(VC1Context *v)
static av_always_inline void vc1_i_h_loop_filter(VC1Context *v, uint8_t *dest,
uint32_t flags, int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
uint8_t *dst;
@@ -239,7 +239,7 @@ static av_always_inline void vc1_i_v_loop_filter(VC1Context *v, uint8_t *dest,
uint32_t flags, uint8_t fieldtx,
int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
uint8_t *dst;
@@ -270,7 +270,7 @@ static av_always_inline void vc1_i_v_loop_filter(VC1Context *v, uint8_t *dest,
void ff_vc1_i_loop_filter(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
uint8_t *dest, fieldtx;
@@ -364,7 +364,7 @@ static av_always_inline void vc1_p_h_loop_filter(VC1Context *v, uint8_t *dest, u
uint8_t *is_intra, int16_t (*mv)[2], uint8_t *mv_f,
int *ttblk, uint32_t flags, int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
uint32_t left_cbp = cbp[0] >> (block_num * 4), right_cbp;
uint8_t left_is_intra, right_is_intra;
@@ -417,7 +417,7 @@ static av_always_inline void vc1_p_v_loop_filter(VC1Context *v, uint8_t *dest, u
uint8_t *is_intra, int16_t (*mv)[2], uint8_t *mv_f,
int *ttblk, uint32_t flags, int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
uint32_t top_cbp = cbp[0] >> (block_num * 4), bottom_cbp;
uint8_t top_is_intra, bottom_is_intra;
@@ -469,7 +469,7 @@ static av_always_inline void vc1_p_v_loop_filter(VC1Context *v, uint8_t *dest, u
void ff_vc1_p_loop_filter(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6;
uint8_t *dest;
uint32_t *cbp;
@@ -802,7 +802,7 @@ void ff_vc1_p_loop_filter(VC1Context *v)
static av_always_inline void vc1_p_h_intfr_loop_filter(VC1Context *v, uint8_t *dest, int *ttblk,
uint32_t flags, uint8_t fieldtx, int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
int tt;
int linesize = block_num > 3 ? s->uvlinesize : s->linesize;
@@ -852,7 +852,7 @@ static av_always_inline void vc1_p_h_intfr_loop_filter(VC1Context *v, uint8_t *d
static av_always_inline void vc1_p_v_intfr_loop_filter(VC1Context *v, uint8_t *dest, int *ttblk,
uint32_t flags, uint8_t fieldtx, int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
int tt;
int linesize = block_num > 3 ? s->uvlinesize : s->linesize;
@@ -908,7 +908,7 @@ static av_always_inline void vc1_p_v_intfr_loop_filter(VC1Context *v, uint8_t *d
void ff_vc1_p_intfr_loop_filter(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
uint8_t *dest;
@@ -1112,7 +1112,7 @@ void ff_vc1_p_intfr_loop_filter(VC1Context *v)
static av_always_inline void vc1_b_h_intfi_loop_filter(VC1Context *v, uint8_t *dest, uint32_t *cbp,
int *ttblk, uint32_t flags, int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
uint8_t *dst;
uint32_t block_cbp = cbp[0] >> (block_num * 4);
@@ -1144,7 +1144,7 @@ static av_always_inline void vc1_b_h_intfi_loop_filter(VC1Context *v, uint8_t *d
static av_always_inline void vc1_b_v_intfi_loop_filter(VC1Context *v, uint8_t *dest, uint32_t *cbp,
int *ttblk, uint32_t flags, int block_num)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int pq = v->pq;
uint8_t *dst;
uint32_t block_cbp = cbp[0] >> (block_num * 4);
@@ -1171,7 +1171,7 @@ static av_always_inline void vc1_b_v_intfi_loop_filter(VC1Context *v, uint8_t *d
void ff_vc1_b_intfi_loop_filter(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int block_count = CONFIG_GRAY && (s->avctx->flags & AV_CODEC_FLAG_GRAY) ? 4 : 6;
uint8_t *dest;
uint32_t *cbp;
diff --git a/libavcodec/vc1_mc.c b/libavcodec/vc1_mc.c
index 7942f6f373..b188a3e307 100644
--- a/libavcodec/vc1_mc.c
+++ b/libavcodec/vc1_mc.c
@@ -107,7 +107,7 @@ static const uint8_t popcount4[16] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3,
static av_always_inline int get_luma_mv(VC1Context *v, int dir, int16_t *tx, int16_t *ty)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int idx = v->mv_f[dir][s->block_index[0] + v->blocks_off] |
(v->mv_f[dir][s->block_index[1] + v->blocks_off] << 1) |
(v->mv_f[dir][s->block_index[2] + v->blocks_off] << 2) |
@@ -139,7 +139,7 @@ static av_always_inline int get_luma_mv(VC1Context *v, int dir, int16_t *tx, int
static av_always_inline int get_chroma_mv(VC1Context *v, int dir, int16_t *tx, int16_t *ty)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int idx = !v->mb_type[0][s->block_index[0]] |
(!v->mb_type[0][s->block_index[1]] << 1) |
(!v->mb_type[0][s->block_index[2]] << 2) |
@@ -171,7 +171,7 @@ static av_always_inline int get_chroma_mv(VC1Context *v, int dir, int16_t *tx, i
*/
void ff_vc1_mc_1mv(VC1Context *v, int dir)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
H264ChromaContext *h264chroma = &v->h264chroma;
uint8_t *srcY, *srcU, *srcV;
int dxy, mx, my, uvmx, uvmy, src_x, src_y, uvsrc_x, uvsrc_y;
@@ -451,7 +451,7 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir)
*/
void ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
uint8_t *srcY;
int dxy, mx, my, src_x, src_y;
int off;
@@ -633,7 +633,7 @@ void ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg)
*/
void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
H264ChromaContext *h264chroma = &v->h264chroma;
uint8_t *srcU, *srcV;
int uvmx, uvmy, uvsrc_x, uvsrc_y;
@@ -838,7 +838,7 @@ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir)
*/
void ff_vc1_mc_4mv_chroma4(VC1Context *v, int dir, int dir2, int avg)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
H264ChromaContext *h264chroma = &v->h264chroma;
uint8_t *srcU, *srcV;
int uvsrc_x, uvsrc_y;
@@ -1003,7 +1003,7 @@ void ff_vc1_mc_4mv_chroma4(VC1Context *v, int dir, int dir2, int avg)
*/
void ff_vc1_interp_mc(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
H264ChromaContext *h264chroma = &v->h264chroma;
uint8_t *srcY, *srcU, *srcV;
int dxy, mx, my, uvmx, uvmy, src_x, src_y, uvsrc_x, uvsrc_y;
diff --git a/libavcodec/vc1_parser.c b/libavcodec/vc1_parser.c
index af5ff5028a..513f2ce192 100644
--- a/libavcodec/vc1_parser.c
+++ b/libavcodec/vc1_parser.c
@@ -65,7 +65,7 @@ static void vc1_extract_header(AVCodecParserContext *s, AVCodecContext *avctx,
VC1ParseContext *vpc = s->priv_data;
GetBitContext gb;
int ret;
- vpc->v.s.s.avctx = avctx;
+ vpc->v.h.m.s.avctx = avctx;
vpc->v.parse_only = 1;
init_get_bits8(&gb, buf, buf_size);
switch (vpc->prev_start_code) {
@@ -85,10 +85,10 @@ static void vc1_extract_header(AVCodecParserContext *s, AVCodecContext *avctx,
break;
/* keep AV_PICTURE_TYPE_BI internal to VC1 */
- if (vpc->v.s.s.pict_type == AV_PICTURE_TYPE_BI)
+ if (vpc->v.h.m.s.pict_type == AV_PICTURE_TYPE_BI)
s->pict_type = AV_PICTURE_TYPE_B;
else
- s->pict_type = vpc->v.s.s.pict_type;
+ s->pict_type = vpc->v.h.m.s.pict_type;
if (avctx->ticks_per_frame > 1){
// process pulldown flags
@@ -259,7 +259,7 @@ static int vc1_parse(AVCodecParserContext *s,
static av_cold int vc1_parse_init(AVCodecParserContext *s)
{
VC1ParseContext *vpc = s->priv_data;
- vpc->v.s.slice_context_count = 1;
+ vpc->v.h.m.slice_context_count = 1;
vpc->v.first_pic_header_flag = 1;
vpc->prev_start_code = 0;
vpc->bytes_to_skip = 0;
diff --git a/libavcodec/vc1_pred.c b/libavcodec/vc1_pred.c
index 2924aff9e6..85f3ba8b13 100644
--- a/libavcodec/vc1_pred.c
+++ b/libavcodec/vc1_pred.c
@@ -40,7 +40,7 @@ static av_always_inline int scaleforsame_x(VC1Context *v, int n /* MV */, int di
int scalezone1_x, zone1offset_x;
int table_index = dir ^ v->second_field;
- if (v->s.s.pict_type != AV_PICTURE_TYPE_B)
+ if (v->h.m.s.pict_type != AV_PICTURE_TYPE_B)
refdist = v->refdist;
else
refdist = dir ? v->brfd : v->frfd;
@@ -73,7 +73,7 @@ static av_always_inline int scaleforsame_y(VC1Context *v, int i, int n /* MV */,
int scalezone1_y, zone1offset_y;
int table_index = dir ^ v->second_field;
- if (v->s.s.pict_type != AV_PICTURE_TYPE_B)
+ if (v->h.m.s.pict_type != AV_PICTURE_TYPE_B)
refdist = v->refdist;
else
refdist = dir ? v->brfd : v->frfd;
@@ -165,10 +165,10 @@ static av_always_inline int scaleforsame(VC1Context *v, int i, int n /* MV */,
int dim, int dir)
{
int brfd, scalesame;
- int hpel = 1 - v->s.s.quarter_sample;
+ int hpel = 1 - v->h.m.s.quarter_sample;
n >>= hpel;
- if (v->s.s.pict_type != AV_PICTURE_TYPE_B || v->second_field || !dir) {
+ if (v->h.m.s.pict_type != AV_PICTURE_TYPE_B || v->second_field || !dir) {
if (dim)
n = scaleforsame_y(v, i, n, dir) * (1 << hpel);
else
@@ -186,17 +186,17 @@ static av_always_inline int scaleforopp(VC1Context *v, int n /* MV */,
int dim, int dir)
{
int refdist, scaleopp;
- int hpel = 1 - v->s.s.quarter_sample;
+ int hpel = 1 - v->h.m.s.quarter_sample;
n >>= hpel;
- if (v->s.s.pict_type == AV_PICTURE_TYPE_B && !v->second_field && dir == 1) {
+ if (v->h.m.s.pict_type == AV_PICTURE_TYPE_B && !v->second_field && dir == 1) {
if (dim)
n = scaleforopp_y(v, n, dir) * (1 << hpel);
else
n = scaleforopp_x(v, n) * (1 << hpel);
return n;
}
- if (v->s.s.pict_type != AV_PICTURE_TYPE_B)
+ if (v->h.m.s.pict_type != AV_PICTURE_TYPE_B)
refdist = v->refdist;
else
refdist = dir ? v->brfd : v->frfd;
@@ -213,7 +213,7 @@ void ff_vc1_pred_mv(VC1Context *v, int n, int dmv_x, int dmv_y,
int mv1, int r_x, int r_y, uint8_t* is_intra,
int pred_flag, int dir)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int xy, wrap, off = 0;
int16_t *A, *B, *C;
int px, py;
@@ -470,7 +470,7 @@ void ff_vc1_pred_mv(VC1Context *v, int n, int dmv_x, int dmv_y,
void ff_vc1_pred_mv_intfr(VC1Context *v, int n, int dmv_x, int dmv_y,
int mvn, int r_x, int r_y, int dir)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int xy, wrap, off = 0;
int A[2], B[2], C[2];
int px = 0, py = 0;
@@ -691,7 +691,7 @@ void ff_vc1_pred_mv_intfr(VC1Context *v, int n, int dmv_x, int dmv_y,
void ff_vc1_pred_b_mv(VC1Context *v, int dmv_x[2], int dmv_y[2],
int direct, int mvtype)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int xy, wrap, off = 0;
int16_t *A, *B, *C;
int px, py;
@@ -892,7 +892,7 @@ void ff_vc1_pred_b_mv_intfi(VC1Context *v, int n, int *dmv_x, int *dmv_y,
int mv1, int *pred_flag)
{
int dir = (v->bmvtype == BMV_TYPE_BACKWARD) ? 1 : 0;
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int mb_pos = s->mb_x + s->mb_y * s->mb_stride;
if (v->bmvtype == BMV_TYPE_DIRECT) {
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index 995761700b..7f97e962d9 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -104,7 +104,7 @@ static void vc1_sprite_parse_transform(GetBitContext* gb, int c[7])
static int vc1_parse_sprites(VC1Context *v, GetBitContext* gb, SpriteData* sd)
{
- AVCodecContext *avctx = v->s.s.avctx;
+ AVCodecContext *avctx = v->h.m.s.avctx;
int sprite, i;
for (sprite = 0; sprite <= v->two_sprites; sprite++) {
@@ -175,7 +175,7 @@ static int vc1_parse_sprites(VC1Context *v, GetBitContext* gb, SpriteData* sd)
static void vc1_draw_sprites(VC1Context *v, SpriteData* sd)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int i, plane, row, sprite;
int sr_cache[2][2] = { { -1, -1 }, { -1, -1 } };
uint8_t* src_h[2][2];
@@ -272,7 +272,7 @@ static void vc1_draw_sprites(VC1Context *v, SpriteData* sd)
static int vc1_decode_sprites(VC1Context *v, GetBitContext* gb)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int ret;
AVCodecContext *avctx = s->avctx;
SpriteData sd;
@@ -305,7 +305,7 @@ static int vc1_decode_sprites(VC1Context *v, GetBitContext* gb)
static void vc1_sprite_flush(AVCodecContext *avctx)
{
VC1Context *v = avctx->priv_data;
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
AVFrame *f = s->current_picture.f;
int plane, i;
@@ -324,7 +324,7 @@ static void vc1_sprite_flush(AVCodecContext *avctx)
av_cold int ff_vc1_decode_init_alloc_tables(VC1Context *v)
{
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
int i, ret = AVERROR(ENOMEM);
int mb_height = FFALIGN(s->mb_height, 2);
@@ -423,7 +423,7 @@ av_cold void ff_vc1_init_transposed_scantables(VC1Context *v)
static av_cold int vc1_decode_init(AVCodecContext *avctx)
{
VC1Context *v = avctx->priv_data;
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
GetBitContext gb;
int ret;
@@ -595,7 +595,7 @@ av_cold int ff_vc1_decode_end(AVCodecContext *avctx)
for (i = 0; i < 4; i++)
av_freep(&v->sr_rows[i >> 1][i & 1]);
- ff_mpv_common_end(&v->s);
+ ff_mpv_common_end(&v->h.m);
av_freep(&v->mv_type_mb_plane);
av_freep(&v->direct_mb_plane);
av_freep(&v->forward_mb_plane);
@@ -625,7 +625,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data,
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size, n_slices = 0, i, ret;
VC1Context *v = avctx->priv_data;
- MPVMainDecContext *const m = &v->s;
+ MPVMainDecContext *const m = &v->h.m;
MPVDecContext *const s = &m->s;
AVFrame *pict = data;
uint8_t *buf2 = NULL;
diff --git a/libavcodec/vdpau_mpeg4.c b/libavcodec/vdpau_mpeg4.c
index e9483168aa..88e9abefd8 100644
--- a/libavcodec/vdpau_mpeg4.c
+++ b/libavcodec/vdpau_mpeg4.c
@@ -33,7 +33,7 @@ static int vdpau_mpeg4_start_frame(AVCodecContext *avctx,
const uint8_t *buffer, uint32_t size)
{
Mpeg4DecContext *ctx = avctx->priv_data;
- MPVDecContext *const s = &ctx->m.s;
+ MPVDecContext *const s = &ctx->h.m.s;
Picture *pic = s->current_picture_ptr;
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
VdpPictureInfoMPEG4Part2 *info = &pic_ctx->info.mpeg4;
diff --git a/libavcodec/vdpau_vc1.c b/libavcodec/vdpau_vc1.c
index b91b158511..7cb626eb61 100644
--- a/libavcodec/vdpau_vc1.c
+++ b/libavcodec/vdpau_vc1.c
@@ -33,7 +33,7 @@ static int vdpau_vc1_start_frame(AVCodecContext *avctx,
const uint8_t *buffer, uint32_t size)
{
VC1Context * const v = avctx->priv_data;
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
Picture *pic = s->current_picture_ptr;
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
VdpPictureInfoVC1 *info = &pic_ctx->info.vc1;
@@ -80,7 +80,7 @@ static int vdpau_vc1_start_frame(AVCodecContext *avctx,
info->extended_dmv = v->extended_dmv;
info->overlap = v->overlap;
info->vstransform = v->vstransform;
- info->loopfilter = v->s.s.loop_filter;
+ info->loopfilter = v->h.m.s.loop_filter;
info->fastuvmc = v->fastuvmc;
info->range_mapy_flag = v->range_mapy_flag;
info->range_mapy = v->range_mapy;
@@ -101,7 +101,7 @@ static int vdpau_vc1_decode_slice(AVCodecContext *avctx,
const uint8_t *buffer, uint32_t size)
{
VC1Context * const v = avctx->priv_data;
- MPVDecContext *const s = &v->s.s;
+ MPVDecContext *const s = &v->h.m.s;
Picture *pic = s->current_picture_ptr;
struct vdpau_picture_context *pic_ctx = pic->hwaccel_picture_private;
int val;
diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c
index 7c4dc51782..58830f935c 100644
--- a/libavcodec/wmv2dec.c
+++ b/libavcodec/wmv2dec.c
@@ -37,7 +37,7 @@
#include "wmv2dec.h"
typedef struct WMV2DecContext {
- MPVMainDecContext s;
+ H263DecContext h;
WMV2Context common;
IntraX8Context x8;
int j_type_bit;
@@ -60,7 +60,7 @@ typedef struct WMV2DecContext {
static void wmv2_add_block(WMV2DecContext *w, int16_t *block1,
uint8_t *dst, int stride, int n)
{
- MPVDecContext *const s = &w->s.s;
+ MPVDecContext *const s = &w->h.m.s;
if (s->block_last_index[n] >= 0) {
switch (w->abt_type_table[n]) {
@@ -102,7 +102,7 @@ void ff_wmv2_add_mb(MPVDecContext *s, int16_t block1[6][64],
static int parse_mb_skip(WMV2DecContext *w)
{
- MPVDecContext *const s = &w->s.s;
+ MPVDecContext *const s = &w->h.m.s;
int mb_x, mb_y;
int coded_mb_count = 0;
uint32_t *const mb_type = s->current_picture_ptr->mb_type;
@@ -167,7 +167,7 @@ static int parse_mb_skip(WMV2DecContext *w)
static int decode_ext_header(WMV2DecContext *w)
{
- MPVDecContext *const s = &w->s.s;
+ MPVDecContext *const s = &w->h.m.s;
GetBitContext gb;
int fps;
int code;
@@ -203,10 +203,10 @@ static int decode_ext_header(WMV2DecContext *w)
return 0;
}
-int ff_wmv2_decode_picture_header(MPVMainDecContext *m)
+int ff_wmv2_decode_picture_header(H263DecContext *h)
{
- WMV2DecContext *const w = (WMV2DecContext *)m;
- MPVDecContext *const s = &m->s;
+ WMV2DecContext *const w = (WMV2DecContext *)h;
+ MPVDecContext *const s = &h->m.s;
int code;
if (s->picture_number == 0)
@@ -239,10 +239,10 @@ int ff_wmv2_decode_picture_header(MPVMainDecContext *m)
return 0;
}
-int ff_wmv2_decode_secondary_picture_header(MPVMainDecContext *m)
+int ff_wmv2_decode_secondary_picture_header(H263DecContext *h)
{
- WMV2DecContext *const w = (WMV2DecContext *)m;
- MPVDecContext *const s = &m->s;
+ WMV2DecContext *const w = (WMV2DecContext *)h;
+ MPVDecContext *const s = &h->m.s;
if (s->pict_type == AV_PICTURE_TYPE_I) {
if (w->j_type_bit)
@@ -352,7 +352,7 @@ int ff_wmv2_decode_secondary_picture_header(MPVMainDecContext *m)
static inline void wmv2_decode_motion(WMV2DecContext *w, int *mx_ptr, int *my_ptr)
{
- MPVDecContext *const s = &w->s.s;
+ MPVDecContext *const s = &w->h.m.s;
ff_msmpeg4_decode_motion(s, mx_ptr, my_ptr);
@@ -364,7 +364,7 @@ static inline void wmv2_decode_motion(WMV2DecContext *w, int *mx_ptr, int *my_pt
static int16_t *wmv2_pred_motion(WMV2DecContext *w, int *px, int *py)
{
- MPVDecContext *const s = &w->s.s;
+ MPVDecContext *const s = &w->h.m.s;
int xy, wrap, diff, type;
int16_t *A, *B, *C, *mot_val;
@@ -410,7 +410,7 @@ static int16_t *wmv2_pred_motion(WMV2DecContext *w, int *px, int *py)
static inline int wmv2_decode_inter_block(WMV2DecContext *w, int16_t *block,
int n, int cbp)
{
- MPVDecContext *const s = &w->s.s;
+ MPVDecContext *const s = &w->h.m.s;
static const int sub_cbp_table[3] = { 2, 3, 1 };
int sub_cbp, ret;
@@ -567,7 +567,7 @@ int ff_wmv2_decode_mb(MPVDecContext *s, int16_t block[6][64])
static av_cold int wmv2_decode_init(AVCodecContext *avctx)
{
WMV2DecContext *const w = avctx->priv_data;
- MPVMainDecContext *const m = &w->s;
+ MPVMainDecContext *const m = &w->h.m;
MPVDecContext *const s = &m->s;
int ret;
diff --git a/libavcodec/wmv2dec.h b/libavcodec/wmv2dec.h
index 05ca29741b..22aa81c0d6 100644
--- a/libavcodec/wmv2dec.h
+++ b/libavcodec/wmv2dec.h
@@ -21,12 +21,13 @@
#ifndef AVCODEC_WMV2DEC_H
#define AVCODEC_WMV2DEC_H
+#include "h263dec.h"
#include "mpegvideo.h"
#include "mpegvideodec.h"
int ff_wmv2_decode_mb(MPVDecContext *s, int16_t block[6][64]);
-int ff_wmv2_decode_picture_header(MPVMainDecContext *s);
-int ff_wmv2_decode_secondary_picture_header(MPVMainDecContext *s);
+int ff_wmv2_decode_picture_header(H263DecContext *h);
+int ff_wmv2_decode_secondary_picture_header(H263DecContext *h);
void ff_wmv2_add_mb(MPVContext *s, int16_t block[6][64],
uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr);
--
2.32.0
More information about the ffmpeg-devel
mailing list