📄 vopseenc.cpp
字号:
// GMC }// ~GMC if (m_uiSprite == 1) { m_pbitstrmOut -> putBits (m_rctSpt.width, NUMBITS_SPRITE_HDIM, "SPRT_hdim"); m_statsVOL.nBitsHead += NUMBITS_SPRITE_HDIM; m_pbitstrmOut -> putBits (MARKER_BIT, 1, "Marker_Bit"); m_statsVOL.nBitsStuffing ++; m_pbitstrmOut -> putBits (m_rctSpt.height (), NUMBITS_SPRITE_VDIM, "SPRT_vdim"); m_statsVOL.nBitsHead += NUMBITS_SPRITE_VDIM; m_pbitstrmOut -> putBits (MARKER_BIT, 1, "Marker_Bit"); m_statsVOL.nBitsStuffing ++; if (m_rctSpt.left >= 0) { m_pbitstrmOut -> putBits (m_rctSpt.left, NUMBITS_SPRITE_LEFT_EDGE, "SPRT_Left_Edge"); } else { m_pbitstrmOut -> putBits (m_rctSpt.left & 0x00001FFFF, NUMBITS_SPRITE_LEFT_EDGE, "SPRT_Left_Edge"); } m_statsVOL.nBitsHead += NUMBITS_SPRITE_LEFT_EDGE; m_pbitstrmOut -> putBits (MARKER_BIT, 1, "Marker_Bit"); m_statsVOL.nBitsStuffing += 1; if (m_rctSpt.top >= 0) { m_pbitstrmOut -> putBits (m_rctSpt.top, NUMBITS_SPRITE_TOP_EDGE, "SPRT_Top_Edge"); } else { m_pbitstrmOut -> putBits (m_rctSpt.top & 0x00001FFFF, NUMBITS_SPRITE_TOP_EDGE, "SPRT_Top_Edge"); } m_statsVOL.nBitsHead += NUMBITS_SPRITE_TOP_EDGE; m_pbitstrmOut -> putBits (MARKER_BIT, 1, "Marker_Bit"); m_statsVOL.nBitsStuffing += 1;// GMC } if (m_uiSprite == 1 || m_uiSprite == 2) {// ~GMC m_pbitstrmOut -> putBits (m_iNumOfPnts, NUMBITS_NUM_SPRITE_POINTS, "SPRT_Num_Pnt"); m_statsVOL.nBitsHead += NUMBITS_NUM_SPRITE_POINTS; m_pbitstrmOut -> putBits (m_uiWarpingAccuracy, NUMBITS_WARPING_ACCURACY, "SPRT_Warping_Accuracy"); m_statsVOL.nBitsHead += NUMBITS_WARPING_ACCURACY; Bool bLightChange = 0; m_pbitstrmOut -> putBits (bLightChange, 1, "SPRT_Brightness_Change"); m_statsVOL.nBitsHead++;// GMC } if (m_uiSprite == 1) {// ~GMC// Begin: modified by Hughes 4/9/98 if (m_sptMode == BASIC_SPRITE) m_pbitstrmOut -> putBits (FALSE, 1, "Low_latency_sprite_enable"); else m_pbitstrmOut -> putBits (TRUE, 1, "Low_latency_sprite_enable"); m_statsVOL.nBitsHead++;// End: modified by Hughes 4/9/98 } // HHI Schueuer sadct_disable flag inserted // HHI Suehring 991022 only if bitstream version=2 if(m_volmd.uiVerID == 2) { if (m_volmd.fAUsage != RECTANGLE) { if (m_volmd.bSadctDisable) m_pbitstrmOut -> putBits (TRUE, 1, "sadct_disable"); else m_pbitstrmOut -> putBits (FALSE, 1, "sadct_disable"); } } else if(!m_volmd.bSadctDisable) fatal_error("VersionID must = 2 for SADCT to work"); // end sadct // NBIT m_pbitstrmOut -> putBits ((Int) m_volmd.bNot8Bit, 1, "VOL_NOT_8_BIT_VIDEO"); m_statsVOL.nBitsHead++; if (m_volmd.bNot8Bit) { m_pbitstrmOut->putBits ((Int) m_volmd.uiQuantPrecision, 4, "QUANT_PRECISION"); m_pbitstrmOut->putBits ((Int) m_volmd.nBits, 4, "BITS_PER_PIXEL"); m_statsVOL.nBitsHead+=8; } if (m_volmd.fAUsage == EIGHT_BIT) { m_pbitstrmOut -> putBits (m_volmd.bNoGrayQuantUpdate, 1, "VOL_Disable_Gray_Q_Update"); m_pbitstrmOut -> putBits (0, 1, "Composition_Method"); m_pbitstrmOut -> putBits (1, 1, "Linear_Composition"); m_statsVOL.nBitsHead+=3; } m_pbitstrmOut -> putBits ((Int) m_volmd.fQuantizer, 1, "VOL_Quant_Type"); m_statsVOL.nBitsHead++; if (m_volmd.fQuantizer == Q_MPEG) { m_pbitstrmOut -> putBits (m_volmd.bLoadIntraMatrix, 1, "VOL_Load_Q_Matrix (intra)"); m_statsVOL.nBitsHead++; if (m_volmd.bLoadIntraMatrix) { UInt i = 0; do { m_pbitstrmOut -> putBits (m_volmd.rgiIntraQuantizerMatrix [grgiStandardZigzag[i]], NUMBITS_QMATRIX, "VOL_Quant_Matrix(intra)"); m_statsVOL.nBitsHead += NUMBITS_QMATRIX; } while (m_volmd.rgiIntraQuantizerMatrix [grgiStandardZigzag[i]] != 0 && ++i < BLOCK_SQUARE_SIZE); for (UInt j = i; j < BLOCK_SQUARE_SIZE; j++) { m_volmd.rgiIntraQuantizerMatrix [grgiStandardZigzag[j]] = m_volmd.rgiIntraQuantizerMatrix [grgiStandardZigzag[i - 1]]; } } m_pbitstrmOut -> putBits (m_volmd.bLoadInterMatrix, 1, "VOL_Load_Q_Matrix (inter)"); m_statsVOL.nBitsHead++; if (m_volmd.bLoadInterMatrix) { UInt i = 0; do { m_pbitstrmOut -> putBits (m_volmd.rgiInterQuantizerMatrix [grgiStandardZigzag[i]], NUMBITS_QMATRIX, "VOL_Quant_Matrix(intra)"); m_statsVOL.nBitsHead += NUMBITS_QMATRIX; } while (m_volmd.rgiInterQuantizerMatrix [grgiStandardZigzag[i]] != 0 && ++i < BLOCK_SQUARE_SIZE); for (UInt j = i; j < BLOCK_SQUARE_SIZE; j++) { m_volmd.rgiInterQuantizerMatrix [grgiStandardZigzag[j]] = m_volmd.rgiInterQuantizerMatrix [grgiStandardZigzag[i - 1]]; } } if (m_volmd.fAUsage == EIGHT_BIT) { for(Int iAuxComp=0; iAuxComp<m_volmd.iAuxCompCount; iAuxComp++ ) { // MAC (SB) 2-Dec-99 m_pbitstrmOut -> putBits (m_volmd.bLoadIntraMatrixAlpha, 1, "VOL_Load_Alpha_Q_Matrix (intra)"); m_statsVOL.nBitsHead++; if (m_volmd.bLoadIntraMatrixAlpha) { for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) { m_pbitstrmOut -> putBits (m_volmd.rgiIntraQuantizerMatrixAlpha[0] [grgiStandardZigzag[i]], NUMBITS_QMATRIX, "VOL_Alpha_Quant_Matrix(intra)"); m_statsVOL.nBitsHead += NUMBITS_QMATRIX; } } m_pbitstrmOut -> putBits (m_volmd.bLoadInterMatrixAlpha, 1, "VOL_Load_Alpha_Q_Matrix (inter)"); m_statsVOL.nBitsHead++; if (m_volmd.bLoadInterMatrixAlpha) { for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) { m_pbitstrmOut -> putBits (m_volmd.rgiInterQuantizerMatrixAlpha[0] [grgiStandardZigzag[i]], NUMBITS_QMATRIX, "VOL_Alpha_Quant_Matrix(inter)"); m_statsVOL.nBitsHead += NUMBITS_QMATRIX; } } } } } if(m_volmd.uiVerID == 2){ // GMC for Version ID // m_volmd.uiVerID is added for compatibility with version 1 video // this is tentative integration // please change codes if there is any problems // Quarter Sample m_pbitstrmOut -> putBits (m_volmd.bQuarterSample, 1, "VOL_Quarter_Sample"); m_statsVOL.nBitsHead += 1; // ~Quarter Sample } else if(m_volmd.bQuarterSample) fatal_error("VersionID must = 2 for quarter sample motion to work"); // START: Complexity Estimation syntax support - Marc Mongenet (EPFL) - 16 Jun 1998 m_pbitstrmOut -> putBits (m_volmd.bComplexityEstimationDisable, 1, "complexity_estimation_disable"); m_statsVOL.nBitsHead += 1; if (! m_volmd.bComplexityEstimationDisable) { // START: Complexity Estimation syntax support - Update version 2 - Massimo Ravasi (EPFL) - 5 Nov 1999 assert ((m_volmd.iEstimationMethod == 0) || (m_volmd.iEstimationMethod == 1)); // Replaced line: m_volmd.iEstimationMethod = 0; // only known estimation method at now (18 Jun 1998) // iEstimationMethod is now initialized in CSessionEncoder::CSessionEncoder(...) // END: Complexity Estimation syntax support - Update version 2 // START: Complexity Estimation syntax support - Update version 2 - Massimo Ravasi (EPFL) - 11 Nov 1999 // Following lines not necessary: redundant flags to avoid start code emulation // are already computed in sesenc.cpp /* m_volmd.bShapeComplexityEstimationDisable = !(m_volmd.bOpaque || m_volmd.bTransparent || m_volmd.bIntraCAE || m_volmd.bInterCAE || m_volmd.bNoUpdate || m_volmd.bUpsampling); m_volmd.bTextureComplexityEstimationSet1Disable = !(m_volmd.bIntraBlocks || m_volmd.bInterBlocks || m_volmd.bInter4vBlocks || m_volmd.bNotCodedBlocks); m_volmd.bTextureComplexityEstimationSet2Disable = !(m_volmd.bDCTCoefs || m_volmd.bDCTLines || m_volmd.bVLCSymbols || m_volmd.bVLCBits); m_volmd.bMotionCompensationComplexityDisable = !(m_volmd.bAPM || m_volmd.bNPM || m_volmd.bInterpolateMCQ || m_volmd.bForwBackMCQ || m_volmd.bHalfpel2 || m_volmd.bHalfpel4); if (m_volmd.iEstimationMethod == 1) { m_volmd.bVersion2ComplexityEstimationDisable = !(m_volmd.bSadct || m_volmd.bQuarterpel); } */ // END: Complexity Estimation syntax support - Update version 2 // START: Complexity Estimation syntax support - Update version 2 - Massimo Ravasi (EPFL) - 5 Nov 1999 // line: assert ((m_volmd.iEstimationMethod == 0) || (m_volmd.iEstimationMethod == 1)); // changed and moved at the beginning of this block // END: Complexity Estimation syntax support - Update version 2 m_pbitstrmOut -> putBits (m_volmd.iEstimationMethod, 2, "estimation_method"); m_statsVOL.nBitsHead += 2; m_pbitstrmOut -> putBits (m_volmd.bShapeComplexityEstimationDisable, 1, "shape_complexity_estimation_disable"); m_statsVOL.nBitsHead += 1; if (! m_volmd.bShapeComplexityEstimationDisable) { m_pbitstrmOut -> putBits (m_volmd.bOpaque, 1, "opaque"); m_pbitstrmOut -> putBits (m_volmd.bTransparent, 1, "transparent"); m_pbitstrmOut -> putBits (m_volmd.bIntraCAE, 1, "intra_cae"); m_pbitstrmOut -> putBits (m_volmd.bInterCAE, 1, "inter_cae"); m_pbitstrmOut -> putBits (m_volmd.bNoUpdate, 1, "no_update"); m_pbitstrmOut -> putBits (m_volmd.bUpsampling, 1, "upsampling"); m_statsVOL.nBitsHead += 6; } m_pbitstrmOut -> putBits (m_volmd.bTextureComplexityEstimationSet1Disable, 1, "texture_complexity_estimation_set_1_disable"); m_statsVOL.nBitsHead += 1; if (! m_volmd.bTextureComplexityEstimationSet1Disable) { m_pbitstrmOut -> putBits (m_volmd.bIntraBlocks, 1, "intra_blocks"); m_pbitstrmOut -> putBits (m_volmd.bInterBlocks, 1, "inter_blocks"); m_pbitstrmOut -> putBits (m_volmd.bInter4vBlocks, 1, "inter4v_blocks"); m_pbitstrmOut -> putBits (m_volmd.bNotCodedBlocks, 1, "not_coded_blocks"); m_statsVOL.nBitsHead += 4; } m_pbitstrmOut -> putBits (1, 1, "Marker_Bit"); m_statsVOL.nBitsStuffing ++; m_pbitstrmOut -> putBits (m_volmd.bTextureComplexityEstimationSet2Disable, 1, "texture_complexity_estimation_set_2_disable"); m_statsVOL.nBitsHead += 1; if (! m_volmd.bTextureComplexityEstimationSet2Disable) { m_pbitstrmOut -> putBits (m_volmd.bDCTCoefs, 1, "dct_coefs"); m_pbitstrmOut -> putBits (m_volmd.bDCTLines, 1, "dct_lines"); m_pbitstrmOut -> putBits (m_volmd.bVLCSymbols, 1, "vlc_symbols"); m_pbitstrmOut -> putBits (m_volmd.bVLCBits, 1, "vlc_bits"); m_statsVOL.nBitsHead += 4; } m_pbitstrmOut -> putBits (m_volmd.bMotionCompensationComplexityDisable, 1, "motion_compensation_complexity_disable"); m_statsVOL.nBitsHead += 1; if (! m_volmd.bMotionCompensationComplexityDisable) { m_pbitstrmOut -> putBits (m_volmd.bAPM, 1, "apm"); m_pbitstrmOut -> putBits (m_volmd.bNPM, 1, "npm"); m_pbitstrmOut -> putBits (m_volmd.bInterpolateMCQ, 1, "interpolate_mc_q"); m_pbitstrmOut -> putBits (m_volmd.bForwBackMCQ, 1, "forw_back_mc_q"); m_pbitstrmOut -> putBits (m_volmd.bHalfpel2, 1, "halfpel2"); m_pbitstrmOut -> putBits (m_volmd.bHalfpel4, 1, "halfpel4"); m_statsVOL.nBitsHead += 6; } m_pbitstrmOut -> putBits (1, 1, "Marker_Bit"); m_statsVOL.nBitsStuffing ++; // START: Complexity Estimation syntax support - Update version 2 - Massimo Ravasi (EPFL) - 5 Nov 1999 if (m_volmd.iEstimationMethod == 1) { m_pbitstrmOut -> putBits (m_volmd.bVersion2ComplexityEstimationDisable, 1, "version2_complexity_estimation_disable"); m_statsVOL.nBitsHead += 1; if (! m_volmd.bVersion2ComplexityEstimationDisable) { m_pbitstrmOut -> putBits (m_volmd.bSadct, 1, "sadct"); m_pbitstrmOut -> putBits (m_volmd.bQuarterpel, 1, "quarterpel"); m_statsVOL.nBitsHead += 2; } } // END: Complexity Estimation syntax support - Update version 2 } // END: Complexity Estimation syntax support//RESYNC_MARKER_FIX m_pbitstrmOut -> putBits (m_volmd.bResyncMarkerDisable , 1, "VOL_resync_marker_disable");// m_pbitstrmOut -> putBits (0, 1, "VOL_resync_marker_disable");//~RESYNC_MARKER_FIX m_statsVOL.nBitsHead ++; // Modified by Toshiba(1998-4-7) m_pbitstrmOut -> putBits (m_volmd.bDataPartitioning, 1, "VOL_data_partitioning"); m_statsVOL.nBitsHead ++; if( m_volmd.bDataPartitioning ) { m_pbitstrmOut -> putBits (m_volmd.bReversibleVlc, 1, "VOL_reversible_vlc"); m_statsVOL.nBitsHead ++; } // End Toshiba// NEWPRED if(m_volmd.uiVerID != 1) { m_pbitstrmOut -> putBits(m_volmd.bNewpredEnable, NUMBITS_NEWPRED_ENABLE, "*VOL_newpred_enable"); m_statsVOL.nBitsHead += NUMBITS_NEWPRED_ENABLE; if(m_volmd.bNewpredEnable) { m_volmd.iRequestedBackwardMessegeType = NP_REQUESTED_BACKWARD_MESSAGE_TYPE; m_pbitstrmOut -> putBits(m_volmd.iRequestedBackwardMessegeType, NUMBITS_REQUESTED_BACKWARD_MESSAGE_TYPE, "*VOL_requested_backward_message_type"); m_statsVOL.nBitsHead += NUMBITS_REQUESTED_BACKWARD_MESSAGE_TYPE; m_pbitstrmOut -> putBits(m_volmd.bNewpredSegmentType, NUMBITS_NEWPRED_SEGMENT_TYPE, "*VOL_newpred_segment_type"); m_statsVOL.nBitsHead += NUMBITS_NEWPRED_SEGMENT_TYPE; }// RRV insertion m_pbitstrmOut -> putBits (m_volmd.breduced_resolution_vop_enable, 1, "reduced_resolution_vop_enable"); m_statsVOL.nBitsHead ++;// ~RRV }// ~NEWPRED m_pbitstrmOut -> putBits (m_volmd.volType == ENHN_LAYER, 1, "VOL_Scalability"); m_statsVOL.nBitsHead++; if (m_volmd.volType == ENHN_LAYER) {//#ifdef _Scalable_SONY_ m_pbitstrmOut -> putBits (m_volmd.iHierarchyType, 1, "VOL_Hierarchy_Type");//#endif _Scalable_SONY_ m_pbitstrmOut -> putBits (0, 4, "VOL_Ref_Layer_Id"); m_pbitstrmOut -> putBits (0, 1, "VOL_Ref_Layer_Sampling_Dir");/*Added*/ m_pbitstrmOut -> putBits (m_volmd.ihor_sampling_factor_n, 5, "VOL_Horizontal_Sampling_Factor"); //The vm is not very clear about this. m_pbitstrmOut -> putBits (m_volmd.ihor_sampling_factor_m, 5, "VOL_Horizontal_Sampling_Factor_Ref"); //Always 1 m_pbitstrmOut -> putBits (m_volmd.iver_sampling_factor_n, 5, "VOL_Vertical_Sampling_Factor"); //The vm is not very clear about this. m_pbitstrmOut -> putBits (m_volmd.iver_sampling_factor_m, 5, "VOL_Vertical_Sampling_Factor_Ref"); //Always 1//OBSS_SAIT_991015 //for OBSS partial enhancement mode//OBSSFIX_MODE3 m_pbitstrmOut -> putBits (m_volmd.iEnhnType!=0?1:0, 1, "VOL_Ehnancement_Type"); // enhancement_type for scalability// if ( m_volmd.fAUsage == ONE_BIT && m_volmd.iHierarchyType==0) // m_pbitstrmOut -> putBits (m_volmd.iEnhnTypeSpatial!=0?1:0, 1, "VOL_Ehnancement_Type"); // enhancement_type for scalability // modified by Sharp (98/3/24)// else// m_pbitstrmOut -> putBits (m_volmd.iEnhnType!=0?1:0, 1, "VOL_Ehnancement_Type"); // enhancement_type for scalability // modified by Sharp (98/3/24)//~OBSSFIX_MODE3//~OBSS_SAIT_991015 m_statsVOL.nBitsHead += 26;//OBSS_SAIT_991015 if ( m_volmd.fAUsage == ONE_BIT && m_volmd.iHierarchyType==0) { m_pbitstrmOut -> putBits (m_volmd.iuseRefShape, 1, "VOL_Use_Ref_Shape"); m_pbitstrmOut -> putBits (m_volmd.iuseRefTexture, 1, "VOL_Use_Ref_Texture"); m_pbitstrmOut -> putBits (m_volmd.ihor_sampling_factor_n_shape, 5, "VOL_Horizontal_Sampling_Factor_SHAPE"); m_pbitstrmOut -> putBits (m_volmd.ihor_sampling_factor_m_shape, 5, "VOL_Horizontal_Sampling_Factor_Ref_SHAPE"); m_pbitstrmOut -> putBits (m_volmd.iver_sampling_factor_n_shape, 5, "VOL_Vertical_Sampling_Factor_SHAPE"); m_pbitstrmOut -> putBits (m_volmd.iver_sampling_factor_m_shape, 5, "VOL_Vertical_Sampling_Factor_Ref_SHAPE"); m_statsVOL.nBitsHead += 22; }//~OBSS_SAIT_991015 }// Begin: modified by Hughes 4/9/98 per clause 2.1.7.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -