1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * VC-1 and WMV3 decoder 3cabdff1aSopenharmony_ci * Copyright (c) 2006-2007 Konstantin Shishkov 4cabdff1aSopenharmony_ci * Partly based on vc9.c (c) 2005 Anonymous, Alex Beregszaszi, Michael Niedermayer 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * This file is part of FFmpeg. 7cabdff1aSopenharmony_ci * 8cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 9cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 10cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 11cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 12cabdff1aSopenharmony_ci * 13cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 14cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 15cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16cabdff1aSopenharmony_ci * Lesser General Public License for more details. 17cabdff1aSopenharmony_ci * 18cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 19cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 20cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21cabdff1aSopenharmony_ci */ 22cabdff1aSopenharmony_ci 23cabdff1aSopenharmony_ci#ifndef AVCODEC_VC1_H 24cabdff1aSopenharmony_ci#define AVCODEC_VC1_H 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci#include "avcodec.h" 27cabdff1aSopenharmony_ci#include "h264chroma.h" 28cabdff1aSopenharmony_ci#include "mpegvideo.h" 29cabdff1aSopenharmony_ci#include "intrax8.h" 30cabdff1aSopenharmony_ci#include "vc1_common.h" 31cabdff1aSopenharmony_ci#include "vc1dsp.h" 32cabdff1aSopenharmony_ci 33cabdff1aSopenharmony_ci#define AC_VLC_BITS 9 34cabdff1aSopenharmony_ci 35cabdff1aSopenharmony_ci/** Sequence quantizer mode */ 36cabdff1aSopenharmony_ci//@{ 37cabdff1aSopenharmony_cienum QuantMode { 38cabdff1aSopenharmony_ci QUANT_FRAME_IMPLICIT, ///< Implicitly specified at frame level 39cabdff1aSopenharmony_ci QUANT_FRAME_EXPLICIT, ///< Explicitly specified at frame level 40cabdff1aSopenharmony_ci QUANT_NON_UNIFORM, ///< Non-uniform quant used for all frames 41cabdff1aSopenharmony_ci QUANT_UNIFORM ///< Uniform quant used for all frames 42cabdff1aSopenharmony_ci}; 43cabdff1aSopenharmony_ci//@} 44cabdff1aSopenharmony_ci 45cabdff1aSopenharmony_ci/** Where quant can be changed */ 46cabdff1aSopenharmony_ci//@{ 47cabdff1aSopenharmony_cienum DQProfile { 48cabdff1aSopenharmony_ci DQPROFILE_FOUR_EDGES, 49cabdff1aSopenharmony_ci DQPROFILE_DOUBLE_EDGES, 50cabdff1aSopenharmony_ci DQPROFILE_SINGLE_EDGE, 51cabdff1aSopenharmony_ci DQPROFILE_ALL_MBS 52cabdff1aSopenharmony_ci}; 53cabdff1aSopenharmony_ci//@} 54cabdff1aSopenharmony_ci 55cabdff1aSopenharmony_ci/** @name Where quant can be changed 56cabdff1aSopenharmony_ci */ 57cabdff1aSopenharmony_ci//@{ 58cabdff1aSopenharmony_cienum DQSingleEdge { 59cabdff1aSopenharmony_ci DQSINGLE_BEDGE_LEFT, 60cabdff1aSopenharmony_ci DQSINGLE_BEDGE_TOP, 61cabdff1aSopenharmony_ci DQSINGLE_BEDGE_RIGHT, 62cabdff1aSopenharmony_ci DQSINGLE_BEDGE_BOTTOM 63cabdff1aSopenharmony_ci}; 64cabdff1aSopenharmony_ci//@} 65cabdff1aSopenharmony_ci 66cabdff1aSopenharmony_ci/** Which pair of edges is quantized with ALTPQUANT */ 67cabdff1aSopenharmony_ci//@{ 68cabdff1aSopenharmony_cienum DQDoubleEdge { 69cabdff1aSopenharmony_ci DQDOUBLE_BEDGE_TOPLEFT, 70cabdff1aSopenharmony_ci DQDOUBLE_BEDGE_TOPRIGHT, 71cabdff1aSopenharmony_ci DQDOUBLE_BEDGE_BOTTOMRIGHT, 72cabdff1aSopenharmony_ci DQDOUBLE_BEDGE_BOTTOMLEFT 73cabdff1aSopenharmony_ci}; 74cabdff1aSopenharmony_ci//@} 75cabdff1aSopenharmony_ci 76cabdff1aSopenharmony_ci/** MV modes for P-frames */ 77cabdff1aSopenharmony_ci//@{ 78cabdff1aSopenharmony_cienum MVModes { 79cabdff1aSopenharmony_ci MV_PMODE_1MV_HPEL_BILIN, 80cabdff1aSopenharmony_ci MV_PMODE_1MV, 81cabdff1aSopenharmony_ci MV_PMODE_1MV_HPEL, 82cabdff1aSopenharmony_ci MV_PMODE_MIXED_MV, 83cabdff1aSopenharmony_ci MV_PMODE_INTENSITY_COMP 84cabdff1aSopenharmony_ci}; 85cabdff1aSopenharmony_ci//@} 86cabdff1aSopenharmony_ci 87cabdff1aSopenharmony_ci/** MBMODE for interlaced frame P-picture */ 88cabdff1aSopenharmony_ci//@{ 89cabdff1aSopenharmony_cienum MBModesIntfr { 90cabdff1aSopenharmony_ci MV_PMODE_INTFR_1MV, 91cabdff1aSopenharmony_ci MV_PMODE_INTFR_2MV_FIELD, 92cabdff1aSopenharmony_ci MV_PMODE_INTFR_2MV, 93cabdff1aSopenharmony_ci MV_PMODE_INTFR_4MV_FIELD, 94cabdff1aSopenharmony_ci MV_PMODE_INTFR_4MV, 95cabdff1aSopenharmony_ci MV_PMODE_INTFR_INTRA, 96cabdff1aSopenharmony_ci}; 97cabdff1aSopenharmony_ci//@} 98cabdff1aSopenharmony_ci 99cabdff1aSopenharmony_ci/** @name MV types for B-frames */ 100cabdff1aSopenharmony_ci//@{ 101cabdff1aSopenharmony_cienum BMVTypes { 102cabdff1aSopenharmony_ci BMV_TYPE_BACKWARD, 103cabdff1aSopenharmony_ci BMV_TYPE_FORWARD, 104cabdff1aSopenharmony_ci BMV_TYPE_INTERPOLATED, 105cabdff1aSopenharmony_ci BMV_TYPE_DIRECT 106cabdff1aSopenharmony_ci}; 107cabdff1aSopenharmony_ci//@} 108cabdff1aSopenharmony_ci 109cabdff1aSopenharmony_ci/** @name Block types for P/B-frames */ 110cabdff1aSopenharmony_ci//@{ 111cabdff1aSopenharmony_cienum TransformTypes { 112cabdff1aSopenharmony_ci TT_8X8, 113cabdff1aSopenharmony_ci TT_8X4_BOTTOM, 114cabdff1aSopenharmony_ci TT_8X4_TOP, 115cabdff1aSopenharmony_ci TT_8X4, // both halves 116cabdff1aSopenharmony_ci TT_4X8_RIGHT, 117cabdff1aSopenharmony_ci TT_4X8_LEFT, 118cabdff1aSopenharmony_ci TT_4X8, // both halves 119cabdff1aSopenharmony_ci TT_4X4 120cabdff1aSopenharmony_ci}; 121cabdff1aSopenharmony_ci//@} 122cabdff1aSopenharmony_ci 123cabdff1aSopenharmony_cienum CodingSet { 124cabdff1aSopenharmony_ci CS_HIGH_MOT_INTRA = 0, 125cabdff1aSopenharmony_ci CS_HIGH_MOT_INTER, 126cabdff1aSopenharmony_ci CS_LOW_MOT_INTRA, 127cabdff1aSopenharmony_ci CS_LOW_MOT_INTER, 128cabdff1aSopenharmony_ci CS_MID_RATE_INTRA, 129cabdff1aSopenharmony_ci CS_MID_RATE_INTER, 130cabdff1aSopenharmony_ci CS_HIGH_RATE_INTRA, 131cabdff1aSopenharmony_ci CS_HIGH_RATE_INTER 132cabdff1aSopenharmony_ci}; 133cabdff1aSopenharmony_ci 134cabdff1aSopenharmony_ci/** @name Overlap conditions for Advanced Profile */ 135cabdff1aSopenharmony_ci//@{ 136cabdff1aSopenharmony_cienum COTypes { 137cabdff1aSopenharmony_ci CONDOVER_NONE = 0, 138cabdff1aSopenharmony_ci CONDOVER_ALL, 139cabdff1aSopenharmony_ci CONDOVER_SELECT 140cabdff1aSopenharmony_ci}; 141cabdff1aSopenharmony_ci//@} 142cabdff1aSopenharmony_ci 143cabdff1aSopenharmony_ci/** 144cabdff1aSopenharmony_ci * FCM Frame Coding Mode 145cabdff1aSopenharmony_ci * @note some content might be marked interlaced 146cabdff1aSopenharmony_ci * but have fcm set to 0 as well (e.g. HD-DVD) 147cabdff1aSopenharmony_ci */ 148cabdff1aSopenharmony_cienum FrameCodingMode { 149cabdff1aSopenharmony_ci PROGRESSIVE = 0, ///< in the bitstream is reported as 00b 150cabdff1aSopenharmony_ci ILACE_FRAME, ///< in the bitstream is reported as 10b 151cabdff1aSopenharmony_ci ILACE_FIELD ///< in the bitstream is reported as 11b 152cabdff1aSopenharmony_ci}; 153cabdff1aSopenharmony_ci 154cabdff1aSopenharmony_ci/** 155cabdff1aSopenharmony_ci * Imode types 156cabdff1aSopenharmony_ci * @{ 157cabdff1aSopenharmony_ci */ 158cabdff1aSopenharmony_cienum Imode { 159cabdff1aSopenharmony_ci IMODE_RAW, 160cabdff1aSopenharmony_ci IMODE_NORM2, 161cabdff1aSopenharmony_ci IMODE_DIFF2, 162cabdff1aSopenharmony_ci IMODE_NORM6, 163cabdff1aSopenharmony_ci IMODE_DIFF6, 164cabdff1aSopenharmony_ci IMODE_ROWSKIP, 165cabdff1aSopenharmony_ci IMODE_COLSKIP 166cabdff1aSopenharmony_ci}; 167cabdff1aSopenharmony_ci/** @} */ //imode defines 168cabdff1aSopenharmony_ci 169cabdff1aSopenharmony_ci/** The VC1 Context 170cabdff1aSopenharmony_ci * @todo Change size wherever another size is more efficient 171cabdff1aSopenharmony_ci * Many members are only used for Advanced Profile 172cabdff1aSopenharmony_ci */ 173cabdff1aSopenharmony_citypedef struct VC1Context{ 174cabdff1aSopenharmony_ci MpegEncContext s; 175cabdff1aSopenharmony_ci IntraX8Context x8; 176cabdff1aSopenharmony_ci H264ChromaContext h264chroma; 177cabdff1aSopenharmony_ci VC1DSPContext vc1dsp; 178cabdff1aSopenharmony_ci 179cabdff1aSopenharmony_ci /** Simple/Main Profile sequence header */ 180cabdff1aSopenharmony_ci //@{ 181cabdff1aSopenharmony_ci int res_sprite; ///< reserved, sprite mode 182cabdff1aSopenharmony_ci int res_y411; ///< reserved, old interlaced mode 183cabdff1aSopenharmony_ci int res_x8; ///< reserved 184cabdff1aSopenharmony_ci int multires; ///< frame-level RESPIC syntax element present 185cabdff1aSopenharmony_ci int res_fasttx; ///< reserved, always 1 186cabdff1aSopenharmony_ci int res_transtab; ///< reserved, always 0 187cabdff1aSopenharmony_ci int rangered; ///< RANGEREDFRM (range reduction) syntax element present 188cabdff1aSopenharmony_ci ///< at frame level 189cabdff1aSopenharmony_ci int res_rtm_flag; ///< reserved, set to 1 190cabdff1aSopenharmony_ci int reserved; ///< reserved 191cabdff1aSopenharmony_ci //@} 192cabdff1aSopenharmony_ci 193cabdff1aSopenharmony_ci /** Advanced Profile */ 194cabdff1aSopenharmony_ci //@{ 195cabdff1aSopenharmony_ci int level; ///< 3 bits, for Advanced/Simple Profile, provided by TS layer 196cabdff1aSopenharmony_ci int chromaformat; ///< 2 bits, 2=4:2:0, only defined 197cabdff1aSopenharmony_ci int postprocflag; ///< Per-frame processing suggestion flag present 198cabdff1aSopenharmony_ci int broadcast; ///< TFF/RFF present 199cabdff1aSopenharmony_ci int interlace; ///< Progressive/interlaced (RPTFTM syntax element) 200cabdff1aSopenharmony_ci int tfcntrflag; ///< TFCNTR present 201cabdff1aSopenharmony_ci int panscanflag; ///< NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present 202cabdff1aSopenharmony_ci int refdist_flag; ///< REFDIST syntax element present in II, IP, PI or PP field picture headers 203cabdff1aSopenharmony_ci int extended_dmv; ///< Additional extended dmv range at P/B-frame-level 204cabdff1aSopenharmony_ci int color_prim; ///< 8 bits, chroma coordinates of the color primaries 205cabdff1aSopenharmony_ci int transfer_char; ///< 8 bits, Opto-electronic transfer characteristics 206cabdff1aSopenharmony_ci int matrix_coef; ///< 8 bits, Color primaries->YCbCr transform matrix 207cabdff1aSopenharmony_ci int hrd_param_flag; ///< Presence of Hypothetical Reference 208cabdff1aSopenharmony_ci ///< Decoder parameters 209cabdff1aSopenharmony_ci int psf; ///< Progressive Segmented Frame 210cabdff1aSopenharmony_ci //@} 211cabdff1aSopenharmony_ci 212cabdff1aSopenharmony_ci /** Sequence header data for all Profiles 213cabdff1aSopenharmony_ci * TODO: choose between ints, uint8_ts and monobit flags 214cabdff1aSopenharmony_ci */ 215cabdff1aSopenharmony_ci //@{ 216cabdff1aSopenharmony_ci int profile; ///< 2 bits, Profile 217cabdff1aSopenharmony_ci int frmrtq_postproc; ///< 3 bits, 218cabdff1aSopenharmony_ci int bitrtq_postproc; ///< 5 bits, quantized framerate-based postprocessing strength 219cabdff1aSopenharmony_ci int max_coded_width, max_coded_height; 220cabdff1aSopenharmony_ci int fastuvmc; ///< Rounding of qpel vector to hpel ? (not in Simple) 221cabdff1aSopenharmony_ci int extended_mv; ///< Ext MV in P/B (not in Simple) 222cabdff1aSopenharmony_ci int dquant; ///< How qscale varies with MBs, 2 bits (not in Simple) 223cabdff1aSopenharmony_ci int vstransform; ///< variable-size [48]x[48] transform type + info 224cabdff1aSopenharmony_ci int overlap; ///< overlapped transforms in use 225cabdff1aSopenharmony_ci int quantizer_mode; ///< 2 bits, quantizer mode used for sequence, see QUANT_* 226cabdff1aSopenharmony_ci int finterpflag; ///< INTERPFRM present 227cabdff1aSopenharmony_ci //@} 228cabdff1aSopenharmony_ci 229cabdff1aSopenharmony_ci /** Frame decoding info for all profiles */ 230cabdff1aSopenharmony_ci //@{ 231cabdff1aSopenharmony_ci uint8_t mv_mode; ///< MV coding mode 232cabdff1aSopenharmony_ci uint8_t mv_mode2; ///< Secondary MV coding mode (B-frames) 233cabdff1aSopenharmony_ci int k_x; ///< Number of bits for MVs (depends on MV range) 234cabdff1aSopenharmony_ci int k_y; ///< Number of bits for MVs (depends on MV range) 235cabdff1aSopenharmony_ci int range_x, range_y; ///< MV range 236cabdff1aSopenharmony_ci uint8_t pq, altpq; ///< Current/alternate frame quantizer scale 237cabdff1aSopenharmony_ci uint8_t zz_8x8[4][64]; ///< Zigzag table for TT_8x8, permuted for IDCT 238cabdff1aSopenharmony_ci int left_blk_sh, top_blk_sh; ///< Either 3 or 0, positions of l/t in blk[] 239cabdff1aSopenharmony_ci const uint8_t* zz_8x4; ///< Zigzag scan table for TT_8x4 coding mode 240cabdff1aSopenharmony_ci const uint8_t* zz_4x8; ///< Zigzag scan table for TT_4x8 coding mode 241cabdff1aSopenharmony_ci /** pquant parameters */ 242cabdff1aSopenharmony_ci //@{ 243cabdff1aSopenharmony_ci uint8_t dquantfrm; 244cabdff1aSopenharmony_ci uint8_t dqprofile; 245cabdff1aSopenharmony_ci uint8_t dqsbedge; 246cabdff1aSopenharmony_ci uint8_t dqbilevel; 247cabdff1aSopenharmony_ci //@} 248cabdff1aSopenharmony_ci /** AC coding set indexes 249cabdff1aSopenharmony_ci * @see 8.1.1.10, p(1)10 250cabdff1aSopenharmony_ci */ 251cabdff1aSopenharmony_ci //@{ 252cabdff1aSopenharmony_ci int c_ac_table_index; ///< Chroma index from ACFRM element 253cabdff1aSopenharmony_ci int y_ac_table_index; ///< Luma index from AC2FRM element 254cabdff1aSopenharmony_ci //@} 255cabdff1aSopenharmony_ci int ttfrm; ///< Transform type info present at frame level 256cabdff1aSopenharmony_ci uint8_t ttmbf; ///< Transform type flag 257cabdff1aSopenharmony_ci int *ttblk_base, *ttblk; ///< Transform type at the block level 258cabdff1aSopenharmony_ci int codingset; ///< index of current table set from 11.8 to use for luma block decoding 259cabdff1aSopenharmony_ci int codingset2; ///< index of current table set from 11.8 to use for chroma block decoding 260cabdff1aSopenharmony_ci int pqindex; ///< raw pqindex used in coding set selection 261cabdff1aSopenharmony_ci int a_avail, c_avail; 262cabdff1aSopenharmony_ci uint8_t *mb_type_base, *mb_type[3]; 263cabdff1aSopenharmony_ci 264cabdff1aSopenharmony_ci 265cabdff1aSopenharmony_ci /** Luma compensation parameters */ 266cabdff1aSopenharmony_ci //@{ 267cabdff1aSopenharmony_ci uint8_t lumscale; 268cabdff1aSopenharmony_ci uint8_t lumshift; 269cabdff1aSopenharmony_ci //@} 270cabdff1aSopenharmony_ci int16_t bfraction; ///< Relative position % anchors=> how to scale MVs 271cabdff1aSopenharmony_ci uint8_t halfpq; ///< Uniform quant over image and qp+.5 272cabdff1aSopenharmony_ci uint8_t respic; ///< Frame-level flag for resized images 273cabdff1aSopenharmony_ci int buffer_fullness; ///< HRD info 274cabdff1aSopenharmony_ci /** Ranges: 275cabdff1aSopenharmony_ci * -# 0 -> [-64n 63.f] x [-32, 31.f] 276cabdff1aSopenharmony_ci * -# 1 -> [-128, 127.f] x [-64, 63.f] 277cabdff1aSopenharmony_ci * -# 2 -> [-512, 511.f] x [-128, 127.f] 278cabdff1aSopenharmony_ci * -# 3 -> [-1024, 1023.f] x [-256, 255.f] 279cabdff1aSopenharmony_ci */ 280cabdff1aSopenharmony_ci uint8_t mvrange; ///< Extended MV range flag 281cabdff1aSopenharmony_ci uint8_t pquantizer; ///< Uniform (over sequence) quantizer in use 282cabdff1aSopenharmony_ci VLC *cbpcy_vlc; ///< CBPCY VLC table 283cabdff1aSopenharmony_ci int tt_index; ///< Index for Transform Type tables (to decode TTMB) 284cabdff1aSopenharmony_ci uint8_t* mv_type_mb_plane; ///< bitplane for mv_type == (4MV) 285cabdff1aSopenharmony_ci uint8_t* direct_mb_plane; ///< bitplane for "direct" MBs 286cabdff1aSopenharmony_ci uint8_t* forward_mb_plane; ///< bitplane for "forward" MBs 287cabdff1aSopenharmony_ci int mv_type_is_raw; ///< mv type mb plane is not coded 288cabdff1aSopenharmony_ci int dmb_is_raw; ///< direct mb plane is raw 289cabdff1aSopenharmony_ci int fmb_is_raw; ///< forward mb plane is raw 290cabdff1aSopenharmony_ci int skip_is_raw; ///< skip mb plane is not coded 291cabdff1aSopenharmony_ci uint8_t last_luty[2][256], last_lutuv[2][256]; ///< lookup tables used for intensity compensation 292cabdff1aSopenharmony_ci uint8_t aux_luty[2][256], aux_lutuv[2][256]; ///< lookup tables used for intensity compensation 293cabdff1aSopenharmony_ci uint8_t next_luty[2][256], next_lutuv[2][256]; ///< lookup tables used for intensity compensation 294cabdff1aSopenharmony_ci uint8_t (*curr_luty)[256] ,(*curr_lutuv)[256]; 295cabdff1aSopenharmony_ci int last_use_ic, *curr_use_ic, next_use_ic, aux_use_ic; 296cabdff1aSopenharmony_ci int rnd; ///< rounding control 297cabdff1aSopenharmony_ci int cbptab; 298cabdff1aSopenharmony_ci 299cabdff1aSopenharmony_ci /** Frame decoding info for S/M profiles only */ 300cabdff1aSopenharmony_ci //@{ 301cabdff1aSopenharmony_ci uint8_t rangeredfrm; ///< out_sample = CLIP((in_sample-128)*2+128) 302cabdff1aSopenharmony_ci uint8_t interpfrm; 303cabdff1aSopenharmony_ci //@} 304cabdff1aSopenharmony_ci 305cabdff1aSopenharmony_ci /** Frame decoding info for Advanced profile */ 306cabdff1aSopenharmony_ci //@{ 307cabdff1aSopenharmony_ci enum FrameCodingMode fcm; 308cabdff1aSopenharmony_ci uint8_t numpanscanwin; 309cabdff1aSopenharmony_ci uint8_t tfcntr; 310cabdff1aSopenharmony_ci uint8_t rptfrm, tff, rff; 311cabdff1aSopenharmony_ci uint16_t topleftx; 312cabdff1aSopenharmony_ci uint16_t toplefty; 313cabdff1aSopenharmony_ci uint16_t bottomrightx; 314cabdff1aSopenharmony_ci uint16_t bottomrighty; 315cabdff1aSopenharmony_ci uint8_t uvsamp; 316cabdff1aSopenharmony_ci uint8_t postproc; 317cabdff1aSopenharmony_ci int hrd_num_leaky_buckets; 318cabdff1aSopenharmony_ci uint8_t bit_rate_exponent; 319cabdff1aSopenharmony_ci uint8_t buffer_size_exponent; 320cabdff1aSopenharmony_ci uint8_t* acpred_plane; ///< AC prediction flags bitplane 321cabdff1aSopenharmony_ci int acpred_is_raw; 322cabdff1aSopenharmony_ci uint8_t* over_flags_plane; ///< Overflags bitplane 323cabdff1aSopenharmony_ci int overflg_is_raw; 324cabdff1aSopenharmony_ci uint8_t condover; 325cabdff1aSopenharmony_ci uint8_t range_mapy_flag; 326cabdff1aSopenharmony_ci uint8_t range_mapuv_flag; 327cabdff1aSopenharmony_ci uint8_t range_mapy; 328cabdff1aSopenharmony_ci uint8_t range_mapuv; 329cabdff1aSopenharmony_ci //@} 330cabdff1aSopenharmony_ci 331cabdff1aSopenharmony_ci /** Frame decoding info for interlaced picture */ 332cabdff1aSopenharmony_ci uint8_t dmvrange; ///< Extended differential MV range flag 333cabdff1aSopenharmony_ci int fourmvswitch; 334cabdff1aSopenharmony_ci int intcomp; 335cabdff1aSopenharmony_ci uint8_t lumscale2; ///< for interlaced field P picture 336cabdff1aSopenharmony_ci uint8_t lumshift2; 337cabdff1aSopenharmony_ci VLC* mbmode_vlc; 338cabdff1aSopenharmony_ci VLC* imv_vlc; 339cabdff1aSopenharmony_ci VLC* twomvbp_vlc; 340cabdff1aSopenharmony_ci VLC* fourmvbp_vlc; 341cabdff1aSopenharmony_ci uint8_t twomvbp; 342cabdff1aSopenharmony_ci uint8_t fourmvbp; 343cabdff1aSopenharmony_ci uint8_t* fieldtx_plane; 344cabdff1aSopenharmony_ci int fieldtx_is_raw; 345cabdff1aSopenharmony_ci uint8_t zzi_8x8[64]; 346cabdff1aSopenharmony_ci uint8_t *blk_mv_type_base, *blk_mv_type; ///< 0: frame MV, 1: field MV (interlaced frame) 347cabdff1aSopenharmony_ci uint8_t *mv_f_base, *mv_f[2]; ///< 0: MV obtained from same field, 1: opposite field 348cabdff1aSopenharmony_ci uint8_t *mv_f_next_base, *mv_f_next[2]; 349cabdff1aSopenharmony_ci int field_mode; ///< 1 for interlaced field pictures 350cabdff1aSopenharmony_ci int fptype; 351cabdff1aSopenharmony_ci int second_field; 352cabdff1aSopenharmony_ci int refdist; ///< distance of the current picture from reference 353cabdff1aSopenharmony_ci int numref; ///< number of past field pictures used as reference 354cabdff1aSopenharmony_ci // 0 corresponds to 1 and 1 corresponds to 2 references 355cabdff1aSopenharmony_ci int reffield; ///< if numref = 0 (1 reference) then reffield decides which 356cabdff1aSopenharmony_ci // field to use among the two fields from previous frame 357cabdff1aSopenharmony_ci int intcompfield; ///< which of the two fields to be intensity compensated 358cabdff1aSopenharmony_ci // 0: both fields, 1: bottom field, 2: top field 359cabdff1aSopenharmony_ci int cur_field_type; ///< 0: top, 1: bottom 360cabdff1aSopenharmony_ci int ref_field_type[2]; ///< forward and backward reference field type (top or bottom) 361cabdff1aSopenharmony_ci int blocks_off, mb_off; 362cabdff1aSopenharmony_ci int qs_last; ///< if qpel has been used in the previous (tr.) picture 363cabdff1aSopenharmony_ci int bmvtype; 364cabdff1aSopenharmony_ci int frfd, brfd; ///< reference frame distance (forward or backward) 365cabdff1aSopenharmony_ci int first_pic_header_flag; 366cabdff1aSopenharmony_ci int pic_header_flag; 367cabdff1aSopenharmony_ci int mbmodetab; 368cabdff1aSopenharmony_ci int icbptab; 369cabdff1aSopenharmony_ci int imvtab; 370cabdff1aSopenharmony_ci int twomvbptab; 371cabdff1aSopenharmony_ci int fourmvbptab; 372cabdff1aSopenharmony_ci 373cabdff1aSopenharmony_ci /** Frame decoding info for sprite modes */ 374cabdff1aSopenharmony_ci //@{ 375cabdff1aSopenharmony_ci int new_sprite; 376cabdff1aSopenharmony_ci int two_sprites; 377cabdff1aSopenharmony_ci AVFrame *sprite_output_frame; 378cabdff1aSopenharmony_ci int output_width, output_height, sprite_width, sprite_height; 379cabdff1aSopenharmony_ci uint8_t* sr_rows[2][2]; ///< Sprite resizer line cache 380cabdff1aSopenharmony_ci //@} 381cabdff1aSopenharmony_ci 382cabdff1aSopenharmony_ci int p_frame_skipped; 383cabdff1aSopenharmony_ci int bi_type; 384cabdff1aSopenharmony_ci int x8_type; 385cabdff1aSopenharmony_ci 386cabdff1aSopenharmony_ci int16_t (*block)[6][64]; 387cabdff1aSopenharmony_ci int n_allocated_blks, cur_blk_idx, left_blk_idx, topleft_blk_idx, top_blk_idx; 388cabdff1aSopenharmony_ci uint32_t *cbp_base, *cbp; 389cabdff1aSopenharmony_ci uint8_t *is_intra_base, *is_intra; 390cabdff1aSopenharmony_ci int16_t (*luma_mv_base)[2], (*luma_mv)[2]; 391cabdff1aSopenharmony_ci uint8_t bfraction_lut_index; ///< Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[]) 392cabdff1aSopenharmony_ci uint8_t broken_link; ///< Broken link flag (BROKEN_LINK syntax element) 393cabdff1aSopenharmony_ci uint8_t closed_entry; ///< Closed entry point flag (CLOSED_ENTRY syntax element) 394cabdff1aSopenharmony_ci 395cabdff1aSopenharmony_ci int end_mb_x; ///< Horizontal macroblock limit (used only by mss2) 396cabdff1aSopenharmony_ci 397cabdff1aSopenharmony_ci int parse_only; ///< Context is used within parser 398cabdff1aSopenharmony_ci int resync_marker; ///< could this stream contain resync markers 399cabdff1aSopenharmony_ci} VC1Context; 400cabdff1aSopenharmony_ci 401cabdff1aSopenharmony_ci/** 402cabdff1aSopenharmony_ci * Decode Simple/Main Profiles sequence header 403cabdff1aSopenharmony_ci * @see Figure 7-8, p16-17 404cabdff1aSopenharmony_ci * @param avctx Codec context 405cabdff1aSopenharmony_ci * @param gb GetBit context initialized from Codec context extra_data 406cabdff1aSopenharmony_ci * @return Status 407cabdff1aSopenharmony_ci */ 408cabdff1aSopenharmony_ciint ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb); 409cabdff1aSopenharmony_ci 410cabdff1aSopenharmony_ciint ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb); 411cabdff1aSopenharmony_ci 412cabdff1aSopenharmony_ciint ff_vc1_parse_frame_header (VC1Context *v, GetBitContext *gb); 413cabdff1aSopenharmony_ciint ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext *gb); 414cabdff1aSopenharmony_civoid ff_vc1_init_common(VC1Context *v); 415cabdff1aSopenharmony_ci 416cabdff1aSopenharmony_ciint ff_vc1_decode_init_alloc_tables(VC1Context *v); 417cabdff1aSopenharmony_civoid ff_vc1_init_transposed_scantables(VC1Context *v); 418cabdff1aSopenharmony_ciint ff_vc1_decode_end(AVCodecContext *avctx); 419cabdff1aSopenharmony_civoid ff_vc1_decode_blocks(VC1Context *v); 420cabdff1aSopenharmony_ci 421cabdff1aSopenharmony_civoid ff_vc1_i_overlap_filter(VC1Context *v); 422cabdff1aSopenharmony_civoid ff_vc1_p_overlap_filter(VC1Context *v); 423cabdff1aSopenharmony_civoid ff_vc1_i_loop_filter(VC1Context *v); 424cabdff1aSopenharmony_civoid ff_vc1_p_loop_filter(VC1Context *v); 425cabdff1aSopenharmony_civoid ff_vc1_p_intfr_loop_filter(VC1Context *v); 426cabdff1aSopenharmony_civoid ff_vc1_b_intfi_loop_filter(VC1Context *v); 427cabdff1aSopenharmony_ci 428cabdff1aSopenharmony_civoid ff_vc1_mc_1mv(VC1Context *v, int dir); 429cabdff1aSopenharmony_civoid ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg); 430cabdff1aSopenharmony_civoid ff_vc1_mc_4mv_chroma(VC1Context *v, int dir); 431cabdff1aSopenharmony_civoid ff_vc1_mc_4mv_chroma4(VC1Context *v, int dir, int dir2, int avg); 432cabdff1aSopenharmony_ci 433cabdff1aSopenharmony_civoid ff_vc1_interp_mc(VC1Context *v); 434cabdff1aSopenharmony_ci 435cabdff1aSopenharmony_ci#endif /* AVCODEC_VC1_H */ 436