📄 mode.hpp
字号:
/*************************************************************************
This software module was originally developed by
Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
Bruce Lin (blin@microsoft.com), Microsoft Corporation
Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
Simon Winder (swinder@microsoft.com), Microsoft Corporation
(date: March, 1996)
and edited by
Wei Wu (weiwu@stallion.risc.rockwell.com) Rockwell Science Center
and also edited by
Yoshihiro Kikuchi (TOSHIBA CORPORATION)
Takeshi Nagai (TOSHIBA CORPORATION)
Toshiaki Watanabe (TOSHIBA CORPORATION)
Noboru Yamaguchi (TOSHIBA CORPORATION)
Marc Mongenet (Marc.Mongenet@epfl.ch), Swiss Federal Institute of Technology, Lausanne (EPFL)
and also edited by
Mathias Wien (wien@ient.rwth-aachen.de) RWTH Aachen / Robert BOSCH GmbH
and also edited by
Yoshinori Suzuki (Hitachi, Ltd.)
and also edited by
Hideaki Kimata (NTT)
and also edited by
Fujitsu Laboratories Ltd. (contact: Eishi Morimatsu)
and also edited by
Takefumi Nagumo (nagumo@av.crl.sony.co.jp) SONY corporation
Sehoon Son (shson@unitel.co.kr) Samsung AIT
in the course of development of the MPEG-4 Video (ISO/IEC 14496-2).
This software module is an implementation of a part of one or more MPEG-4 Video tools
as specified by the MPEG-4 Video.
ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications
thereof for use in hardware or software products claiming conformance to the MPEG-4 Video.
Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents.
The original developer of this software module and his/her company,
the subsequent editors and their companies,
and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation.
Copyright is not released for non MPEG-4 Video conforming products.
Microsoft retains full right to use the code for his/her own purpose,
assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products.
This copyright notice must be included in all copies or derivative works.
Copyright (c) 1996, 1997.
Module Name:
mode.h
Abstract:
basic coding modes for VO, VOL, VOP, MB and RD
Revision History:
Sept. 29, 1997: add Video Packet, data partition, RVLC by Toshiba
Nov. 27, 1997: add horizontal & vertical sampling factor by Takefumi Nagumo
(nagumo@av.crl.sony.co.jp) SONY
Dec.12 1997 : add interlace tools by NextLevel Systems (General Instrucment),
X. Chen (xchen@nlvl.com) and B. Eifrig (beifrig@nlvl.com)
May. 9 1998 : add boundary by Hyundai Electronics
Cheol-Soo Park (cspark@super5.hyundai.co.kr)
May. 9 1998 : add field based MC padding by Hyundai Electronics
Cheol-Soo Park (cspark@super5.hyundai.co.kr)
Jun.15 1998 : add Complexity Estimation syntax support
Marc Mongenet (Marc.Mongenet@epfl.ch) - EPFL
Feb.16 1999 : add Quarter Sample
Mathias Wien (wien@ient.rwth-aachen.de)
Feb.23 1999 : GMC added by Yoshinori Suzuki (Hitachi, Ltd.)
May 9, 1999 : tm5 rate control by DemoGraFX, duhoff@mediaone.net, (added by mwi)
Aug.24, 1999 : NEWPRED added by Hideaki Kimata (NTT)
Sep.06 1999 : RRV added by Eishi Morimatsu (Fujitsu Laboratories Ltd.)
Feb.01 2000 : Added bBGComposition flag by Takefumi Nagumo (Sony Corporation)
Mar.22 2000 : Added bResyncMarkerDisable by Takefumi Nagumo (Sony Corporation)
*************************************************************************/
#ifndef __MODE_H_
#define __MODE_H_
class CMBMode;
class CDirectModeData;
class CStatistics;
typedef enum {BASE_LAYER, ENHN_LAYER} VOLtype; // will be generlized later
typedef enum {INTRA, INTRAQ, INTER, INTERQ} DCTMode; // define pixel component
typedef enum {DIRECT, INTERPOLATE, BACKWARD, FORWARD} MBType; // define MB type
typedef enum {UNKNOWN_DIR, HORIZONTAL, VERTICAL, DIAGONAL} Direction;
typedef enum {ALL_TRANSP, ALL_OPAQUE, INTRA_CAE, INTER_CAE_MVDZ, INTER_CAE_MVDNZ, MVDZ_NOUPDT, MVDNZ_NOUPDT, UNKNOWN} ShapeMode;
//OBSS_SAIT_991015
typedef enum {INTRA_NOT_CODED, INTRA_CODED, INTER_NOT_CODED, INTER_CODED, UNDEFINED} ShapeSSMode; //for OBSS shape mode
typedef enum {V_SCANNING, H_SCANNING} SIDirection; //for OBSS shape coding
//~OBSS_SAIT_991015
typedef enum {UNTRANSMITTED, TRANSMITTED, UPDATED, FINISHED} MBSptMode; // MB sprite mode
typedef enum {ALPHA_CODED, ALPHA_SKIPPED, ALPHA_ALL255} CODAlpha;
typedef Direction IntraPredDirection; //for readability
typedef Direction CAEScanDirection; //for readability
#ifndef NOT_IN_TABLE
#define NOT_IN_TABLE -1
#endif
#ifndef TCOEF_ESCAPE
#define TCOEF_ESCAPE 102 // see table.13/H.263
#endif
// Added for error resilience mode By Toshiba(1998-1-16:DP+RVLC)
#define TCOEF_RVLC_ESCAPE 169 // see table.
// End Toshiba(1998-1-16:DP+RVLC)
// VM 5.1 Rate Control
#define RC_START_RATE_CONTROL 1
#define RC_MAX_SLIDING_WINDOW 20
#define RC_PAST_PERCENT 0.05
#define RC_SAFETY_MARGIN 0.10
#define RC_SKIP_MARGIN 80
#define RC_MAX_Q_INCREASE 0.25
#define RC_MAX_QUANT 31
#define RC_MIN_QUANT 1
#define MAX_MAC 10
// RRV insertion
typedef struct {
//for parameter input, see Documents
Int iOnOff;
Int iOnOffForI;
Float fC1;
Float fC2;
Float fFR1;
Float fFR2;
Int iQP1;
Int iQP2;
Int iCycle;
//for parameter calculate,decide
Int iRRVOnOff; //1==ON,0==OFF
Int iQcount; //Quantizer counter
Int iQave; //average of Q
Int iPrevOnOff; //OnOff of previous VOP
Int iNumBits; //number of previous bits
Int iCutoffThr; // for encoder
} RRVmodeStr;
// ~RRV
typedef struct MVInfo // for motion vector coding
{
UInt uiRange; // search range
UInt uiFCode; // f-code
UInt uiScaleFactor; // scale factor
} MVInfo;
#define PVOP_MV_PER_REF_PER_MB 9
#define BVOP_MV_PER_REF_PER_MB 5
typedef struct VOLMode // VideoObjectLayer Mode
{
UInt uiVerID; // Version identification // GMC
// type of VOL
VOLtype volType; // what type of VOL
// NBIT: nbit information
Bool bNot8Bit;
UInt uiQuantPrecision;
UInt nBits;
// time info
Int iClockRate; //rate of clock used to count vops in Hz
Double dFrameHz; // Frame frequency (Hz), (floating point in case of 29.97 Hz)
// shape info
AlphaUsage fAUsage; //binary or gray level alpha; or no alpha (rectangle VO)
Int iAlphaShapeExtension;
Int iAuxCompCount;
Bool bShapeOnly; // code only the shape
Int iBinaryAlphaTH; //binary shaperounding parameter
Int iBinaryAlphaRR; //binary shaperounding refresh rate: for Added error resilient mode by Toshiba(1997-11-14)
Bool bNoCrChange; //nobinary shape size conversion
// motion info
Bool bOriginalForME; // flag indicating whether use the original previous VOP for ME
UInt uiWarpingAccuracy; // indicates the quantization accuracy of motion vector for sprite warping
Bool bAdvPredDisable; // No OBMC, (8x8 in the future).
Bool bQuarterSample; // Quarter sample
Bool bRoundingControlDisable;
Int iInitialRoundingType;
// NEWPRED
Bool bNewpredEnable;
int iRequestedBackwardMessegeType;
Bool bNewpredSegmentType;
char *cNewpredRefName;
char *cNewpredSlicePoint;
// ~NEWPRED
//RESYNC_MARKER_FIX
Bool bResyncMarkerDisable; // resync marker Disable
//~RESYNC_MARKER_FIX
Bool bVPBitTh; // Bit threshold for video packet spacing control
Bool bDataPartitioning; // data partitioning
Bool bReversibleVlc; // reversible VLC
// texture coding info
Quantizer fQuantizer; // either H.263 or MPEG
Bool bLoadIntraMatrix; // flag indicating whether to load intra Q-matrix
Int rgiIntraQuantizerMatrix [BLOCK_SQUARE_SIZE]; // Intra Q-Matrix
Bool bLoadInterMatrix; // flag indicating whether to load inter Q-matrix
Int rgiInterQuantizerMatrix [BLOCK_SQUARE_SIZE]; // Inter Q-Matrix
Bool bLoadIntraMatrixAlpha; // flag indicating whether to load intra Q-matrix
Int rgiIntraQuantizerMatrixAlpha[MAX_MAC][BLOCK_SQUARE_SIZE];
Bool bLoadInterMatrixAlpha; // flag indicating whether to load inter Q-matrix
Int rgiInterQuantizerMatrixAlpha[MAX_MAC][BLOCK_SQUARE_SIZE];
Bool bDeblockFilterDisable; // apply deblocking filter or not.
Bool bNoGrayQuantUpdate; // decouple gray quant and dquant
EntropyCodeType fEntropyType; // Entropy code type
// HHI Klaas Schueuer sadct flag
Bool bSadctDisable;
// end HHI
// START: Complexity Estimation syntax support - Marc Mongenet (EPFL) - 15 Jun 1998
Bool bComplexityEstimationDisable;
Int iEstimationMethod;
Bool bShapeComplexityEstimationDisable;
Bool bOpaque;
Bool bTransparent;
Bool bIntraCAE;
Bool bInterCAE;
Bool bNoUpdate;
Bool bUpsampling;
Bool bTextureComplexityEstimationSet1Disable;
Bool bIntraBlocks;
Bool bInterBlocks;
Bool bInter4vBlocks;
Bool bNotCodedBlocks;
Bool bTextureComplexityEstimationSet2Disable;
Bool bDCTCoefs;
Bool bDCTLines;
Bool bVLCSymbols;
Bool bVLCBits;
Bool bMotionCompensationComplexityDisable;
Bool bAPM;
Bool bNPM;
Bool bInterpolateMCQ;
Bool bForwBackMCQ;
Bool bHalfpel2;
Bool bHalfpel4;
// START: Complexity Estimation syntax support - Update version 2 - Massimo Ravasi (EPFL) - 5 Nov 1999
Bool bVersion2ComplexityEstimationDisable;
Bool bSadct;
Bool bQuarterpel;
// END: Complexity Estimation syntax support - Update version 2
// START: Vol Control Parameters
UInt uiVolControlParameters;
UInt uiChromaFormat;
UInt uiLowDelay;
UInt uiVBVParams;
UInt uiBitRate;
UInt uiVbvBufferSize;
UInt uiVbvBufferOccupany;
// END: Vol Control Parameters
// frame rate info
Int iTemporalRate; //no. of input frames between two encoded VOP's assuming 30Hz input
Int iPbetweenI;
Int iBbetweenP;
Int iGOVperiod; //number of VOP from GOV header to next GOV header
//added by SONY 980212
Bool bAllowSkippedPMBs;
// scalability info
//#ifdef _Scalable_SONY_
Int iHierarchyType;
//#endif _Scalable_SONY_
Int iEnhnType; //enhancement type
Int iEnhnTypeSpatial; //for OBSS partial enhancement mode //OBSS_SAIT_991015
Int iSpatialOption;
Int ihor_sampling_factor_m ;
Int ihor_sampling_factor_n ;
Int iver_sampling_factor_m ;
Int iver_sampling_factor_n ;
//OBSS_SAIT_991015
// object based spatial scalability
Int iFrmWidth_SS;
Int iFrmHeight_SS;
Int iuseRefShape;
Int iuseRefTexture;
Int ihor_sampling_factor_m_shape ;
Int ihor_sampling_factor_n_shape ;
Int iver_sampling_factor_m_shape ;
Int iver_sampling_factor_n_shape ;
Bool bSpatialScalability;
//~OBSS_SAIT_991015
// temporal scalability // added by Sharp (98/2/10)
Bool bTemporalScalability;
// statistics dumping options
Bool bDumpMB; // dump statitstics at MB level
Bool bTrace; // dumping trace file
Int iMVRadiusPerFrameAwayFromRef; // MV serach radius per frame away from reference VOP
// RRV insertion
Bool breduced_resolution_vop_enable;
// ~RRV
} VOLMode;
typedef struct VOPMode
{
Int intStepI; //用于I-VOP DCT变换的步长
Int intStep; //用于P-VOP DCT变换的步长
Int intStepB; //用于B-VOPDCT变换的步长
Int intStepIAlpha[MAX_MAC]; //I-VOP中α平面DCT变换的步长
Int intStepPAlpha[MAX_MAC]; //P-VOP中α平面DCT变换的步长
Int intStepBAlpha[MAX_MAC]; //B-VOP中α平面DCT变换的步长
Int intStepDiff; //更新DCT变换步长的差值
VOPpredType vopPredType; //视频对象平面的类型: IVOP, PVOP, BVOP,或者Sprite
Int iIntraDcSwitchThr; //帧内低频带系数的编码阈值
Int iRoundingControl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -