Changeset 1386 in 3DVCSoftware for trunk/source
- Timestamp:
- 13 Nov 2015, 16:29:39 (9 years ago)
- Location:
- trunk/source
- Files:
-
- 117 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/source/App/TAppDecoder/TAppDecCfg.cpp ¶
r1356 r1386 62 62 \param argv array of arguments 63 63 */ 64 Bool TAppDecCfg::parseCfg( Int argc, Char* argv[] )64 Bool TAppDecCfg::parseCfg( Int argc, TChar* argv[] ) 65 65 { 66 66 Bool do_help = false; 67 string cfg_BitstreamFile;68 string cfg_ReconFile;69 67 string cfg_TargetDecLayerIdSetFile; 70 68 #if NH_3D … … 79 77 80 78 ("help", do_help, false, "this help text") 81 ("BitstreamFile,b", cfg_BitstreamFile,string(""), "bitstream input file name")82 ("ReconFile,o", cfg_ReconFile,string(""), "reconstructed YUV output file name\n"79 ("BitstreamFile,b", m_bitstreamFileName, string(""), "bitstream input file name") 80 ("ReconFile,o", m_reconFileName, string(""), "reconstructed YUV output file name\n" 83 81 "YUV writing is skipped if omitted") 84 82 #if NH_3D … … 92 90 ("OutputColourSpaceConvert", outputColourSpaceConvert, string(""), "Colour space conversion to apply to input 444 video. Permitted values are (empty string=UNCHANGED) " + getListOfColourSpaceConverts(false)) 93 91 #if NH_MV 94 ("TargetOptLayerSetIdx,x", m_targetOptLayerSetIdx, -1,"Target output layer set index. (default: -1, determine automatically to be equal to highest layer set index") // Should actually equal to 0 as default. However, this would cause only the base layer to be decoded.92 ("TargetOptLayerSetIdx,x", m_targetOptLayerSetInd, std::vector<Int>(1,-1), "Target output layer set index. (default: -1, determine automatically to be equal to highest layer set index") // Should actually equal to 0 as default. However, this would cause only the base layer to be decoded. 95 93 #endif 96 94 ("MaxTemporalLayer,t", m_iMaxTemporalLayer, -1, "Maximum Temporal Layer to be decoded. -1 to decode all layers") … … 106 104 ("PrintNalus,n", m_printReceivedNalus, false, "Print information on received NAL units") 107 105 #endif 106 ("SEIColourRemappingInfoFilename", m_colourRemapSEIFileName, string(""), "Colour Remapping YUV output file name. If empty, no remapping is applied (ignore SEI message)\n") 107 108 108 #if O0043_BEST_EFFORT_DECODING 109 109 ("ForceDecodeBitDepth", m_forceDecodeBitDepth, 0U, "Force the decoder to operate at a particular bit-depth (best effort decoding)") 110 110 #endif 111 #if NH_MV _SEI111 #if NH_MV 112 112 ("OutputDecodedSEIMessagesFilename,m", m_outputDecodedSEIMessagesFilename, string(""), "When non empty, output decoded SEI messages to the indicated file. If file is '-', then output to stdout\n") 113 113 #else … … 119 119 po::setDefaults(opts); 120 120 po::ErrorReporter err; 121 const list<const Char*>& argv_unhandled = po::scanArgv(opts, argc, (constChar**) argv, err);122 123 for (list<const Char*>::const_iterator it = argv_unhandled.begin(); it != argv_unhandled.end(); it++)121 const list<const TChar*>& argv_unhandled = po::scanArgv(opts, argc, (const TChar**) argv, err); 122 123 for (list<const TChar*>::const_iterator it = argv_unhandled.begin(); it != argv_unhandled.end(); it++) 124 124 { 125 125 fprintf(stderr, "Unhandled argument ignored: `%s'\n", *it); … … 148 148 } 149 149 150 /* convert std::string to c string for compatability */151 m_pchBitstreamFile = cfg_BitstreamFile.empty() ? NULL : strdup(cfg_BitstreamFile.c_str());152 m_pchReconFile = cfg_ReconFile.empty() ? NULL : strdup(cfg_ReconFile.c_str());153 154 150 #if NH_3D 155 151 m_pchScaleOffsetFile = cfg_ScaleOffsetFile.empty() ? NULL : strdup(cfg_ScaleOffsetFile.c_str()); 156 152 #endif 157 153 158 if ( !m_pchBitstreamFile)154 if (m_bitstreamFileName.empty()) 159 155 { 160 156 fprintf(stderr, "No input file specified, aborting\n"); … … 217 213 218 214 #if NH_MV 219 Void TAppDecCfg::xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend,Char*& rpchOutputFileName)215 Void TAppDecCfg::xAppendToFileNameEnd( const TChar* pchInputFileName, const TChar* pchStringToAppend, TChar*& rpchOutputFileName) 220 216 { 221 217 size_t iInLength = strlen(pchInputFileName); 222 218 size_t iAppendLength = strlen(pchStringToAppend); 223 219 224 rpchOutputFileName = ( Char*) malloc(iInLength+iAppendLength+1);225 Char* pCDot = strrchr(pchInputFileName,'.');220 rpchOutputFileName = (TChar*) malloc(iInLength+iAppendLength+1); 221 const TChar* pCDot = strrchr(pchInputFileName,'.'); 226 222 pCDot = pCDot ? pCDot : pchInputFileName + iInLength; 227 223 size_t iCharsToDot = pCDot - pchInputFileName ; -
TabularUnified trunk/source/App/TAppDecoder/TAppDecCfg.h ¶
r1356 r1386 60 60 { 61 61 protected: 62 Char* m_pchBitstreamFile;///< input bitstream file name63 Char* m_pchReconFile;///< output reconstruction file name62 std::string m_bitstreamFileName; ///< input bitstream file name 63 std::string m_reconFileName; ///< output reconstruction file name 64 64 Int m_iSkipFrame; ///< counter for frames prior to the random access point to skip 65 65 Int m_outputBitDepth[MAX_NUM_CHANNEL_TYPE]; ///< bit depth used for writing output … … 69 69 Int m_decodedPictureHashSEIEnabled; ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message 70 70 Bool m_decodedNoDisplaySEIEnabled; ///< Enable(true)/disable(false) writing only pictures that get displayed based on the no display SEI message 71 std::string m_colourRemapSEIFileName; ///< output Colour Remapping file name 71 72 std::vector<Int> m_targetDecLayerIdSet; ///< set of LayerIds to be included in the sub-bitstream extraction process. 72 73 … … 78 79 Bool m_bClipOutputVideoToRec709Range; ///< If true, clip the output video to the Rec 709 range on saving. 79 80 #if NH_MV 80 std::vector< Char*> m_pchReconFiles;///< array of output reconstruction file name create from output reconstruction file name81 std::vector<TChar*> m_pchReconFiles; ///< array of output reconstruction file name create from output reconstruction file name 81 82 82 Int m_targetOptLayerSetIdx; ///< target output layer set index 83 std::vector<Int> m_targetOptLayerSetInd; ///< target output layer set indices (multiple decoding when more than one element, e.g. for additional layer sets) 84 Int m_targetOptLayerSetIdx; ///< current target output layer set index 85 83 86 Int m_targetDecLayerSetIdx; 84 87 Int m_baseLayerOutputFlag; 85 88 Int m_baseLayerPicOutputFlag; 86 89 Int m_auOutputFlag; 87 Int m_maxLayerId; 90 Int m_maxLayerId; ///< maximum nuh_layer_id decoded 88 91 std::ifstream m_bitstreamFile; 89 92 Int m_highestTid; 90 93 Bool m_targetDecLayerIdSetFileEmpty; ///< indication if target layers are given by file 91 94 92 Bool m_printVpsInfo; ///< Output VPS information95 Bool m_printVpsInfo; ///< Output VPS information 93 96 Bool m_printPicOutput; ///< Print information on picture output 94 97 Bool m_printReceivedNalus; ///< Print information on received NAL units 95 98 #if NH_3D 96 Char*m_pchScaleOffsetFile; ///< output coded scale and offset parameters99 TChar* m_pchScaleOffsetFile; ///< output coded scale and offset parameters 97 100 Bool m_depth420OutputFlag; ///< output depth layers in 4:2:0 98 101 #endif 99 102 100 Void xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend,Char*& rpchOutputFileName); ///< create filenames103 Void xAppendToFileNameEnd( const TChar* pchInputFileName, const TChar* pchStringToAppend, TChar*& rpchOutputFileName); ///< create filenames 101 104 #endif 102 105 103 106 public: 104 107 TAppDecCfg() 105 : m_ pchBitstreamFile(NULL)106 , m_ pchReconFile(NULL)108 : m_bitstreamFileName() 109 , m_reconFileName() 107 110 , m_iSkipFrame(0) 111 // m_outputBitDepth array initialised below 108 112 , m_outputColourSpaceConvert(IPCOLOURSPACE_UNCHANGED) 109 113 , m_iMaxTemporalLayer(-1) 110 114 , m_decodedPictureHashSEIEnabled(0) 111 115 , m_decodedNoDisplaySEIEnabled(false) 116 , m_colourRemapSEIFileName() 117 , m_targetDecLayerIdSet() 112 118 , m_respectDefDispWindow(0) 113 119 #if O0043_BEST_EFFORT_DECODING 114 120 , m_forceDecodeBitDepth(0) 115 121 #endif 122 , m_outputDecodedSEIMessagesFilename() 123 , m_bClipOutputVideoToRec709Range(false) 116 124 #if NH_MV 117 125 , m_highestTid(-1) … … 131 139 virtual ~TAppDecCfg() {} 132 140 133 Bool parseCfg ( Int argc, Char* argv[] ); ///< initialize option class from configuration 141 Bool parseCfg ( Int argc, TChar* argv[] ); ///< initialize option class from configuration 142 #if NH_MV 143 Int getNumDecodings ( ) { return (Int) m_targetOptLayerSetInd.size(); }; 144 #endif 134 145 }; 135 146 -
TabularUnified trunk/source/App/TAppDecoder/TAppDecTop.cpp ¶
r1321 r1386 62 62 : m_numDecoders( 0 ) 63 63 #endif 64 ,m_pcSeiColourRemappingInfoPrevious(NULL) 64 65 { 65 66 #if NH_MV … … 118 119 xDestroyDecLib(); 119 120 #endif 120 121 if (m_pchBitstreamFile) 122 { 123 free (m_pchBitstreamFile); 124 m_pchBitstreamFile = NULL; 125 } 121 m_bitstreamFileName.clear(); 126 122 #if NH_MV 127 123 for (Int decIdx = 0; decIdx < m_numDecoders; decIdx++) … … 134 130 } 135 131 #endif 136 if (m_pchReconFile) 137 { 138 free (m_pchReconFile); 139 m_pchReconFile = NULL; 140 } 132 m_reconFileName.clear(); 141 133 #if NH_3D 142 134 if (m_pchScaleOffsetFile) … … 160 152 . 161 153 */ 162 163 154 #if NH_MV 164 Void TAppDecTop::decode() 165 { 155 Void TAppDecTop::decode( Int num ) 156 { 157 m_targetOptLayerSetIdx = m_targetOptLayerSetInd[ num ]; 166 158 // create & initialize internal classes 167 159 xInitFileIO (); … … 221 213 222 214 #if !NH_MV 223 Void TAppDecTop::decode( )215 Void TAppDecTop::decode( ) 224 216 { 225 217 Int poc; 226 218 TComList<TComPic*>* pcListPic = NULL; 227 219 228 ifstream bitstreamFile(m_ pchBitstreamFile, ifstream::in | ifstream::binary);220 ifstream bitstreamFile(m_bitstreamFileName.c_str(), ifstream::in | ifstream::binary); 229 221 if (!bitstreamFile) 230 222 { 231 fprintf(stderr, "\nfailed to open bitstream file `%s' for reading\n", m_ pchBitstreamFile);223 fprintf(stderr, "\nfailed to open bitstream file `%s' for reading\n", m_bitstreamFileName.c_str()); 232 224 exit(EXIT_FAILURE); 233 225 } … … 250 242 251 243 m_iPOCLastDisplay += m_iSkipFrame; // set the last displayed POC correctly for skip forward. 244 245 // clear contents of colour-remap-information-SEI output file 246 if (!m_colourRemapSEIFileName.empty()) 247 { 248 std::ofstream ofile(m_colourRemapSEIFileName.c_str()); 249 if (!ofile.good() || !ofile.is_open()) 250 { 251 fprintf(stderr, "\nUnable to open file '%s' for writing colour-remap-information-SEI video\n", m_colourRemapSEIFileName.c_str()); 252 exit(EXIT_FAILURE); 253 } 254 } 252 255 253 256 // main decoder loop … … 336 339 if( pcListPic ) 337 340 { 338 if ( m_pchReconFile && !openedReconFile)341 if ( (!m_reconFileName.empty()) && (!openedReconFile) ) 339 342 { 340 343 const BitDepths &bitDepths=pcListPic->front()->getPicSym()->getSPS().getBitDepths(); // use bit depths of first reconstructed picture. … … 346 349 } 347 350 } 348 m_cTVideoIOYuvReconFile.open( m_pchReconFile, true, m_outputBitDepth, m_outputBitDepth, bitDepths.recon ); // write mode 351 352 m_cTVideoIOYuvReconFile.open( m_reconFileName, true, m_outputBitDepth, m_outputBitDepth, bitDepths.recon ); // write mode 349 353 openedReconFile = true; 350 354 } … … 436 440 } 437 441 #else 438 if ( m_pchReconFile)442 if ( !m_reconFileName.empty() ) 439 443 { 440 444 m_cTVideoIOYuvReconFile. close(); … … 444 448 m_cTDecTop.destroy(); 445 449 #endif 450 if (m_pcSeiColourRemappingInfoPrevious != NULL) 451 { 452 delete m_pcSeiColourRemappingInfoPrevious; 453 m_pcSeiColourRemappingInfoPrevious = NULL; 454 } 446 455 #if NH_3D 447 456 m_cCamParsCollector.uninit(); … … 474 483 } 475 484 #endif 485 if (m_pcSeiColourRemappingInfoPrevious != NULL) 486 { 487 delete m_pcSeiColourRemappingInfoPrevious; 488 m_pcSeiColourRemappingInfoPrevious = NULL; 489 } 476 490 } 477 491 … … 549 563 // write to file 550 564 numPicsNotYetDisplayed = numPicsNotYetDisplayed-2; 551 if ( m_pchReconFile)565 if ( !m_reconFileName.empty() ) 552 566 { 553 567 const Window &conf = pcPicTop->getConformanceWindow(); … … 617 631 dpbFullness--; 618 632 } 619 if ( m_pchReconFile)633 if ( !m_reconFileName.empty() ) 620 634 { 621 635 const Window &conf = pcPic->getConformanceWindow(); … … 631 645 } 632 646 647 if (!m_colourRemapSEIFileName.empty()) 648 { 649 xOutputColourRemapPic(pcPic); 650 } 651 633 652 // update POC of display order 634 653 m_iPOCLastDisplay = pcPic->getPOC(); … … 678 697 // write to file 679 698 680 if ( m_pchReconFile)699 if ( !m_reconFileName.empty() ) 681 700 { 682 701 const Window &conf = pcPicTop->getConformanceWindow(); … … 736 755 { 737 756 // write to file 738 if ( m_pchReconFile)757 if ( !m_reconFileName.empty() ) 739 758 { 740 759 const Window &conf = pcPic->getConformanceWindow(); … … 749 768 } 750 769 770 if (!m_colourRemapSEIFileName.empty()) 771 { 772 xOutputColourRemapPic(pcPic); 773 } 774 751 775 // update POC of display order 752 776 m_iPOCLastDisplay = pcPic->getPOC(); … … 1068 1092 m_newVpsActivatedbyCurAu = true; //TBD 1069 1093 m_newVpsActivatedbyCurPic = true; 1070 #if NH_3D 1094 #if NH_3D_VSO 1071 1095 m_dpb.setVPS( m_vps ); 1072 1096 #endif … … 1232 1256 } 1233 1257 1234 if ( m_printVpsInfo && ( m_decProcCvsg == ANNEX_F ) )1258 if ( m_printVpsInfo && ( m_decProcCvsg == ANNEX_F ) && ( m_targetOptLayerSetIdx == m_targetOptLayerSetInd[ 0 ] ) ) 1235 1259 { 1236 1260 m_vps->printScalabilityId(); … … 1979 2003 // - After all slices of the current picture have been decoded, the decoding process for ending the decoding of a 1980 2004 // coded picture with nuh_layer_id greater than 0 specified in clause F.8.1.6 is invoked. 1981 xF816decProcEndDecOfCodPicLIdGrtZero( ); 2005 xF816decProcEndDecOfCodPicLIdGrtZero( ); 1982 2006 } 1983 2007 … … 2671 2695 2672 2696 // create recon file related stuff 2673 Char* pchTempFilename = NULL;2674 if ( m_pchReconFile)2675 { 2676 Char buffer[4];2697 TChar* pchTempFilename = NULL; 2698 if ( !m_reconFileName.empty() ) 2699 { 2700 TChar buffer[4]; 2677 2701 sprintf(buffer,"_%i", layerId ); 2678 assert ( m_pchReconFile);2679 xAppendToFileNameEnd( m_ pchReconFile, buffer, pchTempFilename );2702 assert ( !m_reconFileName.empty() ); 2703 xAppendToFileNameEnd( m_reconFileName.c_str() , buffer, pchTempFilename ); 2680 2704 assert( m_pchReconFiles.size() == m_numDecoders ); 2681 2705 } … … 2870 2894 Void TAppDecTop::xInitFileIO() 2871 2895 { 2872 m_bitstreamFile.open(m_ pchBitstreamFile, ifstream::in | ifstream::binary);2896 m_bitstreamFile.open(m_bitstreamFileName.c_str(), ifstream::in | ifstream::binary); 2873 2897 2874 2898 if ( !m_bitstreamFile) 2875 2899 { 2876 fprintf(stderr, "\nUnable to open bitstream file `%s' for reading\n", m_ pchBitstreamFile);2900 fprintf(stderr, "\nUnable to open bitstream file `%s' for reading\n", m_bitstreamFileName.c_str()); 2877 2901 exit(EXIT_FAILURE); 2878 2902 } … … 2905 2929 Int decIdx = xGetDecoderIdx( curPic->getLayerId() ); 2906 2930 2907 if ( m_pchReconFile&& !m_reconOpen[decIdx] )2931 if ( !m_reconFileName.empty() && !m_reconOpen[decIdx] ) 2908 2932 { 2909 2933 const BitDepths &bitDepths= curPic->getPicSym()->getSPS().getBitDepths(); // use bit depths of first reconstructed picture. … … 3007 3031 3008 3032 #endif 3033 3034 Void TAppDecTop::xOutputColourRemapPic(TComPic* pcPic) 3035 { 3036 const TComSPS &sps=pcPic->getPicSym()->getSPS(); 3037 SEIMessages colourRemappingInfo = getSeisByType(pcPic->getSEIs(), SEI::COLOUR_REMAPPING_INFO ); 3038 SEIColourRemappingInfo *seiColourRemappingInfo = ( colourRemappingInfo.size() > 0 ) ? (SEIColourRemappingInfo*) *(colourRemappingInfo.begin()) : NULL; 3039 3040 if (colourRemappingInfo.size() > 1) 3041 { 3042 printf ("Warning: Got multiple Colour Remapping Information SEI messages. Using first."); 3043 } 3044 if (seiColourRemappingInfo) 3045 { 3046 applyColourRemapping(*pcPic->getPicYuvRec(), *seiColourRemappingInfo, sps); 3047 3048 // save the last CRI SEI received 3049 if (m_pcSeiColourRemappingInfoPrevious == NULL) 3050 { 3051 m_pcSeiColourRemappingInfoPrevious = new SEIColourRemappingInfo(); 3052 } 3053 m_pcSeiColourRemappingInfoPrevious->copyFrom(*seiColourRemappingInfo); 3054 } 3055 else // using the last CRI SEI received 3056 { 3057 // TODO: prevent persistence of CRI SEI across C(L)VS. 3058 if (m_pcSeiColourRemappingInfoPrevious != NULL) 3059 { 3060 if (m_pcSeiColourRemappingInfoPrevious->m_colourRemapPersistenceFlag == false) 3061 { 3062 printf("Warning No SEI-CRI message is present for the current picture, persistence of the CRI is not managed\n"); 3063 } 3064 applyColourRemapping(*pcPic->getPicYuvRec(), *m_pcSeiColourRemappingInfoPrevious, sps); 3065 } 3066 } 3067 } 3068 3069 // compute lut from SEI 3070 // use at lutPoints points aligned on a power of 2 value 3071 // SEI Lut must be in ascending values of coded Values 3072 static std::vector<Int> 3073 initColourRemappingInfoLut(const Int bitDepth_in, // bit-depth of the input values of the LUT 3074 const Int nbDecimalValues, // Position of the fixed point 3075 const std::vector<SEIColourRemappingInfo::CRIlut> &lut, 3076 const Int maxValue, // maximum output value 3077 const Int lutOffset) 3078 { 3079 const Int lutPoints = (1 << bitDepth_in) + 1 ; 3080 std::vector<Int> retLut(lutPoints); 3081 3082 // missing values: need to define default values before first definition (check codedValue[0] == 0) 3083 Int iTargetPrev = (lut.size() && lut[0].codedValue == 0) ? lut[0].targetValue: 0; 3084 Int startPivot = (lut.size())? ((lut[0].codedValue == 0)? 1: 0): 1; 3085 Int iCodedPrev = 0; 3086 // set max value with the coded bit-depth 3087 // + ((1 << nbDecimalValues) - 1) is for the added bits 3088 const Int maxValueFixedPoint = (maxValue << nbDecimalValues) + ((1 << nbDecimalValues) - 1); 3089 3090 Int iValue = 0; 3091 3092 for ( Int iPivot=startPivot ; iPivot < (Int)lut.size(); iPivot++ ) 3093 { 3094 Int iCodedNext = lut[iPivot].codedValue; 3095 Int iTargetNext = lut[iPivot].targetValue; 3096 3097 // ensure correct bit depth and avoid overflow in lut address 3098 Int iCodedNext_bitDepth = std::min(iCodedNext, (1 << bitDepth_in)); 3099 3100 const Int divValue = (iCodedNext - iCodedPrev > 0)? (iCodedNext - iCodedPrev): 1; 3101 const Int lutValInit = (lutOffset + iTargetPrev) << nbDecimalValues; 3102 const Int roundValue = divValue / 2; 3103 for ( ; iValue<iCodedNext_bitDepth; iValue++ ) 3104 { 3105 Int value = iValue; 3106 Int interpol = ((((value-iCodedPrev) * (iTargetNext - iTargetPrev)) << nbDecimalValues) + roundValue) / divValue; 3107 retLut[iValue] = std::min(lutValInit + interpol , maxValueFixedPoint); 3108 } 3109 iCodedPrev = iCodedNext; 3110 iTargetPrev = iTargetNext; 3111 } 3112 // fill missing values if necessary 3113 if(iCodedPrev < (1 << bitDepth_in)+1) 3114 { 3115 Int iCodedNext = (1 << bitDepth_in); 3116 Int iTargetNext = (1 << bitDepth_in) - 1; 3117 3118 const Int divValue = (iCodedNext - iCodedPrev > 0)? (iCodedNext - iCodedPrev): 1; 3119 const Int lutValInit = (lutOffset + iTargetPrev) << nbDecimalValues; 3120 const Int roundValue = divValue / 2; 3121 3122 for ( ; iValue<=iCodedNext; iValue++ ) 3123 { 3124 Int value = iValue; 3125 Int interpol = ((((value-iCodedPrev) * (iTargetNext - iTargetPrev)) << nbDecimalValues) + roundValue) / divValue; 3126 retLut[iValue] = std::min(lutValInit + interpol , maxValueFixedPoint); 3127 } 3128 } 3129 return retLut; 3130 } 3131 3132 static Void 3133 initColourRemappingInfoLuts(std::vector<Int> (&preLut)[3], 3134 std::vector<Int> (&postLut)[3], 3135 SEIColourRemappingInfo &pCriSEI, 3136 const Int maxBitDepth) 3137 { 3138 Int internalBitDepth = pCriSEI.m_colourRemapBitDepth; 3139 for ( Int c=0 ; c<3 ; c++ ) 3140 { 3141 std::sort(pCriSEI.m_preLut[c].begin(), pCriSEI.m_preLut[c].end()); // ensure preLut is ordered in ascending values of codedValues 3142 preLut[c] = initColourRemappingInfoLut(pCriSEI.m_colourRemapInputBitDepth, maxBitDepth - pCriSEI.m_colourRemapInputBitDepth, pCriSEI.m_preLut[c], ((1 << internalBitDepth) - 1), 0); //Fill preLut 3143 3144 std::sort(pCriSEI.m_postLut[c].begin(), pCriSEI.m_postLut[c].end()); // ensure postLut is ordered in ascending values of codedValues 3145 postLut[c] = initColourRemappingInfoLut(pCriSEI.m_colourRemapBitDepth, maxBitDepth - pCriSEI.m_colourRemapBitDepth, pCriSEI.m_postLut[c], (1 << internalBitDepth) - 1, 0); //Fill postLut 3146 } 3147 } 3148 3149 // apply lut. 3150 // Input lut values are aligned on power of 2 boundaries 3151 static Int 3152 applyColourRemappingInfoLut1D(Int inVal, const std::vector<Int> &lut, const Int inValPrecisionBits) 3153 { 3154 const Int roundValue = (inValPrecisionBits)? 1 << (inValPrecisionBits - 1): 0; 3155 inVal = std::min(std::max(0, inVal), (Int)(((lut.size()-1) << inValPrecisionBits))); 3156 Int index = (Int) std::min((inVal >> inValPrecisionBits), (Int)(lut.size()-2)); 3157 Int outVal = (( inVal - (index<<inValPrecisionBits) ) * (lut[index+1] - lut[index]) + roundValue) >> inValPrecisionBits; 3158 outVal += lut[index] ; 3159 3160 return outVal; 3161 } 3162 3163 static Int 3164 applyColourRemappingInfoMatrix(const Int (&colourRemapCoeffs)[3], const Int postOffsetShift, const Int p0, const Int p1, const Int p2, const Int offset) 3165 { 3166 Int YUVMat = (colourRemapCoeffs[0]* p0 + colourRemapCoeffs[1]* p1 + colourRemapCoeffs[2]* p2 + offset) >> postOffsetShift; 3167 return YUVMat; 3168 } 3169 3170 static Void 3171 setColourRemappingInfoMatrixOffset(Int (&matrixOffset)[3], Int offset0, Int offset1, Int offset2) 3172 { 3173 matrixOffset[0] = offset0; 3174 matrixOffset[1] = offset1; 3175 matrixOffset[2] = offset2; 3176 } 3177 3178 static Void 3179 setColourRemappingInfoMatrixOffsets( Int (&matrixInputOffset)[3], 3180 Int (&matrixOutputOffset)[3], 3181 const Int bitDepth, 3182 const Bool crInputFullRangeFlag, 3183 const Int crInputMatrixCoefficients, 3184 const Bool crFullRangeFlag, 3185 const Int crMatrixCoefficients) 3186 { 3187 // set static matrix offsets 3188 Int crInputOffsetLuma = (crInputFullRangeFlag)? 0:-(16 << (bitDepth-8)); 3189 Int crOffsetLuma = (crFullRangeFlag)? 0:(16 << (bitDepth-8)); 3190 Int crInputOffsetChroma = 0; 3191 Int crOffsetChroma = 0; 3192 3193 switch(crInputMatrixCoefficients) 3194 { 3195 case MATRIX_COEFFICIENTS_RGB: 3196 crInputOffsetChroma = 0; 3197 if(!crInputFullRangeFlag) 3198 { 3199 fprintf(stderr, "WARNING: crInputMatrixCoefficients set to MATRIX_COEFFICIENTS_RGB and crInputFullRangeFlag not set\n"); 3200 crInputOffsetLuma = 0; 3201 } 3202 break; 3203 case MATRIX_COEFFICIENTS_UNSPECIFIED: 3204 case MATRIX_COEFFICIENTS_BT709: 3205 case MATRIX_COEFFICIENTS_BT2020_NON_CONSTANT_LUMINANCE: 3206 crInputOffsetChroma = -(1 << (bitDepth-1)); 3207 break; 3208 default: 3209 fprintf(stderr, "WARNING: crInputMatrixCoefficients set to undefined value: %d\n", crInputMatrixCoefficients); 3210 } 3211 3212 switch(crMatrixCoefficients) 3213 { 3214 case MATRIX_COEFFICIENTS_RGB: 3215 crOffsetChroma = 0; 3216 if(!crFullRangeFlag) 3217 { 3218 fprintf(stderr, "WARNING: crMatrixCoefficients set to MATRIX_COEFFICIENTS_RGB and crInputFullRangeFlag not set\n"); 3219 crOffsetLuma = 0; 3220 } 3221 break; 3222 case MATRIX_COEFFICIENTS_UNSPECIFIED: 3223 case MATRIX_COEFFICIENTS_BT709: 3224 case MATRIX_COEFFICIENTS_BT2020_NON_CONSTANT_LUMINANCE: 3225 crOffsetChroma = (1 << (bitDepth-1)); 3226 break; 3227 default: 3228 fprintf(stderr, "WARNING: crMatrixCoefficients set to undefined value: %d\n", crMatrixCoefficients); 3229 } 3230 3231 setColourRemappingInfoMatrixOffset(matrixInputOffset, crInputOffsetLuma, crInputOffsetChroma, crInputOffsetChroma); 3232 setColourRemappingInfoMatrixOffset(matrixOutputOffset, crOffsetLuma, crOffsetChroma, crOffsetChroma); 3233 } 3234 3235 Void TAppDecTop::applyColourRemapping(const TComPicYuv& pic, SEIColourRemappingInfo& criSEI, const TComSPS &activeSPS) 3236 { 3237 const Int maxBitDepth = 16; 3238 3239 // create colour remapped picture 3240 if( !criSEI.m_colourRemapCancelFlag && pic.getChromaFormat()!=CHROMA_400) // 4:0:0 not supported. 3241 { 3242 const Int iHeight = pic.getHeight(COMPONENT_Y); 3243 const Int iWidth = pic.getWidth(COMPONENT_Y); 3244 const ChromaFormat chromaFormatIDC = pic.getChromaFormat(); 3245 3246 TComPicYuv picYuvColourRemapped; 3247 picYuvColourRemapped.createWithoutCUInfo( iWidth, iHeight, chromaFormatIDC ); 3248 3249 const Int iStrideIn = pic.getStride(COMPONENT_Y); 3250 const Int iCStrideIn = pic.getStride(COMPONENT_Cb); 3251 const Int iStrideOut = picYuvColourRemapped.getStride(COMPONENT_Y); 3252 const Int iCStrideOut = picYuvColourRemapped.getStride(COMPONENT_Cb); 3253 const Bool b444 = ( pic.getChromaFormat() == CHROMA_444 ); 3254 const Bool b422 = ( pic.getChromaFormat() == CHROMA_422 ); 3255 const Bool b420 = ( pic.getChromaFormat() == CHROMA_420 ); 3256 3257 std::vector<Int> preLut[3]; 3258 std::vector<Int> postLut[3]; 3259 Int matrixInputOffset[3]; 3260 Int matrixOutputOffset[3]; 3261 const Pel *YUVIn[MAX_NUM_COMPONENT]; 3262 Pel *YUVOut[MAX_NUM_COMPONENT]; 3263 YUVIn[COMPONENT_Y] = pic.getAddr(COMPONENT_Y); 3264 YUVIn[COMPONENT_Cb] = pic.getAddr(COMPONENT_Cb); 3265 YUVIn[COMPONENT_Cr] = pic.getAddr(COMPONENT_Cr); 3266 YUVOut[COMPONENT_Y] = picYuvColourRemapped.getAddr(COMPONENT_Y); 3267 YUVOut[COMPONENT_Cb] = picYuvColourRemapped.getAddr(COMPONENT_Cb); 3268 YUVOut[COMPONENT_Cr] = picYuvColourRemapped.getAddr(COMPONENT_Cr); 3269 3270 const Int bitDepth = criSEI.m_colourRemapBitDepth; 3271 BitDepths bitDepthsCriFile; 3272 bitDepthsCriFile.recon[CHANNEL_TYPE_LUMA] = bitDepth; 3273 bitDepthsCriFile.recon[CHANNEL_TYPE_CHROMA] = bitDepth; // Different bitdepth is not implemented 3274 3275 const Int postOffsetShift = criSEI.m_log2MatrixDenom; 3276 const Int matrixRound = 1 << (postOffsetShift - 1); 3277 const Int postLutInputPrecision = (maxBitDepth - criSEI.m_colourRemapBitDepth); 3278 3279 if ( ! criSEI.m_colourRemapVideoSignalInfoPresentFlag ) // setting default 3280 { 3281 setColourRemappingInfoMatrixOffsets(matrixInputOffset, matrixOutputOffset, maxBitDepth, 3282 activeSPS.getVuiParameters()->getVideoFullRangeFlag(), activeSPS.getVuiParameters()->getMatrixCoefficients(), 3283 activeSPS.getVuiParameters()->getVideoFullRangeFlag(), activeSPS.getVuiParameters()->getMatrixCoefficients()); 3284 } 3285 else 3286 { 3287 setColourRemappingInfoMatrixOffsets(matrixInputOffset, matrixOutputOffset, maxBitDepth, 3288 activeSPS.getVuiParameters()->getVideoFullRangeFlag(), activeSPS.getVuiParameters()->getMatrixCoefficients(), 3289 criSEI.m_colourRemapFullRangeFlag, criSEI.m_colourRemapMatrixCoefficients); 3290 } 3291 3292 // add matrix rounding to output matrix offsets 3293 matrixOutputOffset[0] = (matrixOutputOffset[0] << postOffsetShift) + matrixRound; 3294 matrixOutputOffset[1] = (matrixOutputOffset[1] << postOffsetShift) + matrixRound; 3295 matrixOutputOffset[2] = (matrixOutputOffset[2] << postOffsetShift) + matrixRound; 3296 3297 // Merge matrixInputOffset and matrixOutputOffset to matrixOutputOffset 3298 matrixOutputOffset[0] += applyColourRemappingInfoMatrix(criSEI.m_colourRemapCoeffs[0], 0, matrixInputOffset[0], matrixInputOffset[1], matrixInputOffset[2], 0); 3299 matrixOutputOffset[1] += applyColourRemappingInfoMatrix(criSEI.m_colourRemapCoeffs[1], 0, matrixInputOffset[0], matrixInputOffset[1], matrixInputOffset[2], 0); 3300 matrixOutputOffset[2] += applyColourRemappingInfoMatrix(criSEI.m_colourRemapCoeffs[2], 0, matrixInputOffset[0], matrixInputOffset[1], matrixInputOffset[2], 0); 3301 3302 // rescaling output: include CRI/output frame difference 3303 const Int scaleShiftOut_neg = abs(bitDepth - maxBitDepth); 3304 const Int scaleOut_round = 1 << (scaleShiftOut_neg-1); 3305 3306 initColourRemappingInfoLuts(preLut, postLut, criSEI, maxBitDepth); 3307 3308 assert(pic.getChromaFormat() != CHROMA_400); 3309 const Int hs = pic.getComponentScaleX(ComponentID(COMPONENT_Cb)); 3310 const Int maxOutputValue = (1 << bitDepth) - 1; 3311 3312 for( Int y = 0; y < iHeight; y++ ) 3313 { 3314 for( Int x = 0; x < iWidth; x++ ) 3315 { 3316 const Int xc = (x>>hs); 3317 Bool computeChroma = b444 || ((b422 || !(y&1)) && !(x&1)); 3318 3319 Int YUVPre_0 = applyColourRemappingInfoLut1D(YUVIn[COMPONENT_Y][x], preLut[0], 0); 3320 Int YUVPre_1 = applyColourRemappingInfoLut1D(YUVIn[COMPONENT_Cb][xc], preLut[1], 0); 3321 Int YUVPre_2 = applyColourRemappingInfoLut1D(YUVIn[COMPONENT_Cr][xc], preLut[2], 0); 3322 3323 Int YUVMat_0 = applyColourRemappingInfoMatrix(criSEI.m_colourRemapCoeffs[0], postOffsetShift, YUVPre_0, YUVPre_1, YUVPre_2, matrixOutputOffset[0]); 3324 Int YUVLutB_0 = applyColourRemappingInfoLut1D(YUVMat_0, postLut[0], postLutInputPrecision); 3325 YUVOut[COMPONENT_Y][x] = std::min(maxOutputValue, (YUVLutB_0 + scaleOut_round) >> scaleShiftOut_neg); 3326 3327 if( computeChroma ) 3328 { 3329 Int YUVMat_1 = applyColourRemappingInfoMatrix(criSEI.m_colourRemapCoeffs[1], postOffsetShift, YUVPre_0, YUVPre_1, YUVPre_2, matrixOutputOffset[1]); 3330 Int YUVLutB_1 = applyColourRemappingInfoLut1D(YUVMat_1, postLut[1], postLutInputPrecision); 3331 YUVOut[COMPONENT_Cb][xc] = std::min(maxOutputValue, (YUVLutB_1 + scaleOut_round) >> scaleShiftOut_neg); 3332 3333 Int YUVMat_2 = applyColourRemappingInfoMatrix(criSEI.m_colourRemapCoeffs[2], postOffsetShift, YUVPre_0, YUVPre_1, YUVPre_2, matrixOutputOffset[2]); 3334 Int YUVLutB_2 = applyColourRemappingInfoLut1D(YUVMat_2, postLut[2], postLutInputPrecision); 3335 YUVOut[COMPONENT_Cr][xc] = std::min(maxOutputValue, (YUVLutB_2 + scaleOut_round) >> scaleShiftOut_neg); 3336 } 3337 } 3338 3339 YUVIn[COMPONENT_Y] += iStrideIn; 3340 YUVOut[COMPONENT_Y] += iStrideOut; 3341 if( !(b420 && !(y&1)) ) 3342 { 3343 YUVIn[COMPONENT_Cb] += iCStrideIn; 3344 YUVIn[COMPONENT_Cr] += iCStrideIn; 3345 YUVOut[COMPONENT_Cb] += iCStrideOut; 3346 YUVOut[COMPONENT_Cr] += iCStrideOut; 3347 } 3348 } 3349 //Write remapped picture in display order 3350 picYuvColourRemapped.dump( m_colourRemapSEIFileName, bitDepthsCriFile, true ); 3351 picYuvColourRemapped.destroy(); 3352 } 3353 } 3009 3354 //! \} -
TabularUnified trunk/source/App/TAppDecoder/TAppDecTop.h ¶
r1321 r1386 128 128 #endif 129 129 std::ofstream m_seiMessageFileStream; ///< Used for outputing SEI messages. 130 131 SEIColourRemappingInfo* m_pcSeiColourRemappingInfoPrevious; 132 130 133 public: 131 134 TAppDecTop(); … … 134 137 Void create (); ///< create internal members 135 138 Void destroy (); ///< destroy internal members 136 Void decode (); ///< main decoding function139 137 140 #if NH_MV 141 Void decode ( Int i ); ///< main decoding function 138 142 UInt getNumberOfChecksumErrorsDetected( ) const; 139 143 UInt getNumberOfChecksumErrorsDetected( Int decIdx ) const { return m_tDecTop[decIdx]->getNumberOfChecksumErrorsDetected(); } 140 144 #else 145 Void decode ( ); ///< main decoding function 141 146 UInt getNumberOfChecksumErrorsDetected() const { return m_cTDecTop.getNumberOfChecksumErrorsDetected(); } 142 147 #endif … … 206 211 Void xCropAndOutput ( TComPic* curPic ); 207 212 #endif 213 214 private: 215 Void applyColourRemapping(const TComPicYuv& pic, SEIColourRemappingInfo& pCriSEI, const TComSPS &activeSPS); 216 Void xOutputColourRemapPic(TComPic* pcPic); 208 217 }; 209 218 -
TabularUnified trunk/source/App/TAppDecoder/decmain.cpp ¶
r1313 r1386 51 51 { 52 52 Int returnCode = EXIT_SUCCESS; 53 #if !NH_MV 53 54 TAppDecTop cTAppDecTop; 54 55 #endif 55 56 // print information 56 57 fprintf( stdout, "\n" ); … … 65 66 fprintf( stdout, "\n" ); 66 67 67 // create application decoder class 68 cTAppDecTop.create(); 68 #if NH_MV 69 Int numDecodings = 1; 70 Int curDecoding = 0; 71 Double dResult = 0; 72 do { 73 TAppDecTop cTAppDecTop; 74 #endif 75 // create application decoder class 76 cTAppDecTop.create(); 69 77 70 // parse configuration 71 if(!cTAppDecTop.parseCfg( argc, argv )) 72 { 73 cTAppDecTop.destroy(); 74 returnCode = EXIT_FAILURE; 75 return returnCode; 76 } 78 // parse configuration 79 if(!cTAppDecTop.parseCfg( argc, argv )) 80 { 81 cTAppDecTop.destroy(); 82 returnCode = EXIT_FAILURE; 83 return returnCode; 84 } 85 #if NH_MV 86 numDecodings = cTAppDecTop.getNumDecodings(); 87 #endif 77 88 78 // starting time 89 // starting time 90 #if !NH_MV 79 91 Double dResult; 80 clock_t lBefore = clock(); 92 #endif 93 clock_t lBefore = clock(); 81 94 82 // call decoding function 83 cTAppDecTop.decode(); 95 // call decoding function 96 #if NH_MV 97 cTAppDecTop.decode( curDecoding ); 98 #else 99 cTAppDecTop.decode(); 100 #endif 84 101 85 if (cTAppDecTop.getNumberOfChecksumErrorsDetected() != 0)86 {87 printf("\n\n***ERROR*** A decoding mismatch occured: signalled md5sum does not match\n");88 returnCode = EXIT_FAILURE;89 }102 if (cTAppDecTop.getNumberOfChecksumErrorsDetected() != 0) 103 { 104 printf("\n\n***ERROR*** A decoding mismatch occured: signalled md5sum does not match\n"); 105 returnCode = EXIT_FAILURE; 106 } 90 107 91 // ending time 108 // ending time 109 #if NH_MV 110 dResult += (double)(clock()-lBefore) / CLOCKS_PER_SEC; 111 #else 92 112 dResult = (Double)(clock()-lBefore) / CLOCKS_PER_SEC; 93 113 printf("\n Total Time: %12.3f sec.\n", dResult); 114 #endif 94 115 95 // destroy application decoder class 96 cTAppDecTop.destroy(); 116 // destroy application decoder class 117 cTAppDecTop.destroy(); 118 #if NH_MV 119 curDecoding++; 120 } 121 while ( curDecoding < numDecodings ); 97 122 123 printf("\n Total Time: %12.3f sec.\n", dResult); 124 #endif 98 125 return returnCode; 99 126 } -
TabularUnified trunk/source/App/TAppEncoder/TAppEncCfg.cpp ¶
r1356 r1386 109 109 110 110 TAppEncCfg::TAppEncCfg() 111 #if NH_MV 112 : m_pchBitstreamFile() 113 #else 114 : m_pchInputFile() 115 , m_pchBitstreamFile() 116 , m_pchReconFile() 117 #endif 118 , m_inputColourSpaceConvert(IPCOLOURSPACE_UNCHANGED) 111 : m_inputColourSpaceConvert(IPCOLOURSPACE_UNCHANGED) 119 112 , m_snrInternalColourSpace(false) 120 113 , m_outputInternalColourSpace(false) 121 , m_pchdQPFile()122 , m_scalingListFile()123 114 { 124 115 #if !NH_MV … … 171 162 m_targetPivotValue = NULL; 172 163 } 173 #if !NH_MV174 free(m_pchInputFile);175 #endif176 free(m_pchBitstreamFile);177 164 #if NH_MV 178 165 for(Int i = 0; i< m_pchReconFileList.size(); i++ ) … … 181 168 free (m_pchReconFileList[i]); 182 169 } 183 #else 184 free(m_pchReconFile); 185 #endif 186 free(m_pchdQPFile); 187 free(m_scalingListFile); 188 #if NH_MV 170 189 171 for( Int i = 0; i < m_GOPListMvc.size(); i++ ) 190 172 { … … 195 177 } 196 178 } 197 #endif 198 #if NH_3D 179 180 if ( m_pchBaseViewCameraNumbers != NULL ) 181 { 182 free ( m_pchBaseViewCameraNumbers ); 183 } 184 #endif 199 185 #if NH_3D_VSO 200 186 if ( m_pchVSOConfig != NULL) … … 202 188 free ( m_pchVSOConfig ); 203 189 } 204 #endif 190 205 191 if ( m_pchCameraParameterFile != NULL ) 206 192 { 207 193 free ( m_pchCameraParameterFile ); 208 }209 210 if ( m_pchBaseViewCameraNumbers != NULL )211 {212 free ( m_pchBaseViewCameraNumbers );213 194 } 214 195 #endif … … 224 205 225 206 226 #if NH_MV _SEI207 #if NH_MV 227 208 Void TAppEncCfg::xParseSeiCfg() 228 209 { … … 302 283 } 303 284 304 Bool confirmPara(Bool bflag, const Char* message);285 Bool confirmPara(Bool bflag, const TChar* message); 305 286 306 287 static inline ChromaFormat numberToChromaFormat(const Int val) … … 318 299 static const struct MapStrToProfile 319 300 { 320 const Char* str;301 const TChar* str; 321 302 Profile::Name value; 322 303 } … … 340 321 static const struct MapStrToExtendedProfile 341 322 { 342 const Char* str;323 const TChar* str; 343 324 ExtendedProfileName value; 344 325 } … … 405 386 static const struct MapStrToTier 406 387 { 407 const Char* str;388 const TChar* str; 408 389 Level::Tier value; 409 390 } … … 416 397 static const struct MapStrToLevel 417 398 { 418 const Char* str;399 const TChar* str; 419 400 Level::Name value; 420 401 } … … 438 419 }; 439 420 421 #if U0132_TARGET_BITS_SATURATION 422 UInt g_uiMaxCpbSize[2][21] = 423 { 424 // LEVEL1, LEVEL2,LEVEL2_1, LEVEL3, LEVEL3_1, LEVEL4, LEVEL4_1, LEVEL5, LEVEL5_1, LEVEL5_2, LEVEL6, LEVEL6_1, LEVEL6_2 425 { 0, 0, 0, 350000, 0, 0, 1500000, 3000000, 0, 6000000, 10000000, 0, 12000000, 20000000, 0, 25000000, 40000000, 60000000, 60000000, 120000000, 240000000 }, 426 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30000000, 50000000, 0, 100000000, 160000000, 240000000, 240000000, 480000000, 800000000 } 427 }; 428 #endif 429 440 430 static const struct MapStrToCostMode 441 431 { 442 const Char* str;432 const TChar* str; 443 433 CostMode value; 444 434 } … … 453 443 static const struct MapStrToScalingListMode 454 444 { 455 const Char* str;445 const TChar* str; 456 446 ScalingListMode value; 457 447 } … … 533 523 { 534 524 const T minValIncl; 535 const T maxValIncl; // Use 0 for unlimited525 const T maxValIncl; 536 526 const std::size_t minNumValuesIncl; 537 527 const std::size_t maxNumValuesIncl; // Use 0 for unlimited … … 545 535 SMultiValueInput<T> &operator=(const std::vector<T> &userValues) { values=userValues; return *this; } 546 536 SMultiValueInput<T> &operator=(const SMultiValueInput<T> &userValues) { values=userValues.values; return *this; } 537 538 T readValue(const TChar *&pStr, Bool &bSuccess); 539 540 istream& readValues(std::istream &in); 547 541 }; 548 542 549 static inline istream& operator >> (istream &in, SMultiValueInput<UInt> &values) 543 template <class T> 544 static inline istream& operator >> (std::istream &in, SMultiValueInput<T> &values) 550 545 { 551 values.values.clear(); 546 return values.readValues(in); 547 } 548 549 template<> 550 UInt SMultiValueInput<UInt>::readValue(const TChar *&pStr, Bool &bSuccess) 551 { 552 TChar *eptr; 553 UInt val=strtoul(pStr, &eptr, 0); 554 pStr=eptr; 555 bSuccess=!(*eptr!=0 && !isspace(*eptr) && *eptr!=',') && !(val<minValIncl || val>maxValIncl); 556 return val; 557 } 558 559 template<> 560 Int SMultiValueInput<Int>::readValue(const TChar *&pStr, Bool &bSuccess) 561 { 562 TChar *eptr; 563 Int val=strtol(pStr, &eptr, 0); 564 pStr=eptr; 565 bSuccess=!(*eptr!=0 && !isspace(*eptr) && *eptr!=',') && !(val<minValIncl || val>maxValIncl); 566 return val; 567 } 568 569 template<> 570 Double SMultiValueInput<Double>::readValue(const TChar *&pStr, Bool &bSuccess) 571 { 572 TChar *eptr; 573 Double val=strtod(pStr, &eptr); 574 pStr=eptr; 575 bSuccess=!(*eptr!=0 && !isspace(*eptr) && *eptr!=',') && !(val<minValIncl || val>maxValIncl); 576 return val; 577 } 578 579 template<> 580 Bool SMultiValueInput<Bool>::readValue(const TChar *&pStr, Bool &bSuccess) 581 { 582 TChar *eptr; 583 Int val=strtol(pStr, &eptr, 0); 584 pStr=eptr; 585 bSuccess=!(*eptr!=0 && !isspace(*eptr) && *eptr!=',') && !(val<Int(minValIncl) || val>Int(maxValIncl)); 586 return val!=0; 587 } 588 589 template <class T> 590 istream& SMultiValueInput<T>::readValues(std::istream &in) 591 { 592 values.clear(); 552 593 string str; 553 594 while (!in.eof()) … … 557 598 if (!str.empty()) 558 599 { 559 const Char *pStr=str.c_str();600 const TChar *pStr=str.c_str(); 560 601 // soak up any whitespace 561 602 for(;isspace(*pStr);pStr++); … … 563 604 while (*pStr != 0) 564 605 { 565 Char *eptr;566 UInt val=strtoul(pStr, &eptr, 0);567 if ( *eptr!=0 && !isspace(*eptr) && *eptr!=',')606 Bool bSuccess=true; 607 T val=readValue(pStr, bSuccess); 608 if (!bSuccess) 568 609 { 569 610 in.setstate(ios::failbit); 570 611 break; 571 612 } 572 if (val<values.minValIncl || val>values.maxValIncl) 613 614 if (maxNumValuesIncl != 0 && values.size() >= maxNumValuesIncl) 573 615 { 574 616 in.setstate(ios::failbit); 575 617 break; 576 618 } 577 578 if (values.maxNumValuesIncl != 0 && values.values.size() >= values.maxNumValuesIncl) 579 { 580 in.setstate(ios::failbit); 581 break; 582 } 583 values.values.push_back(val); 619 values.push_back(val); 584 620 // soak up any whitespace and up to 1 comma. 585 pStr=eptr;586 621 for(;isspace(*pStr);pStr++); 587 622 if (*pStr == ',') … … 592 627 } 593 628 } 594 if (values.values.size() < values.minNumValuesIncl) 595 { 596 in.setstate(ios::failbit); 597 } 598 return in; 599 } 600 601 static inline istream& operator >> (istream &in, SMultiValueInput<Int> &values) 602 { 603 values.values.clear(); 604 string str; 605 while (!in.eof()) 606 { 607 string tmp; in >> tmp; str+=" " + tmp; 608 } 609 if (!str.empty()) 610 { 611 const Char *pStr=str.c_str(); 612 // soak up any whitespace 613 for(;isspace(*pStr);pStr++); 614 615 while (*pStr != 0) 616 { 617 Char *eptr; 618 Int val=strtol(pStr, &eptr, 0); 619 if (*eptr!=0 && !isspace(*eptr) && *eptr!=',') 620 { 621 in.setstate(ios::failbit); 622 break; 623 } 624 if (val<values.minValIncl || val>values.maxValIncl) 625 { 626 in.setstate(ios::failbit); 627 break; 628 } 629 630 if (values.maxNumValuesIncl != 0 && values.values.size() >= values.maxNumValuesIncl) 631 { 632 in.setstate(ios::failbit); 633 break; 634 } 635 values.values.push_back(val); 636 // soak up any whitespace and up to 1 comma. 637 pStr=eptr; 638 for(;isspace(*pStr);pStr++); 639 if (*pStr == ',') 640 { 641 pStr++; 642 } 643 for(;isspace(*pStr);pStr++); 644 } 645 } 646 if (values.values.size() < values.minNumValuesIncl) 647 { 648 in.setstate(ios::failbit); 649 } 650 return in; 651 } 652 653 static inline istream& operator >> (istream &in, SMultiValueInput<Bool> &values) 654 { 655 values.values.clear(); 656 string str; 657 while (!in.eof()) 658 { 659 string tmp; in >> tmp; str+=" " + tmp; 660 } 661 if (!str.empty()) 662 { 663 const Char *pStr=str.c_str(); 664 // soak up any whitespace 665 for(;isspace(*pStr);pStr++); 666 667 while (*pStr != 0) 668 { 669 Char *eptr; 670 Int val=strtol(pStr, &eptr, 0); 671 if (*eptr!=0 && !isspace(*eptr) && *eptr!=',') 672 { 673 in.setstate(ios::failbit); 674 break; 675 } 676 if (val<Int(values.minValIncl) || val>Int(values.maxValIncl)) 677 { 678 in.setstate(ios::failbit); 679 break; 680 } 681 682 if (values.maxNumValuesIncl != 0 && values.values.size() >= values.maxNumValuesIncl) 683 { 684 in.setstate(ios::failbit); 685 break; 686 } 687 values.values.push_back(val!=0); 688 // soak up any whitespace and up to 1 comma. 689 pStr=eptr; 690 for(;isspace(*pStr);pStr++); 691 if (*pStr == ',') 692 { 693 pStr++; 694 } 695 for(;isspace(*pStr);pStr++); 696 } 697 } 698 if (values.values.size() < values.minNumValuesIncl) 629 if (values.size() < minNumValuesIncl) 699 630 { 700 631 in.setstate(ios::failbit); … … 786 717 \retval true when success 787 718 */ 788 Bool TAppEncCfg::parseCfg( Int argc, Char* argv[] )719 Bool TAppEncCfg::parseCfg( Int argc, TChar* argv[] ) 789 720 { 790 721 Bool do_help = false; 791 722 792 #if !NH_MV793 string cfg_InputFile;794 #endif795 string cfg_BitstreamFile;796 #if !NH_MV797 string cfg_ReconFile;798 #endif799 723 #if NH_MV 800 724 vector<Int> cfg_dimensionLength; … … 809 733 #endif 810 734 #endif 811 string cfg_dQPFile;812 string cfg_ScalingListFile;813 735 814 736 Int tmpChromaFormat; 815 737 Int tmpInputChromaFormat; 816 738 Int tmpConstraintChromaFormat; 739 Int tmpWeightedPredictionMethod; 740 Int tmpFastInterSearchMode; 741 Int tmpMotionEstimationSearchMethod; 742 Int tmpSliceMode; 743 Int tmpSliceSegmentMode; 744 Int tmpDecodedPictureHashSEIMappedType; 817 745 string inputColourSpaceConvert; 818 746 #if NH_MV … … 829 757 SMultiValueInput<Int> cfg_codedPivotValue (std::numeric_limits<Int>::min(), std::numeric_limits<Int>::max(), 0, 1<<16); 830 758 SMultiValueInput<Int> cfg_targetPivotValue (std::numeric_limits<Int>::min(), std::numeric_limits<Int>::max(), 0, 1<<16); 759 760 SMultiValueInput<Double> cfg_adIntraLambdaModifier (0, std::numeric_limits<Double>::max(), 0, MAX_TLAYER); ///< Lambda modifier for Intra pictures, one for each temporal layer. If size>temporalLayer, then use [temporalLayer], else if size>0, use [size()-1], else use m_adLambdaModifier. 761 831 762 832 763 const UInt defaultInputKneeCodes[3] = { 600, 800, 900 }; … … 866 797 ("InputFile_%d,i_%d", m_pchInputFileList, (char *) 0 , MAX_NUM_LAYER_IDS , "original Yuv input file name %d") 867 798 #else 868 ("InputFile,i", cfg_InputFile,string(""), "Original YUV input file name")869 #endif 870 ("BitstreamFile,b", cfg_BitstreamFile,string(""), "Bitstream output file name")799 ("InputFile,i", m_inputFileName, string(""), "Original YUV input file name") 800 #endif 801 ("BitstreamFile,b", m_bitstreamFileName, string(""), "Bitstream output file name") 871 802 #if NH_MV 872 803 ("ReconFile_%d,o_%d", m_pchReconFileList, (char *) 0 , MAX_NUM_LAYER_IDS , "reconstructed Yuv output file name %d") 873 804 #else 874 ("ReconFile,o", cfg_ReconFile,string(""), "Reconstructed YUV output file name")875 #endif 876 #if NH_MV 877 ("NumberOfLayers", m_numberOfLayers , 1, "Number of layers")878 #if !NH_3D 879 ("ScalabilityMask", m_scalabilityMask , 2 , "Scalability Mask: 2: Multiview, 8: Auxiliary, 10: Multiview + Auxiliary")880 #else 881 ("ScalabilityMask", m_scalabilityMask , 3 , "Scalability Mask, 1: Texture 3: Texture + Depth ")805 ("ReconFile,o", m_reconFileName, string(""), "Reconstructed YUV output file name") 806 #endif 807 #if NH_MV 808 ("NumberOfLayers", m_numberOfLayers , 1, "Number of layers") 809 #if !NH_3D 810 ("ScalabilityMask", m_scalabilityMask , 2 , "Scalability Mask: 2: Multiview, 8: Auxiliary, 10: Multiview + Auxiliary") 811 #else 812 ("ScalabilityMask", m_scalabilityMask , 3 , "Scalability Mask, 1: Texture 3: Texture + Depth ") 882 813 #endif 883 ("DimensionIdLen", m_dimensionIdLen , cfg_dimensionLength , "Number of bits used to store dimensions Id")814 ("DimensionIdLen", m_dimensionIdLen , cfg_dimensionLength , "Number of bits used to store dimensions Id") 884 815 ("ViewOrderIndex", m_viewOrderIndex , IntAry1d(1,0), "View Order Index per layer") 885 816 ("ViewId", m_viewId , IntAry1d(1,0), "View Id per View Order Index") 886 817 ("AuxId", m_auxId , IntAry1d(1,0), "AuxId per layer") 887 #if NH_3D 818 #if NH_3D_VSO 888 819 ("DepthFlag", m_depthFlag , IntAry1d(1,0), "Depth Flag") 889 820 #endif 890 821 ("TargetEncLayerIdList", m_targetEncLayerIdList , IntAry1d(0,0), "LayerIds in Nuh to be encoded") 891 822 ("LayerIdInNuh", m_layerIdInNuh , IntAry1d(1,0), "LayerId in Nuh") 892 ("SplittingFlag", m_splittingFlag , false ,"Splitting Flag")823 ("SplittingFlag", m_splittingFlag , false, "Splitting Flag") 893 824 894 825 // Layer Sets + Output Layer Sets + Profile Tier Level 895 ("VpsNumLayerSets" , m_vpsNumLayerSets , 1 ,"Number of layer sets")896 ("LayerIdsInSet_%d" , m_layerId sInSets , IntAry1d(1,0) , MAX_VPS_OP_SETS_PLUS1 , "LayerIds of Layer set")897 ("NumAddLayerSets" , m_numAddLayerSets , 0 ,"NumAddLayerSets ")826 ("VpsNumLayerSets" , m_vpsNumLayerSets , 1 , "Number of layer sets") 827 ("LayerIdsInSet_%d" , m_layerIdxInVpsInSets , IntAry1d(1,0) , MAX_VPS_OP_SETS_PLUS1 , "Layer indices in VPS of layers in layer set") 828 ("NumAddLayerSets" , m_numAddLayerSets , 0 , "NumAddLayerSets ") 898 829 ("HighestLayerIdxPlus1_%d" , m_highestLayerIdxPlus1 , IntAry1d(0,0) , MAX_VPS_NUM_ADD_LAYER_SETS , "HighestLayerIdxPlus1") 899 ("DefaultTargetOutputLayerIdc" , m_defaultOutputLayerIdc , 0,"Specifies output layers of layer sets, 0: output all layers, 1: output highest layer, 2: specified by LayerIdsInDefOutputLayerSet")830 ("DefaultTargetOutputLayerIdc" , m_defaultOutputLayerIdc , 0 , "Specifies output layers of layer sets, 0: output all layers, 1: output highest layer, 2: specified by LayerIdsInDefOutputLayerSet") 900 831 ("OutputLayerSetIdx" , m_outputLayerSetIdx , IntAry1d(0,0) , "Indices of layer sets used as additional output layer sets") 901 832 ("LayerIdsInAddOutputLayerSet_%d", m_layerIdsInAddOutputLayerSet , IntAry1d(0,0) , MAX_VPS_ADD_OUTPUT_LAYER_SETS, "Indices in VPS of output layers in additional output layer set") … … 941 872 ("ConfWinTop", m_confWinTop, 0, "Top offset for window conformance mode 3") 942 873 ("ConfWinBottom", m_confWinBottom, 0, "Bottom offset for window conformance mode 3") 874 ("AccessUnitDelimiter", m_AccessUnitDelimiter, false, "Enable Access Unit Delimiter NALUs") 943 875 ("FrameRate,-fr", m_iFrameRate, 0, "Frame rate") 944 876 ("FrameSkip,-fs", m_FrameSkip, 0u, "Number of frames to skip at start of input YUV") … … 1003 935 // motion search options 1004 936 ("DisableIntraInInter", m_bDisableIntraPUsInInterSlices, false, "Flag to disable intra PUs in inter slices") 1005 ("FastSearch", m_iFastSearch, 1, "0:Full search 1:Diamond 2:PMVFAST")937 ("FastSearch", tmpMotionEstimationSearchMethod, Int(MESEARCH_DIAMOND), "0:Full search 1:Diamond 2:Selective 3:Enhanced Diamond") 1006 938 ("SearchRange,-sr", m_iSearchRange, 96, "Motion search range") 1007 939 #if NH_MV … … 1010 942 #endif 1011 943 ("BipredSearchRange", m_bipredSearchRange, 4, "Motion search range for bipred refinement") 944 ("MinSearchWindow", m_minSearchWindow, 8, "Minimum motion search window size for the adaptive window ME") 945 ("RestrictMESampling", m_bRestrictMESampling, false, "Restrict ME Sampling for selective inter motion search") 1012 946 ("ClipForBiPredMEEnabled", m_bClipForBiPredMeEnabled, false, "Enables clipping in the Bi-Pred ME. It is disabled to reduce encoder run-time") 1013 947 ("FastMEAssumingSmootherMVEnabled", m_bFastMEAssumingSmootherMVEnabled, true, "Enables fast ME assuming a smoother MV.") … … 1017 951 1018 952 // Mode decision parameters 1019 ("LambdaModifier0,-LM0", m_adLambdaModifier[ 0 ], ( Double )1.0, "Lambda modifier for temporal layer 0") 1020 ("LambdaModifier1,-LM1", m_adLambdaModifier[ 1 ], ( Double )1.0, "Lambda modifier for temporal layer 1") 1021 ("LambdaModifier2,-LM2", m_adLambdaModifier[ 2 ], ( Double )1.0, "Lambda modifier for temporal layer 2") 1022 ("LambdaModifier3,-LM3", m_adLambdaModifier[ 3 ], ( Double )1.0, "Lambda modifier for temporal layer 3") 1023 ("LambdaModifier4,-LM4", m_adLambdaModifier[ 4 ], ( Double )1.0, "Lambda modifier for temporal layer 4") 1024 ("LambdaModifier5,-LM5", m_adLambdaModifier[ 5 ], ( Double )1.0, "Lambda modifier for temporal layer 5") 1025 ("LambdaModifier6,-LM6", m_adLambdaModifier[ 6 ], ( Double )1.0, "Lambda modifier for temporal layer 6") 953 ("LambdaModifier0,-LM0", m_adLambdaModifier[ 0 ], ( Double )1.0, "Lambda modifier for temporal layer 0. If LambdaModifierI is used, this will not affect intra pictures") 954 ("LambdaModifier1,-LM1", m_adLambdaModifier[ 1 ], ( Double )1.0, "Lambda modifier for temporal layer 1. If LambdaModifierI is used, this will not affect intra pictures") 955 ("LambdaModifier2,-LM2", m_adLambdaModifier[ 2 ], ( Double )1.0, "Lambda modifier for temporal layer 2. If LambdaModifierI is used, this will not affect intra pictures") 956 ("LambdaModifier3,-LM3", m_adLambdaModifier[ 3 ], ( Double )1.0, "Lambda modifier for temporal layer 3. If LambdaModifierI is used, this will not affect intra pictures") 957 ("LambdaModifier4,-LM4", m_adLambdaModifier[ 4 ], ( Double )1.0, "Lambda modifier for temporal layer 4. If LambdaModifierI is used, this will not affect intra pictures") 958 ("LambdaModifier5,-LM5", m_adLambdaModifier[ 5 ], ( Double )1.0, "Lambda modifier for temporal layer 5. If LambdaModifierI is used, this will not affect intra pictures") 959 ("LambdaModifier6,-LM6", m_adLambdaModifier[ 6 ], ( Double )1.0, "Lambda modifier for temporal layer 6. If LambdaModifierI is used, this will not affect intra pictures") 960 ("LambdaModifierI,-LMI", cfg_adIntraLambdaModifier, cfg_adIntraLambdaModifier, "Lambda modifiers for Intra pictures, comma separated, up to one the number of temporal layer. If entry for temporalLayer exists, then use it, else if some are specified, use the last, else use the standard LambdaModifiers.") 961 ("IQPFactor,-IQF", m_dIntraQpFactor, -1.0, "Intra QP Factor for Lambda Computation. If negative, use the default equation: 0.57*(1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? (GopSize-1)/2 : GopSize-1) ))") 1026 962 1027 963 /* Quantization parameters */ … … 1046 982 ("AdaptiveQP,-aq", m_bUseAdaptiveQP, false, "QP adaptation based on a psycho-visual model") 1047 983 ("MaxQPAdaptationRange,-aqr", m_iQPAdaptationRange, 6, "QP adaptation range") 1048 ("dQPFile,m", cfg_dQPFile,string(""), "dQP file name")984 ("dQPFile,m", m_dQPFileName, string(""), "dQP file name") 1049 985 ("RDOQ", m_useRDOQ, true) 1050 986 ("RDOQTS", m_useRDOQTS, true) … … 1090 1026 ("MaxNumOffsetsPerPic", m_maxNumOffsetsPerPic, 2048, "Max number of SAO offset per picture (Default: 2048)") 1091 1027 ("SAOLcuBoundary", m_saoCtuBoundary, false, "0: right/bottom CTU boundary areas skipped from SAO parameter estimation, 1: non-deblocked pixels are used for those areas") 1092 ("SliceMode", m_sliceMode, 0, "0: Disable all Recon slice limits, 1: Enforce max # of CTUs, 2: Enforce max # of bytes, 3:specify tiles per dependent slice")1028 ("SliceMode", tmpSliceMode, Int(NO_SLICES), "0: Disable all Recon slice limits, 1: Enforce max # of CTUs, 2: Enforce max # of bytes, 3:specify tiles per dependent slice") 1093 1029 ("SliceArgument", m_sliceArgument, 0, "Depending on SliceMode being:" 1094 1030 "\t1: max number of CTUs per slice" 1095 1031 "\t2: max number of bytes per slice" 1096 1032 "\t3: max number of tiles per slice") 1097 ("SliceSegmentMode", m_sliceSegmentMode, 0, "0: Disable all slice segment limits, 1: Enforce max # of CTUs, 2: Enforce max # of bytes, 3:specify tiles per dependent slice")1033 ("SliceSegmentMode", tmpSliceSegmentMode, Int(NO_SLICES), "0: Disable all slice segment limits, 1: Enforce max # of CTUs, 2: Enforce max # of bytes, 3:specify tiles per dependent slice") 1098 1034 ("SliceSegmentArgument", m_sliceSegmentArgument, 0, "Depending on SliceSegmentMode being:" 1099 1035 "\t1: max number of CTUs per slice segment" … … 1112 1048 ("PCMInputBitDepthFlag", m_bPCMInputBitDepthFlag, true) 1113 1049 ("PCMFilterDisableFlag", m_bPCMFilterDisableFlag, false) 1114 ("IntraReferenceSmoothing", m_enableIntraReferenceSmoothing, true, "0: Disable use of intra reference smoothing . 1: Enable use of intra reference smoothing (not valid in V1 profiles)")1050 ("IntraReferenceSmoothing", m_enableIntraReferenceSmoothing, true, "0: Disable use of intra reference smoothing (not valid in V1 profiles). 1: Enable use of intra reference smoothing (same as V1)") 1115 1051 ("WeightedPredP,-wpP", m_useWeightedPred, false, "Use weighted prediction in P slices") 1116 1052 ("WeightedPredB,-wpB", m_useWeightedBiPred, false, "Use weighted (bidirectional) prediction in B slices") 1053 ("WeightedPredMethod,-wpM", tmpWeightedPredictionMethod, Int(WP_PER_PICTURE_WITH_SIMPLE_DC_COMBINED_COMPONENT), "Weighted prediction method") 1117 1054 ("Log2ParallelMergeLevel", m_log2ParallelMergeLevel, 2u, "Parallel merge estimation region") 1118 1055 //deprecated copies of renamed tile parameters … … 1127 1064 ("TileRowHeightArray", cfg_RowHeight, cfg_RowHeight, "Array containing tile row height values in units of CTU") 1128 1065 ("LFCrossTileBoundaryFlag", m_bLFCrossTileBoundaryFlag, true, "1: cross-tile-boundary loop filtering. 0:non-cross-tile-boundary loop filtering") 1129 ("WaveFrontSynchro", m_ iWaveFrontSynchro, 0, "0: no synchro; 1 synchro with top-right-right")1066 ("WaveFrontSynchro", m_entropyCodingSyncEnabledFlag, false, "0: entropy coding sync disabled; 1 entropy coding sync enabled") 1130 1067 ("ScalingList", m_useScalingListId, SCALING_LIST_OFF, "0/off: no scaling list, 1/default: default scaling lists, 2/file: scaling lists specified in ScalingListFile") 1131 ("ScalingListFile", cfg_ScalingListFile,string(""), "Scaling list file name. Use an empty string to produce help.")1068 ("ScalingListFile", m_scalingListFileName, string(""), "Scaling list file name. Use an empty string to produce help.") 1132 1069 ("SignHideFlag,-SBH", m_signHideFlag, true) 1133 1070 ("MaxNumMergeCand", m_maxNumMergeCand, 5u, "Maximum number of merge candidates") 1134 1071 /* Misc. */ 1135 ("SEIDecodedPictureHash", m_decodedPictureHashSEIEnabled,0, "Control generation of decode picture hash SEI messages\n"1072 ("SEIDecodedPictureHash", tmpDecodedPictureHashSEIMappedType, 0, "Control generation of decode picture hash SEI messages\n" 1136 1073 "\t3: checksum\n" 1137 1074 "\t2: CRC\n" … … 1139 1076 "\t0: disable") 1140 1077 ("TMVPMode", m_TMVPModeId, 1, "TMVP mode 0: TMVP disable for all slices. 1: TMVP enable for all slices (default) 2: TMVP enable for certain slices only") 1141 ("FEN", m_bUseFastEnc, false, "fast encoder setting")1078 ("FEN", tmpFastInterSearchMode, Int(FASTINTERSEARCH_DISABLED), "fast encoder setting") 1142 1079 ("ECU", m_bUseEarlyCU, false, "Early CU setting") 1143 1080 ("FDM", m_useFastDecisionForMerge, true, "Fast decision for Merge RD Cost") … … 1152 1089 ( "RCForceIntraQP", m_RCForceIntraQP, false, "Rate control: force intra QP to be equal to initial QP" ) 1153 1090 1091 #if U0132_TARGET_BITS_SATURATION 1092 ( "RCCpbSaturation", m_RCCpbSaturationEnabled, false, "Rate control: enable target bits saturation to avoid CPB overflow and underflow" ) 1093 ( "RCCpbSize", m_RCCpbSize, 0u, "Rate control: CPB size" ) 1094 ( "RCInitialCpbFullness", m_RCInitialCpbFullness, 0.9, "Rate control: initial CPB fullness" ) 1095 #endif 1096 1154 1097 #if KWU_RC_VIEWRC_E0227 1155 1098 ("ViewWiseTargetBits, -vtbr" , m_viewTargetBits, std::vector<Int>(1, 32), "View-wise target bit-rate setting") … … 1162 1105 // A lot of this stuff could should actually be derived by the encoder. 1163 1106 // VPS VUI 1164 ("VpsVuiPresentFlag" , m_vpsVuiPresentFlag , false, "VpsVuiPresentFlag ")1165 ("CrossLayerPicTypeAlignedFlag" , m_crossLayerPicTypeAlignedFlag, false, "CrossLayerPicTypeAlignedFlag") // Could actually be derived by the encoder1166 ("CrossLayerIrapAlignedFlag" , m_crossLayerIrapAlignedFlag , false, "CrossLayerIrapAlignedFlag ") // Could actually be derived by the encoder1167 ("AllLayersIdrAlignedFlag" , m_allLayersIdrAlignedFlag , false, "CrossLayerIrapAlignedFlag ") // Could actually be derived by the encoder1168 ("BitRatePresentVpsFlag" , m_bitRatePresentVpsFlag , false, "BitRatePresentVpsFlag ")1169 ("PicRatePresentVpsFlag" , m_picRatePresentVpsFlag , false, "PicRatePresentVpsFlag ")1170 ("BitRatePresentFlag" , m_bitRatePresentFlag , BoolAry1d(1,0) ,MAX_VPS_OP_SETS_PLUS1, "BitRatePresentFlag per sub layer for the N-th layer set")1171 ("PicRatePresentFlag" , m_picRatePresentFlag , BoolAry1d(1,0) ,MAX_VPS_OP_SETS_PLUS1, "PicRatePresentFlag per sub layer for the N-th layer set")1172 ("AvgBitRate" , m_avgBitRate , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "AvgBitRate per sub layer for the N-th layer set")1173 ("MaxBitRate" , m_maxBitRate , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "MaxBitRate per sub layer for the N-th layer set")1174 ("ConstantPicRateIdc" , m_constantPicRateIdc , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "ConstantPicRateIdc per sub layer for the N-th layer set")1175 ("AvgPicRate" , m_avgPicRate , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "AvgPicRate per sub layer for the N-th layer set")1176 ("TilesNotInUseFlag" , m_tilesNotInUseFlag , true 1107 ("VpsVuiPresentFlag" , m_vpsVuiPresentFlag , false , "VpsVuiPresentFlag ") 1108 ("CrossLayerPicTypeAlignedFlag" , m_crossLayerPicTypeAlignedFlag , false , "CrossLayerPicTypeAlignedFlag") // Could actually be derived by the encoder 1109 ("CrossLayerIrapAlignedFlag" , m_crossLayerIrapAlignedFlag , false , "CrossLayerIrapAlignedFlag ") // Could actually be derived by the encoder 1110 ("AllLayersIdrAlignedFlag" , m_allLayersIdrAlignedFlag , false , "CrossLayerIrapAlignedFlag ") // Could actually be derived by the encoder 1111 ("BitRatePresentVpsFlag" , m_bitRatePresentVpsFlag , false , "BitRatePresentVpsFlag ") 1112 ("PicRatePresentVpsFlag" , m_picRatePresentVpsFlag , false , "PicRatePresentVpsFlag ") 1113 ("BitRatePresentFlag" , m_bitRatePresentFlag , BoolAry1d(1,0), MAX_VPS_OP_SETS_PLUS1, "BitRatePresentFlag per sub layer for the N-th layer set") 1114 ("PicRatePresentFlag" , m_picRatePresentFlag , BoolAry1d(1,0), MAX_VPS_OP_SETS_PLUS1, "PicRatePresentFlag per sub layer for the N-th layer set") 1115 ("AvgBitRate" , m_avgBitRate , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "AvgBitRate per sub layer for the N-th layer set") 1116 ("MaxBitRate" , m_maxBitRate , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "MaxBitRate per sub layer for the N-th layer set") 1117 ("ConstantPicRateIdc" , m_constantPicRateIdc , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "ConstantPicRateIdc per sub layer for the N-th layer set") 1118 ("AvgPicRate" , m_avgPicRate , IntAry1d (1,0), MAX_VPS_OP_SETS_PLUS1, "AvgPicRate per sub layer for the N-th layer set") 1119 ("TilesNotInUseFlag" , m_tilesNotInUseFlag , true , "TilesNotInUseFlag ") 1177 1120 ("TilesInUseFlag" , m_tilesInUseFlag , BoolAry1d(1,false) , "TilesInUseFlag ") 1178 ("LoopFilterNotAcrossTilesFlag" , m_loopFilterNotAcrossTilesFlag , BoolAry1d(1,false) , "LoopFilterNotAcrossTilesFlag ")1179 ("WppNotInUseFlag" , m_wppNotInUseFlag , true 1180 ("WppInUseFlag" , m_wppInUseFlag , BoolAry1d(1,0) , "WppInUseFlag ")1181 ("TileBoundariesAlignedFlag" , m_tileBoundariesAlignedFlag , BoolAry1d(1,0) ,MAX_NUM_LAYERS, "TileBoundariesAlignedFlag per direct reference for the N-th layer")1182 ("IlpRestrictedRefLayersFlag" , m_ilpRestrictedRefLayersFlag , false, "IlpRestrictedRefLayersFlag")1183 ("MinSpatialSegmentOffsetPlus1" , m_minSpatialSegmentOffsetPlus1 , IntAry1d (1,0), MAX_NUM_LAYERS , "MinSpatialSegmentOffsetPlus1 per direct reference for the N-th layer")1184 ("CtuBasedOffsetEnabledFlag" , m_ctuBasedOffsetEnabledFlag , BoolAry1d(1,0) ,MAX_NUM_LAYERS, "CtuBasedOffsetEnabledFlag per direct reference for the N-th layer")1185 ("MinHorizontalCtuOffsetPlus1" , m_minHorizontalCtuOffsetPlus1 , IntAry1d (1,0), MAX_NUM_LAYERS , "MinHorizontalCtuOffsetPlus1 per direct reference for the N-th layer")1186 ("SingleLayerForNonIrapFlag" , m_singleLayerForNonIrapFlag, false, "SingleLayerForNonIrapFlag")1187 ("HigherLayerIrapSkipFlag" , m_higherLayerIrapSkipFlag , false, "HigherLayerIrapSkipFlag ")1121 ("LoopFilterNotAcrossTilesFlag" , m_loopFilterNotAcrossTilesFlag , BoolAry1d(1,false) , "LoopFilterNotAcrossTilesFlag ") 1122 ("WppNotInUseFlag" , m_wppNotInUseFlag , true , "WppNotInUseFlag ") 1123 ("WppInUseFlag" , m_wppInUseFlag , BoolAry1d(1,0) , "WppInUseFlag ") 1124 ("TileBoundariesAlignedFlag" , m_tileBoundariesAlignedFlag , BoolAry1d(1,0) ,MAX_NUM_LAYERS , "TileBoundariesAlignedFlag per direct reference for the N-th layer") 1125 ("IlpRestrictedRefLayersFlag" , m_ilpRestrictedRefLayersFlag , false , "IlpRestrictedRefLayersFlag") 1126 ("MinSpatialSegmentOffsetPlus1" , m_minSpatialSegmentOffsetPlus1 , IntAry1d (1,0), MAX_NUM_LAYERS , "MinSpatialSegmentOffsetPlus1 per direct reference for the N-th layer") 1127 ("CtuBasedOffsetEnabledFlag" , m_ctuBasedOffsetEnabledFlag , BoolAry1d(1,0) ,MAX_NUM_LAYERS , "CtuBasedOffsetEnabledFlag per direct reference for the N-th layer") 1128 ("MinHorizontalCtuOffsetPlus1" , m_minHorizontalCtuOffsetPlus1 , IntAry1d (1,0), MAX_NUM_LAYERS , "MinHorizontalCtuOffsetPlus1 per direct reference for the N-th layer") 1129 ("SingleLayerForNonIrapFlag" , m_singleLayerForNonIrapFlag , false , "SingleLayerForNonIrapFlag") 1130 ("HigherLayerIrapSkipFlag" , m_higherLayerIrapSkipFlag , false , "HigherLayerIrapSkipFlag ") 1188 1131 #endif 1189 1132 … … 1227 1170 ("Log2MaxMvLengthHorizontal", m_log2MaxMvLengthHorizontal, 15, "Indicate the maximum absolute value of a decoded horizontal MV component in quarter-pel luma units") 1228 1171 ("Log2MaxMvLengthVertical", m_log2MaxMvLengthVertical, 15, "Indicate the maximum absolute value of a decoded vertical MV component in quarter-pel luma units") 1229 ("SEIRecoveryPoint", m_recoveryPointSEIEnabled, 0, "Control generation of recovery point SEI messages") 1230 ("SEIBufferingPeriod", m_bufferingPeriodSEIEnabled, 0, "Control generation of buffering period SEI messages") 1231 ("SEIPictureTiming", m_pictureTimingSEIEnabled, 0, "Control generation of picture timing SEI messages") 1172 ("SEIColourRemappingInfoFileRoot,-cri", m_colourRemapSEIFileRoot, string(""), "Colour Remapping Information SEI parameters root file name (wo num ext)") 1173 ("SEIRecoveryPoint", m_recoveryPointSEIEnabled, false, "Control generation of recovery point SEI messages") 1174 ("SEIBufferingPeriod", m_bufferingPeriodSEIEnabled, false, "Control generation of buffering period SEI messages") 1175 ("SEIPictureTiming", m_pictureTimingSEIEnabled, false, "Control generation of picture timing SEI messages") 1232 1176 ("SEIToneMappingInfo", m_toneMappingInfoSEIEnabled, false, "Control generation of Tone Mapping SEI messages") 1233 1177 ("SEIToneMapId", m_toneMapId, 0, "Specifies Id of Tone Mapping SEI message for a given session") … … 1262 1206 ("SEIToneMapNominalWhiteLevelLumaCodeValue", m_nominalWhiteLevelLumaCodeValue, 235, "Specifies luma sample value of the nominal white level assigned decoded pictures") 1263 1207 ("SEIToneMapExtendedWhiteLevelLumaCodeValue", m_extendedWhiteLevelLumaCodeValue, 300, "Specifies luma sample value of the extended dynamic range assigned decoded pictures") 1264 ("SEIChroma SamplingFilterHint", m_chromaSamplingFilterSEIenabled,false, "Control generation of the chroma sampling filter hint SEI message")1265 ("SEIChroma SamplingHorizontalFilterType", m_chromaSamplingHorFilterIdc,2, "Defines the Index of the chroma sampling horizontal filter\n"1208 ("SEIChromaResamplingFilterHint", m_chromaResamplingFilterSEIenabled, false, "Control generation of the chroma sampling filter hint SEI message") 1209 ("SEIChromaResamplingHorizontalFilterType", m_chromaResamplingHorFilterIdc, 2, "Defines the Index of the chroma sampling horizontal filter\n" 1266 1210 "\t0: unspecified - Chroma filter is unknown or is determined by the application" 1267 1211 "\t1: User-defined - Filter coefficients are specified in the chroma sampling filter hint SEI message" 1268 1212 "\t2: Standards-defined - ITU-T Rec. T.800 | ISO/IEC15444-1, 5/3 filter") 1269 ("SEIChroma SamplingVerticalFilterType", m_chromaSamplingVerFilterIdc, 2, "Defines the Index of the chroma sampling vertical filter\n"1213 ("SEIChromaResamplingVerticalFilterType", m_chromaResamplingVerFilterIdc, 2, "Defines the Index of the chroma sampling vertical filter\n" 1270 1214 "\t0: unspecified - Chroma filter is unknown or is determined by the application" 1271 1215 "\t1: User-defined - Filter coefficients are specified in the chroma sampling filter hint SEI message" 1272 1216 "\t2: Standards-defined - ITU-T Rec. T.800 | ISO/IEC15444-1, 5/3 filter") 1273 ("SEIFramePacking", m_framePackingSEIEnabled, 0, "Control generation of frame packing SEI messages")1217 ("SEIFramePacking", m_framePackingSEIEnabled, false, "Control generation of frame packing SEI messages") 1274 1218 ("SEIFramePackingType", m_framePackingSEIType, 0, "Define frame packing arrangement\n" 1275 1219 "\t3: side by side - frames are displayed horizontally\n" … … 1282 1226 "\t1: stereo pair, frame0 represents left view\n" 1283 1227 "\t2: stereo pair, frame0 represents right view") 1284 ("SEISegmentedRectFramePacking", m_segmentedRectFramePackingSEIEnabled, 0, "Controls generation of segmented rectangular frame packing SEI messages")1228 ("SEISegmentedRectFramePacking", m_segmentedRectFramePackingSEIEnabled, false, "Controls generation of segmented rectangular frame packing SEI messages") 1285 1229 ("SEISegmentedRectFramePackingCancel", m_segmentedRectFramePackingSEICancel, false, "If equal to 1, cancels the persistence of any previous SRFPA SEI message") 1286 1230 ("SEISegmentedRectFramePackingType", m_segmentedRectFramePackingSEIType, 0, "Specifies the arrangement of the frames in the reconstructed picture") … … 1289 1233 "\tN: 0 < N < (2^16 - 1) enable display orientation SEI message with anticlockwise_rotation = N and display_orientation_repetition_period = 1\n" 1290 1234 "\t0: disable") 1291 ("SEITemporalLevel0Index", m_temporalLevel0IndexSEIEnabled, 0, "Control generation of temporal level 0 index SEI messages")1292 ("SEIGradualDecodingRefreshInfo", m_gradualDecodingRefreshInfoEnabled, 0, "Control generation of gradual decoding refresh information SEI message")1235 ("SEITemporalLevel0Index", m_temporalLevel0IndexSEIEnabled, false, "Control generation of temporal level 0 index SEI messages") 1236 ("SEIGradualDecodingRefreshInfo", m_gradualDecodingRefreshInfoEnabled, false, "Control generation of gradual decoding refresh information SEI message") 1293 1237 ("SEINoDisplay", m_noDisplaySEITLayer, 0, "Control generation of no display SEI message\n" 1294 1238 "\tN: 0 < N enable no display SEI message for temporal layer N or higher\n" 1295 1239 "\t0: disable") 1296 ("SEIDecodingUnitInfo", m_decodingUnitInfoSEIEnabled, 0, "Control generation of decoding unit information SEI message.")1297 ("SEISOPDescription", m_SOPDescriptionSEIEnabled, 0, "Control generation of SOP description SEI messages")1298 ("SEIScalableNesting", m_scalableNestingSEIEnabled, 0, "Control generation of scalable nesting SEI messages")1240 ("SEIDecodingUnitInfo", m_decodingUnitInfoSEIEnabled, false, "Control generation of decoding unit information SEI message.") 1241 ("SEISOPDescription", m_SOPDescriptionSEIEnabled, false, "Control generation of SOP description SEI messages") 1242 ("SEIScalableNesting", m_scalableNestingSEIEnabled, false, "Control generation of scalable nesting SEI messages") 1299 1243 ("SEITempMotionConstrainedTileSets", m_tmctsSEIEnabled, false, "Control generation of temporal motion constrained tile sets SEI message") 1300 1244 ("SEITimeCodeEnabled", m_timeCodeSEIEnabled, false, "Control generation of time code information SEI message") … … 1332 1276 ("SEIMasteringDisplayWhitePoint", cfg_DisplayWhitePointCode, cfg_DisplayWhitePointCode, "Mastering display white point CIE xy coordinates in normalised increments of 1/50000 (e.g. 0.333 = 16667)") 1333 1277 #if NH_MV 1334 #if !NH_MV_SEI 1335 ("SubBitstreamPropSEIEnabled", m_subBistreamPropSEIEnabled, false ,"Enable signaling of sub-bitstream property SEI message") 1336 ("SEISubBitstreamNumAdditionalSubStreams", m_sbPropNumAdditionalSubStreams,0 ,"Number of substreams for which additional information is signalled") 1337 ("SEISubBitstreamSubBitstreamMode", m_sbPropSubBitstreamMode, IntAry1d (1,0) ,"Specifies mode of generation of the i-th sub-bitstream (0 or 1)") 1338 ("SEISubBitstreamOutputLayerSetIdxToVps", m_sbPropOutputLayerSetIdxToVps, IntAry1d (1,0) ,"Specifies output layer set index of the i-th sub-bitstream ") 1339 ("SEISubBitstreamHighestSublayerId", m_sbPropHighestSublayerId, IntAry1d (1,0) ,"Specifies highest TemporalId of the i-th sub-bitstream") 1340 ("SEISubBitstreamAvgBitRate", m_sbPropAvgBitRate, IntAry1d (1,0) ,"Specifies average bit rate of the i-th sub-bitstream") 1341 ("SEISubBitstreamMaxBitRate", m_sbPropMaxBitRate, IntAry1d (1,0) ,"Specifies maximum bit rate of the i-th sub-bitstream") 1342 #else 1343 ("SeiCfgFileName_%d", m_seiCfgFileNames, (Char *) 0 , MAX_NUM_SEIS , "SEI cfg file name %d") 1344 #endif 1278 ("SeiCfgFileName_%d", m_seiCfgFileNames, (TChar *) 0 ,MAX_NUM_SEIS , "SEI cfg file name %d") 1345 1279 ("OutputVpsInfo", m_outputVpsInfo, false ,"Output information about the layer dependencies and layer sets") 1280 1281 /* Camera parameters */ 1282 ("BaseViewCameraNumbers", m_pchBaseViewCameraNumbers, (TChar *) 0 , "Numbers of base views") 1346 1283 #endif 1347 1284 #if NH_3D 1348 /* Camera parameters */1349 1285 ("Depth420OutputFlag", m_depth420OutputFlag, true , "Output depth layers in 4:2:0 ") 1350 ("CameraParameterFile,cpf", m_pchCameraParameterFile, (Char *) 0, "Camera Parameter File Name") 1351 ("BaseViewCameraNumbers", m_pchBaseViewCameraNumbers, (Char *) 0, "Numbers of base views") 1286 #endif 1287 #if NH_3D_VSO 1288 ("CameraParameterFile,cpf", m_pchCameraParameterFile, (TChar *) 0 , "Camera Parameter File Name") 1352 1289 ("CodedCamParsPrecision", m_iCodedCamParPrecision, STD_CAM_PARAMETERS_PRECISION, "precision for coding of camera parameters (in units of 2^(-x) luma samples)" ) 1353 1290 1354 #if NH_3D_VSO1355 1291 /* View Synthesis Optimization */ 1356 ("VSOConfig", m_pchVSOConfig , ( Char *) 0,"VSO configuration")1292 ("VSOConfig", m_pchVSOConfig , (TChar *) 0 ,"VSO configuration") 1357 1293 ("VSO", m_bUseVSO , false ,"Use VSO" ) 1358 1294 ("VSOMode", m_uiVSOMode , (UInt) 4 ,"VSO Mode") … … 1371 1307 #endif //HHI_VSO 1372 1308 /* 3D- HEVC Tools */ 1309 #if NH_3D_QTL 1373 1310 ("QTL" , m_bUseQTL , true , "Use depth quad tree limitation (encoder only)" ) 1311 #endif 1312 #if NH_3D 1313 1374 1314 ("IvMvPredFlag" , m_ivMvPredFlag , BoolAry1d(2,true) , "Inter-view motion prediction" ) 1375 1315 ("IvMvScalingFlag" , m_ivMvScalingFlag , BoolAry1d(2,true) , "Inter-view motion vector scaling" ) … … 1447 1387 po::setDefaults(opts); 1448 1388 po::ErrorReporter err; 1449 const list<const Char*>& argv_unhandled = po::scanArgv(opts, argc, (constChar**) argv, err);1450 1451 for (list<const Char*>::const_iterator it = argv_unhandled.begin(); it != argv_unhandled.end(); it++)1389 const list<const TChar*>& argv_unhandled = po::scanArgv(opts, argc, (const TChar**) argv, err); 1390 1391 for (list<const TChar*>::const_iterator it = argv_unhandled.begin(); it != argv_unhandled.end(); it++) 1452 1392 { 1453 1393 fprintf(stderr, "Unhandled argument ignored: `%s'\n", *it); … … 1473 1413 * Set any derived parameters 1474 1414 */ 1475 /* convert std::string to c string for compatability */ 1476 #if !NH_MV 1477 m_pchInputFile = cfg_InputFile.empty() ? NULL : strdup(cfg_InputFile.c_str()); 1478 #endif 1479 m_pchBitstreamFile = cfg_BitstreamFile.empty() ? NULL : strdup(cfg_BitstreamFile.c_str()); 1480 #if !NH_MV 1481 m_pchReconFile = cfg_ReconFile.empty() ? NULL : strdup(cfg_ReconFile.c_str()); 1482 #endif 1483 m_pchdQPFile = cfg_dQPFile.empty() ? NULL : strdup(cfg_dQPFile.c_str()); 1484 1415 m_adIntraLambdaModifier = cfg_adIntraLambdaModifier.values; 1485 1416 if(m_isField) 1486 1417 { … … 1545 1476 } 1546 1477 1547 m_scalingListFile = cfg_ScalingListFile.empty() ? NULL : strdup(cfg_ScalingListFile.c_str());1548 1549 1478 /* rules for input, output and internal bitdepths as per help text */ 1550 1479 if (m_MSBExtendedBitDepth[CHANNEL_TYPE_LUMA ] == 0) … … 1579 1508 m_InputChromaFormatIDC = numberToChromaFormat(tmpInputChromaFormat); 1580 1509 m_chromaFormatIDC = ((tmpChromaFormat == 0) ? (m_InputChromaFormatIDC) : (numberToChromaFormat(tmpChromaFormat))); 1510 1511 1512 assert(tmpWeightedPredictionMethod>=0 && tmpWeightedPredictionMethod<=WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT_AND_CLIPPING_AND_EXTENSION); 1513 if (!(tmpWeightedPredictionMethod>=0 && tmpWeightedPredictionMethod<=WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT_AND_CLIPPING_AND_EXTENSION)) 1514 { 1515 exit(EXIT_FAILURE); 1516 } 1517 m_weightedPredictionMethod = WeightedPredictionMethod(tmpWeightedPredictionMethod); 1518 1519 assert(tmpFastInterSearchMode>=0 && tmpFastInterSearchMode<=FASTINTERSEARCH_MODE3); 1520 if (tmpFastInterSearchMode<0 || tmpFastInterSearchMode>FASTINTERSEARCH_MODE3) 1521 { 1522 exit(EXIT_FAILURE); 1523 } 1524 m_fastInterSearchMode = FastInterSearchMode(tmpFastInterSearchMode); 1525 1526 assert(tmpMotionEstimationSearchMethod>=0 && tmpMotionEstimationSearchMethod<MESEARCH_NUMBER_OF_METHODS); 1527 if (tmpMotionEstimationSearchMethod<0 || tmpMotionEstimationSearchMethod>=MESEARCH_NUMBER_OF_METHODS) 1528 { 1529 exit(EXIT_FAILURE); 1530 } 1531 m_motionEstimationSearchMethod=MESearchMethod(tmpMotionEstimationSearchMethod); 1581 1532 1582 1533 #if NH_MV … … 1802 1753 } 1803 1754 1755 if (tmpSliceMode<0 || tmpSliceMode>=Int(NUMBER_OF_SLICE_CONSTRAINT_MODES)) 1756 { 1757 fprintf(stderr, "Error: bad slice mode\n"); 1758 exit(EXIT_FAILURE); 1759 } 1760 m_sliceMode = SliceConstraint(tmpSliceMode); 1761 if (tmpSliceSegmentMode<0 || tmpSliceSegmentMode>=Int(NUMBER_OF_SLICE_CONSTRAINT_MODES)) 1762 { 1763 fprintf(stderr, "Error: bad slice segment mode\n"); 1764 exit(EXIT_FAILURE); 1765 } 1766 m_sliceSegmentMode = SliceConstraint(tmpSliceSegmentMode); 1767 1768 if (tmpDecodedPictureHashSEIMappedType<0 || tmpDecodedPictureHashSEIMappedType>=Int(NUMBER_OF_HASHTYPES)) 1769 { 1770 fprintf(stderr, "Error: bad checksum mode\n"); 1771 exit(EXIT_FAILURE); 1772 } 1773 // Need to map values to match those of the SEI message: 1774 if (tmpDecodedPictureHashSEIMappedType==0) 1775 { 1776 m_decodedPictureHashSEIType=HASHTYPE_NONE; 1777 } 1778 else 1779 { 1780 m_decodedPictureHashSEIType=HashType(tmpDecodedPictureHashSEIMappedType-1); 1781 } 1782 1804 1783 // allocate slice-based dQP values 1805 1784 #if NH_MV … … 1828 1807 xResizeVector( m_auxId ); 1829 1808 1830 #if NH_3D 1809 #if NH_3D_VSO 1831 1810 xResizeVector( m_depthFlag ); 1832 1811 #endif … … 1923 1902 1924 1903 // reading external dQP description from file 1925 if ( m_pchdQPFile)1926 { 1927 FILE* fpt=fopen( m_ pchdQPFile, "r" );1904 if ( !m_dQPFileName.empty() ) 1905 { 1906 FILE* fpt=fopen( m_dQPFileName.c_str(), "r" ); 1928 1907 if ( fpt ) 1929 1908 { … … 1953 1932 } 1954 1933 1955 #if NH_MV _SEI1934 #if NH_MV 1956 1935 xParseSeiCfg(); 1957 1936 #endif … … 2037 2016 } 2038 2017 2039 #if NH_3D 2018 2040 2019 #if NH_3D_VSO 2041 2020 // Table base optimization … … 2054 2033 for (Int layer = 0; layer < m_numberOfLayers; layer++ ) 2055 2034 { 2056 if ( m_depthFlag[ layer ] )2035 if ( m_depthFlag[ layer ] || m_auxId[ layer ] == 2 ) 2057 2036 { 2058 2037 firstDepthLayer = layer; … … 2091 2070 LOG2_DISP_PREC_LUT ); 2092 2071 } 2072 #if NH_3D 2093 2073 else 2094 2074 { … … 2104 2084 LOG2_DISP_PREC_LUT ); 2105 2085 } 2106 #else2107 m_cCameraData .init ( ((UInt) m_iNumberOfViews ),2108 m_internalBitDepth[ CHANNEL_TYPE_LUMA],2109 (UInt) m_iCodedCamParPrecision,2110 m_FrameSkip,2111 (UInt) m_framesToBeEncoded,2112 m_pchCameraParameterFile,2113 m_pchBaseViewCameraNumbers,2114 NULL,2115 NULL,2116 LOG2_DISP_PREC_LUT );2117 #endif2118 2086 m_cCameraData.check( false, true ); 2087 #endif 2119 2088 #endif 2120 2089 … … 2145 2114 Void TAppEncCfg::xCheckParameter() 2146 2115 { 2147 if ( !m_decodedPictureHashSEIEnabled)2116 if (m_decodedPictureHashSEIType==HASHTYPE_NONE) 2148 2117 { 2149 2118 fprintf(stderr, "******************************************************************\n"); … … 2173 2142 #define xConfirmPara(a,b) check_failed |= confirmPara(a,b) 2174 2143 2175 xConfirmPara(m_ pchBitstreamFile==NULL, "A bitstream file name must be specified (BitstreamFile)");2144 xConfirmPara(m_bitstreamFileName.empty(), "A bitstream file name must be specified (BitstreamFile)"); 2176 2145 const UInt maxBitDepth=(m_chromaFormatIDC==CHROMA_400) ? m_internalBitDepth[CHANNEL_TYPE_LUMA] : std::max(m_internalBitDepth[CHANNEL_TYPE_LUMA], m_internalBitDepth[CHANNEL_TYPE_CHROMA]); 2177 2146 xConfirmPara(m_bitDepthConstraint<maxBitDepth, "The internalBitDepth must not be greater than the bitDepthConstraint value"); … … 2301 2270 #endif 2302 2271 2303 #if NH_3D 2272 #if NH_3D_VSO 2304 2273 if ( m_scalabilityMask & ( 1 << DEPTH_ID ) ) 2305 2274 { … … 2397 2366 if (lsIdx == 0) 2398 2367 { 2399 xConfirmPara( m_layerId sInSets[lsIdx].size() != 1 || m_layerIdsInSets[lsIdx][0] != 0 , "0-th layer shall only include layer 0. ");2400 } 2401 for ( Int i = 0; i < m_layerId sInSets[lsIdx].size(); i++ )2402 { 2403 xConfirmPara( m_layerId sInSets[lsIdx][i] < 0 || m_layerIdsInSets[lsIdx][i] >= MAX_NUM_LAYER_IDS, "LayerIdsInSet must be greater than 0 and less than MAX_NUM_LAYER_IDS" );2368 xConfirmPara( m_layerIdxInVpsInSets[lsIdx].size() != 1 || m_layerIdxInVpsInSets[lsIdx][0] != 0 , "0-th layer shall only include layer 0. "); 2369 } 2370 for ( Int i = 0; i < m_layerIdxInVpsInSets[lsIdx].size(); i++ ) 2371 { 2372 xConfirmPara( m_layerIdxInVpsInSets[lsIdx][i] < 0 || m_layerIdxInVpsInSets[lsIdx][i] >= MAX_NUM_LAYER_IDS, "LayerIdsInSet must be greater than 0 and less than MAX_NUM_LAYER_IDS" ); 2404 2373 } 2405 2374 } … … 2434 2403 { 2435 2404 Bool inLayerSetFlag = false; 2436 for (Int j = 0; j < m_layerId sInSets[ lsIdx].size(); j++ )2405 for (Int j = 0; j < m_layerIdxInVpsInSets[ lsIdx].size(); j++ ) 2437 2406 { 2438 if ( m_layerId sInSets[ lsIdx ][ j ] == m_layerIdsInDefOutputLayerSet[ lsIdx ][ i ] )2407 if ( m_layerIdxInVpsInSets[ lsIdx ][ j ] == m_layerIdsInDefOutputLayerSet[ lsIdx ][ i ] ) 2439 2408 { 2440 2409 inLayerSetFlag = true; … … 2544 2513 xConfirmPara( m_loopFilterBetaOffsetDiv2 < -6 || m_loopFilterBetaOffsetDiv2 > 6, "Loop Filter Beta Offset div. 2 exceeds supported range (-6 to 6)"); 2545 2514 xConfirmPara( m_loopFilterTcOffsetDiv2 < -6 || m_loopFilterTcOffsetDiv2 > 6, "Loop Filter Tc Offset div. 2 exceeds supported range (-6 to 6)"); 2546 xConfirmPara( m_iFastSearch < 0 || m_iFastSearch > 2, "Fast Search Mode is not supported value (0:Full search 1:Diamond 2:PMVFAST)" );2547 2515 xConfirmPara( m_iSearchRange < 0 , "Search Range must be more than 0" ); 2548 xConfirmPara( m_bipredSearchRange < 0 , "Search Range must be more than 0" ); 2516 xConfirmPara( m_bipredSearchRange < 0 , "Bi-prediction refinement search range must be more than 0" ); 2517 xConfirmPara( m_minSearchWindow < 0, "Minimum motion search window size for the adaptive window ME must be greater than or equal to 0" ); 2549 2518 #if NH_MV 2550 2519 xConfirmPara( m_iVerticalDisparitySearchRange <= 0 , "Vertical Disparity Search Range must be more than 0" ); … … 2624 2593 } 2625 2594 2626 xConfirmPara( m_sliceMode < 0 || m_sliceMode > 3, "SliceMode exceeds supported range (0 to 3)" ); 2627 if (m_sliceMode!=0) 2595 if (m_sliceMode!=NO_SLICES) 2628 2596 { 2629 2597 xConfirmPara( m_sliceArgument < 1 , "SliceArgument should be larger than or equal to 1" ); 2630 2598 } 2631 xConfirmPara( m_sliceSegmentMode < 0 || m_sliceSegmentMode > 3, "SliceSegmentMode exceeds supported range (0 to 3)" ); 2632 if (m_sliceSegmentMode!=0) 2599 if (m_sliceSegmentMode!=NO_SLICES) 2633 2600 { 2634 2601 xConfirmPara( m_sliceSegmentArgument < 1 , "SliceSegmentArgument should be larger than or equal to 1" ); … … 2638 2605 if (m_profile!=Profile::HIGHTHROUGHPUTREXT) 2639 2606 { 2640 xConfirmPara( tileFlag && m_ iWaveFrontSynchro, "Tile and Wavefrontcan not be applied together, except in the High Throughput Intra 4:4:4 16 profile");2607 xConfirmPara( tileFlag && m_entropyCodingSyncEnabledFlag, "Tiles and entropy-coding-sync (Wavefronts) can not be applied together, except in the High Throughput Intra 4:4:4 16 profile"); 2641 2608 } 2642 2609 … … 2662 2629 } 2663 2630 2664 #if NH_3D 2631 #if NH_3D_VSO 2665 2632 xConfirmPara( m_pchCameraParameterFile == 0 , "CameraParameterFile must be given"); 2666 2633 xConfirmPara( m_pchBaseViewCameraNumbers == 0 , "BaseViewCameraNumbers must be given" ); 2667 2634 xConfirmPara( m_iNumberOfViews != m_cCameraData.getBaseViewNumbers().size() , "Number of Views in BaseViewCameraNumbers must be equal to NumberOfViews" ); 2668 2635 xConfirmPara ( m_iCodedCamParPrecision < 0 || m_iCodedCamParPrecision > 5, "CodedCamParsPrecision must be in range of 0..5" ); 2669 #if NH_3D_VSO2670 2636 if( m_bUseVSO ) 2671 2637 { … … 2673 2639 xConfirmPara( m_uiVSOMode > 4 , "VSO Mode must be less than 5"); 2674 2640 } 2675 #endif2676 2641 #endif 2677 2642 // max CU width and height should be power of 2 … … 3237 3202 m_minSpatialSegmentationIdc = 4*PicSizeInSamplesY/maxSizeInSamplesY-4; 3238 3203 } 3239 else if(m_ iWaveFrontSynchro)3204 else if(m_entropyCodingSyncEnabledFlag) 3240 3205 { 3241 3206 m_minSpatialSegmentationIdc = 4*PicSizeInSamplesY/((2*m_iSourceHeight+m_iSourceWidth)*m_uiMaxCUHeight)-4; … … 3250 3215 } 3251 3216 } 3252 3253 xConfirmPara( m_iWaveFrontSynchro < 0, "WaveFrontSynchro cannot be negative" );3254 3255 xConfirmPara( m_decodedPictureHashSEIEnabled<0 || m_decodedPictureHashSEIEnabled>3, "this hash type is not correct!\n");3256 3217 3257 3218 if (m_toneMappingInfoSEIEnabled) … … 3282 3243 } 3283 3244 3245 if (m_chromaResamplingFilterSEIenabled) 3246 { 3247 xConfirmPara( (m_chromaFormatIDC == CHROMA_400 ), "chromaResamplingFilterSEI is not allowed to be present when ChromaFormatIDC is equal to zero (4:0:0)" ); 3248 xConfirmPara(m_vuiParametersPresentFlag && m_chromaLocInfoPresentFlag && (m_chromaSampleLocTypeTopField != m_chromaSampleLocTypeBottomField ), "When chromaResamplingFilterSEI is enabled, ChromaSampleLocTypeTopField has to be equal to ChromaSampleLocTypeBottomField" ); 3249 } 3250 3284 3251 if ( m_RCEnableRateControl ) 3285 3252 { … … 3293 3260 } 3294 3261 xConfirmPara( m_uiDeltaQpRD > 0, "Rate control cannot be used together with slice level multiple-QP optimization!\n" ); 3295 } 3262 #if U0132_TARGET_BITS_SATURATION 3263 #if NH_MV 3264 if ((m_RCCpbSaturationEnabled) && (m_level[0]!=Level::NONE) && (m_profile!=Profile::NONE)) 3265 { 3266 UInt uiLevelIdx = (m_level[0] / 10) + (UInt)((m_level[0] % 10) / 3); // (m_level / 30)*3 + ((m_level % 10) / 3); 3267 xConfirmPara(m_RCCpbSize > g_uiMaxCpbSize[m_levelTier[0]][uiLevelIdx], "RCCpbSize should be smaller than or equal to Max CPB size according to tier and level"); 3268 xConfirmPara(m_RCInitialCpbFullness > 1, "RCInitialCpbFullness should be smaller than or equal to 1"); 3269 } 3270 #else 3271 if ((m_RCCpbSaturationEnabled) && (m_level!=Level::NONE) && (m_profile!=Profile::NONE)) 3272 { 3273 UInt uiLevelIdx = (m_level / 10) + (UInt)((m_level % 10) / 3); // (m_level / 30)*3 + ((m_level % 10) / 3); 3274 xConfirmPara(m_RCCpbSize > g_uiMaxCpbSize[m_levelTier][uiLevelIdx], "RCCpbSize should be smaller than or equal to Max CPB size according to tier and level"); 3275 xConfirmPara(m_RCInitialCpbFullness > 1, "RCInitialCpbFullness should be smaller than or equal to 1"); 3276 } 3277 #endif 3278 #endif 3279 } 3280 #if U0132_TARGET_BITS_SATURATION 3281 else 3282 { 3283 xConfirmPara( m_RCCpbSaturationEnabled != 0, "Target bits saturation cannot be processed without Rate control" ); 3284 } 3285 #endif 3286 3296 3287 #if NH_MV 3297 3288 // VPS VUI … … 3328 3319 } 3329 3320 } 3330 #if !NH_MV_SEI3331 // Check input parameters for Sub-bitstream property SEI message3332 if( m_subBistreamPropSEIEnabled )3333 {3334 xConfirmPara(3335 (this->m_sbPropNumAdditionalSubStreams != m_sbPropAvgBitRate.size() )3336 || (this->m_sbPropNumAdditionalSubStreams != m_sbPropHighestSublayerId.size() )3337 || (this->m_sbPropNumAdditionalSubStreams != m_sbPropMaxBitRate.size() )3338 || (this->m_sbPropNumAdditionalSubStreams != m_sbPropOutputLayerSetIdxToVps.size() )3339 || (this->m_sbPropNumAdditionalSubStreams != m_sbPropSubBitstreamMode.size()), "Some parameters of some sub-bitstream not defined");3340 3341 for( Int i = 0; i < m_sbPropNumAdditionalSubStreams; i++ )3342 {3343 xConfirmPara( m_sbPropSubBitstreamMode[i] < 0 || m_sbPropSubBitstreamMode[i] > 1, "Mode value should be 0 or 1" );3344 xConfirmPara( m_sbPropHighestSublayerId[i] < 0 || m_sbPropHighestSublayerId[i] > MAX_TLAYER-1, "Maximum sub-layer ID out of range" );3345 xConfirmPara( m_sbPropOutputLayerSetIdxToVps[i] < 0 || m_sbPropOutputLayerSetIdxToVps[i] >= MAX_VPS_OUTPUTLAYER_SETS, "OutputLayerSetIdxToVps should be within allowed range" );3346 }3347 }3348 #endif3349 3321 #endif 3350 3322 3351 3323 if (m_segmentedRectFramePackingSEIEnabled) 3352 3324 { 3353 xConfirmPara(m_framePackingSEIEnabled > 0, "SEISegmentedRectFramePacking must be 0 when SEIFramePacking is 1");3325 xConfirmPara(m_framePackingSEIEnabled , "SEISegmentedRectFramePacking must be 0 when SEIFramePacking is 1"); 3354 3326 } 3355 3327 … … 3372 3344 } 3373 3345 3374 const Char *profileToString(const Profile::Name profile)3346 const TChar *profileToString(const Profile::Name profile) 3375 3347 { 3376 3348 static const UInt numberOfProfiles = sizeof(strToProfile)/sizeof(*strToProfile); … … 3400 3372 } 3401 3373 #else 3402 printf("Input File : %s\n", m_pchInputFile);3403 #endif 3404 printf("Bitstream File : %s\n", m_pchBitstreamFile);3374 printf("Input File : %s\n", m_inputFileName.c_str() ); 3375 #endif 3376 printf("Bitstream File : %s\n", m_bitstreamFileName.c_str() ); 3405 3377 #if NH_MV 3406 3378 for( Int layer = 0; layer < m_numberOfLayers; layer++) … … 3409 3381 } 3410 3382 #else 3411 printf("Reconstruction File : %s\n", m_pchReconFile);3383 printf("Reconstruction File : %s\n", m_reconFileName.c_str() ); 3412 3384 #endif 3413 3385 #if NH_MV … … 3421 3393 xPrintParaVector( "AuxId", m_auxId ); 3422 3394 #endif 3423 #if NH_3D 3395 #if NH_3D_VSO 3424 3396 xPrintParaVector( "DepthLayerFlag", m_depthFlag ); 3425 3397 printf("Coded Camera Param. Precision : %d\n", m_iCodedCamParPrecision); … … 3581 3553 3582 3554 printf("RateControl : %d\n", m_RCEnableRateControl ); 3555 printf("WPMethod : %d\n", Int(m_weightedPredictionMethod)); 3583 3556 3584 3557 if(m_RCEnableRateControl) … … 3591 3564 printf("ForceIntraQP : %d\n", m_RCForceIntraQP ); 3592 3565 3566 #if U0132_TARGET_BITS_SATURATION 3567 printf("CpbSaturation : %d\n", m_RCCpbSaturationEnabled ); 3568 if (m_RCCpbSaturationEnabled) 3569 { 3570 printf("CpbSize : %d\n", m_RCCpbSize); 3571 printf("InitalCpbFullness : %.2f\n", m_RCInitialCpbFullness); 3572 } 3573 #endif 3574 3593 3575 #if KWU_RC_MADPRED_E0227 3594 3576 printf("Depth based MAD prediction : %d\n", m_depthMADPred); … … 3613 3595 3614 3596 printf("Max Num Merge Candidates : %d\n", m_maxNumMergeCand); 3615 #if NH_3D 3597 #if NH_3D_VSO 3616 3598 printf("BaseViewCameraNumbers : %s\n", m_pchBaseViewCameraNumbers ); 3617 3599 printf("Coded Camera Param. Precision : %d\n", m_iCodedCamParPrecision); 3618 #if NH_3D_VSO3619 3600 printf("Force use of Lambda Scale : %d\n", m_bForceLambdaScaleVSO ); 3620 3601 … … 3634 3615 } 3635 3616 #endif //HHI_VSO 3636 #endif //NH_3D3637 3617 printf("\n"); 3638 3618 #if NH_MV … … 3648 3628 printf("SQP:%d ", m_uiDeltaQpRD ); 3649 3629 printf("ASR:%d ", m_bUseASR ); 3650 printf("FEN:%d ", m_bUseFastEnc ); 3630 printf("MinSearchWindow:%d ", m_minSearchWindow ); 3631 printf("RestrictMESampling:%d ", m_bRestrictMESampling ); 3632 printf("FEN:%d ", Int(m_fastInterSearchMode) ); 3651 3633 printf("ECU:%d ", m_bUseEarlyCU ); 3652 3634 printf("FDM:%d ", m_useFastDecisionForMerge ); … … 3657 3639 printf("TransformSkipFast:%d ", m_useTransformSkipFast ); 3658 3640 printf("TransformSkipLog2MaxSize:%d ", m_log2MaxTransformSkipBlockSize); 3659 printf("Slice: M=%d ", m_sliceMode);3641 printf("Slice: M=%d ", Int(m_sliceMode)); 3660 3642 if (m_sliceMode!=NO_SLICES) 3661 3643 { … … 3685 3667 printf("WPB:%d ", (Int)m_useWeightedBiPred); 3686 3668 printf("PME:%d ", m_log2ParallelMergeLevel); 3687 const Int iWaveFrontSubstreams = m_iWaveFrontSynchro ? (m_iSourceHeight + m_uiMaxCUHeight - 1) / m_uiMaxCUHeight : 1; 3688 printf(" WaveFrontSynchro:%d WaveFrontSubstreams:%d", 3689 m_iWaveFrontSynchro, iWaveFrontSubstreams); 3669 const Int iWaveFrontSubstreams = m_entropyCodingSyncEnabledFlag ? (m_iSourceHeight + m_uiMaxCUHeight - 1) / m_uiMaxCUHeight : 1; 3670 printf(" WaveFrontSynchro:%d WaveFrontSubstreams:%d", m_entropyCodingSyncEnabledFlag?1:0, iWaveFrontSubstreams); 3690 3671 printf(" ScalingList:%d ", m_useScalingListId ); 3691 3672 printf("TMVPMode:%d ", m_TMVPModeId ); … … 3700 3681 printf("WVSO:%d ", m_bUseWVSO ); 3701 3682 #endif 3683 #if NH_3D_QTL 3684 printf( "QTL:%d " , m_bUseQTL); 3685 #endif 3702 3686 #if NH_3D 3703 printf( "QTL:%d " , m_bUseQTL);3704 3687 printf( "IlluCompEnable:%d " , m_abUseIC); 3705 3688 printf( "IlluCompLowLatencyEnc:%d ", m_bUseLowLatencyICEnc); … … 3730 3713 } 3731 3714 3732 Bool confirmPara(Bool bflag, const Char* message)3715 Bool confirmPara(Bool bflag, const TChar* message) 3733 3716 { 3734 3717 if (!bflag) -
TabularUnified trunk/source/App/TAppEncoder/TAppEncCfg.h ¶
r1356 r1386 62 62 // file I/O 63 63 #if NH_MV 64 std::vector< char*> m_pchInputFileList; ///< source file names65 #else 66 Char* m_pchInputFile;///< source file name67 #endif 68 Char* m_pchBitstreamFile;///< output bitstream file64 std::vector<TChar*> m_pchInputFileList; ///< source file names 65 #else 66 std::string m_inputFileName; ///< source file name 67 #endif 68 std::string m_bitstreamFileName; ///< output bitstream file 69 69 #if NH_MV 70 70 std::vector<char*> m_pchReconFileList; ///< output reconstruction file names … … 72 72 Int m_iNumberOfViews; ///< number of Layers that are views 73 73 #else 74 Char* m_pchReconFile;///< output reconstruction file74 std::string m_reconFileName; ///< output reconstruction file 75 75 #endif 76 76 #if NH_MV … … 80 80 IntAry1d m_viewOrderIndex; ///< view order index 81 81 IntAry1d m_auxId; ///< auxiliary id 82 #if NH_3D 82 #if NH_3D_VSO 83 83 IntAry1d m_depthFlag; ///< depth flag 84 84 #endif … … 91 91 // layer sets 92 92 Int m_vpsNumLayerSets; ///< Number of layer sets 93 IntAry2d m_layerId sInSets; ///< LayerIds in vps of layer set93 IntAry2d m_layerIdxInVpsInSets; ///< LayerIds in vps of layer set 94 94 Int m_numAddLayerSets; ///< Number of additional layer sets 95 95 IntAry2d m_highestLayerIdxPlus1; ///< HighestLayerIdxPlus1 for each additional layer set and each independent layer (value with index 0 will be ignored) … … 112 112 Bool m_bitRatePresentVpsFlag; 113 113 Bool m_picRatePresentVpsFlag; 114 BoolAry2d m_bitRatePresentFlag; 115 BoolAry2d m_picRatePresentFlag; 116 IntAry2d m_avgBitRate; 117 IntAry2d m_maxBitRate; 118 IntAry2d m_constantPicRateIdc; 119 IntAry2d m_avgPicRate; 120 Bool m_tilesNotInUseFlag; 121 BoolAry1d m_tilesInUseFlag; 122 BoolAry1d m_loopFilterNotAcrossTilesFlag; 123 Bool m_wppNotInUseFlag; 124 BoolAry1d m_wppInUseFlag; 125 126 BoolAry2d m_tileBoundariesAlignedFlag; 127 Bool m_ilpRestrictedRefLayersFlag; 128 IntAry2d m_minSpatialSegmentOffsetPlus1; 129 BoolAry2d m_ctuBasedOffsetEnabledFlag; 130 IntAry2d m_minHorizontalCtuOffsetPlus1; 131 Bool m_singleLayerForNonIrapFlag; 132 Bool m_higherLayerIrapSkipFlag; 133 134 114 BoolAry2d m_bitRatePresentFlag; 115 BoolAry2d m_picRatePresentFlag; 116 IntAry2d m_avgBitRate; 117 IntAry2d m_maxBitRate; 118 IntAry2d m_constantPicRateIdc; 119 IntAry2d m_avgPicRate; 120 Bool m_tilesNotInUseFlag; 121 BoolAry1d m_tilesInUseFlag; 122 BoolAry1d m_loopFilterNotAcrossTilesFlag; 123 Bool m_wppNotInUseFlag; 124 BoolAry1d m_wppInUseFlag; 125 126 BoolAry2d m_tileBoundariesAlignedFlag; 127 Bool m_ilpRestrictedRefLayersFlag; 128 IntAry2d m_minSpatialSegmentOffsetPlus1; 129 BoolAry2d m_ctuBasedOffsetEnabledFlag; 130 IntAry2d m_minHorizontalCtuOffsetPlus1; 131 Bool m_singleLayerForNonIrapFlag; 132 Bool m_higherLayerIrapSkipFlag; 135 133 #if NH_3D 136 134 Bool m_abUseIC; 137 135 Bool m_bUseLowLatencyICEnc; 138 136 #endif 139 140 #endif 137 #endif 138 // Lambda modifiers 141 139 Double m_adLambdaModifier[ MAX_TLAYER ]; ///< Lambda modifier array for each temporal layer 140 std::vector<Double> m_adIntraLambdaModifier; ///< Lambda modifier for Intra pictures, one for each temporal layer. If size>temporalLayer, then use [temporalLayer], else if size>0, use [size()-1], else use m_adLambdaModifier. 141 Double m_dIntraQpFactor; ///< Intra Q Factor. If negative, use a default equation: 0.57*(1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? (GopSize-1)/2 : GopSize-1) )) 142 142 143 // source specification 143 144 Int m_iFrameRate; ///< source frame-rates (Hz) … … 160 161 Int m_framesToBeEncoded; ///< number of encoded frames 161 162 Int m_aiPad[2]; ///< number of padded pixels for width and height 163 Bool m_AccessUnitDelimiter; ///< add Access Unit Delimiter NAL units 162 164 InputColourSpaceConversion m_inputColourSpaceConvert; ///< colour space conversion to apply to input video 163 165 Bool m_snrInternalColourSpace; ///< if true, then no colour space conversion is applied for snr calculation, otherwise inverse of input is applied. … … 237 239 Int m_iQP; ///< QP value of key-picture (integer) 238 240 #endif 239 Char* m_pchdQPFile;///< QP offset for each slice (initialized from external file)241 std::string m_dQPFileName; ///< QP offset for each slice (initialized from external file) 240 242 #if NH_MV 241 243 std::vector<Int*> m_aidQP; ///< array of slice QP values for each layer … … 256 258 #endif 257 259 TComSEIMasteringDisplay m_masteringDisplay; 258 #if NH_MV _SEI260 #if NH_MV 259 261 std::vector<char*> m_seiCfgFileNames; ///< SEI message files. 260 262 SEIMessages m_seiMessages; ///< Buffer for SEI messages. … … 338 340 Int m_rdPenalty; ///< RD-penalty for 32x32 TU for intra in non-intra slices (0: no RD-penalty, 1: RD-penalty, 2: maximum RD-penalty) 339 341 Bool m_bDisableIntraPUsInInterSlices; ///< Flag for disabling intra predicted PUs in inter slices. 340 Int m_iFastSearch; ///< ME mode, 0 = full, 1 = diamond, 2 = PMVFAST 342 MESearchMethod m_motionEstimationSearchMethod; 343 Bool m_bRestrictMESampling; ///< Restrict sampling for the Selective ME 341 344 Int m_iSearchRange; ///< ME search range 342 345 Int m_bipredSearchRange; ///< ME search range for bipred refinement 346 Int m_minSearchWindow; ///< ME minimum search window size for the Adaptive Window ME 343 347 Bool m_bClipForBiPredMeEnabled; ///< Enables clipping for Bi-Pred ME. 344 348 Bool m_bFastMEAssumingSmootherMVEnabled; ///< Enables fast ME assuming a smoother MV. … … 347 351 Int m_iVerticalDisparitySearchRange; ///< ME vertical search range for inter-view prediction 348 352 #endif 349 Bool m_bUseFastEnc; ///< flag for using fast encoder setting353 FastInterSearchMode m_fastInterSearchMode; ///< Parameter that controls fast encoder settings 350 354 Bool m_bUseEarlyCU; ///< flag for using Early CU setting 351 355 Bool m_useFastDecisionForMerge; ///< flag for using Fast Decision Merge RD-Cost 352 356 Bool m_bUseCbfFastMode; ///< flag for using Cbf Fast PU Mode Decision 353 357 Bool m_useEarlySkipDetection; ///< flag for using Early SKIP Detection 354 Int m_sliceMode; ///< 0: no slice limits, 1 : max number of CTBs per slice, 2: max number of bytes per slice, 355 ///< 3: max number of tiles per slice 358 SliceConstraint m_sliceMode; 356 359 Int m_sliceArgument; ///< argument according to selected slice mode 357 Int m_sliceSegmentMode; ///< 0: no slice segment limits, 1 : max number of CTBs per slice segment, 2: max number of bytes per slice segment, 358 ///< 3: max number of tiles per slice segment 360 SliceConstraint m_sliceSegmentMode; 359 361 Int m_sliceSegmentArgument; ///< argument according to selected slice segment mode 360 362 … … 366 368 std::vector<Int> m_tileColumnWidth; 367 369 std::vector<Int> m_tileRowHeight; 368 Int m_iWaveFrontSynchro; //< 0: no WPP. >= 1: WPP is enabled, the "Top right" from which inheritance occurs is this LCU offset in the line above the current. 369 Int m_iWaveFrontFlush; //< enable(1)/disable(0) the CABAC flush at the end of each line of LCUs. 370 Bool m_entropyCodingSyncEnabledFlag; 370 371 371 372 Bool m_bUseConstrainedIntraPred; ///< flag for using constrained intra prediction … … 374 375 Bool m_bUseBLambdaForNonKeyLowDelayPictures; 375 376 376 Int m_decodedPictureHashSEIEnabled; ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting ondecoded picture hash SEI message377 Intm_recoveryPointSEIEnabled;378 Intm_bufferingPeriodSEIEnabled;379 Intm_pictureTimingSEIEnabled;377 HashType m_decodedPictureHashSEIType; ///< Checksum mode for decoded picture hash SEI message 378 Bool m_recoveryPointSEIEnabled; 379 Bool m_bufferingPeriodSEIEnabled; 380 Bool m_pictureTimingSEIEnabled; 380 381 Bool m_toneMappingInfoSEIEnabled; 381 Bool m_chroma SamplingFilterSEIenabled;382 Int m_chroma SamplingHorFilterIdc;383 Int m_chroma SamplingVerFilterIdc;382 Bool m_chromaResamplingFilterSEIenabled; 383 Int m_chromaResamplingHorFilterIdc; 384 Int m_chromaResamplingVerFilterIdc; 384 385 Int m_toneMapId; 385 386 Bool m_toneMapCancelFlag; … … 408 409 Int* m_codedPivotValue; 409 410 Int* m_targetPivotValue; 410 Intm_framePackingSEIEnabled;411 Bool m_framePackingSEIEnabled; 411 412 Int m_framePackingSEIType; 412 413 Int m_framePackingSEIId; 413 414 Int m_framePackingSEIQuincunx; 414 415 Int m_framePackingSEIInterpretation; 415 Intm_segmentedRectFramePackingSEIEnabled;416 Bool m_segmentedRectFramePackingSEIEnabled; 416 417 Bool m_segmentedRectFramePackingSEICancel; 417 418 Int m_segmentedRectFramePackingSEIType; 418 419 Bool m_segmentedRectFramePackingSEIPersistence; 419 420 Int m_displayOrientationSEIAngle; 420 Intm_temporalLevel0IndexSEIEnabled;421 Intm_gradualDecodingRefreshInfoEnabled;421 Bool m_temporalLevel0IndexSEIEnabled; 422 Bool m_gradualDecodingRefreshInfoEnabled; 422 423 Int m_noDisplaySEITLayer; 423 Intm_decodingUnitInfoSEIEnabled;424 Intm_SOPDescriptionSEIEnabled;425 Intm_scalableNestingSEIEnabled;424 Bool m_decodingUnitInfoSEIEnabled; 425 Bool m_SOPDescriptionSEIEnabled; 426 Bool m_scalableNestingSEIEnabled; 426 427 Bool m_tmctsSEIEnabled; 427 428 Bool m_timeCodeSEIEnabled; … … 442 443 Bool m_useWeightedPred; ///< Use of weighted prediction in P slices 443 444 Bool m_useWeightedBiPred; ///< Use of bi-directional weighted prediction in B slices 445 WeightedPredictionMethod m_weightedPredictionMethod; 444 446 445 447 UInt m_log2ParallelMergeLevel; ///< Parallel merge estimation region … … 455 457 Int m_RCInitialQP; ///< inital QP for rate control 456 458 Bool m_RCForceIntraQP; ///< force all intra picture to use initial QP or not 457 459 460 #if U0132_TARGET_BITS_SATURATION 461 Bool m_RCCpbSaturationEnabled; ///< enable target bits saturation to avoid CPB overflow and underflow 462 UInt m_RCCpbSize; ///< CPB size 463 Double m_RCInitialCpbFullness; ///< initial CPB fullness 464 #endif 465 458 466 #if KWU_RC_VIEWRC_E0227 459 467 vector<Int> m_viewTargetBits; … … 464 472 #endif 465 473 466 ScalingListMode m_useScalingListId; ///< using quantization matrix467 Char* m_scalingListFile;///< quantization matrix file name474 ScalingListMode m_useScalingListId; ///< using quantization matrix 475 std::string m_scalingListFileName; ///< quantization matrix file name 468 476 469 477 Bool m_TransquantBypassEnableFlag; ///< transquant_bypass_enable_flag setting in PPS. … … 509 517 Int m_log2MaxMvLengthHorizontal; ///< Indicate the maximum absolute value of a decoded horizontal MV component in quarter-pel luma units 510 518 Int m_log2MaxMvLengthVertical; ///< Indicate the maximum absolute value of a decoded vertical MV component in quarter-pel luma units 519 std::string m_colourRemapSEIFileRoot; 520 511 521 std::string m_summaryOutFilename; ///< filename to use for producing summary output file. 512 522 std::string m_summaryPicFilenameBase; ///< Base filename to use for producing summary picture output files. The actual filenames used will have I.txt, P.txt and B.txt appended. 513 523 UInt m_summaryVerboseness; ///< Specifies the level of the verboseness of the text output. 514 524 #if NH_MV 515 #if !NH_MV_SEI516 Bool m_subBistreamPropSEIEnabled;517 Int m_sbPropNumAdditionalSubStreams;518 IntAry1d m_sbPropSubBitstreamMode;519 IntAry1d m_sbPropOutputLayerSetIdxToVps;520 IntAry1d m_sbPropHighestSublayerId;521 IntAry1d m_sbPropAvgBitRate;522 IntAry1d m_sbPropMaxBitRate;523 #endif524 525 Bool m_outputVpsInfo; 525 #endif 526 TChar* m_pchBaseViewCameraNumbers; 527 #endif 528 526 529 #if NH_3D 527 530 // Output Format 528 531 Bool m_depth420OutputFlag; ///< Output depth layers in 4:2:0 format 529 // Camera parameters 530 Char* m_pchCameraParameterFile; ///< camera parameter file 531 Char* m_pchBaseViewCameraNumbers; 532 #endif 533 // Camera parameters 534 #if NH_3D_VSO 535 TChar* m_pchCameraParameterFile; ///< camera parameter file 532 536 TAppComCamPara m_cCameraData; 533 537 Int m_iCodedCamParPrecision; ///< precision for coding of camera parameters 534 #if NH_3D_VSO 535 Char* m_pchVSOConfig; 538 TChar* m_pchVSOConfig; 536 539 Bool m_bUseVSO; ///< flag for using View Synthesis Optimization 537 540 Bool m_bVSOLSTable; ///< Depth QP dependent Lagrange parameter optimization (m23714) … … 556 559 TRenModSetupStrParser m_cRenModStrParser; 557 560 #endif 558 561 #if NH_3D 559 562 Bool m_useDLT; ///< flag for using DLT 563 #endif 564 #if NH_3D_QTL 560 565 Bool m_bUseQTL; ///< flag for using depth QuadTree Limitation 566 #endif 567 #if NH_3D 561 568 BoolAry1d m_ivMvPredFlag; 562 569 BoolAry1d m_ivMvScalingFlag; … … 660 667 Void xPrintVectorElem( Double elem ) { printf(" %5.2f", elem );}; 661 668 Void xPrintVectorElem( Bool elem ) { printf(" %d" , ( elem ? 1 : 0 ));}; 662 #if NH_MV_SEI663 669 Void xParseSeiCfg(); 664 #endif 665 #endif 666 #if NH_MV 670 667 671 Int getGOPSize() { return m_iGOPSize; } 668 672 #endif … … 674 678 Void create (); ///< create option handling class 675 679 Void destroy (); ///< destroy option handling class 676 Bool parseCfg ( Int argc, Char* argv[] );///< parse configuration file to fill member variables680 Bool parseCfg ( Int argc, TChar* argv[] ); ///< parse configuration file to fill member variables 677 681 678 682 };// END CLASS DEFINITION TAppEncCfg -
TabularUnified trunk/source/App/TAppEncoder/TAppEncTop.cpp ¶
r1356 r1386 147 147 #if NH_3D 148 148 xSetCamPara ( vps ); 149 #endif 150 #if NH_3D_VSO 149 151 m_ivPicLists.setVPS ( &vps ); 150 152 #endif … … 186 188 for (Int d = 0; d < 2; d++) 187 189 { 188 m_sps3dExtension.setIv MvPredFlag ( d, m_ivMvPredFlag[d] );189 m_sps3dExtension.setIvMvScal ingFlag ( d, m_ivMvScalingFlag[d] );190 m_sps3dExtension.setIvDiMcEnabledFlag ( d, m_ivMvPredFlag[d] ); 191 m_sps3dExtension.setIvMvScalEnabledFlag ( d, m_ivMvScalingFlag[d] ); 190 192 if (d == 0 ) 191 193 { 192 m_sps3dExtension.setLog2 SubPbSizeMinus3 ( d, m_log2SubPbSizeMinus3 );193 m_sps3dExtension.setIvResPred Flag ( d, m_ivResPredFlag );194 m_sps3dExtension.setDepthRef inementFlag ( d, m_depthRefinementFlag );195 m_sps3dExtension.setV iewSynthesisPredFlag ( d, m_viewSynthesisPredFlag );196 m_sps3dExtension.setD epthBasedBlkPartFlag ( d, m_depthBasedBlkPartFlag );194 m_sps3dExtension.setLog2IvmcSubPbSizeMinus3 ( d, m_log2SubPbSizeMinus3 ); 195 m_sps3dExtension.setIvResPredEnabledFlag ( d, m_ivResPredFlag ); 196 m_sps3dExtension.setDepthRefEnabledFlag ( d, m_depthRefinementFlag ); 197 m_sps3dExtension.setVspMcEnabledFlag ( d, m_viewSynthesisPredFlag ); 198 m_sps3dExtension.setDbbpEnabledFlag ( d, m_depthBasedBlkPartFlag ); 197 199 } 198 200 else 199 201 { 200 m_sps3dExtension.set MpiFlag ( d, m_mpiFlag );201 m_sps3dExtension.setLog2 MpiSubPbSizeMinus3( d, m_log2MpiSubPbSizeMinus3);202 m_sps3dExtension.setIntraContour Flag ( d, m_intraContourFlag );203 m_sps3dExtension.setIntra SdcWedgeFlag ( d, m_intraSdcFlag || m_intraWedgeFlag );204 m_sps3dExtension.set QtPredFlag ( d, m_qtPredFlag );205 m_sps3dExtension.setInter SdcFlag ( d, m_interSdcFlag );206 m_sps3dExtension.set DepthIntraSkipFlag ( d, m_depthIntraSkipFlag );202 m_sps3dExtension.setTexMcEnabledFlag ( d, m_mpiFlag ); 203 m_sps3dExtension.setLog2TexmcSubPbSizeMinus3( d, m_log2MpiSubPbSizeMinus3); 204 m_sps3dExtension.setIntraContourEnabledFlag ( d, m_intraContourFlag ); 205 m_sps3dExtension.setIntraDcOnlyWedgeEnabledFlag ( d, m_intraSdcFlag || m_intraWedgeFlag ); 206 m_sps3dExtension.setCqtCuPartPredEnabledFlag ( d, m_qtPredFlag ); 207 m_sps3dExtension.setInterDcOnlyEnabledFlag ( d, m_interSdcFlag ); 208 m_sps3dExtension.setSkipIntraEnabledFlag ( d, m_depthIntraSkipFlag ); 207 209 } 208 210 } … … 276 278 m_cTEncTop.setViewId ( vps.getViewId ( layerId ) ); 277 279 m_cTEncTop.setViewIndex ( vps.getViewIndex ( layerId ) ); 278 #if NH_3D 279 Bool isDepth = ( vps.getDepthId ( layerId ) != 0 ) ; 280 m_cTEncTop.setIsDepth ( isDepth ); 280 #if NH_3D_VSO 281 Bool isDepth = ( vps.getDepthId ( layerId ) != 0 ) ; 282 Bool isAuxDepth = ( vps.getAuxId ( layerId ) == 2 ) ; // TBD: define 2 as AUX_DEPTH 283 m_cTEncTop.setIsDepth ( isDepth ); 284 m_cTEncTop.setIsAuxDepth ( isAuxDepth ); 281 285 //====== Camera Parameters ========= 282 286 m_cTEncTop.setCameraParameters ( &m_cCameraData ); 283 #if NH_3D_VSO284 287 //====== VSO ========= 285 288 m_cTEncTop.setRenderModelParameters ( &m_cRenModStrParser ); 286 m_cTEncTop.setForceLambdaScaleVSO ( isDepth ? m_bForceLambdaScaleVSO : false );287 m_cTEncTop.setLambdaScaleVSO ( isDepth ? m_dLambdaScaleVSO : 1 );288 m_cTEncTop.setVSOMode ( isDepth ? m_uiVSOMode : 0 );289 290 m_cTEncTop.setAllowNegDist ( isDepth ? m_bAllowNegDist : false );289 m_cTEncTop.setForceLambdaScaleVSO ( isDepth || isAuxDepth ? m_bForceLambdaScaleVSO : false ); 290 m_cTEncTop.setLambdaScaleVSO ( isDepth || isAuxDepth ? m_dLambdaScaleVSO : 1 ); 291 m_cTEncTop.setVSOMode ( isDepth || isAuxDepth ? m_uiVSOMode : 0 ); 292 293 m_cTEncTop.setAllowNegDist ( isDepth || isAuxDepth ? m_bAllowNegDist : false ); 291 294 292 295 // SAIT_VSO_EST_A0033 293 m_cTEncTop.setUseEstimatedVSD ( isDepth ? m_bUseEstimatedVSD : false );296 m_cTEncTop.setUseEstimatedVSD ( isDepth || isAuxDepth ? m_bUseEstimatedVSD : false ); 294 297 295 298 // LGE_WVSO_A0119 296 m_cTEncTop.setUseWVSO ( isDepth ? m_bUseWVSO : false );297 m_cTEncTop.setVSOWeight ( isDepth ? m_iVSOWeight : 0 );298 m_cTEncTop.setVSDWeight ( isDepth ? m_iVSDWeight : 0 );299 m_cTEncTop.setDWeight ( isDepth ? m_iDWeight : 0 );299 m_cTEncTop.setUseWVSO ( isDepth || isAuxDepth ? m_bUseWVSO : false ); 300 m_cTEncTop.setVSOWeight ( isDepth || isAuxDepth ? m_iVSOWeight : 0 ); 301 m_cTEncTop.setVSDWeight ( isDepth || isAuxDepth ? m_iVSDWeight : 0 ); 302 m_cTEncTop.setDWeight ( isDepth || isAuxDepth ? m_iDWeight : 0 ); 300 303 #endif // H_3D_VSO 304 #if NH_3D 301 305 #if NH_3D_IC 302 306 m_cTEncTop.setUseIC ( vps.getViewIndex( layerId ) == 0 || isDepth ? false : m_abUseIC ); … … 308 312 m_cTEncTop.setUseSDC ( isDepth ? m_intraSdcFlag : false ); 309 313 m_cTEncTop.setUseDLT ( isDepth ? m_useDLT : false ); 310 m_cTEncTop.setUseQTL ( isDepth ? m_bUseQTL : false ); 314 #endif 315 #if NH_3D_QTL 316 m_cTEncTop.setUseQTL ( isDepth || isAuxDepth ? m_bUseQTL : false ); 317 #endif 318 #if NH_3D 311 319 m_cTEncTop.setSps3dExtension ( m_sps3dExtension ); 312 320 #endif // NH_3D … … 378 386 m_cTEncTop.setLambdaModifier ( uiLoop, m_adLambdaModifier[ uiLoop ] ); 379 387 } 388 m_cTEncTop.setIntraLambdaModifier ( m_adIntraLambdaModifier ); 389 m_cTEncTop.setIntraQpFactor ( m_dIntraQpFactor ); 390 380 391 #if NH_MV 381 392 m_cTEncTop.setQP ( m_iQP[layerIdInVps] ); … … 385 396 386 397 m_cTEncTop.setPad ( m_aiPad ); 387 398 m_cTEncTop.setAccessUnitDelimiter ( m_AccessUnitDelimiter ); 388 399 #if NH_MV 389 400 m_cTEncTop.setMaxTempLayer ( m_maxTempLayerMvc[layerIdInVps] ); … … 408 419 //====== Motion search ======== 409 420 m_cTEncTop.setDisableIntraPUsInInterSlices ( m_bDisableIntraPUsInInterSlices ); 410 m_cTEncTop.set FastSearch ( m_iFastSearch);421 m_cTEncTop.setMotionEstimationSearchMethod ( m_motionEstimationSearchMethod ); 411 422 m_cTEncTop.setSearchRange ( m_iSearchRange ); 412 423 m_cTEncTop.setBipredSearchRange ( m_bipredSearchRange ); 413 424 m_cTEncTop.setClipForBiPredMeEnabled ( m_bClipForBiPredMeEnabled ); 414 425 m_cTEncTop.setFastMEAssumingSmootherMVEnabled ( m_bFastMEAssumingSmootherMVEnabled ); 426 m_cTEncTop.setMinSearchWindow ( m_minSearchWindow ); 427 m_cTEncTop.setRestrictMESampling ( m_bRestrictMESampling ); 415 428 416 429 #if NH_MV … … 439 452 m_cTEncTop.setExtendedPrecisionProcessingFlag ( m_extendedPrecisionProcessingFlag ); 440 453 m_cTEncTop.setHighPrecisionOffsetsEnabledFlag ( m_highPrecisionOffsetsEnabledFlag ); 454 455 m_cTEncTop.setWeightedPredictionMethod( m_weightedPredictionMethod ); 456 441 457 //====== Tool list ======== 442 458 m_cTEncTop.setDeltaQpRD ( m_uiDeltaQpRD ); … … 463 479 m_cTEncTop.setQuadtreeTUMaxDepthInter ( m_uiQuadtreeTUMaxDepthInter ); 464 480 m_cTEncTop.setQuadtreeTUMaxDepthIntra ( m_uiQuadtreeTUMaxDepthIntra ); 465 m_cTEncTop.set UseFastEnc ( m_bUseFastEnc);481 m_cTEncTop.setFastInterSearchMode ( m_fastInterSearchMode ); 466 482 m_cTEncTop.setUseEarlyCU ( m_bUseEarlyCU ); 467 483 m_cTEncTop.setUseFastDecisionForMerge ( m_useFastDecisionForMerge ); … … 513 529 514 530 //====== Slice ======== 515 m_cTEncTop.setSliceMode ( (SliceConstraint)m_sliceMode );531 m_cTEncTop.setSliceMode ( m_sliceMode ); 516 532 m_cTEncTop.setSliceArgument ( m_sliceArgument ); 517 533 518 534 //====== Dependent Slice ======== 519 m_cTEncTop.setSliceSegmentMode ( (SliceConstraint)m_sliceSegmentMode );535 m_cTEncTop.setSliceSegmentMode ( m_sliceSegmentMode ); 520 536 m_cTEncTop.setSliceSegmentArgument ( m_sliceSegmentArgument ); 521 537 … … 540 556 541 557 m_cTEncTop.setIntraSmoothingDisabledFlag (!m_enableIntraReferenceSmoothing ); 542 m_cTEncTop.setDecodedPictureHashSEI Enabled ( m_decodedPictureHashSEIEnabled);558 m_cTEncTop.setDecodedPictureHashSEIType ( m_decodedPictureHashSEIType ); 543 559 m_cTEncTop.setRecoveryPointSEIEnabled ( m_recoveryPointSEIEnabled ); 544 560 m_cTEncTop.setBufferingPeriodSEIEnabled ( m_bufferingPeriodSEIEnabled ); … … 571 587 m_cTEncTop.setTMISEINominalWhiteLevelLumaCodeValue ( m_nominalWhiteLevelLumaCodeValue ); 572 588 m_cTEncTop.setTMISEIExtendedWhiteLevelLumaCodeValue ( m_extendedWhiteLevelLumaCodeValue ); 573 m_cTEncTop.setChroma SamplingFilterHintEnabled ( m_chromaSamplingFilterSEIenabled );574 m_cTEncTop.setChroma SamplingHorFilterIdc ( m_chromaSamplingHorFilterIdc );575 m_cTEncTop.setChroma SamplingVerFilterIdc ( m_chromaSamplingVerFilterIdc );589 m_cTEncTop.setChromaResamplingFilterHintEnabled ( m_chromaResamplingFilterSEIenabled ); 590 m_cTEncTop.setChromaResamplingHorFilterIdc ( m_chromaResamplingHorFilterIdc ); 591 m_cTEncTop.setChromaResamplingVerFilterIdc ( m_chromaResamplingVerFilterIdc ); 576 592 m_cTEncTop.setFramePackingArrangementSEIEnabled ( m_framePackingSEIEnabled ); 577 593 m_cTEncTop.setFramePackingArrangementSEIType ( m_framePackingSEIType ); … … 590 606 m_cTEncTop.setSOPDescriptionSEIEnabled ( m_SOPDescriptionSEIEnabled ); 591 607 m_cTEncTop.setScalableNestingSEIEnabled ( m_scalableNestingSEIEnabled ); 592 #if NH_MV593 #if !NH_MV_SEI594 m_cTEncTop.setSubBitstreamPropSEIEnabled ( m_subBistreamPropSEIEnabled );595 if( m_subBistreamPropSEIEnabled )596 {597 m_cTEncTop.setNumAdditionalSubStreams ( m_sbPropNumAdditionalSubStreams );598 m_cTEncTop.setSubBitstreamMode ( m_sbPropSubBitstreamMode );599 m_cTEncTop.setOutputLayerSetIdxToVps ( m_sbPropOutputLayerSetIdxToVps );600 m_cTEncTop.setHighestSublayerId ( m_sbPropHighestSublayerId );601 m_cTEncTop.setAvgBitRate ( m_sbPropAvgBitRate );602 m_cTEncTop.setMaxBitRate ( m_sbPropMaxBitRate );603 }604 #endif605 #endif606 607 608 m_cTEncTop.setTMCTSSEIEnabled ( m_tmctsSEIEnabled ); 608 609 m_cTEncTop.setTimeCodeSEIEnabled ( m_timeCodeSEIEnabled ); … … 623 624 m_cTEncTop.setKneeSEIInputKneePoint ( m_kneeSEIInputKneePoint ); 624 625 m_cTEncTop.setKneeSEIOutputKneePoint ( m_kneeSEIOutputKneePoint ); 626 m_cTEncTop.setColourRemapInfoSEIFileRoot ( m_colourRemapSEIFileRoot ); 625 627 m_cTEncTop.setMasteringDisplaySEI ( m_masteringDisplay ); 626 628 627 #if NH_MV _SEI629 #if NH_MV 628 630 m_cTEncTop.setSeiMessages ( &m_seiMessages ); 629 631 #endif … … 644 646 } 645 647 m_cTEncTop.setLFCrossTileBoundaryFlag ( m_bLFCrossTileBoundaryFlag ); 646 m_cTEncTop.set WaveFrontSynchro ( m_iWaveFrontSynchro);648 m_cTEncTop.setEntropyCodingSyncEnabledFlag ( m_entropyCodingSyncEnabledFlag ); 647 649 m_cTEncTop.setTMVPModeId ( m_TMVPModeId ); 648 650 m_cTEncTop.setUseScalingListId ( m_useScalingListId ); 649 m_cTEncTop.setScalingListFile ( m_scalingListFile);651 m_cTEncTop.setScalingListFileName ( m_scalingListFileName ); 650 652 m_cTEncTop.setSignHideFlag ( m_signHideFlag); 651 653 #if KWU_RC_VIEWRC_E0227 || KWU_RC_MADPRED_E0227 … … 669 671 m_cTEncTop.setInitialQP ( m_RCInitialQP ); 670 672 m_cTEncTop.setForceIntraQP ( m_RCForceIntraQP ); 673 #if U0132_TARGET_BITS_SATURATION 674 m_cTEncTop.setCpbSaturationEnabled ( m_RCCpbSaturationEnabled ); 675 m_cTEncTop.setCpbSize ( m_RCCpbSize ); 676 m_cTEncTop.setInitialCpbFullness ( m_RCInitialCpbFullness ); 677 #endif 678 671 679 #if KWU_RC_MADPRED_E0227 672 680 if(m_cTEncTop.getUseRateCtrl() && !m_cTEncTop.getIsDepth()) … … 796 804 TEncTop* pcEncTop = m_acTEncTopList[ layer ]; 797 805 Int iViewNum = pcEncTop->getViewIndex(); 798 Int iContent = pcEncTop->getIsDepth() ? 1 : 0;806 Int iContent = pcEncTop->getIsDepth() || pcEncTop->getIsAuxDepth() ? 1 : 0; 799 807 Int iNumOfModels = m_cRenModStrParser.getNumOfModelsForView(iViewNum, iContent); 800 808 … … 843 851 #else 844 852 // Video I/O 845 m_cTVideoIOYuvInputFile.open( m_ pchInputFile, false, m_inputBitDepth, m_MSBExtendedBitDepth, m_internalBitDepth ); // read mode853 m_cTVideoIOYuvInputFile.open( m_inputFileName, false, m_inputBitDepth, m_MSBExtendedBitDepth, m_internalBitDepth ); // read mode 846 854 m_cTVideoIOYuvInputFile.skipFrames(m_FrameSkip, m_iSourceWidth - m_aiPad[0], m_iSourceHeight - m_aiPad[1], m_InputChromaFormatIDC); 847 855 848 if ( m_pchReconFile)849 { 850 m_cTVideoIOYuvReconFile.open(m_ pchReconFile, true, m_outputBitDepth, m_outputBitDepth, m_internalBitDepth); // write mode856 if (!m_reconFileName.empty()) 857 { 858 m_cTVideoIOYuvReconFile.open(m_reconFileName, true, m_outputBitDepth, m_outputBitDepth, m_internalBitDepth); // write mode 851 859 } 852 860 … … 917 925 Void TAppEncTop::encode() 918 926 { 919 fstream bitstreamFile(m_ pchBitstreamFile, fstream::binary | fstream::out);927 fstream bitstreamFile(m_bitstreamFileName.c_str(), fstream::binary | fstream::out); 920 928 if (!bitstreamFile) 921 929 { 922 fprintf(stderr, "\nfailed to open bitstream file `%s' for writing\n", m_ pchBitstreamFile);930 fprintf(stderr, "\nfailed to open bitstream file `%s' for writing\n", m_bitstreamFileName.c_str()); 923 931 exit(EXIT_FAILURE); 924 932 } … … 1028 1036 for ( Int gopId=0; gopId < gopSize; gopId++ ) 1029 1037 { 1030 #if NH_3D 1038 #if NH_3D_VSO 1031 1039 UInt iNextPoc = m_acTEncTopList[0] -> getFrameId( gopId ); 1032 1040 if ( iNextPoc < m_framesToBeEncoded ) … … 1150 1158 printRateSummary(); 1151 1159 1152 #if H_3D_REN_MAX_DEV_OUT1160 #if NH_3D_REN_MAX_DEV_OUT 1153 1161 Double dMaxDispDiff = m_cCameraData.getMaxShiftDeviation(); 1154 1162 … … 1295 1303 } 1296 1304 #else 1297 if ( m_pchReconFile)1305 if (!m_reconFileName.empty()) 1298 1306 { 1299 1307 m_cTVideoIOYuvReconFile.write( pcPicYuvRecTop, pcPicYuvRecBottom, ipCSC, m_confWinLeft, m_confWinRight, m_confWinTop, m_confWinBottom, NUM_CHROMA_FORMAT, m_isTopFieldFirst ); … … 1352 1360 } 1353 1361 #else 1354 if ( m_pchReconFile)1362 if (!m_reconFileName.empty()) 1355 1363 { 1356 1364 m_cTVideoIOYuvReconFile.write( pcPicYuvRec, ipCSC, m_confWinLeft, m_confWinRight, m_confWinTop, m_confWinBottom, … … 1670 1678 if( m_depthFlag[ curLayerIdInVps ] && ( m_mpiFlag|| m_qtPredFlag || m_intraContourFlag ) ) 1671 1679 { 1672 Int nuhLayerIdTex = vps.getLayerIdInNuh( vps.getViewIndex( curLayerIdInNuh ), false );1680 Int nuhLayerIdTex = vps.getLayerIdInNuh( vps.getViewIndex( curLayerIdInNuh ), false, 0 ); 1673 1681 if ( nuhLayerIdTex == refLayerIdInNuh ) 1674 1682 { … … 1696 1704 for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++ ) 1697 1705 { 1698 Int nuhLayerIdDep = vps.getLayerIdInNuh( vps.getViewIndex( vps.getIdRefListLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[j] ) ), true );1706 Int nuhLayerIdDep = vps.getLayerIdInNuh( vps.getViewIndex( vps.getIdRefListLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[j] ) ), true, 0 ); 1699 1707 if ( nuhLayerIdDep == refLayerIdInNuh ) 1700 1708 { … … 2063 2071 vps.setLayerIdIncludedFlag( false, lsIdx, layerId ); 2064 2072 } 2065 for ( Int i = 0; i < m_layerId sInSets[lsIdx].size(); i++)2073 for ( Int i = 0; i < m_layerIdxInVpsInSets[lsIdx].size(); i++) 2066 2074 { 2067 vps.setLayerIdIncludedFlag( true, lsIdx, vps.getLayerIdInNuh( m_layerId sInSets[lsIdx][i] ) );2075 vps.setLayerIdIncludedFlag( true, lsIdx, vps.getLayerIdInNuh( m_layerIdxInVpsInSets[lsIdx][i] ) ); 2068 2076 } 2069 2077 } -
TabularUnified trunk/source/App/TAppEncoder/TAppEncTop.h ¶
r1313 r1386 46 46 #include "TLibCommon/AccessUnit.h" 47 47 #include "TAppEncCfg.h" 48 #if NH_3D 48 #if NH_3D_VSO 49 49 #include "../../Lib/TLibRenderer/TRenTop.h" 50 50 #endif -
TabularUnified trunk/source/App/TAppExtractor/TAppExtrCfg.cpp ¶
r1179 r1386 58 58 \param argv array of arguments 59 59 */ 60 Bool TAppExtrCfg::parseCfg( Int argc, Char* argv[] )60 Bool TAppExtrCfg::parseCfg( Int argc, TChar* argv[] ) 61 61 { 62 62 bool do_help = false; -
TabularUnified trunk/source/App/TAppExtractor/TAppExtrCfg.h ¶
r1179 r1386 65 65 virtual ~TAppExtrCfg() {} 66 66 67 Bool parseCfg ( Int argc, Char* argv[] ); ///< initialize option class from configuration67 Bool parseCfg ( Int argc, TChar* argv[] ); ///< initialize option class from configuration 68 68 69 69 protected: -
TabularUnified trunk/source/App/TAppRenderer/RendererMain.cpp ¶
r1313 r1386 35 35 #include <time.h> 36 36 #include "../../Lib/TLibCommon/CommonDef.h" 37 #if NH_3D 37 #if NH_3D_VSO 38 38 #include "TAppRendererTop.h" 39 39 // ==================================================================================================================== -
TabularUnified trunk/source/App/TAppRenderer/TAppRendererCfg.cpp ¶
r1313 r1386 44 44 #include "../../Lib/TAppCommon/program_options_lite.h" 45 45 46 #if NH_3D 46 #if NH_3D_VSO 47 47 48 48 using namespace std; … … 111 111 \retval true when success 112 112 */ 113 Bool TAppRendererCfg::parseCfg( Int argc, Char* argv[] )113 Bool TAppRendererCfg::parseCfg( Int argc, TChar* argv[] ) 114 114 { 115 115 bool do_help = false; … … 121 121 122 122 /* File I/O */ 123 ("VideoInputFileBaseName,v", m_pchVideoInputFileBaseName, ( Char*) 0, "Basename to generate video input file names")124 ("DepthInputFileBaseName,d", m_pchDepthInputFileBaseName, ( Char*) 0, "Basename to generate depth input file names")125 ("SynthOutputFileBaseName,s", m_pchSynthOutputFileBaseName, ( Char*) 0, "Basename to generate synthesized output file names")123 ("VideoInputFileBaseName,v", m_pchVideoInputFileBaseName, (TChar*) 0, "Basename to generate video input file names") 124 ("DepthInputFileBaseName,d", m_pchDepthInputFileBaseName, (TChar*) 0, "Basename to generate depth input file names") 125 ("SynthOutputFileBaseName,s", m_pchSynthOutputFileBaseName, (TChar*) 0, "Basename to generate synthesized output file names") 126 126 ("ContOutputFileNumbering", m_bContOutputFileNumbering , false , "Continuous Output File Numbering") 127 127 ("Sweep" , m_bSweep , false , "Store all views in first Output File") 128 128 129 ("VideoInputFile_%d,v_%d", m_pchVideoInputFileList , ( Char *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv video input file name %d")130 ("DepthInputFile_%d,d_%d", m_pchDepthInputFileList , ( Char *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv depth input file name %d")131 ("SynthOutputFile_%d,s_%d", m_pchSynthOutputFileList, ( Char *) 0, MAX_OUTPUT_VIEW_NUM, "Synthesized Yuv output file name %d")129 ("VideoInputFile_%d,v_%d", m_pchVideoInputFileList , (TChar *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv video input file name %d") 130 ("DepthInputFile_%d,d_%d", m_pchDepthInputFileList , (TChar *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv depth input file name %d") 131 ("SynthOutputFile_%d,s_%d", m_pchSynthOutputFileList, (TChar *) 0, MAX_OUTPUT_VIEW_NUM, "Synthesized Yuv output file name %d") 132 132 133 133 ("InputBitDepth", m_inputBitDepth[0], 8, "Bit-depth of input file") … … 146 146 147 147 /* Camera Specification */ 148 ("CameraParameterFile,-cpf", m_pchCameraParameterFile, (Char *) 0, "Camera Parameter File Name")149 ("BaseViewCameraNumbers" , m_pchBaseViewCameraNumbers, ( Char *) 0, "Numbers of base views")150 ("SynthViewCameraNumbers" , m_pchSynthViewCameraNumbers, ( Char *) 0, "Numbers of views to synthesis")151 ("ViewConfig" , m_pchViewConfig, ( Char *) 0, "View Configuration" )148 ("CameraParameterFile,-cpf", m_pchCameraParameterFile, (TChar *) 0, "Camera Parameter File Name") 149 ("BaseViewCameraNumbers" , m_pchBaseViewCameraNumbers, (TChar *) 0, "Numbers of base views") 150 ("SynthViewCameraNumbers" , m_pchSynthViewCameraNumbers, (TChar *) 0, "Numbers of views to synthesis") 151 ("ViewConfig" , m_pchViewConfig, (TChar *) 0, "View Configuration" ) 152 152 153 153 /* Renderer Modes */ … … 458 458 } 459 459 460 Void TAppRendererCfg::xAddNumberToFileName( Char* pchSourceFileName,Char*& rpchTargetFileName, Int iNumberToAdd, UInt uiPrecBefore, UInt uiPrecAfter )460 Void TAppRendererCfg::xAddNumberToFileName( TChar* pchSourceFileName, TChar*& rpchTargetFileName, Int iNumberToAdd, UInt uiPrecBefore, UInt uiPrecAfter ) 461 461 { 462 462 … … 468 468 } 469 469 470 Char pchNumberBuffer[2* LOG10_VIEW_NUM_PREC + 2];471 Char pchPrintBuffer[10];470 TChar pchNumberBuffer[2* LOG10_VIEW_NUM_PREC + 2]; 471 TChar pchPrintBuffer[10]; 472 472 473 473 Double dNumberToAdd = ( (Double) iNumberToAdd ) / VIEW_NUM_PREC; … … 488 488 size_t iAddLength = strlen(pchNumberBuffer); 489 489 490 rpchTargetFileName = ( Char*) malloc(iInLength+iAddLength+1);491 492 Char* pchPlaceHolder = strrchr(pchSourceFileName,'$');490 rpchTargetFileName = (TChar*) malloc(iInLength+iAddLength+1); 491 492 TChar* pchPlaceHolder = strrchr(pchSourceFileName,'$'); 493 493 assert( pchPlaceHolder ); 494 494 -
TabularUnified trunk/source/App/TAppRenderer/TAppRendererCfg.h ¶
r1313 r1386 47 47 #include <vector> 48 48 49 #if NH_3D 49 #if NH_3D_VSO 50 50 51 51 // ==================================================================================================================== … … 59 59 60 60 //// file I/O //// 61 Char*m_pchVideoInputFileBaseName; ///< input video file base name, placeholder for numbering $$62 Char*m_pchDepthInputFileBaseName; ///< input depth file base name, placeholder for numbering $$63 Char*m_pchSynthOutputFileBaseName; ///< output synth file base name, placeholder for numbering $$61 TChar* m_pchVideoInputFileBaseName; ///< input video file base name, placeholder for numbering $$ 62 TChar* m_pchDepthInputFileBaseName; ///< input depth file base name, placeholder for numbering $$ 63 TChar* m_pchSynthOutputFileBaseName; ///< output synth file base name, placeholder for numbering $$ 64 64 Bool m_bContOutputFileNumbering; ///< use continous numbering instead of view numbering 65 65 Bool m_bSweep; ///< 1: Store view range in file … … 73 73 74 74 // derived 75 std::vector< Char*> m_pchVideoInputFileList;///< source file names76 std::vector< Char*> m_pchDepthInputFileList;///< source depth file names77 std::vector< Char*> m_pchSynthOutputFileList;///< output reconstruction file names75 std::vector<TChar*> m_pchVideoInputFileList; ///< source file names 76 std::vector<TChar*> m_pchDepthInputFileList; ///< source depth file names 77 std::vector<TChar*> m_pchSynthOutputFileList; ///< output reconstruction file names 78 78 79 79 //// source specification //// … … 84 84 85 85 ////camera specification //// 86 Char*m_pchCameraParameterFile; ///< camera parameter file87 Char*m_pchSynthViewCameraNumbers; ///< numbers of views to synthesize88 Char*m_pchViewConfig; ///< String to setup renderer89 Char*m_pchBaseViewCameraNumbers; ///< numbers of base views86 TChar* m_pchCameraParameterFile; ///< camera parameter file 87 TChar* m_pchSynthViewCameraNumbers; ///< numbers of views to synthesize 88 TChar* m_pchViewConfig; ///< String to setup renderer 89 TChar* m_pchBaseViewCameraNumbers; ///< numbers of base views 90 90 91 91 // derived … … 123 123 Void xCreateFileNames(); 124 124 Void xGetMaxPrecision( IntAry1d adIn, Int& iPrecBefore, Int& iPrecAfter ); 125 Void xAddNumberToFileName( Char* pchSourceFileName,Char*& rpchTargetFileName, Int iNumberToAdd, UInt uiPrecBefore, UInt uiPrecAfter );125 Void xAddNumberToFileName( TChar* pchSourceFileName, TChar*& rpchTargetFileName, Int iNumberToAdd, UInt uiPrecBefore, UInt uiPrecAfter ); 126 126 public: 127 127 TAppRendererCfg(); … … 131 131 Void create (); ///< create option handling class 132 132 Void destroy (); ///< destroy option handling class 133 Bool parseCfg ( Int argc, Char* argv[] ); ///< parse configuration file to fill member variables134 Bool xConfirmParameter(Bool bflag, const Char* message);133 Bool parseCfg ( Int argc, TChar* argv[] ); ///< parse configuration file to fill member variables 134 Bool xConfirmParameter(Bool bflag, const TChar* message); 135 135 136 136 -
TabularUnified trunk/source/App/TAppRenderer/TAppRendererTop.cpp ¶
r1313 r1386 41 41 #include "TAppRendererTop.h" 42 42 43 #if NH_3D 43 #if NH_3D_VSO 44 44 45 45 // ==================================================================================================================== … … 488 488 } 489 489 490 #if H_3D_REN_MAX_DEV_OUT490 #if NH_3D_REN_MAX_DEV_OUT 491 491 Double dMaxDispDiff = m_cCameraData.getMaxShiftDeviation(); 492 492 -
TabularUnified trunk/source/App/TAppRenderer/TAppRendererTop.h ¶
r1313 r1386 40 40 #define __TAppRendererTOP__ 41 41 #include "../../Lib/TLibCommon/CommonDef.h" 42 #if NH_3D 42 #if NH_3D_VSO 43 43 #include "../../Lib/TLibRenderer/TRenTop.h" 44 44 #include "../../Lib/TLibVideoIO/TVideoIOYuv.h" -
TabularUnified trunk/source/App/utils/convert_NtoMbit_YCbCr.cpp ¶
r1313 r1386 105 105 106 106 TComPicYuv frame; 107 frame.create ( width, height, chromaFormatIDC, width, height, 0, false);107 frame.createWithoutCUInfo( width, height, chromaFormatIDC); 108 108 109 109 Int pad[2] = {0, 0}; 110 110 111 111 TComPicYuv cPicYuvTrueOrg; 112 cPicYuvTrueOrg.create ( width, height, chromaFormatIDC, width, height, 0, false);112 cPicYuvTrueOrg.createWithoutCUInfo( width, height, chromaFormatIDC ); 113 113 114 114 UInt num_frames_processed = 0; -
TabularUnified trunk/source/Lib/TAppCommon/TAppComCamPara.cpp ¶
r1313 r1386 49 49 #include <functional> 50 50 #include <string> 51 #if NH_3D 51 #if NH_3D_VSO 52 52 53 53 … … 115 115 116 116 Void 117 TAppComCamPara::convertNumberString( Char* pchViewNumberString, std::vector<Int>& raiViewNumbers, Double dViewNumPrec )117 TAppComCamPara::convertNumberString( TChar* pchViewNumberString, std::vector<Int>& raiViewNumbers, Double dViewNumPrec ) 118 118 { 119 119 Bool bStringIsRange = false; … … 131 131 } 132 132 133 Char* pcNextStart = pchViewNumberString;134 Char* pcEnd = pcNextStart + iIdx;135 Char* pcOldStart = 0;133 TChar* pcNextStart = pchViewNumberString; 134 TChar* pcEnd = pcNextStart + iIdx; 135 TChar* pcOldStart = 0; 136 136 137 137 while( pcNextStart < pcEnd ) … … 192 192 193 193 Void 194 TAppComCamPara::xReadCameraParameterFile( Char* pchCfgFileName ) 195 { 194 TAppComCamPara::xReadCameraParameterFile( TChar* pchCfgFileName ) 195 { 196 assert( pchCfgFileName != NULL ); 197 196 198 std::ifstream cCfgStream( pchCfgFileName, std::ifstream::in ); 197 199 if( !cCfgStream ) … … 220 222 } 221 223 222 Char* pcNextStart = (Char*) cLine.data();223 Char* pcEnd = pcNextStart + cLine.length();224 TChar* pcNextStart = (TChar*) cLine.data(); 225 TChar* pcEnd = pcNextStart + cLine.length(); 224 226 225 227 std::vector<Double> caNewLine; 226 228 caNewLine.clear(); 227 229 228 Char* pcOldStart = 0;230 TChar* pcOldStart = 0; 229 231 while( pcNextStart < pcEnd ) 230 232 { … … 880 882 881 883 // maximum deviation 882 #if H_3D_REN_MAX_DEV_OUT884 #if NH_3D_REN_MAX_DEV_OUT 883 885 m_dMaxShiftDeviation = std::max( m_dMaxShiftDeviation, fabs( Double( (Int) iShiftLuma ) - dShiftLuma ) / Double( 1 << m_iLog2Precision ) ); 884 886 #endif … … 981 983 m_bCamParsCodedPrecSet = false; 982 984 983 #if H_3D_REN_MAX_DEV_OUT985 #if NH_3D_REN_MAX_DEV_OUT 984 986 m_dMaxShiftDeviation = -1; 985 987 #endif … … 1094 1096 } 1095 1097 1096 Void TAppComCamPara::xSetupBaseViews( Char* pchBaseViewNumbers, UInt uiNumBaseViews )1098 Void TAppComCamPara::xSetupBaseViews( TChar* pchBaseViewNumbers, UInt uiNumBaseViews ) 1097 1099 { 1098 1100 // init list … … 1142 1144 UInt uiStartFrameId, 1143 1145 UInt uiNumFrames, 1144 Char*pchCfgFileName,1145 Char*pchBaseViewNumbers,1146 Char*pchSynthViewNumbers,1146 TChar* pchCfgFileName, 1147 TChar* pchBaseViewNumbers, 1148 TChar* pchSynthViewNumbers, 1147 1149 std::vector<Int>* paiSynthViewNumbers, 1148 1150 Int iLog2Precision ) -
TabularUnified trunk/source/Lib/TAppCommon/TAppComCamPara.h ¶
r1313 r1386 67 67 Bool m_bCamParsCodedPrecSet; ///< Coded Cam Para precision set for current frame; 68 68 69 #if H_3D_REN_MAX_DEV_OUT69 #if NH_3D_REN_MAX_DEV_OUT 70 70 Double m_dMaxShiftDeviation; ///< Maximum deviation of shifts with integer precision compare to double precision 71 71 #endif … … 113 113 114 114 // functions for reading, initialization, sorting, getting data, etc. 115 Void xReadCameraParameterFile ( Char* pchCfgFileName );115 Void xReadCameraParameterFile ( TChar* pchCfgFileName ); 116 116 Bool xGetCameraDataRow ( Int iView, UInt uiFrame, UInt& ruiFoundLine ); 117 117 … … 129 129 #endif 130 130 Void xSetupBaseViewsFromCoded (); 131 Void xSetupBaseViews ( Char* pchBaseViewNumbers, UInt uiNumBaseViews );131 Void xSetupBaseViews ( TChar* pchBaseViewNumbers, UInt uiNumBaseViews ); 132 132 Bool xIsIn ( std::vector<Int>& rVec, Int iNumber); 133 133 … … 156 156 UInt uiStartFrameId, 157 157 UInt uiNumFrames, 158 Char* pchCfgFileName,159 Char* pchBaseViewNumbers,160 Char* pchSynthViewNumbers,158 TChar* pchCfgFileName, 159 TChar* pchBaseViewNumbers, 160 TChar* pchSynthViewNumbers, 161 161 std::vector<Int>* paiSynthViewNumbers, 162 162 Int iLog2Precision ); … … 165 165 UInt uiStartFrameId, 166 166 UInt uiNumFrames, 167 Char* pchCfgFileName,168 Char* pchSynthViewNumbers,167 TChar* pchCfgFileName, 168 TChar* pchSynthViewNumbers, 169 169 std::vector<Int>* paiSynthViewNumbers, 170 170 Int iLog2Precision … … 183 183 Int getRelDistLeft ( Int iSynthViewIdx, Int iLeftViewIdx, Int iRightViewIdx ); 184 184 UInt getCurFrameId () { return m_iCurrentFrameId; } 185 static Void convertNumberString ( Char* pchViewNumberString, std::vector<Int>& raiViewNumbers, Double dViewNumPrec );186 #if H_3D_REN_MAX_DEV_OUT185 static Void convertNumberString ( TChar* pchViewNumberString, std::vector<Int>& raiViewNumbers, Double dViewNumPrec ); 186 #if NH_3D_REN_MAX_DEV_OUT 187 187 Double getMaxShiftDeviation () { return m_dMaxShiftDeviation; }; 188 188 #endif -
TabularUnified trunk/source/Lib/TAppCommon/program_options_lite.cpp ¶
r1356 r1386 111 111 } 112 112 113 #if NH_MV _SEI113 #if NH_MV 114 114 static void setOptions(Options::NamesPtrList& opt_list, const std::vector<int> idcs, const string& value, ErrorReporter& error_reporter) 115 115 #else … … 121 121 for (Options::NamesPtrList::iterator it = opt_list.begin(); it != opt_list.end(); ++it) 122 122 { 123 #if NH_MV_SEI 123 #if NH_MV 124 124 Bool doParsing = (*it)->opt->checkDim( idcs, error_reporter ); 125 125 if ( doParsing ) … … 127 127 (*it)->opt->parse(value, idcs, error_reporter); 128 128 } 129 130 #else 129 #else 131 130 (*it)->opt->parse(value, error_reporter); 132 131 #endif 133 132 } 134 133 } … … 290 289 bool OptionWriter::storePair(bool allow_long, bool allow_short, const string& name, const string& value) 291 290 { 292 #if NH_MV _SEI291 #if NH_MV 293 292 std::vector<int> idcs; 294 293 … … 324 323 found = true; 325 324 } 326 #if NH_MV _SEI325 #if NH_MV 327 326 if ( idcs.size() > 0 ) 328 327 { … … 347 346 found = true; 348 347 } 349 #if NH_MV _SEI348 #if NH_MV 350 349 if ( idcs.size() > 0 ) 351 350 { … … 362 361 } 363 362 364 #if NH_MV _SEI363 #if NH_MV 365 364 if ( !found_idcs ) 366 365 { … … 370 369 if (!found) 371 370 { 372 #if NH_MV _SEI371 #if NH_MV 373 372 if (error_reporter.output_on_unknow_parameter ) 374 373 { … … 377 376 error_reporter.error(where()) 378 377 << "Unknown option `" << name << "' (value:`" << value << "')\n"; 379 #if NH_MV _SEI378 #if NH_MV 380 379 } 381 380 #endif … … 383 382 } 384 383 385 #if NH_MV _SEI384 #if NH_MV 386 385 setOptions((*opt_it).second, idcs, value, error_reporter); 387 386 #else -
TabularUnified trunk/source/Lib/TAppCommon/program_options_lite.h ¶
r1356 r1386 37 37 #include <map> 38 38 #include "../TLibCommon/CommonDef.h" 39 40 39 #if NH_MV 41 40 #include <vector> … … 78 77 struct ErrorReporter 79 78 { 80 #if NH_MV _SEI79 #if NH_MV 81 80 ErrorReporter() : is_errored(0), output_on_unknow_parameter(true) {} 82 81 #else … … 87 86 virtual std::ostream& warn(const std::string& where); 88 87 bool is_errored; 89 #if NH_MV _SEI88 #if NH_MV 90 89 bool output_on_unknow_parameter; 91 90 #endif … … 105 104 { 106 105 #if NH_MV 107 #if NH_MV_SEI108 106 OptionBase(const std::string& name, const std::string& desc, bool duplicate = false, std::vector< int > maxdim = std::vector< int >(0) ) 109 107 : opt_string(name), opt_desc(desc), opt_duplicate(duplicate), max_dim( maxdim ) 110 108 #else 111 OptionBase(const std::string& name, const std::string& desc, bool duplicate = false)112 : opt_string(name), opt_desc(desc), opt_duplicate(duplicate)113 #endif114 #else115 109 OptionBase(const std::string& name, const std::string& desc) 116 110 : opt_string(name), opt_desc(desc) … … 121 115 122 116 /* parse argument arg, to obtain a value for the option */ 123 #if NH_MV _SEI117 #if NH_MV 124 118 virtual void parse(const std::string& arg, const std::vector<int>& idcs, ErrorReporter&) = 0; 125 119 … … 221 215 #if NH_MV 222 216 bool opt_duplicate; 223 #if NH_MV_SEI224 217 std::vector<int> max_dim; 225 #endif226 218 #endif 227 219 }; … … 232 224 { 233 225 #if NH_MV 234 #if NH_MV_SEI235 226 Option(const std::string& name, T& storage, T default_val, const std::string& desc, bool duplicate = false, std::vector< int > maxdim = std::vector< int >(0) ) 236 227 : OptionBase(name, desc, duplicate, maxdim), opt_storage(storage), opt_default_val(default_val) 237 228 #else 238 Option(const std::string& name, T& storage, T default_val, const std::string& desc, bool duplicate = false)239 : OptionBase(name, desc, duplicate), opt_storage(storage), opt_default_val(default_val)240 #endif241 #else242 229 Option(const std::string& name, T& storage, T default_val, const std::string& desc) 243 230 : OptionBase(name, desc), opt_storage(storage), opt_default_val(default_val) … … 245 232 {} 246 233 247 #if NH_MV _SEI234 #if NH_MV 248 235 void parse(const std::string& arg, const std::vector<int>& idcs, ErrorReporter&); 249 236 #else … … 263 250 template<typename T> 264 251 inline void 265 #if NH_MV _SEI252 #if NH_MV 266 253 Option<T>::parse(const std::string& arg, const std::vector<int>& idcs, ErrorReporter&) 267 254 #else … … 269 256 #endif 270 257 { 271 #if NH_MV _SEI258 #if NH_MV 272 259 assert( idcs.size() == 0 ); 273 260 #endif … … 289 276 template<> 290 277 inline void 291 #if NH_MV _SEI278 #if NH_MV 292 279 Option<std::string>::parse(const std::string& arg, const std::vector<int>& idcs, ErrorReporter&) 293 #else 294 Option<std::string>::parse(const std::string& arg, ErrorReporter&) 295 #endif 296 { 297 #if NH_MV_SEI 280 { 298 281 assert( idcs.size() == 0 ); 299 #endif300 282 opt_storage = arg; 301 283 } 284 #else 285 Option<std::string>::parse(const std::string& arg, ErrorReporter&) 286 { 287 opt_storage = arg; 288 } 289 #endif 302 290 303 291 #if NH_MV 304 292 template<> 305 293 inline void 306 #if NH_MV_SEI307 294 Option<char*>::parse(const std::string& arg, const std::vector<int>& idcs, ErrorReporter&) 308 #else 309 Option<char*>::parse(const std::string& arg, ErrorReporter&) 310 #endif 311 { 312 #if NH_MV_SEI 295 { 313 296 assert( idcs.size() == 0 ); 314 #endif315 297 opt_storage = arg.empty() ? NULL : strdup(arg.c_str()) ; 316 298 } 317 299 318 #if !NH_MV_SEI319 320 template<>321 inline void322 Option< std::vector<char*> >::parse(const std::string& arg, ErrorReporter&)323 {324 opt_storage.clear();325 326 char* pcStart = (char*) arg.data();327 char* pcEnd = strtok (pcStart," ");328 329 while (pcEnd != NULL)330 {331 size_t uiStringLength = pcEnd - pcStart;332 char* pcNewStr = (char*) malloc( uiStringLength + 1 );333 strncpy( pcNewStr, pcStart, uiStringLength);334 pcNewStr[uiStringLength] = '\0';335 pcStart = pcEnd+1;336 pcEnd = strtok (NULL, " ,.-");337 opt_storage.push_back( pcNewStr );338 }339 }340 #endif341 342 300 template<> 343 301 inline void 344 #if NH_MV_SEI345 302 Option< std::vector<double> >::parse(const std::string& arg, const std::vector< int > & idcs, ErrorReporter&) 346 #else 347 Option< std::vector<double> >::parse(const std::string& arg, ErrorReporter&) 348 #endif 349 { 350 #if NH_MV_SEI 303 { 351 304 assert( idcs.size() == 0 ); 352 #endif353 305 char* pcNextStart = (char*) arg.data(); 354 306 char* pcEnd = pcNextStart + arg.length(); … … 384 336 385 337 386 #if NH_MV_SEI387 338 template<> 388 339 inline void … … 405 356 xParseVec ( arg, opt_storage[ idcs[0] ][ idcs[1] ] ); 406 357 }; 407 #if SEI_DRI_F0169 358 408 359 template<> 409 360 inline void … … 439 390 while( (pcNextStart < pcEnd) && ( *pcNextStart == ' ' || *pcNextStart == '\t' || *pcNextStart == '\r' ) ) pcNextStart++; 440 391 pcOldStart = pcNextStart; 441 442 } 443 444 392 } 445 393 } 446 #endif 447 #else 448 template<> 449 inline void 450 Option< std::vector<int> >::parse(const std::string& arg, ErrorReporter&) 451 { 452 opt_storage.clear(); 453 454 455 char* pcNextStart = (char*) arg.data(); 456 char* pcEnd = pcNextStart + arg.length(); 457 458 char* pcOldStart = 0; 459 460 size_t iIdx = 0; 461 462 463 while (pcNextStart < pcEnd) 464 { 465 466 if ( iIdx < opt_storage.size() ) 467 { 468 opt_storage[iIdx] = (int) strtol(pcNextStart, &pcNextStart,10); 469 } 470 else 471 { 472 opt_storage.push_back( (int) strtol(pcNextStart, &pcNextStart,10)) ; 473 } 474 iIdx++; 475 if ( errno == ERANGE || (pcNextStart == pcOldStart) ) 476 { 477 std::cerr << "Error Parsing Integers: `" << arg << "'" << std::endl; 478 exit(EXIT_FAILURE); 479 }; 480 while( (pcNextStart < pcEnd) && ( *pcNextStart == ' ' || *pcNextStart == '\t' || *pcNextStart == '\r' ) ) pcNextStart++; 481 pcOldStart = pcNextStart; 482 } 483 } 484 #endif 485 486 #if NH_MV_SEI 394 487 395 488 396 template<> … … 531 439 xParseVec( arg, opt_storage[idcs[0]][idcs[1]] ); 532 440 }; 533 #else534 template<>535 inline void536 Option< std::vector<bool> >::parse(const std::string& arg, ErrorReporter&)537 {538 char* pcNextStart = (char*) arg.data();539 char* pcEnd = pcNextStart + arg.length();540 541 char* pcOldStart = 0;542 543 size_t iIdx = 0;544 545 while (pcNextStart < pcEnd)546 {547 if ( iIdx < opt_storage.size() )548 {549 opt_storage[iIdx] = (strtol(pcNextStart, &pcNextStart,10) != 0);550 }551 else552 {553 opt_storage.push_back(strtol(pcNextStart, &pcNextStart,10) != 0) ;554 }555 iIdx++;556 557 if ( errno == ERANGE || (pcNextStart == pcOldStart) )558 {559 std::cerr << "Error Parsing Bools: `" << arg << "'" << std::endl;560 exit(EXIT_FAILURE);561 };562 while( (pcNextStart < pcEnd) && ( *pcNextStart == ' ' || *pcNextStart == '\t' || *pcNextStart == '\r' ) ) pcNextStart++;563 pcOldStart = pcNextStart;564 }565 }566 #endif567 441 #endif 568 442 /** Option class for argument handling using a user provided function */ … … 575 449 {} 576 450 577 #if NH_MV _SEI451 #if NH_MV 578 452 void parse(const std::string& arg, const std::vector<int>& idcs, ErrorReporter& error_reporter) 579 453 #else … … 651 525 operator()(const std::string& name, std::vector<T>& storage, T default_val, unsigned uiMaxNum, const std::string& desc = "" ) 652 526 { 653 #if NH_MV_SEI654 527 std::vector<T> defVal; 655 528 defVal.resize( uiMaxNum, default_val ); … … 679 552 return *this; 680 553 } 681 #else682 std::string cNameBuffer;683 std::string cDescBuffer;684 685 storage.resize(uiMaxNum);686 for ( unsigned int uiK = 0; uiK < uiMaxNum; uiK++ )687 {688 cNameBuffer .resize( name.size() + 10 );689 cDescBuffer.resize( desc.size() + 10 );690 691 Bool duplicate = (uiK != 0);692 // isn't there are sprintf function for string??693 sprintf((char*) cNameBuffer.c_str() ,name.c_str(),uiK,uiK);694 695 if ( !duplicate )696 {697 sprintf((char*) cDescBuffer.c_str(),desc.c_str(),uiK,uiK);698 }699 700 cNameBuffer.resize( std::strlen(cNameBuffer.c_str()) );701 cDescBuffer.resize( std::strlen(cDescBuffer.c_str()) );702 703 704 parent.addOption(new Option<T>( cNameBuffer, (storage[uiK]), default_val, cDescBuffer, duplicate ));705 }706 707 return *this;708 }709 #endif710 554 #endif 711 555 /** -
TabularUnified trunk/source/Lib/TLibCommon/CommonDef.h ¶
r1357 r1386 42 42 #include <iostream> 43 43 #include <assert.h> 44 #include <limits> 44 45 45 46 #if _MSC_VER > 1000 … … 53 54 // 54 55 #endif // _MSC_VER > 1000 55 56 57 56 #include "TypeDef.h" 58 57 #ifdef _MSC_VER … … 75 74 #define HM_VERSION "16.6" ///< 76 75 #else 77 #define NV_VERSION "16. 6" ///< Current software version76 #define NV_VERSION "16.7" ///< Current software version 78 77 #endif 79 78 // ==================================================================================================================== … … 141 140 142 141 static const Int AMVP_MAX_NUM_CANDS = 2; ///< AMVP: advanced motion vector prediction - max number of final candidates 143 static const Int AMVP_MAX_NUM_CANDS_MEM = 3; ///< AMVP: advanced motion vector prediction - max number of candidates144 142 static const Int AMVP_DECIMATION_FACTOR = 4; 145 143 static const Int MRG_MAX_NUM_CANDS = 5; ///< MERGE … … 173 171 #if NH_MV 174 172 static const Int MAX_NUM_LAYER_IDS = 63; 175 #if NH_MV_SEI176 173 static const Int MAX_NUM_SEIS = 1000; 177 #endif178 174 #else 179 175 static const Int MAX_NUM_LAYER_IDS = 64; … … 283 279 static const Int MAX_NUM_PICS_RPS = 16 ; 284 280 static const Int MAX_NUM_REF_LAYERS = 63 ; 285 #if NH_MV_SEI 281 286 282 static IntAry1d getRangeVec( Int rngStart, Int rngEnd ) { IntAry1d rng; for (Int i = rngStart; i<=rngEnd; i++) rng.push_back(i); return rng; }; 287 283 static const IntAry1d IDR_NAL_UNIT_TYPES = getRangeVec( NAL_UNIT_CODED_SLICE_IDR_W_RADL, NAL_UNIT_CODED_SLICE_IDR_N_LP ); 288 284 static const IntAry1d IRAP_NAL_UNIT_TYPES = getRangeVec( NAL_UNIT_CODED_SLICE_BLA_W_LP , NAL_UNIT_CODED_SLICE_CRA ); 289 290 #endif291 285 #endif 292 286 … … 448 442 #endif 449 443 450 #if NH_3D 444 #if NH_3D_VSO 451 445 //PICYUV 452 446 #define PICYUV_PAD 16 -
TabularUnified trunk/source/Lib/TLibCommon/Debug.cpp ¶
r1321 r1386 49 49 #if DEBUG_STRING 50 50 // these strings are used to reorder the debug output so that the encoder and decoder match. 51 const Char *debug_reorder_data_inter_token[MAX_NUM_COMPONENT+1]51 const TChar *debug_reorder_data_inter_token[MAX_NUM_COMPONENT+1] 52 52 = {"Start of channel 0 inter debug\n", "Start of channel 1 inter debug\n", "Start of channel 2 inter debug\n", "End of inter residual debug\n"} ; 53 const Char *partSizeToString[NUMBER_OF_PART_SIZES]={"2Nx2N(0)", "2NxN(1)", "Nx2N(2)", "NxN(3)", "2Nx(N/2+3N/2)(4)", "2Nx(3N/2+N/2)(5)", "(N/2+3N/2)x2N(6)", "(3N/2+N/2)x2N(7)"};53 const TChar *partSizeToString[NUMBER_OF_PART_SIZES]={"2Nx2N(0)", "2NxN(1)", "Nx2N(2)", "NxN(3)", "2Nx(N/2+3N/2)(4)", "2Nx(3N/2+N/2)(5)", "(N/2+3N/2)x2N(6)", "(3N/2+N/2)x2N(7)"}; 54 54 #endif 55 55 … … 179 179 PRINT_CONSTANT(O0043_BEST_EFFORT_DECODING, settingNameWidth, settingValueWidth); 180 180 181 PRINT_CONSTANT(ME_ENABLE_ROUNDING_OF_MVS, settingNameWidth, settingValueWidth); 182 PRINT_CONSTANT(U0040_MODIFIED_WEIGHTEDPREDICTION_WITH_BIPRED_AND_CLIPPING, settingNameWidth, settingValueWidth); 183 181 184 //------------------------------------------------ 182 185 … … 418 421 419 422 420 Void printBlockToStream( std::ostream &ss, const Char *pLinePrefix, TComYuv &src, const UInt numSubBlocksAcross, const UInt numSubBlocksUp, const UInt defWidth )423 Void printBlockToStream( std::ostream &ss, const TChar *pLinePrefix, TComYuv &src, const UInt numSubBlocksAcross, const UInt numSubBlocksUp, const UInt defWidth ) 421 424 { 422 425 const UInt numValidComp=src.getNumberValidComponents(); -
TabularUnified trunk/source/Lib/TLibCommon/Debug.h ¶
r1313 r1386 47 47 #include <TLibCommon/CommonDef.h> 48 48 #if DEBUG_STRING 49 extern const Char *debug_reorder_data_inter_token[MAX_NUM_COMPONENT+1];50 extern const Char *partSizeToString[NUMBER_OF_PART_SIZES];49 extern const TChar *debug_reorder_data_inter_token[MAX_NUM_COMPONENT+1]; 50 extern const TChar *partSizeToString[NUMBER_OF_PART_SIZES]; 51 51 #endif 52 52 … … 149 149 UInt getZScanIndex(const UInt x, const UInt y); 150 150 151 //template specialisation for Char types to get it to render as a number151 //template specialisation for SChar/UChar types to get it to render as a number 152 152 template <typename ValueType> inline Void writeValueToStream (const ValueType &value, std::ostream &stream, const UInt outputWidth) { stream << std::setw(outputWidth) << value; } 153 template <> inline Void writeValueToStream< Char >(const Char&value, std::ostream &stream, const UInt outputWidth) { stream << std::setw(outputWidth) << Int(value); }153 template <> inline Void writeValueToStream<SChar>(const SChar &value, std::ostream &stream, const UInt outputWidth) { stream << std::setw(outputWidth) << Int(value); } 154 154 template <> inline Void writeValueToStream<UChar>(const UChar &value, std::ostream &stream, const UInt outputWidth) { stream << std::setw(outputWidth) << UInt(value); } 155 155 … … 231 231 232 232 template <typename T> 233 Void printBlockToStream( std::ostream &ss, const Char *pLinePrefix, const T * blkSrc, const UInt width, const UInt height, const UInt stride, const UInt subBlockWidth=0, const UInt subBlockHeight=0, const UInt defWidth=3 )233 Void printBlockToStream( std::ostream &ss, const TChar *pLinePrefix, const T * blkSrc, const UInt width, const UInt height, const UInt stride, const UInt subBlockWidth=0, const UInt subBlockHeight=0, const UInt defWidth=3 ) 234 234 { 235 235 for (UInt y=0; y<height; y++) … … 255 255 256 256 class TComYuv; 257 Void printBlockToStream( std::ostream &ss, const Char *pLinePrefix, TComYuv &src, const UInt numSubBlocksAcross=1, const UInt numSubBlocksUp=1, const UInt defWidth=3 );257 Void printBlockToStream( std::ostream &ss, const TChar *pLinePrefix, TComYuv &src, const UInt numSubBlocksAcross=1, const UInt numSubBlocksUp=1, const UInt defWidth=3 ); 258 258 259 259 // ---------------------------------------------------------------------------------------------- // -
TabularUnified trunk/source/Lib/TLibCommon/SEI.cpp ¶
r1356 r1386 32 32 */ 33 33 34 /** \file #SEI.cpp34 /** \file SEI.cpp 35 35 \brief helper functions for SEI handling 36 36 */ … … 38 38 #include "CommonDef.h" 39 39 #include "SEI.h" 40 #if NH_MV _SEI40 #if NH_MV 41 41 #include "TComSlice.h" 42 42 #endif … … 118 118 119 119 // Static member 120 const Char *SEI::getSEIMessageString(SEI::PayloadType payloadType)120 const TChar *SEI::getSEIMessageString(SEI::PayloadType payloadType) 121 121 { 122 122 switch (payloadType) … … 151 151 case SEI::SEGM_RECT_FRAME_PACKING: return "Segmented rectangular frame packing arrangement"; 152 152 case SEI::TEMP_MOTION_CONSTRAINED_TILE_SETS: return "Temporal motion constrained tile sets"; 153 case SEI::CHROMA_SAMPLING_FILTER_HINT: return "Chroma sampling filter hint"; 153 case SEI::CHROMA_RESAMPLING_FILTER_HINT: return "Chroma sampling filter hint"; 154 case SEI::COLOUR_REMAPPING_INFO: return "Colour remapping info"; 155 154 156 #if NH_MV 155 case SEI::COLOUR_REMAPPING_INFO: return "Colour remapping information";156 157 case SEI::DEINTERLACED_FIELD_IDENTIFICATION: return "Deinterlaced field identification"; 157 158 case SEI::LAYERS_NOT_PRESENT: return "Layers not present"; … … 177 178 } 178 179 179 #if NH_MV _SEI180 #if NH_MV 180 181 SEI::SEI() 181 182 { … … 223 224 case SEI::CHROMA_SAMPLING_FILTER_HINT: return new SEIChromaSamplingFilterHint 224 225 #endif 225 #if NH_MV_SEI226 #if NH_MV_LAYERS_NOT_PRESENT_SEI227 226 case SEI::LAYERS_NOT_PRESENT : return new SEILayersNotPresent; 228 #endif229 227 case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS : return new SEIInterLayerConstrainedTileSets; 230 228 #if NH_MV_SEI_TBD … … 240 238 #endif 241 239 case SEI::THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO: return new SEIThreeDimensionalReferenceDisplaysInfo; 242 #if SEI_DRI_F0169243 240 case SEI::DEPTH_REPRESENTATION_INFO : return new SEIDepthRepresentationInfo; 244 #endif245 241 case SEI::MULTIVIEW_SCENE_INFO : return new SEIMultiviewSceneInfo; 246 242 case SEI::MULTIVIEW_ACQUISITION_INFO : return new SEIMultiviewAcquisitionInfo; … … 249 245 case SEI::ALTERNATIVE_DEPTH_INFO : return new SEIAlternativeDepthInfo; 250 246 #endif 251 #endif252 247 default: assert( false ); return NULL; 253 248 } … … 266 261 } 267 262 268 Void SEI::setupFromCfgFile( const Char* cfgFile )263 Void SEI::setupFromCfgFile( const TChar* cfgFile ) 269 264 { 270 265 assert( false ); … … 304 299 } 305 300 306 Void SEI::xCheckCfgRange( Bool& wrongConfig, Int val, Int minVal, Int maxVal, const Char* seName )301 Void SEI::xCheckCfgRange( Bool& wrongConfig, Int val, Int minVal, Int maxVal, const TChar* seName ) 307 302 { 308 303 if ( val < minVal || val > maxVal ) … … 329 324 } 330 325 331 Void SEI::xCheckCfg( Bool& wrongConfig, Bool cond, const Char* errStr )326 Void SEI::xCheckCfg( Bool& wrongConfig, Bool cond, const TChar* errStr ) 332 327 { 333 328 if ( !cond ) … … 339 334 } 340 335 341 342 #if NH_MV_LAYERS_NOT_PRESENT_SEI 343 Void SEILayersNotPresent::setupFromCfgFile(const Char* cfgFile) 336 Void SEILayersNotPresent::setupFromCfgFile(const TChar* cfgFile) 344 337 { 345 338 // Set default values … … 398 391 return wrongConfig; 399 392 }; 400 #endif 401 402 403 Void SEIInterLayerConstrainedTileSets::setupFromCfgFile(const Char* cfgFile)393 394 395 396 Void SEIInterLayerConstrainedTileSets::setupFromCfgFile(const TChar* cfgFile) 404 397 { 405 398 // Set default values … … 483 476 }; 484 477 485 Void SEIBspNesting::setupFromCfgFile(const Char* cfgFile)478 Void SEIBspNesting::setupFromCfgFile(const TChar* cfgFile) 486 479 { 487 480 // Set default values … … 556 549 }; 557 550 558 Void SEIBspInitialArrivalTime::setupFromCfgFile(const Char* cfgFile)551 Void SEIBspInitialArrivalTime::setupFromCfgFile(const TChar* cfgFile) 559 552 { 560 553 // Set default values … … 605 598 #endif 606 599 607 Void SEISubBitstreamProperty::setupFromCfgFile(const Char* cfgFile)600 Void SEISubBitstreamProperty::setupFromCfgFile(const TChar* cfgFile) 608 601 { 609 602 // Set default values … … 681 674 } 682 675 683 Void SEIAlphaChannelInfo::setupFromCfgFile(const Char* cfgFile)676 Void SEIAlphaChannelInfo::setupFromCfgFile(const TChar* cfgFile) 684 677 { 685 678 // Set default values … … 744 737 { }; 745 738 746 Void SEIOverlayInfo::setupFromCfgFile(const Char* cfgFile)739 Void SEIOverlayInfo::setupFromCfgFile(const TChar* cfgFile) 747 740 { 748 741 // Set default values … … 828 821 829 822 830 Void SEITemporalMvPredictionConstraints::setupFromCfgFile(const Char* cfgFile)823 Void SEITemporalMvPredictionConstraints::setupFromCfgFile(const TChar* cfgFile) 831 824 { 832 825 // Set default values … … 870 863 871 864 #if NH_MV_SEI_TBD 872 Void SEIFrameFieldInfo::setupFromCfgFile(const Char* cfgFile)865 Void SEIFrameFieldInfo::setupFromCfgFile(const TChar* cfgFile) 873 866 { 874 867 // Set default values … … 922 915 #endif 923 916 924 Void SEIThreeDimensionalReferenceDisplaysInfo::setupFromCfgFile(const Char* cfgFile)917 Void SEIThreeDimensionalReferenceDisplaysInfo::setupFromCfgFile(const TChar* cfgFile) 925 918 { 926 919 // Set default values … … 1018 1011 }; 1019 1012 1020 #if SEI_DRI_F01691021 1013 Void SEIDepthRepresentationInfo::setupFromSlice ( const TComSlice* slice ) 1022 1014 { … … 1025 1017 }; 1026 1018 1027 Void SEIDepthRepresentationInfo::setupFromCfgFile(const Char* cfgFile)1019 Void SEIDepthRepresentationInfo::setupFromCfgFile(const TChar* cfgFile) 1028 1020 { 1029 1021 // Set default values … … 1195 1187 return wrongConfig; 1196 1188 } 1197 #endif 1198 1199 Void SEIMultiviewSceneInfo::setupFromCfgFile(const Char* cfgFile)1189 1190 1191 Void SEIMultiviewSceneInfo::setupFromCfgFile(const TChar* cfgFile) 1200 1192 { 1201 1193 // Set default values … … 1243 1235 }; 1244 1236 1245 Void SEIMultiviewAcquisitionInfo::setupFromCfgFile(const Char* cfgFile)1237 Void SEIMultiviewAcquisitionInfo::setupFromCfgFile(const TChar* cfgFile) 1246 1238 { 1247 1239 // Set default values … … 1405 1397 } 1406 1398 1407 Void SEIMultiviewViewPosition::setupFromCfgFile(const Char* cfgFile)1399 Void SEIMultiviewViewPosition::setupFromCfgFile(const TChar* cfgFile) 1408 1400 { 1409 1401 // Set default values … … 1456 1448 1457 1449 #if NH_3D 1458 Void SEIAlternativeDepthInfo::setupFromCfgFile(const Char* cfgFile)1450 Void SEIAlternativeDepthInfo::setupFromCfgFile(const TChar* cfgFile) 1459 1451 { 1460 1452 // Set default values -
TabularUnified trunk/source/Lib/TLibCommon/SEI.h ¶
r1356 r1386 44 44 45 45 46 #if NH_MV _SEI46 #if NH_MV 47 47 #include "TAppCommon/program_options_lite.h" 48 48 using namespace std; … … 53 53 //! \{ 54 54 class TComSPS; 55 #if NH_MV _SEI55 #if NH_MV 56 56 class TComSlice; 57 57 class SEIScalableNesting; … … 94 94 SEGM_RECT_FRAME_PACKING = 138, 95 95 TEMP_MOTION_CONSTRAINED_TILE_SETS = 139, 96 CHROMA_SAMPLING_FILTER_HINT = 140, 97 KNEE_FUNCTION_INFO = 141 98 #if NH_MV_SEI 99 ,COLOUR_REMAPPING_INFO = 142, 96 CHROMA_RESAMPLING_FILTER_HINT = 140, 97 KNEE_FUNCTION_INFO = 141, 98 COLOUR_REMAPPING_INFO = 142, 100 99 DEINTERLACED_FIELD_IDENTIFICATION = 143, 101 100 LAYERS_NOT_PRESENT = 160, … … 116 115 ,ALTERNATIVE_DEPTH_INFO = 181 117 116 #endif 117 118 }; 119 120 #if NH_MV 121 SEI(); 122 #else 123 SEI() {} 118 124 #endif 119 125 120 };121 122 SEI();123 126 124 127 virtual ~SEI() {} 128 129 static const TChar *getSEIMessageString(SEI::PayloadType payloadType); 130 131 virtual PayloadType payloadType() const = 0; 132 133 #if NH_MV 125 134 virtual SEI* getCopy( ) const; 126 static const Char *getSEIMessageString(SEI::PayloadType payloadType );127 virtual PayloadType payloadType() const = 0;128 129 #if NH_MV_SEI130 135 static SEI* getNewSEIMessage ( SEI::PayloadType payloadType ); 131 136 Bool insertSei ( Int curLayerId, Int curPoc, Int curTid, Int curNaluType ) const; … … 133 138 134 139 virtual Void setupFromSlice ( const TComSlice* slice ); 135 virtual Void setupFromCfgFile ( const Char*cfgFile );140 virtual Void setupFromCfgFile ( const TChar* cfgFile ); 136 141 virtual Bool checkCfg ( const TComSlice* slice ); 137 142 138 143 Void xPrintCfgErrorIntro(); 139 Void xCheckCfgRange ( Bool& wrongConfig, Int val, Int minVal, Int maxVal, const Char* seName );140 Void xCheckCfg ( Bool& wrongConfig, Bool cond, const Char* errStr );144 Void xCheckCfgRange ( Bool& wrongConfig, Int val, Int minVal, Int maxVal, const TChar* seName ); 145 Void xCheckCfg ( Bool& wrongConfig, Bool cond, const TChar* errStr ); 141 146 Void xAddGeneralOpts ( po::Options &opts, IntAry1d defAppLayerIds, IntAry1d defAppPocs, IntAry1d defAppTids, IntAry1d defAppVclNaluTypes, 142 147 Int defSeiNaluId, Int defPositionInSeiNalu, Bool defModifyByEncoder ); … … 186 191 virtual ~SEIDecodedPictureHash() {} 187 192 188 enum Method 189 { 190 MD5, 191 CRC, 192 CHECKSUM, 193 RESERVED, 194 } method; 193 HashType method; 195 194 196 195 TComPictureHash m_pictureHash; … … 482 481 }; 483 482 484 class SEIChromaSamplingFilterHint : public SEI 485 { 486 public: 487 PayloadType payloadType() const {return CHROMA_SAMPLING_FILTER_HINT;} 488 SEIChromaSamplingFilterHint() {} 489 virtual ~SEIChromaSamplingFilterHint() { 490 if(m_verChromaFilterIdc == 1) 483 class SEIColourRemappingInfo : public SEI 484 { 485 public: 486 487 struct CRIlut 488 { 489 Int codedValue; 490 Int targetValue; 491 bool operator < (const CRIlut& a) const 491 492 { 492 for(Int i = 0; i < m_numVerticalFilters; i ++) 493 return codedValue < a.codedValue; 494 } 495 }; 496 497 PayloadType payloadType() const { return COLOUR_REMAPPING_INFO; } 498 SEIColourRemappingInfo() {} 499 ~SEIColourRemappingInfo() {} 500 501 Void copyFrom( const SEIColourRemappingInfo &seiCriInput) 493 502 { 494 free(m_verFilterCoeff[i]); 495 } 496 free(m_verFilterCoeff); 497 free(m_verTapLengthMinus1); 498 } 499 if(m_horChromaFilterIdc == 1) 500 { 501 for(Int i = 0; i < m_numHorizontalFilters; i ++) 502 { 503 free(m_horFilterCoeff[i]); 504 } 505 free(m_horFilterCoeff); 506 free(m_horTapLengthMinus1); 507 } 503 (*this) = seiCriInput; 508 504 } 505 506 UInt m_colourRemapId; 507 Bool m_colourRemapCancelFlag; 508 Bool m_colourRemapPersistenceFlag; 509 Bool m_colourRemapVideoSignalInfoPresentFlag; 510 Bool m_colourRemapFullRangeFlag; 511 Int m_colourRemapPrimaries; 512 Int m_colourRemapTransferFunction; 513 Int m_colourRemapMatrixCoefficients; 514 Int m_colourRemapInputBitDepth; 515 Int m_colourRemapBitDepth; 516 Int m_preLutNumValMinus1[3]; 517 std::vector<CRIlut> m_preLut[3]; 518 Bool m_colourRemapMatrixPresentFlag; 519 Int m_log2MatrixDenom; 520 Int m_colourRemapCoeffs[3][3]; 521 Int m_postLutNumValMinus1[3]; 522 std::vector<CRIlut> m_postLut[3]; 523 }; 524 525 class SEIChromaResamplingFilterHint : public SEI 526 { 527 public: 528 PayloadType payloadType() const {return CHROMA_RESAMPLING_FILTER_HINT;} 529 SEIChromaResamplingFilterHint() {} 530 virtual ~SEIChromaResamplingFilterHint() {} 509 531 510 532 Int m_verChromaFilterIdc; 511 533 Int m_horChromaFilterIdc; 512 Bool m_verFilteringProcessFlag;534 Bool m_verFilteringFieldProcessingFlag; 513 535 Int m_targetFormatIdc; 514 536 Bool m_perfectReconstructionFlag; 515 Int m_numVerticalFilters; 516 Int* m_verTapLengthMinus1; 517 Int** m_verFilterCoeff; 518 Int m_numHorizontalFilters; 519 Int* m_horTapLengthMinus1; 520 Int** m_horFilterCoeff; 537 std::vector<std::vector<Int> > m_verFilterCoeff; 538 std::vector<std::vector<Int> > m_horFilterCoeff; 521 539 }; 522 540 … … 530 548 TComSEIMasteringDisplay values; 531 549 }; 532 533 #if NH_MV534 #if !NH_MV_SEI535 class SEISubBitstreamProperty : public SEI536 {537 public:538 PayloadType payloadType() const { return SUB_BITSTREAM_PROPERTY; }539 540 SEISubBitstreamProperty(): m_activeVpsId(-1), m_numAdditionalSubStreams(0) {}541 virtual ~SEISubBitstreamProperty() {}542 543 Int m_activeVpsId;544 Int m_numAdditionalSubStreams;545 std::vector<Int> m_subBitstreamMode;546 std::vector<Int> m_outputLayerSetIdxToVps;547 std::vector<Int> m_highestSublayerId;548 std::vector<Int> m_avgBitRate;549 std::vector<Int> m_maxBitRate;550 };551 #endif552 #endif553 550 554 551 typedef std::list<SEI*> SEIMessages; … … 658 655 659 656 }; 660 661 #if NH_MV_SEI 662 #if NH_MV_LAYERS_NOT_PRESENT_SEI 657 #if NH_MV 663 658 class SEILayersNotPresent : public SEI 664 659 { … … 669 664 SEI* getCopy( ) const { return new SEILayersNotPresent(*this); }; 670 665 671 Void setupFromCfgFile( const Char*cfgFile );666 Void setupFromCfgFile( const TChar* cfgFile ); 672 667 Bool checkCfg ( const TComSlice* slice ); 673 668 … … 681 676 } 682 677 }; 683 #endif684 678 685 679 class SEIInterLayerConstrainedTileSets : public SEI … … 691 685 SEI* getCopy( ) const { return new SEIInterLayerConstrainedTileSets(*this); }; 692 686 693 Void setupFromCfgFile( const Char*cfgFile );687 Void setupFromCfgFile( const TChar* cfgFile ); 694 688 Bool checkCfg ( const TComSlice* slice ); 695 689 … … 733 727 SEI* getCopy( ) const { return new SEIBspNesting(*this); }; 734 728 735 Void setupFromCfgFile( const Char* cfgFile );729 Void setupFromCfgFile( const TChar* cfgFile ); 736 730 Void setupFromSlice ( const TComSlice* slice ); 737 731 Bool checkCfg ( const TComSlice* slice ); … … 752 746 SEI* getCopy( ) const { return new SEIBspInitialArrivalTime(*this); }; 753 747 754 Void setupFromCfgFile( const Char* cfgFile );748 Void setupFromCfgFile( const TChar* cfgFile ); 755 749 Void setupFromSlice ( const TComSlice* slice ); 756 750 Bool checkCfg ( const TComSlice* slice ); … … 769 763 SEI* getCopy( ) const { return new SEISubBitstreamProperty(*this); }; 770 764 771 Void setupFromCfgFile( const Char*cfgFile );765 Void setupFromCfgFile( const TChar* cfgFile ); 772 766 Bool checkCfg ( const TComSlice* slice ); 773 767 Void resizeArrays ( ); … … 790 784 SEI* getCopy( ) const { return new SEIAlphaChannelInfo(*this); }; 791 785 792 Void setupFromCfgFile( const Char*cfgFile );786 Void setupFromCfgFile( const TChar* cfgFile ); 793 787 Bool checkCfg ( const TComSlice* slice ); 794 788 … … 811 805 SEI* getCopy( ) const { return new SEIOverlayInfo(*this); }; 812 806 813 Void setupFromCfgFile( const Char*cfgFile );807 Void setupFromCfgFile( const TChar* cfgFile ); 814 808 Bool checkCfg ( const TComSlice* slice ); 815 809 … … 848 842 SEI* getCopy( ) const { return new SEITemporalMvPredictionConstraints(*this); }; 849 843 850 Void setupFromCfgFile( const Char*cfgFile );844 Void setupFromCfgFile( const TChar* cfgFile ); 851 845 Bool checkCfg ( const TComSlice* slice ); 852 846 … … 864 858 SEI* getCopy( ) const { return new SEIFrameFieldInfo(*this); }; 865 859 866 Void setupFromCfgFile( const Char*cfgFile );860 Void setupFromCfgFile( const TChar* cfgFile ); 867 861 Void setupFromSlice ( const TComSlice* slice ); 868 862 Bool checkCfg ( const TComSlice* slice ); … … 882 876 SEI* getCopy( ) const { return new SEIThreeDimensionalReferenceDisplaysInfo(*this); }; 883 877 884 Void setupFromCfgFile( const Char*cfgFile );878 Void setupFromCfgFile( const TChar* cfgFile ); 885 879 Bool checkCfg ( const TComSlice* slice ); 886 880 … … 924 918 }; 925 919 926 #if SEI_DRI_F0169927 920 class SEIDepthRepresentationInfo : public SEI 928 921 { … … 936 929 SEI* getCopy( ) const { return new SEIDepthRepresentationInfo(*this); }; 937 930 938 Void setupFromCfgFile( const Char*cfgFile );931 Void setupFromCfgFile( const TChar* cfgFile ); 939 932 Void setupFromSlice ( const TComSlice* slice ); 940 933 Bool checkCfg ( const TComSlice* slice ); … … 993 986 IntAry2d m_depth_nonlinear_representation_model; 994 987 }; 995 #endif 988 996 989 997 990 class SEIMultiviewSceneInfo : public SEI … … 1003 996 SEI* getCopy( ) const { return new SEIMultiviewSceneInfo(*this); }; 1004 997 1005 Void setupFromCfgFile( const Char*cfgFile );998 Void setupFromCfgFile( const TChar* cfgFile ); 1006 999 Bool checkCfg ( const TComSlice* slice ); 1007 1000 … … 1019 1012 SEI* getCopy( ) const { return new SEIMultiviewAcquisitionInfo(*this); }; 1020 1013 1021 Void setupFromCfgFile( const Char*cfgFile );1014 Void setupFromCfgFile( const TChar* cfgFile ); 1022 1015 Bool checkCfg ( const TComSlice* slice ); 1023 1016 … … 1131 1124 SEI* getCopy( ) const { return new SEIMultiviewViewPosition(*this); }; 1132 1125 1133 Void setupFromCfgFile( const Char*cfgFile );1126 Void setupFromCfgFile( const TChar* cfgFile ); 1134 1127 Void setupFromSlice ( const TComSlice* slice ); 1135 1128 Bool checkCfg ( const TComSlice* slice ); … … 1148 1141 SEI* getCopy( ) const { return new SEIAlternativeDepthInfo(*this); }; 1149 1142 1150 Void setupFromCfgFile( const Char*cfgFile );1143 Void setupFromCfgFile( const TChar* cfgFile ); 1151 1144 Bool checkCfg ( const TComSlice* slice ); 1152 1145 … … 1357 1350 #endif 1358 1351 #endif 1359 1360 1352 #endif 1353 1361 1354 //! \} -
TabularUnified trunk/source/Lib/TLibCommon/TComBitStream.cpp ¶
r1321 r1386 93 93 } 94 94 95 Char* TComOutputBitstream::getByteStream() const96 { 97 return ( Char*) &m_fifo.front();95 UChar* TComOutputBitstream::getByteStream() const 96 { 97 return (UChar*) &m_fifo.front(); 98 98 } 99 99 … … 260 260 m_numBitsRead += uiNumberOfBits; 261 261 262 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC262 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 263 263 if ( g_traceBitsRead ) 264 264 { -
TabularUnified trunk/source/Lib/TLibCommon/TComBitStream.h ¶
r1313 r1386 115 115 * bytestream are stored in ascending addresses. 116 116 */ 117 Char* getByteStream() const;117 UChar* getByteStream() const; 118 118 119 119 /** -
TabularUnified trunk/source/Lib/TLibCommon/TComCodingStatistics.h ¶
r1321 r1386 120 120 }; 121 121 122 static inline const Char* getName(TComCodingStatisticsType name)122 static inline const TChar* getName(TComCodingStatisticsType name) 123 123 { 124 static const Char *statNames[]=124 static const TChar *statNames[]= 125 125 { 126 126 "NAL_UNIT_TOTAL_BODY", // This is a special case and is not included in the total sums. … … 189 189 #endif 190 190 }; 191 assert(STATS__NUM_STATS == sizeof(statNames)/sizeof( Char *) && name < STATS__NUM_STATS);191 assert(STATS__NUM_STATS == sizeof(statNames)/sizeof(TChar *) && name < STATS__NUM_STATS); 192 192 return statNames[name]; 193 193 } … … 229 229 } 230 230 231 static const Char *GetSubClassString(const UInt subClass)231 static const TChar *GetSubClassString(const UInt subClass) 232 232 { 233 233 assert (subClass<CODING_STATS_NUM_SUBCLASSES); 234 static const Char *strings[1+MAX_NUM_COMPONENT+MAX_NUM_CHANNEL_TYPE]={"-", "Y", "Cb", "Cr", "Luma", "Chroma"};234 static const TChar *strings[1+MAX_NUM_COMPONENT+MAX_NUM_CHANNEL_TYPE]={"-", "Y", "Cb", "Cr", "Luma", "Chroma"}; 235 235 return strings[subClass/CODING_STATS_NUM_WIDTHS]; 236 236 } … … 289 289 { } 290 290 291 static Void OutputLine(const Char *pName, const Char sep, UInt width, constChar *pSubClassStr, const SStat &sCABAC, const SStat &sEP)291 static Void OutputLine(const TChar *pName, const TChar sep, UInt width, const TChar *pSubClassStr, const SStat &sCABAC, const SStat &sEP) 292 292 { 293 293 if (width==0) … … 302 302 } 303 303 } 304 static Void OutputLine(const Char *pName, const Char sep, const Char *pWidthString, constChar *pSubClassStr, const SStat &sCABAC, const SStat &sEP)304 static Void OutputLine(const TChar *pName, const TChar sep, const TChar *pWidthString, const TChar *pSubClassStr, const SStat &sCABAC, const SStat &sEP) 305 305 { 306 306 printf("%c%-45s%c %6s %6s %12lld %12lld %12lld %12lld %12lld %12lld %12lld (%12lld)%c\n", … … 308 308 sCABAC.count, sCABAC.sum, sCABAC.bits, sEP.count, sEP.sum, sEP.bits, sCABAC.bits+sEP.bits, (sCABAC.bits+sEP.bits)/8, sep=='~'?']':' '); 309 309 } 310 static Void OutputLine(const Char *pName, const Char sep, const Char *pWidthString, constChar *pSubClassStr, const SStat &sEP)310 static Void OutputLine(const TChar *pName, const TChar sep, const TChar *pWidthString, const TChar *pSubClassStr, const SStat &sEP) 311 311 { 312 312 printf("%c%-45s%c %6s %6s %12s %12s %12s %12lld %12lld %12lld %12lld (%12lld)%c\n", … … 315 315 } 316 316 317 static Void OutputDashedLine(const Char *pText)317 static Void OutputDashedLine(const TChar *pText) 318 318 { 319 319 printf("--%s",pText); … … 360 360 SStat cabacSubTotal, epSubTotal; 361 361 Bool bHadClassifiedEntry=false; 362 const Char *pName=getName(TComCodingStatisticsType(i));362 const TChar *pName=getName(TComCodingStatisticsType(i)); 363 363 364 364 for(UInt c=0; c<CODING_STATS_NUM_SUBCLASSES; c++) … … 488 488 static SStat &GetStatisticEP(const std::string &str) { return GetSingletonInstance().data.mappings_ep[str]; } 489 489 490 static SStat &GetStatisticEP(const Char *pKey) {return GetStatisticEP(std::string(pKey)); }490 static SStat &GetStatisticEP(const TChar *pKey) {return GetStatisticEP(std::string(pKey)); } 491 491 492 492 static Void IncrementStatisticEP(const TComCodingStatisticsClassType &stat, const Int numBits, const Int value) … … 506 506 } 507 507 508 static Void IncrementStatisticEP(const Char *pKey, const Int numBits, const Int value)508 static Void IncrementStatisticEP(const TChar *pKey, const Int numBits, const Int value) 509 509 { 510 510 SStat &s=GetStatisticEP(pKey); -
TabularUnified trunk/source/Lib/TLibCommon/TComDataCU.cpp ¶
r1356 r1386 160 160 if ( !bDecSubCu ) 161 161 { 162 m_phQP = ( Char* )xMalloc(Char,uiNumPartition);162 m_phQP = (SChar* )xMalloc(SChar, uiNumPartition); 163 163 m_puhDepth = (UChar* )xMalloc(UChar, uiNumPartition); 164 164 m_puhWidth = (UChar* )xMalloc(UChar, uiNumPartition); … … 171 171 m_ucDISType = (UChar*)xMalloc(UChar, uiNumPartition); 172 172 #endif 173 m_pePartSize = new Char[ uiNumPartition ];173 m_pePartSize = new SChar[ uiNumPartition ]; 174 174 memset( m_pePartSize, NUMBER_OF_PART_SIZES,uiNumPartition * sizeof( *m_pePartSize ) ); 175 m_pePredMode = new Char[ uiNumPartition ];175 m_pePredMode = new SChar[ uiNumPartition ]; 176 176 m_CUTransquantBypass = new Bool[ uiNumPartition ]; 177 177 … … 179 179 m_puhMergeIndex = (UChar* )xMalloc(UChar, uiNumPartition); 180 180 #if NH_3D_VSP 181 m_piVSPFlag = ( Char* )xMalloc(Char,uiNumPartition);181 m_piVSPFlag = (SChar* )xMalloc(SChar, uiNumPartition); 182 182 #endif 183 183 #if NH_3D_SPIVMP … … 196 196 { 197 197 const RefPicList rpl=RefPicList(i); 198 m_apiMVPIdx[rpl] = new Char[ uiNumPartition ];199 m_apiMVPNum[rpl] = new Char[ uiNumPartition ];200 memset( m_apiMVPIdx[rpl], -1,uiNumPartition * sizeof( Char ) );198 m_apiMVPIdx[rpl] = new SChar[ uiNumPartition ]; 199 m_apiMVPNum[rpl] = new SChar[ uiNumPartition ]; 200 memset( m_apiMVPIdx[rpl], -1,uiNumPartition * sizeof( SChar ) ); 201 201 } 202 202 … … 212 212 const UInt totalSize = (uiWidth * uiHeight) >> chromaShift; 213 213 214 m_crossComponentPredictionAlpha[compID] = ( Char* )xMalloc(Char,uiNumPartition);214 m_crossComponentPredictionAlpha[compID] = (SChar* )xMalloc(SChar, uiNumPartition); 215 215 m_puhTransformSkip[compID] = (UChar* )xMalloc(UChar, uiNumPartition); 216 216 m_explicitRdpcmMode[compID] = (UChar* )xMalloc(UChar, uiNumPartition); … … 524 524 } 525 525 526 Bool TComDataCU::isLastSubCUOfCtu(const UInt absPartIdx) 526 Bool TComDataCU::isLastSubCUOfCtu(const UInt absPartIdx) const 527 527 { 528 528 const TComSPS &sps=*(getSlice()->getSPS()); … … 844 844 Int iSizeInUchar = sizeof( UChar ) * m_uiNumPartition; 845 845 Int iSizeInBool = sizeof( Bool ) * m_uiNumPartition; 846 Int sizeInChar = sizeof( Char ) * m_uiNumPartition;846 Int sizeInChar = sizeof( SChar ) * m_uiNumPartition; 847 847 848 848 memset( m_phQP, qp, sizeInChar ); … … 850 850 memset( m_puhMergeIndex, 0, iSizeInUchar ); 851 851 #if NH_3D_VSP 852 memset( m_piVSPFlag, 0, sizeof( Char) * m_uiNumPartition );852 memset( m_piVSPFlag, 0, sizeof( SChar ) * m_uiNumPartition ); 853 853 #endif 854 854 #if NH_3D_SPIVMP … … 1121 1121 1122 1122 // Copy inter prediction info from the biggest CU 1123 Void TComDataCU::copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList1124 1123 #if NH_3D_NBDV 1125 , Bool bNBDV 1126 #endif 1127 ) 1124 Void TComDataCU::copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList , Bool bNBDV ) 1125 #else 1126 Void TComDataCU::copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList ) 1127 #endif 1128 1128 { 1129 1129 m_pcPic = pcCU->getPic(); … … 1219 1219 Int iSizeInBool = sizeof( Bool ) * uiNumPartition; 1220 1220 1221 Int sizeInChar = sizeof( Char ) * uiNumPartition;1221 Int sizeInChar = sizeof( SChar ) * uiNumPartition; 1222 1222 memcpy( m_skipFlag + uiOffset, pcCU->getSkipFlag(), sizeof( *m_skipFlag ) * uiNumPartition ); 1223 1223 #if NH_3D_DIS … … 1233 1233 memcpy( m_puhMergeIndex + uiOffset, pcCU->getMergeIndex(), iSizeInUchar ); 1234 1234 #if NH_3D_VSP 1235 memcpy( m_piVSPFlag + uiOffset, pcCU->getVSPFlag(), sizeof( Char ) * uiNumPartition );1235 memcpy( m_piVSPFlag + uiOffset, pcCU->getVSPFlag(), sizeof( SChar ) * uiNumPartition ); 1236 1236 memcpy( m_pDvInfo + uiOffset, pcCU->getDvInfo(), sizeof( *m_pDvInfo ) * uiNumPartition ); 1237 1237 #endif … … 1335 1335 Int iSizeInUchar = sizeof( UChar ) * m_uiNumPartition; 1336 1336 Int iSizeInBool = sizeof( Bool ) * m_uiNumPartition; 1337 Int sizeInChar = sizeof( Char ) * m_uiNumPartition;1337 Int sizeInChar = sizeof( SChar ) * m_uiNumPartition; 1338 1338 1339 1339 memcpy( pCtu->getSkipFlag() + m_absZIdxInCtu, m_skipFlag, sizeof( *m_skipFlag ) * m_uiNumPartition ); … … 1355 1355 memcpy( pCtu->getMergeIndex() + m_absZIdxInCtu, m_puhMergeIndex, iSizeInUchar ); 1356 1356 #if NH_3D_VSP 1357 memcpy( pCtu->getVSPFlag() + m_absZIdxInCtu, m_piVSPFlag, sizeof( Char ) * m_uiNumPartition );1357 memcpy( pCtu->getVSPFlag() + m_absZIdxInCtu, m_piVSPFlag, sizeof( SChar ) * m_uiNumPartition ); 1358 1358 #endif 1359 1359 #if NH_3D_DBBP … … 1447 1447 // -------------------------------------------------------------------------------------------------------------------- 1448 1448 1449 TComDataCU* TComDataCU::getPULeft( UInt& uiLPartUnitIdx,1449 const TComDataCU* TComDataCU::getPULeft( UInt& uiLPartUnitIdx, 1450 1450 UInt uiCurrPartUnitIdx, 1451 1451 Bool bEnforceSliceRestriction, 1452 Bool bEnforceTileRestriction )1452 Bool bEnforceTileRestriction ) const 1453 1453 { 1454 1454 UInt uiAbsPartIdx = g_auiZscanToRaster[uiCurrPartUnitIdx]; … … 1479 1479 1480 1480 1481 TComDataCU* TComDataCU::getPUAbove( UInt& uiAPartUnitIdx,1481 const TComDataCU* TComDataCU::getPUAbove( UInt& uiAPartUnitIdx, 1482 1482 UInt uiCurrPartUnitIdx, 1483 1483 Bool bEnforceSliceRestriction, 1484 1484 Bool planarAtCtuBoundary, 1485 Bool bEnforceTileRestriction )1485 Bool bEnforceTileRestriction ) const 1486 1486 { 1487 1487 UInt uiAbsPartIdx = g_auiZscanToRaster[uiCurrPartUnitIdx]; … … 1517 1517 } 1518 1518 1519 TComDataCU* TComDataCU::getPUAboveLeft( UInt& uiALPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction ) 1519 const TComDataCU* TComDataCU::getPUAboveLeft( UInt& uiALPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction ) const 1520 1520 { 1521 1521 UInt uiAbsPartIdx = g_auiZscanToRaster[uiCurrPartUnitIdx]; … … 1564 1564 } 1565 1565 1566 TComDataCU* TComDataCU::getPUBelowLeft(UInt& uiBLPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset, Bool bEnforceSliceRestriction) 1566 const TComDataCU* TComDataCU::getPUBelowLeft(UInt& uiBLPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset, Bool bEnforceSliceRestriction) const 1567 1567 { 1568 1568 UInt uiAbsPartIdxLB = g_auiZscanToRaster[uiCurrPartUnitIdx]; … … 1608 1608 } 1609 1609 1610 TComDataCU* TComDataCU::getPUAboveRight(UInt& uiARPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset, Bool bEnforceSliceRestriction) 1610 const TComDataCU* TComDataCU::getPUAboveRight(UInt& uiARPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset, Bool bEnforceSliceRestriction) const 1611 1611 { 1612 1612 UInt uiAbsPartIdxRT = g_auiZscanToRaster[uiCurrPartUnitIdx]; … … 1668 1668 *\returns TComDataCU* point of TComDataCU of left QpMinCu 1669 1669 */ 1670 TComDataCU* TComDataCU::getQpMinCuLeft( UInt& uiLPartUnitIdx, UInt uiCurrAbsIdxInCtu ) 1670 const TComDataCU* TComDataCU::getQpMinCuLeft( UInt& uiLPartUnitIdx, UInt uiCurrAbsIdxInCtu ) const 1671 1671 { 1672 1672 const UInt numPartInCtuWidth = m_pcPic->getNumPartInCtuWidth(); … … 1695 1695 *\returns TComDataCU* point of TComDataCU of above QpMinCu 1696 1696 */ 1697 TComDataCU* TComDataCU::getQpMinCuAbove( UInt& uiAPartUnitIdx, UInt uiCurrAbsIdxInCtu ) 1697 const TComDataCU* TComDataCU::getQpMinCuAbove( UInt& uiAPartUnitIdx, UInt uiCurrAbsIdxInCtu ) const 1698 1698 { 1699 1699 const UInt numPartInCtuWidth = m_pcPic->getNumPartInCtuWidth(); … … 1721 1721 /** Get reference QP from left QpMinCu or latest coded QP 1722 1722 *\param uiCurrAbsIdxInCtu 1723 *\returns Char reference QP value1723 *\returns SChar reference QP value 1724 1724 */ 1725 Char TComDataCU::getRefQP( UInt uiCurrAbsIdxInCtu ) 1725 SChar TComDataCU::getRefQP( UInt uiCurrAbsIdxInCtu ) const 1726 1726 { 1727 1727 UInt lPartIdx = MAX_UINT; 1728 1728 UInt aPartIdx = MAX_UINT; 1729 TComDataCU* cULeft = getQpMinCuLeft ( lPartIdx, m_absZIdxInCtu + uiCurrAbsIdxInCtu );1730 TComDataCU* cUAbove = getQpMinCuAbove( aPartIdx, m_absZIdxInCtu + uiCurrAbsIdxInCtu );1729 const TComDataCU* cULeft = getQpMinCuLeft ( lPartIdx, m_absZIdxInCtu + uiCurrAbsIdxInCtu ); 1730 const TComDataCU* cUAbove = getQpMinCuAbove( aPartIdx, m_absZIdxInCtu + uiCurrAbsIdxInCtu ); 1731 1731 return (((cULeft? cULeft->getQP( lPartIdx ): getLastCodedQP( uiCurrAbsIdxInCtu )) + (cUAbove? cUAbove->getQP( aPartIdx ): getLastCodedQP( uiCurrAbsIdxInCtu )) + 1) >> 1); 1732 1732 } 1733 1733 1734 Int TComDataCU::getLastValidPartIdx( Int iAbsPartIdx ) 1734 Int TComDataCU::getLastValidPartIdx( Int iAbsPartIdx ) const 1735 1735 { 1736 1736 Int iLastValidPartIdx = iAbsPartIdx-1; … … 1744 1744 } 1745 1745 1746 Char TComDataCU::getLastCodedQP( UInt uiAbsPartIdx ) 1746 SChar TComDataCU::getLastCodedQP( UInt uiAbsPartIdx ) const 1747 1747 { 1748 1748 UInt uiQUPartIdxMask = ~((1<<((getSlice()->getSPS()->getMaxTotalCUDepth() - getSlice()->getPPS()->getMaxCuDQPDepth())<<1))-1); … … 1784 1784 * \returns true if the CU is coded in lossless coding mode; false if otherwise 1785 1785 */ 1786 Bool TComDataCU::isLosslessCoded(UInt absPartIdx) 1786 Bool TComDataCU::isLosslessCoded(UInt absPartIdx) const 1787 1787 { 1788 1788 return (getSlice()->getPPS()->getTransquantBypassEnableFlag() && getCUTransquantBypass (absPartIdx)); … … 1796 1796 *\param [out] uiModeList pointer to chroma intra modes array 1797 1797 */ 1798 Void TComDataCU::getAllowedChromaDir( UInt uiAbsPartIdx, UInt uiModeList[NUM_CHROMA_MODE] ) 1798 Void TComDataCU::getAllowedChromaDir( UInt uiAbsPartIdx, UInt uiModeList[NUM_CHROMA_MODE] ) const 1799 1799 { 1800 1800 uiModeList[0] = PLANAR_IDX; … … 1824 1824 *\returns Number of MPM 1825 1825 */ 1826 Void TComDataCU::getIntraDirPredictor( UInt uiAbsPartIdx, Int uiIntraDirPred[NUM_MOST_PROBABLE_MODES], const ComponentID compID, Int* piMode ) 1827 { 1828 TComDataCU* pcCULeft, *pcCUAbove; 1826 Void TComDataCU::getIntraDirPredictor( UInt uiAbsPartIdx, Int uiIntraDirPred[NUM_MOST_PROBABLE_MODES], const ComponentID compID, Int* piMode ) const 1827 { 1829 1828 UInt LeftPartIdx = MAX_UINT; 1830 1829 UInt AbovePartIdx = MAX_UINT; … … 1836 1835 const ChromaFormat chForm = getPic()->getChromaFormat(); 1837 1836 // Get intra direction of left PU 1838 pcCULeft = getPULeft( LeftPartIdx, m_absZIdxInCtu + uiAbsPartIdx );1837 const TComDataCU *pcCULeft = getPULeft( LeftPartIdx, m_absZIdxInCtu + uiAbsPartIdx ); 1839 1838 1840 1839 if (isChroma(compID)) … … 1848 1847 1849 1848 // Get intra direction of above PU 1850 pcCUAbove = getPUAbove( AbovePartIdx, m_absZIdxInCtu + uiAbsPartIdx, true, true );1849 const TComDataCU *pcCUAbove = getPUAbove( AbovePartIdx, m_absZIdxInCtu + uiAbsPartIdx, true, true ); 1851 1850 1852 1851 if (isChroma(compID)) … … 1917 1916 } 1918 1917 1919 UInt TComDataCU::getCtxSplitFlag( UInt uiAbsPartIdx, UInt uiDepth ) 1920 { 1921 TComDataCU* pcTempCU;1918 UInt TComDataCU::getCtxSplitFlag( UInt uiAbsPartIdx, UInt uiDepth ) const 1919 { 1920 const TComDataCU* pcTempCU; 1922 1921 UInt uiTempPartIdx; 1923 1922 UInt uiCtx; … … 1933 1932 } 1934 1933 1935 UInt TComDataCU::getCtxQtCbf( TComTU &rTu, const ChannelType chType ) 1934 UInt TComDataCU::getCtxQtCbf( TComTU &rTu, const ChannelType chType ) const 1936 1935 { 1937 1936 const UInt transformDepth = rTu.GetTransformDepthRel(); … … 1948 1947 } 1949 1948 1950 UInt TComDataCU::getQuadtreeTULog2MinSizeInCU( UInt absPartIdx ) 1949 UInt TComDataCU::getQuadtreeTULog2MinSizeInCU( UInt absPartIdx ) const 1951 1950 { 1952 1951 UInt log2CbSize = g_aucConvertToBit[getWidth( absPartIdx )] + 2; … … 1975 1974 } 1976 1975 1977 UInt TComDataCU::getCtxSkipFlag( UInt uiAbsPartIdx ) 1978 { 1979 TComDataCU* pcTempCU;1976 UInt TComDataCU::getCtxSkipFlag( UInt uiAbsPartIdx ) const 1977 { 1978 const TComDataCU* pcTempCU; 1980 1979 UInt uiTempPartIdx; 1981 1980 UInt uiCtx = 0; … … 1994 1993 UInt TComDataCU::getCTXARPWFlag( UInt uiAbsPartIdx ) 1995 1994 { 1996 TComDataCU* pcTempCU;1995 const TComDataCU* pcTempCU; 1997 1996 UInt uiTempPartIdx; 1998 1997 UInt uiCtx = 0; 1999 1998 2000 1999 pcTempCU = getPULeft( uiTempPartIdx, m_absZIdxInCtu + uiAbsPartIdx ); 2001 2000 uiCtx = ( pcTempCU ) ? ((pcTempCU->getARPW( uiTempPartIdx )==0)?0:1) : 0; 2002 2001 return uiCtx; 2003 2002 } 2004 2003 #endif … … 2086 2085 2087 2086 2088 UInt TComDataCU::getCtxInterDir( UInt uiAbsPartIdx ) 2087 UInt TComDataCU::getCtxInterDir( UInt uiAbsPartIdx ) const 2089 2088 { 2090 2089 return getDepth( uiAbsPartIdx ); … … 2092 2091 2093 2092 2094 UChar TComDataCU::getQtRootCbf( UInt uiIdx ) 2093 UChar TComDataCU::getQtRootCbf( UInt uiIdx ) const 2095 2094 { 2096 2095 const UInt numberValidComponents = getPic()->getNumberValidComponents(); … … 2148 2147 } 2149 2148 2150 Bool TComDataCU::isFirstAbsZorderIdxInDepth (UInt uiAbsPartIdx, UInt uiDepth) 2149 Bool TComDataCU::isFirstAbsZorderIdxInDepth (UInt uiAbsPartIdx, UInt uiDepth) const 2151 2150 { 2152 2151 UInt uiPartNumb = m_pcPic->getNumPartitionsInCtu() >> (uiDepth << 1); … … 2376 2375 2377 2376 #if NH_3D_VSP 2378 Void TComDataCU::setVSPFlagSubParts( Char iVSPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth )2379 { 2380 setSubPart< Char>( iVSPFlag, m_piVSPFlag, uiAbsPartIdx, uiDepth, uiPartIdx );2377 Void TComDataCU::setVSPFlagSubParts( SChar iVSPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ) 2378 { 2379 setSubPart<SChar>( iVSPFlag, m_piVSPFlag, uiAbsPartIdx, uiDepth, uiPartIdx ); 2381 2380 } 2382 2381 template<typename T> … … 2523 2522 Void TComDataCU::setMVPIdxSubParts( Int iMVPIdx, RefPicList eRefPicList, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ) 2524 2523 { 2525 setSubPart< Char>( iMVPIdx, m_apiMVPIdx[eRefPicList], uiAbsPartIdx, uiDepth, uiPartIdx );2524 setSubPart<SChar>( iMVPIdx, m_apiMVPIdx[eRefPicList], uiAbsPartIdx, uiDepth, uiPartIdx ); 2526 2525 } 2527 2526 2528 2527 Void TComDataCU::setMVPNumSubParts( Int iMVPNum, RefPicList eRefPicList, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ) 2529 2528 { 2530 setSubPart< Char>( iMVPNum, m_apiMVPNum[eRefPicList], uiAbsPartIdx, uiDepth, uiPartIdx );2529 setSubPart<SChar>( iMVPNum, m_apiMVPNum[eRefPicList], uiAbsPartIdx, uiDepth, uiPartIdx ); 2531 2530 } 2532 2531 … … 2561 2560 } 2562 2561 2563 Void TComDataCU::setCrossComponentPredictionAlphaPartRange( Char alphaValue, ComponentID compID, UInt uiAbsPartIdx, UInt uiCoveredPartIdxes )2564 { 2565 memset((m_crossComponentPredictionAlpha[compID] + uiAbsPartIdx), alphaValue, (sizeof( Char) * uiCoveredPartIdxes));2562 Void TComDataCU::setCrossComponentPredictionAlphaPartRange( SChar alphaValue, ComponentID compID, UInt uiAbsPartIdx, UInt uiCoveredPartIdxes ) 2563 { 2564 memset((m_crossComponentPredictionAlpha[compID] + uiAbsPartIdx), alphaValue, (sizeof(SChar) * uiCoveredPartIdxes)); 2566 2565 } 2567 2566 … … 2579 2578 } 2580 2579 2581 UChar TComDataCU::getNumPartitions(const UInt uiAbsPartIdx) 2580 UChar TComDataCU::getNumPartitions(const UInt uiAbsPartIdx) const 2582 2581 { 2583 2582 UChar iNumPart = 0; … … 2601 2600 // This is for use by a leaf/sub CU object only, with no additional AbsPartIdx 2602 2601 #if NH_3D_IC || NH_3D_VSP 2603 Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx, Bool bLCU) 2602 Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx, Bool bLCU) const 2604 2603 { 2605 2604 UInt uiNumPartition = bLCU ? (getWidth(uiAbsPartIdx)*getHeight(uiAbsPartIdx) >> 4) : m_uiNumPartition; … … 2645 2644 #else 2646 2645 2647 Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight ) 2646 Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight ) const 2648 2647 { 2649 2648 switch ( m_pePartSize[0] ) … … 2686 2685 #endif 2687 2686 2688 2689 Void TComDataCU::getMvField ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, TComMvField& rcMvField )2687 // static member function 2688 Void TComDataCU::getMvField ( const TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, TComMvField& rcMvField ) 2690 2689 { 2691 2690 if ( pcCU == NULL ) // OUT OF BOUNDARY … … 2696 2695 } 2697 2696 2698 TComCUMvField* pcCUMvField = pcCU->getCUMvField( eRefPicList );2697 const TComCUMvField* pcCUMvField = pcCU->getCUMvField( eRefPicList ); 2699 2698 rcMvField.setMvField( pcCUMvField->getMv( uiAbsPartIdx ), pcCUMvField->getRefIdx( uiAbsPartIdx ) ); 2700 2699 } 2701 2700 2702 Void TComDataCU::deriveLeftRightTopIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ) 2701 Void TComDataCU::deriveLeftRightTopIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ) const 2703 2702 { 2704 2703 ruiPartIdxLT = m_absZIdxInCtu + uiAbsPartIdx; … … 2749 2748 } 2750 2749 2751 Void TComDataCU::deriveLeftBottomIdxGeneral( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLB ) 2750 Void TComDataCU::deriveLeftBottomIdxGeneral( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLB ) const 2752 2751 { 2753 2752 UInt uiPUHeight = 0; … … 2796 2795 } 2797 2796 2798 Void TComDataCU::deriveLeftRightTopIdx ( UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ) 2797 Void TComDataCU::deriveLeftRightTopIdx ( UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ) const 2799 2798 { 2800 2799 ruiPartIdxLT = m_absZIdxInCtu; … … 2836 2835 } 2837 2836 2838 Void TComDataCU::deriveLeftBottomIdx( UInt uiPartIdx, UInt& ruiPartIdxLB ) 2837 Void TComDataCU::deriveLeftBottomIdx( UInt uiPartIdx, UInt& ruiPartIdxLB ) const 2839 2838 { 2840 2839 ruiPartIdxLB = g_auiRasterToZscan [g_auiZscanToRaster[ m_absZIdxInCtu ] + ( ((m_puhHeight[0] / m_pcPic->getMinCUHeight())>>1) - 1)*m_pcPic->getNumPartInCtuWidth()]; … … 2876 2875 * \param [out] ruiPartIdxRB partition index of neighbouring bottom right block 2877 2876 */ 2878 Void TComDataCU::deriveRightBottomIdx( UInt uiPartIdx, UInt &ruiPartIdxRB ) 2877 Void TComDataCU::deriveRightBottomIdx( UInt uiPartIdx, UInt &ruiPartIdxRB ) const 2879 2878 { 2880 2879 ruiPartIdxRB = g_auiRasterToZscan [g_auiZscanToRaster[ m_absZIdxInCtu ] + ( ((m_puhHeight[0] / m_pcPic->getMinCUHeight())>>1) - 1)*m_pcPic->getNumPartInCtuWidth() + m_puhWidth[0] / m_pcPic->getMinCUWidth() - 1]; … … 2912 2911 } 2913 2912 2914 Bool TComDataCU::hasEqualMotion( UInt uiAbsPartIdx, TComDataCU* pcCandCU, UInt uiCandAbsPartIdx )2913 Bool TComDataCU::hasEqualMotion( UInt uiAbsPartIdx, const TComDataCU* pcCandCU, UInt uiCandAbsPartIdx ) const 2915 2914 { 2916 2915 if ( getInterDir( uiAbsPartIdx ) != pcCandCU->getInterDir( uiCandAbsPartIdx ) ) … … 3098 3097 3099 3098 3100 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC3099 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 3101 3100 if ( g_traceMergeCandListConst ) 3102 3101 { … … 3177 3176 } 3178 3177 3179 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC3178 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 3180 3179 if ( g_traceMergeCandListConst ) 3181 3180 { … … 3306 3305 //left 3307 3306 UInt uiLeftPartIdx = 0; 3308 TComDataCU* pcCULeft = 0;3307 const TComDataCU* pcCULeft = 0; 3309 3308 pcCULeft = getPULeft( uiLeftPartIdx, uiPartIdxLB ); 3310 3309 … … 3783 3782 3784 3783 //! Construct a list of merging candidates 3784 #if NH_3D 3785 3785 Void TComDataCU::getInterMergeCandidates( UInt uiAbsPartIdx, UInt uiPUIdx, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int mrgCandIdx ) 3786 #else 3787 Void TComDataCU::getInterMergeCandidates( UInt uiAbsPartIdx, UInt uiPUIdx, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int mrgCandIdx ) const 3788 #endif 3786 3789 { 3787 3790 UInt uiAbsPartAddr = m_absZIdxInCtu + uiAbsPartIdx; … … 3811 3814 //left 3812 3815 UInt uiLeftPartIdx = 0; 3813 TComDataCU* pcCULeft = 0; 3814 pcCULeft = getPULeft( uiLeftPartIdx, uiPartIdxLB ); 3816 const TComDataCU *pcCULeft = getPULeft( uiLeftPartIdx, uiPartIdxLB ); 3815 3817 3816 3818 Bool isAvailableA1 = pcCULeft && … … 3828 3830 puhInterDirNeighbours[iCount] = pcCULeft->getInterDir( uiLeftPartIdx ); 3829 3831 // get Mv from Left 3830 pcCULeft->getMvField( pcCULeft, uiLeftPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] );3832 TComDataCU::getMvField( pcCULeft, uiLeftPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3831 3833 if ( getSlice()->isInterB() ) 3832 3834 { 3833 pcCULeft->getMvField( pcCULeft, uiLeftPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] );3835 TComDataCU::getMvField( pcCULeft, uiLeftPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3834 3836 } 3835 3837 if ( mrgCandIdx == iCount ) … … 3847 3849 // above 3848 3850 UInt uiAbovePartIdx = 0; 3849 TComDataCU* pcCUAbove = 0; 3850 pcCUAbove = getPUAbove( uiAbovePartIdx, uiPartIdxRT ); 3851 const TComDataCU *pcCUAbove = getPUAbove( uiAbovePartIdx, uiPartIdxRT ); 3851 3852 3852 3853 Bool isAvailableB1 = pcCUAbove && … … 3864 3865 puhInterDirNeighbours[iCount] = pcCUAbove->getInterDir( uiAbovePartIdx ); 3865 3866 // get Mv from Left 3866 pcCUAbove->getMvField( pcCUAbove, uiAbovePartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] );3867 TComDataCU::getMvField( pcCUAbove, uiAbovePartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3867 3868 if ( getSlice()->isInterB() ) 3868 3869 { 3869 pcCUAbove->getMvField( pcCUAbove, uiAbovePartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] );3870 TComDataCU::getMvField( pcCUAbove, uiAbovePartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3870 3871 } 3871 3872 if ( mrgCandIdx == iCount ) … … 3883 3884 // above right 3884 3885 UInt uiAboveRightPartIdx = 0; 3885 TComDataCU* pcCUAboveRight = 0; 3886 pcCUAboveRight = getPUAboveRight( uiAboveRightPartIdx, uiPartIdxRT ); 3886 const TComDataCU *pcCUAboveRight = getPUAboveRight( uiAboveRightPartIdx, uiPartIdxRT ); 3887 3887 3888 3888 Bool isAvailableB0 = pcCUAboveRight && … … 3899 3899 puhInterDirNeighbours[iCount] = pcCUAboveRight->getInterDir( uiAboveRightPartIdx ); 3900 3900 // get Mv from Left 3901 pcCUAboveRight->getMvField( pcCUAboveRight, uiAboveRightPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] );3901 TComDataCU::getMvField( pcCUAboveRight, uiAboveRightPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3902 3902 if ( getSlice()->isInterB() ) 3903 3903 { 3904 pcCUAboveRight->getMvField( pcCUAboveRight, uiAboveRightPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] );3904 TComDataCU::getMvField( pcCUAboveRight, uiAboveRightPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3905 3905 } 3906 3906 if ( mrgCandIdx == iCount ) … … 3918 3918 //left bottom 3919 3919 UInt uiLeftBottomPartIdx = 0; 3920 TComDataCU* pcCULeftBottom = 0; 3921 pcCULeftBottom = this->getPUBelowLeft( uiLeftBottomPartIdx, uiPartIdxLB ); 3920 const TComDataCU *pcCULeftBottom = this->getPUBelowLeft( uiLeftBottomPartIdx, uiPartIdxLB ); 3922 3921 3923 3922 Bool isAvailableA0 = pcCULeftBottom && … … 3934 3933 puhInterDirNeighbours[iCount] = pcCULeftBottom->getInterDir( uiLeftBottomPartIdx ); 3935 3934 // get Mv from Left 3936 pcCULeftBottom->getMvField( pcCULeftBottom, uiLeftBottomPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] );3935 TComDataCU::getMvField( pcCULeftBottom, uiLeftBottomPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3937 3936 if ( getSlice()->isInterB() ) 3938 3937 { 3939 pcCULeftBottom->getMvField( pcCULeftBottom, uiLeftBottomPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] );3938 TComDataCU::getMvField( pcCULeftBottom, uiLeftBottomPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3940 3939 } 3941 3940 if ( mrgCandIdx == iCount ) … … 3955 3954 { 3956 3955 UInt uiAboveLeftPartIdx = 0; 3957 TComDataCU* pcCUAboveLeft = 0; 3958 pcCUAboveLeft = getPUAboveLeft( uiAboveLeftPartIdx, uiAbsPartAddr ); 3956 const TComDataCU *pcCUAboveLeft = getPUAboveLeft( uiAboveLeftPartIdx, uiAbsPartAddr ); 3959 3957 3960 3958 Bool isAvailableB2 = pcCUAboveLeft && … … 3972 3970 puhInterDirNeighbours[iCount] = pcCUAboveLeft->getInterDir( uiAboveLeftPartIdx ); 3973 3971 // get Mv from Left 3974 pcCUAboveLeft->getMvField( pcCUAboveLeft, uiAboveLeftPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] );3972 TComDataCU::getMvField( pcCUAboveLeft, uiAboveLeftPartIdx, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3975 3973 if ( getSlice()->isInterB() ) 3976 3974 { 3977 pcCUAboveLeft->getMvField( pcCUAboveLeft, uiAboveLeftPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] );3975 TComDataCU::getMvField( pcCUAboveLeft, uiAboveLeftPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3978 3976 } 3979 3977 if ( mrgCandIdx == iCount ) … … 4166 4164 * \param xP, yP location of the upper-left corner pixel of the current PU 4167 4165 */ 4168 Bool TComDataCU::isDiffMER(Int xN, Int yN, Int xP, Int yP) 4166 Bool TComDataCU::isDiffMER(Int xN, Int yN, Int xP, Int yP) const 4169 4167 { 4170 4168 … … 4186 4184 * \param nPSW, nPSH size of the current PU 4187 4185 */ 4188 Void TComDataCU::getPartPosition( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH) 4186 Void TComDataCU::getPartPosition( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH) const 4189 4187 { 4190 4188 UInt col = m_uiCUPelX; … … 4247 4245 } 4248 4246 4249 /** Constructs a list of candidates for AMVP 4247 /** Constructs a list of candidates for AMVP (See specification, section "Derivation process for motion vector predictor candidates") 4250 4248 * \param uiPartIdx 4251 4249 * \param uiPartAddr … … 4254 4252 * \param pInfo 4255 4253 */ 4256 Void TComDataCU::fillMvpCand ( UInt uiPartIdx, UInt uiPartAddr, RefPicList eRefPicList, Int iRefIdx, AMVPInfo* pInfo ) 4257 { 4258 TComMv cMvPred; 4259 Bool bAddedSmvp = false; 4260 4254 Void TComDataCU::fillMvpCand ( const UInt partIdx, const UInt partAddr, const RefPicList eRefPicList, const Int refIdx, AMVPInfo* pInfo ) const 4255 { 4261 4256 pInfo->iN = 0; 4262 if ( iRefIdx < 0)4257 if (refIdx < 0) 4263 4258 { 4264 4259 return; … … 4266 4261 4267 4262 //-- Get Spatial MV 4268 UInt uiPartIdxLT, uiPartIdxRT, uiPartIdxLB; 4269 const UInt numPartInCtuWidth = m_pcPic->getNumPartInCtuWidth(); 4270 const UInt numPartInCtuHeight = m_pcPic->getNumPartInCtuHeight(); 4271 Bool bAdded = false; 4272 4273 deriveLeftRightTopIdx( uiPartIdx, uiPartIdxLT, uiPartIdxRT ); 4274 deriveLeftBottomIdx( uiPartIdx, uiPartIdxLB ); 4275 4276 TComDataCU* tmpCU = NULL; 4277 UInt idx; 4278 tmpCU = getPUBelowLeft(idx, uiPartIdxLB); 4279 bAddedSmvp = (tmpCU != NULL) && (tmpCU->isInter(idx)); 4280 4281 if (!bAddedSmvp) 4282 { 4283 tmpCU = getPULeft(idx, uiPartIdxLB); 4284 bAddedSmvp = (tmpCU != NULL) && (tmpCU->isInter(idx)); 4263 UInt partIdxLT, partIdxRT, partIdxLB; 4264 deriveLeftRightTopIdx( partIdx, partIdxLT, partIdxRT ); 4265 deriveLeftBottomIdx( partIdx, partIdxLB ); 4266 4267 Bool isScaledFlagLX = false; /// variable name from specification; true when the PUs below left or left are available (availableA0 || availableA1). 4268 { 4269 UInt idx; 4270 const TComDataCU* tmpCU = getPUBelowLeft(idx, partIdxLB); 4271 isScaledFlagLX = (tmpCU != NULL) && (tmpCU->isInter(idx)); 4272 if (!isScaledFlagLX) 4273 { 4274 tmpCU = getPULeft(idx, partIdxLB); 4275 isScaledFlagLX = (tmpCU != NULL) && (tmpCU->isInter(idx)); 4276 } 4285 4277 } 4286 4278 4287 4279 // Left predictor search 4288 bAdded = xAddMVPCand( pInfo, eRefPicList, iRefIdx, uiPartIdxLB, MD_BELOW_LEFT); 4289 if (!bAdded) 4290 { 4291 bAdded = xAddMVPCand( pInfo, eRefPicList, iRefIdx, uiPartIdxLB, MD_LEFT ); 4292 } 4293 4294 if(!bAdded) 4295 { 4296 bAdded = xAddMVPCandOrder( pInfo, eRefPicList, iRefIdx, uiPartIdxLB, MD_BELOW_LEFT); 4280 if (isScaledFlagLX) 4281 { 4282 Bool bAdded = xAddMVPCandUnscaled( *pInfo, eRefPicList, refIdx, partIdxLB, MD_BELOW_LEFT); 4297 4283 if (!bAdded) 4298 4284 { 4299 xAddMVPCandOrder( pInfo, eRefPicList, iRefIdx, uiPartIdxLB, MD_LEFT ); 4285 bAdded = xAddMVPCandUnscaled( *pInfo, eRefPicList, refIdx, partIdxLB, MD_LEFT ); 4286 if(!bAdded) 4287 { 4288 bAdded = xAddMVPCandWithScaling( *pInfo, eRefPicList, refIdx, partIdxLB, MD_BELOW_LEFT); 4289 if (!bAdded) 4290 { 4291 xAddMVPCandWithScaling( *pInfo, eRefPicList, refIdx, partIdxLB, MD_LEFT ); 4292 } 4293 } 4300 4294 } 4301 4295 } 4302 4296 4303 4297 // Above predictor search 4304 bAdded = xAddMVPCand( pInfo, eRefPicList, iRefIdx, uiPartIdxRT, MD_ABOVE_RIGHT); 4305 4306 if (!bAdded) 4307 { 4308 bAdded = xAddMVPCand( pInfo, eRefPicList, iRefIdx, uiPartIdxRT, MD_ABOVE); 4309 } 4310 4311 if(!bAdded) 4312 { 4313 xAddMVPCand( pInfo, eRefPicList, iRefIdx, uiPartIdxLT, MD_ABOVE_LEFT); 4314 } 4315 4316 if(!bAddedSmvp) 4317 { 4318 bAdded = xAddMVPCandOrder( pInfo, eRefPicList, iRefIdx, uiPartIdxRT, MD_ABOVE_RIGHT); 4298 { 4299 Bool bAdded = xAddMVPCandUnscaled( *pInfo, eRefPicList, refIdx, partIdxRT, MD_ABOVE_RIGHT); 4319 4300 if (!bAdded) 4320 4301 { 4321 bAdded = xAddMVPCandOrder( pInfo, eRefPicList, iRefIdx, uiPartIdxRT, MD_ABOVE); 4322 } 4323 4324 if(!bAdded) 4325 { 4326 xAddMVPCandOrder( pInfo, eRefPicList, iRefIdx, uiPartIdxLT, MD_ABOVE_LEFT); 4302 bAdded = xAddMVPCandUnscaled( *pInfo, eRefPicList, refIdx, partIdxRT, MD_ABOVE); 4303 if(!bAdded) 4304 { 4305 xAddMVPCandUnscaled( *pInfo, eRefPicList, refIdx, partIdxLT, MD_ABOVE_LEFT); 4306 } 4307 } 4308 } 4309 4310 if(!isScaledFlagLX) 4311 { 4312 Bool bAdded = xAddMVPCandWithScaling( *pInfo, eRefPicList, refIdx, partIdxRT, MD_ABOVE_RIGHT); 4313 if (!bAdded) 4314 { 4315 bAdded = xAddMVPCandWithScaling( *pInfo, eRefPicList, refIdx, partIdxRT, MD_ABOVE); 4316 if(!bAdded) 4317 { 4318 xAddMVPCandWithScaling( *pInfo, eRefPicList, refIdx, partIdxLT, MD_ABOVE_LEFT); 4319 } 4327 4320 } 4328 4321 } … … 4336 4329 } 4337 4330 4338 if ( getSlice()->getEnableTMVPFlag() )4331 if (pInfo->iN < AMVP_MAX_NUM_CANDS && getSlice()->getEnableTMVPFlag() ) 4339 4332 { 4340 4333 // Get Temporal Motion Predictor 4341 Int iRefIdx_Col = iRefIdx; 4334 const UInt numPartInCtuWidth = m_pcPic->getNumPartInCtuWidth(); 4335 const UInt numPartInCtuHeight = m_pcPic->getNumPartInCtuHeight(); 4336 #if NH_3D_TMVP 4337 Int refIdx_Col = refIdx; 4338 #else 4339 const Int refIdx_Col = refIdx; 4340 #endif 4342 4341 TComMv cColMv; 4343 UInt uiPartIdxRB; 4344 UInt uiAbsPartIdx; 4345 UInt uiAbsPartAddr; 4346 4347 deriveRightBottomIdx( uiPartIdx, uiPartIdxRB ); 4348 uiAbsPartAddr = m_absZIdxInCtu + uiPartAddr; 4342 UInt partIdxRB; 4343 UInt absPartIdx; 4344 4345 deriveRightBottomIdx( partIdx, partIdxRB ); 4346 UInt absPartAddr = m_absZIdxInCtu + partAddr; 4349 4347 4350 4348 //---- co-located RightBottom Temporal Predictor (H) ---// 4351 uiAbsPartIdx = g_auiZscanToRaster[uiPartIdxRB];4349 absPartIdx = g_auiZscanToRaster[partIdxRB]; 4352 4350 Int ctuRsAddr = -1; 4353 if ( ( ( m_pcPic->getCtu(m_ctuRsAddr)->getCUPelX() + g_auiRasterToPelX[ uiAbsPartIdx] + m_pcPic->getMinCUWidth () ) < m_pcSlice->getSPS()->getPicWidthInLumaSamples () ) // image boundary check4354 && ( ( m_pcPic->getCtu(m_ctuRsAddr)->getCUPelY() + g_auiRasterToPelY[uiAbsPartIdx] + m_pcPic->getMinCUHeight() ) < m_pcSlice->getSPS()->getPicHeightInLumaSamples() ) )4355 { 4356 if ( ( uiAbsPartIdx % numPartInCtuWidth < numPartInCtuWidth - 1 ) && // is not at the last column of CTU4357 ( uiAbsPartIdx / numPartInCtuWidth < numPartInCtuHeight - 1 ) ) // is not at the last row of CTU4358 { 4359 uiAbsPartAddr = g_auiRasterToZscan[ uiAbsPartIdx + numPartInCtuWidth + 1 ];4351 if ( ( ( m_pcPic->getCtu(m_ctuRsAddr)->getCUPelX() + g_auiRasterToPelX[absPartIdx] + m_pcPic->getMinCUWidth () ) < m_pcSlice->getSPS()->getPicWidthInLumaSamples () ) // image boundary check 4352 && ( ( m_pcPic->getCtu(m_ctuRsAddr)->getCUPelY() + g_auiRasterToPelY[absPartIdx] + m_pcPic->getMinCUHeight() ) < m_pcSlice->getSPS()->getPicHeightInLumaSamples() ) ) 4353 { 4354 if ( ( absPartIdx % numPartInCtuWidth < numPartInCtuWidth - 1 ) && // is not at the last column of CTU 4355 ( absPartIdx / numPartInCtuWidth < numPartInCtuHeight - 1 ) ) // is not at the last row of CTU 4356 { 4357 absPartAddr = g_auiRasterToZscan[ absPartIdx + numPartInCtuWidth + 1 ]; 4360 4358 ctuRsAddr = getCtuRsAddr(); 4361 4359 } 4362 else if ( uiAbsPartIdx % numPartInCtuWidth < numPartInCtuWidth - 1 ) // is not at the last column of CTU But is last row of CTU4363 { 4364 uiAbsPartAddr = g_auiRasterToZscan[ (uiAbsPartIdx + numPartInCtuWidth + 1) % m_pcPic->getNumPartitionsInCtu() ];4365 } 4366 else if ( uiAbsPartIdx / numPartInCtuWidth < numPartInCtuHeight - 1 ) // is not at the last row of CTU But is last column of CTU4367 { 4368 uiAbsPartAddr = g_auiRasterToZscan[ uiAbsPartIdx + 1 ];4360 else if ( absPartIdx % numPartInCtuWidth < numPartInCtuWidth - 1 ) // is not at the last column of CTU But is last row of CTU 4361 { 4362 absPartAddr = g_auiRasterToZscan[ (absPartIdx + numPartInCtuWidth + 1) % m_pcPic->getNumPartitionsInCtu() ]; 4363 } 4364 else if ( absPartIdx / numPartInCtuWidth < numPartInCtuHeight - 1 ) // is not at the last row of CTU But is last column of CTU 4365 { 4366 absPartAddr = g_auiRasterToZscan[ absPartIdx + 1 ]; 4369 4367 ctuRsAddr = getCtuRsAddr() + 1; 4370 4368 } 4371 4369 else //is the right bottom corner of CTU 4372 4370 { 4373 uiAbsPartAddr = 0; 4374 } 4375 } 4376 if ( ctuRsAddr >= 0 && xGetColMVP( eRefPicList, ctuRsAddr, uiAbsPartAddr, cColMv, iRefIdx_Col 4371 absPartAddr = 0; 4372 } 4373 } 4377 4374 #if NH_3D_TMVP 4378 , 0 4379 #endif 4380 ) ) 4375 if ( ctuRsAddr >= 0 && xGetColMVP( eRefPicList, ctuRsAddr, absPartAddr, cColMv, refIdx_Col , 0 ) ) 4376 #else 4377 if ( ctuRsAddr >= 0 && xGetColMVP( eRefPicList, ctuRsAddr, absPartAddr, cColMv, refIdx_Col ) ) 4378 #endif 4381 4379 { 4382 4380 pInfo->m_acMvCand[pInfo->iN++] = cColMv; … … 4385 4383 { 4386 4384 UInt uiPartIdxCenter; 4387 xDeriveCenterIdx( uiPartIdx, uiPartIdxCenter ); 4388 if (xGetColMVP( eRefPicList, getCtuRsAddr(), uiPartIdxCenter, cColMv, iRefIdx_Col 4385 xDeriveCenterIdx( partIdx, uiPartIdxCenter ); 4389 4386 #if NH_3D_TMVP 4390 , 0 4391 #endif 4392 )) 4387 if (xGetColMVP( eRefPicList, getCtuRsAddr(), uiPartIdxCenter, cColMv, refIdx_Col , 0 )) 4388 #else 4389 if (xGetColMVP( eRefPicList, getCtuRsAddr(), uiPartIdxCenter, cColMv, refIdx_Col )) 4390 #endif 4393 4391 { 4394 4392 pInfo->m_acMvCand[pInfo->iN++] = cColMv; … … 4396 4394 } 4397 4395 //---- co-located RightBottom Temporal Predictor ---// 4398 }4399 4400 if (pInfo->iN > AMVP_MAX_NUM_CANDS)4401 {4402 pInfo->iN = AMVP_MAX_NUM_CANDS;4403 4396 } 4404 4397 … … 4412 4405 4413 4406 4414 Bool TComDataCU::isBipredRestriction(UInt puIdx) 4407 Bool TComDataCU::isBipredRestriction(UInt puIdx) const 4415 4408 { 4416 4409 Int width = 0; … … 4434 4427 4435 4428 4436 Void TComDataCU::clipMv (TComMv& rcMv) 4429 Void TComDataCU::clipMv (TComMv& rcMv) const 4437 4430 { 4438 4431 const TComSPS &sps=*(m_pcSlice->getSPS()); … … 4470 4463 #endif 4471 4464 4472 UInt TComDataCU::getIntraSizeIdx(UInt uiAbsPartIdx) 4465 UInt TComDataCU::getIntraSizeIdx(UInt uiAbsPartIdx) const 4473 4466 { 4474 4467 UInt uiShift = ( m_pePartSize[uiAbsPartIdx]==SIZE_NxN ? 1 : 0 ); … … 4507 4500 * \returns true if the current the block is skipped 4508 4501 */ 4509 Bool TComDataCU::isSkipped( UInt uiPartIdx ) 4502 Bool TComDataCU::isSkipped( UInt uiPartIdx ) const 4510 4503 { 4511 4504 return ( getSkipFlag( uiPartIdx ) ); … … 4516 4509 // ==================================================================================================================== 4517 4510 4518 Bool TComDataCU::xAddMVPCand ( AMVPInfo* pInfo, RefPicList eRefPicList, Int iRefIdx, UInt uiPartUnitIdx, MVP_DIR eDir )4519 { 4520 TComDataCU* pcTmpCU = NULL;4521 UInt uiIdx;4511 Bool TComDataCU::xAddMVPCandUnscaled( AMVPInfo &info, const RefPicList eRefPicList, const Int iRefIdx, const UInt uiPartUnitIdx, const MVP_DIR eDir ) const 4512 { 4513 const TComDataCU* neibCU = NULL; 4514 UInt neibPUPartIdx; 4522 4515 switch( eDir ) 4523 4516 { 4524 4517 case MD_LEFT: 4525 4518 { 4526 pcTmpCU = getPULeft(uiIdx, uiPartUnitIdx);4519 neibCU = getPULeft(neibPUPartIdx, uiPartUnitIdx); 4527 4520 break; 4528 4521 } 4529 4522 case MD_ABOVE: 4530 4523 { 4531 pcTmpCU = getPUAbove(uiIdx, uiPartUnitIdx);4524 neibCU = getPUAbove(neibPUPartIdx, uiPartUnitIdx); 4532 4525 break; 4533 4526 } 4534 4527 case MD_ABOVE_RIGHT: 4535 4528 { 4536 pcTmpCU = getPUAboveRight(uiIdx, uiPartUnitIdx);4529 neibCU = getPUAboveRight(neibPUPartIdx, uiPartUnitIdx); 4537 4530 break; 4538 4531 } 4539 4532 case MD_BELOW_LEFT: 4540 4533 { 4541 pcTmpCU = getPUBelowLeft(uiIdx, uiPartUnitIdx);4534 neibCU = getPUBelowLeft(neibPUPartIdx, uiPartUnitIdx); 4542 4535 break; 4543 4536 } 4544 4537 case MD_ABOVE_LEFT: 4545 4538 { 4546 pcTmpCU = getPUAboveLeft(uiIdx, uiPartUnitIdx);4539 neibCU = getPUAboveLeft(neibPUPartIdx, uiPartUnitIdx); 4547 4540 break; 4548 4541 } … … 4553 4546 } 4554 4547 4555 if ( pcTmpCU == NULL )4548 if ( neibCU == NULL ) 4556 4549 { 4557 4550 return false; 4558 4551 } 4559 4552 4560 if ( pcTmpCU->getCUMvField(eRefPicList)->getRefIdx(uiIdx) >= 0 && m_pcSlice->getRefPic( eRefPicList, iRefIdx)->getPOC() == pcTmpCU->getSlice()->getRefPOC( eRefPicList, pcTmpCU->getCUMvField(eRefPicList)->getRefIdx(uiIdx) )) 4561 { 4562 TComMv cMvPred = pcTmpCU->getCUMvField(eRefPicList)->getMv(uiIdx); 4563 4564 pInfo->m_acMvCand[ pInfo->iN++] = cMvPred; 4565 return true; 4566 } 4567 4568 RefPicList eRefPicList2nd = REF_PIC_LIST_0; 4569 if( eRefPicList == REF_PIC_LIST_0 ) 4570 { 4571 eRefPicList2nd = REF_PIC_LIST_1; 4572 } 4573 else if ( eRefPicList == REF_PIC_LIST_1) 4574 { 4575 eRefPicList2nd = REF_PIC_LIST_0; 4576 } 4577 4578 4579 Int iCurrRefPOC = m_pcSlice->getRefPic( eRefPicList, iRefIdx)->getPOC(); 4580 Int iNeibRefPOC; 4581 4582 4583 if( pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) >= 0 ) 4584 { 4585 iNeibRefPOC = pcTmpCU->getSlice()->getRefPOC( eRefPicList2nd, pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) ); 4586 if( iNeibRefPOC == iCurrRefPOC ) // Same Reference Frame But Diff List// 4587 { 4588 TComMv cMvPred = pcTmpCU->getCUMvField(eRefPicList2nd)->getMv(uiIdx); 4589 pInfo->m_acMvCand[ pInfo->iN++] = cMvPred; 4553 const Int currRefPOC = m_pcSlice->getRefPic( eRefPicList, iRefIdx)->getPOC(); 4554 const RefPicList eRefPicList2nd = (eRefPicList == REF_PIC_LIST_0) ? REF_PIC_LIST_1 : REF_PIC_LIST_0; 4555 4556 for(Int predictorSource=0; predictorSource<2; predictorSource++) // examine the indicated reference picture list, then if not available, examine the other list. 4557 { 4558 const RefPicList eRefPicListIndex = (predictorSource==0) ? eRefPicList : eRefPicList2nd; 4559 const Int neibRefIdx = neibCU->getCUMvField(eRefPicListIndex)->getRefIdx(neibPUPartIdx); 4560 4561 if ( neibRefIdx >= 0 && currRefPOC == neibCU->getSlice()->getRefPOC( eRefPicListIndex, neibRefIdx )) 4562 { 4563 info.m_acMvCand[info.iN++] = neibCU->getCUMvField(eRefPicListIndex)->getMv(neibPUPartIdx); 4590 4564 return true; 4591 4565 } … … 4602 4576 * \returns Bool 4603 4577 */ 4604 Bool TComDataCU::xAddMVPCand Order( AMVPInfo* pInfo, RefPicList eRefPicList, Int iRefIdx, UInt uiPartUnitIdx, MVP_DIR eDir )4605 { 4606 TComDataCU* pcTmpCU = NULL;4607 UInt uiIdx;4578 Bool TComDataCU::xAddMVPCandWithScaling( AMVPInfo &info, const RefPicList eRefPicList, const Int iRefIdx, const UInt uiPartUnitIdx, const MVP_DIR eDir ) const 4579 { 4580 const TComDataCU* neibCU = NULL; 4581 UInt neibPUPartIdx; 4608 4582 switch( eDir ) 4609 4583 { 4610 4584 case MD_LEFT: 4611 4585 { 4612 pcTmpCU = getPULeft(uiIdx, uiPartUnitIdx);4586 neibCU = getPULeft(neibPUPartIdx, uiPartUnitIdx); 4613 4587 break; 4614 4588 } 4615 4589 case MD_ABOVE: 4616 4590 { 4617 pcTmpCU = getPUAbove(uiIdx, uiPartUnitIdx);4591 neibCU = getPUAbove(neibPUPartIdx, uiPartUnitIdx); 4618 4592 break; 4619 4593 } 4620 4594 case MD_ABOVE_RIGHT: 4621 4595 { 4622 pcTmpCU = getPUAboveRight(uiIdx, uiPartUnitIdx);4596 neibCU = getPUAboveRight(neibPUPartIdx, uiPartUnitIdx); 4623 4597 break; 4624 4598 } 4625 4599 case MD_BELOW_LEFT: 4626 4600 { 4627 pcTmpCU = getPUBelowLeft(uiIdx, uiPartUnitIdx);4601 neibCU = getPUBelowLeft(neibPUPartIdx, uiPartUnitIdx); 4628 4602 break; 4629 4603 } 4630 4604 case MD_ABOVE_LEFT: 4631 4605 { 4632 pcTmpCU = getPUAboveLeft(uiIdx, uiPartUnitIdx);4606 neibCU = getPUAboveLeft(neibPUPartIdx, uiPartUnitIdx); 4633 4607 break; 4634 4608 } … … 4639 4613 } 4640 4614 4641 if ( pcTmpCU == NULL )4615 if ( neibCU == NULL ) 4642 4616 { 4643 4617 return false; 4644 4618 } 4645 4619 4646 RefPicList eRefPicList2nd = REF_PIC_LIST_0; 4647 if( eRefPicList == REF_PIC_LIST_0 ) 4648 { 4649 eRefPicList2nd = REF_PIC_LIST_1; 4650 } 4651 else if ( eRefPicList == REF_PIC_LIST_1) 4652 { 4653 eRefPicList2nd = REF_PIC_LIST_0; 4654 } 4655 4656 Int iCurrPOC = m_pcSlice->getPOC(); 4657 Int iCurrRefPOC = m_pcSlice->getRefPic( eRefPicList, iRefIdx)->getPOC(); 4658 Int iNeibPOC = iCurrPOC; 4659 Int iNeibRefPOC; 4660 Bool bIsCurrRefLongTerm = m_pcSlice->getRefPic( eRefPicList, iRefIdx)->getIsLongTerm(); 4661 Bool bIsNeibRefLongTerm = false; 4662 4663 //--------------- V1 (END) ------------------// 4664 if( pcTmpCU->getCUMvField(eRefPicList)->getRefIdx(uiIdx) >= 0) 4665 { 4666 iNeibRefPOC = pcTmpCU->getSlice()->getRefPOC( eRefPicList, pcTmpCU->getCUMvField(eRefPicList)->getRefIdx(uiIdx) ); 4667 TComMv cMvPred = pcTmpCU->getCUMvField(eRefPicList)->getMv(uiIdx); 4668 TComMv rcMv; 4669 4670 bIsNeibRefLongTerm = pcTmpCU->getSlice()->getRefPic( eRefPicList, pcTmpCU->getCUMvField(eRefPicList)->getRefIdx(uiIdx) )->getIsLongTerm(); 4671 if ( bIsCurrRefLongTerm == bIsNeibRefLongTerm ) 4672 { 4673 if ( bIsCurrRefLongTerm || bIsNeibRefLongTerm ) 4674 { 4675 rcMv = cMvPred; 4676 } 4677 else 4678 { 4679 Int iScale = xGetDistScaleFactor( iCurrPOC, iCurrRefPOC, iNeibPOC, iNeibRefPOC ); 4680 if ( iScale == 4096 ) 4620 const RefPicList eRefPicList2nd = (eRefPicList == REF_PIC_LIST_0) ? REF_PIC_LIST_1 : REF_PIC_LIST_0; 4621 4622 const Int currPOC = m_pcSlice->getPOC(); 4623 const Int currRefPOC = m_pcSlice->getRefPic( eRefPicList, iRefIdx)->getPOC(); 4624 const Bool bIsCurrRefLongTerm = m_pcSlice->getRefPic( eRefPicList, iRefIdx)->getIsLongTerm(); 4625 const Int neibPOC = currPOC; 4626 4627 for(Int predictorSource=0; predictorSource<2; predictorSource++) // examine the indicated reference picture list, then if not available, examine the other list. 4628 { 4629 const RefPicList eRefPicListIndex = (predictorSource==0) ? eRefPicList : eRefPicList2nd; 4630 const Int neibRefIdx = neibCU->getCUMvField(eRefPicListIndex)->getRefIdx(neibPUPartIdx); 4631 if( neibRefIdx >= 0) 4632 { 4633 const Bool bIsNeibRefLongTerm = neibCU->getSlice()->getRefPic( eRefPicListIndex, neibRefIdx )->getIsLongTerm(); 4634 4635 if ( bIsCurrRefLongTerm == bIsNeibRefLongTerm ) 4636 { 4637 const TComMv &cMvPred = neibCU->getCUMvField(eRefPicListIndex)->getMv(neibPUPartIdx); 4638 TComMv rcMv; 4639 if ( bIsCurrRefLongTerm /* || bIsNeibRefLongTerm*/ ) 4681 4640 { 4682 4641 rcMv = cMvPred; … … 4684 4643 else 4685 4644 { 4686 rcMv = cMvPred.scaleMv( iScale ); 4645 const Int neibRefPOC = neibCU->getSlice()->getRefPOC( eRefPicListIndex, neibRefIdx ); 4646 const Int scale = xGetDistScaleFactor( currPOC, currRefPOC, neibPOC, neibRefPOC ); 4647 if ( scale == 4096 ) 4648 { 4649 rcMv = cMvPred; 4650 } 4651 else 4652 { 4653 rcMv = cMvPred.scaleMv( scale ); 4654 } 4687 4655 } 4688 } 4689 4690 pInfo->m_acMvCand[ pInfo->iN++] = rcMv; 4691 return true; 4692 } 4693 } 4694 //---------------------- V2(END) --------------------// 4695 if( pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) >= 0) 4696 { 4697 iNeibRefPOC = pcTmpCU->getSlice()->getRefPOC( eRefPicList2nd, pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) ); 4698 TComMv cMvPred = pcTmpCU->getCUMvField(eRefPicList2nd)->getMv(uiIdx); 4699 TComMv rcMv; 4700 4701 bIsNeibRefLongTerm = pcTmpCU->getSlice()->getRefPic( eRefPicList2nd, pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) )->getIsLongTerm(); 4702 if ( bIsCurrRefLongTerm == bIsNeibRefLongTerm ) 4703 { 4704 if ( bIsCurrRefLongTerm || bIsNeibRefLongTerm ) 4705 { 4706 rcMv = cMvPred; 4707 } 4708 else 4709 { 4710 Int iScale = xGetDistScaleFactor( iCurrPOC, iCurrRefPOC, iNeibPOC, iNeibRefPOC ); 4711 if ( iScale == 4096 ) 4712 { 4713 rcMv = cMvPred; 4714 } 4715 else 4716 { 4717 rcMv = cMvPred.scaleMv( iScale ); 4718 } 4719 } 4720 4721 pInfo->m_acMvCand[ pInfo->iN++] = rcMv; 4722 return true; 4723 } 4724 } 4725 //---------------------- V3(END) --------------------// 4656 4657 info.m_acMvCand[info.iN++] = rcMv; 4658 return true; 4659 } 4660 } 4661 } 4726 4662 return false; 4727 4663 } 4728 4664 4729 Bool TComDataCU::xGetColMVP( RefPicList eRefPicList, Int ctuRsAddr, Int uiPartUnitIdx, TComMv& rcMv, Int& riRefIdx4730 4665 #if NH_3D_TMVP 4731 , Bool bMRG 4732 #endif 4733 ) 4734 { 4735 UInt uiAbsPartAddr = uiPartUnitIdx; 4736 4737 RefPicList eColRefPicList; 4738 Int iColPOC, iColRefPOC, iCurrPOC, iCurrRefPOC, iScale; 4739 TComMv cColMv; 4666 Bool TComDataCU::xGetColMVP( const RefPicList eRefPicList, const Int ctuRsAddr, const Int partUnitIdx, TComMv& rcMv, Int& refIdx, Bool bMRG ) const 4667 #else 4668 Bool TComDataCU::xGetColMVP( const RefPicList eRefPicList, const Int ctuRsAddr, const Int partUnitIdx, TComMv& rcMv, const Int refIdx ) const 4669 #endif 4670 { 4671 const UInt absPartAddr = partUnitIdx; 4740 4672 4741 4673 // use coldir. 4742 TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx());4743 TComDataCU *pColCtu = pColPic->getCtu( ctuRsAddr );4744 if(pColCtu->getPic()==0 ||pColCtu->getPartitionSize(uiPartUnitIdx)==NUMBER_OF_PART_SIZES)4674 const TComPic * const pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx()); 4675 const TComDataCU * const pColCtu = pColPic->getCtu( ctuRsAddr ); 4676 if(pColCtu->getPic()==0 || pColCtu->getPartitionSize(partUnitIdx)==NUMBER_OF_PART_SIZES) 4745 4677 { 4746 4678 return false; 4747 4679 } 4748 iCurrPOC = m_pcSlice->getPOC(); 4749 iColPOC = pColCtu->getSlice()->getPOC(); 4750 4751 if (!pColCtu->isInter(uiAbsPartAddr)) 4680 4681 if (!pColCtu->isInter(absPartAddr)) 4752 4682 { 4753 4683 return false; 4754 4684 } 4755 4685 4756 eColRefPicList = getSlice()->getCheckLDC() ? eRefPicList : RefPicList(getSlice()->getColFromL0Flag()); 4757 4758 Int iColRefIdx = pColCtu->getCUMvField(RefPicList(eColRefPicList))->getRefIdx(uiAbsPartAddr); 4686 RefPicList eColRefPicList = getSlice()->getCheckLDC() ? eRefPicList : RefPicList(getSlice()->getColFromL0Flag()); 4687 Int iColRefIdx = pColCtu->getCUMvField(RefPicList(eColRefPicList))->getRefIdx(absPartAddr); 4759 4688 4760 4689 if (iColRefIdx < 0 ) 4761 4690 { 4762 4691 eColRefPicList = RefPicList(1 - eColRefPicList); 4763 iColRefIdx = pColCtu->getCUMvField(RefPicList(eColRefPicList))->getRefIdx( uiAbsPartAddr);4692 iColRefIdx = pColCtu->getCUMvField(RefPicList(eColRefPicList))->getRefIdx(absPartAddr); 4764 4693 4765 4694 if (iColRefIdx < 0 ) … … 4769 4698 } 4770 4699 4771 // Scale the vector. 4772 iColRefPOC = pColCtu->getSlice()->getRefPOC(eColRefPicList, iColRefIdx); 4773 cColMv = pColCtu->getCUMvField(eColRefPicList)->getMv(uiAbsPartAddr); 4774 4775 iCurrRefPOC = m_pcSlice->getRefPic(eRefPicList, riRefIdx)->getPOC(); 4776 4777 Bool bIsCurrRefLongTerm = m_pcSlice->getRefPic(eRefPicList, riRefIdx)->getIsLongTerm(); 4778 Bool bIsColRefLongTerm = pColCtu->getSlice()->getIsUsedAsLongTerm(eColRefPicList, iColRefIdx); 4700 #if NH_3D_TMVP 4701 Bool bIsCurrRefLongTerm = m_pcSlice->getRefPic(eRefPicList, refIdx)->getIsLongTerm(); 4702 #else 4703 const Bool bIsCurrRefLongTerm = m_pcSlice->getRefPic(eRefPicList, refIdx)->getIsLongTerm(); 4704 #endif 4705 const Bool bIsColRefLongTerm = pColCtu->getSlice()->getIsUsedAsLongTerm(eColRefPicList, iColRefIdx); 4779 4706 4780 4707 if ( bIsCurrRefLongTerm != bIsColRefLongTerm ) … … 4784 4711 if(bMRG && iAlterRefIdx > 0) 4785 4712 { 4786 riRefIdx = iAlterRefIdx; 4787 bIsCurrRefLongTerm = m_pcSlice->getRefPic(eRefPicList, riRefIdx)->getIsLongTerm(); 4788 iCurrRefPOC = m_pcSlice->getRefPic(eRefPicList, riRefIdx)->getPOC(); 4713 refIdx = iAlterRefIdx; 4714 bIsCurrRefLongTerm = m_pcSlice->getRefPic(eRefPicList, refIdx)->getIsLongTerm(); 4789 4715 assert(bIsCurrRefLongTerm == bIsColRefLongTerm); 4790 4716 } … … 4792 4718 { 4793 4719 #endif 4794 return false;4720 return false; 4795 4721 #if NH_3D_TMVP 4796 4722 } 4797 4723 #endif 4798 4724 } 4799 4725 // Scale the vector. 4726 const TComMv &cColMv = pColCtu->getCUMvField(eColRefPicList)->getMv(absPartAddr); 4727 4728 #if NH_3D_TMVP 4800 4729 if ( bIsCurrRefLongTerm || bIsColRefLongTerm ) 4730 #else 4731 if ( bIsCurrRefLongTerm /*|| bIsColRefLongTerm*/ ) 4732 #endif 4801 4733 { 4802 4734 #if NH_3D_TMVP 4803 Int iCurrViewId = m_pcSlice->getViewId ();4804 Int iCurrRefViewId = m_pcSlice->getRefPic(eRefPicList, riRefIdx)->getViewId ();4805 Int iColViewId = pColCtu->getSlice()->getViewId();4806 Int iColRefViewId = pColCtu->getSlice()->getRefPic( eColRefPicList, pColCtu->getCUMvField(eColRefPicList)->getRefIdx(uiAbsPartAddr))->getViewId();4807 iScale = 4096;4735 const Int iCurrViewId = m_pcSlice->getViewId (); 4736 const Int iCurrRefViewId = m_pcSlice->getRefPic(eRefPicList, refIdx)->getViewId (); 4737 const Int iColViewId = pColCtu->getSlice()->getViewId(); 4738 const Int iColRefViewId = pColCtu->getSlice()->getRefPic( eColRefPicList, pColCtu->getCUMvField(eColRefPicList)->getRefIdx(absPartAddr))->getViewId(); 4739 Int scale = 4096; 4808 4740 if ( iCurrRefViewId != iCurrViewId && iColViewId != iColRefViewId ) 4809 4741 { 4810 iScale = xGetDistScaleFactor( iCurrViewId, iCurrRefViewId, iColViewId, iColRefViewId );4811 } 4812 if ( bMRG && iScale != 4096 && m_pcSlice->getIvMvScalingFlag( ) )4813 { 4814 rcMv = cColMv.scaleMv( iScale );4742 scale = xGetDistScaleFactor( iCurrViewId, iCurrRefViewId, iColViewId, iColRefViewId ); 4743 } 4744 if ( bMRG && scale != 4096 && m_pcSlice->getIvMvScalingFlag( ) ) 4745 { 4746 rcMv = cColMv.scaleMv( scale ); 4815 4747 } 4816 4748 else 4817 4749 { 4818 4750 #endif 4819 rcMv = cColMv;4751 rcMv = cColMv; 4820 4752 #if NH_3D_TMVP 4821 4753 } … … 4824 4756 else 4825 4757 { 4826 iScale = xGetDistScaleFactor(iCurrPOC, iCurrRefPOC, iColPOC, iColRefPOC); 4827 if ( iScale == 4096 ) 4758 const Int currPOC = m_pcSlice->getPOC(); 4759 const Int colPOC = pColCtu->getSlice()->getPOC(); 4760 const Int colRefPOC = pColCtu->getSlice()->getRefPOC(eColRefPicList, iColRefIdx); 4761 const Int currRefPOC = m_pcSlice->getRefPic(eRefPicList, refIdx)->getPOC(); 4762 const Int scale = xGetDistScaleFactor(currPOC, currRefPOC, colPOC, colRefPOC); 4763 if ( scale == 4096 ) 4828 4764 { 4829 4765 rcMv = cColMv; … … 4831 4767 else 4832 4768 { 4833 rcMv = cColMv.scaleMv( iScale );4769 rcMv = cColMv.scaleMv( scale ); 4834 4770 } 4835 4771 } … … 4838 4774 } 4839 4775 4776 // Static member 4840 4777 Int TComDataCU::xGetDistScaleFactor(Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC) 4841 4778 { … … 4857 4794 } 4858 4795 4859 Void TComDataCU::xDeriveCenterIdx( UInt uiPartIdx, UInt& ruiPartIdxCenter ) 4796 Void TComDataCU::xDeriveCenterIdx( UInt uiPartIdx, UInt& ruiPartIdxCenter ) const 4860 4797 { 4861 4798 UInt uiPartAddr; … … 5001 4938 5002 4939 UInt uiMidPart, uiPartNeighbor; 5003 TComDataCU* pcCUNeighbor;4940 const TComDataCU* pcCUNeighbor; 5004 4941 Bool bDepAvail = false; 5005 4942 Pel *pDepth = this->getPic()->getPicYuvRec()->getAddr(COMPONENT_Y); … … 5133 5070 #if NH_3D_NBDV_REF 5134 5071 TComPic* picDepth = NULL; 5135 #if H_3D_FCO _VSP_DONBDV_E01635072 #if H_3D_FCO 5136 5073 picDepth = getSlice()->getIvPic(true, getSlice()->getViewIndex() ); 5137 5074 if ( picDepth->getPicYuvRec() != NULL ) … … 5161 5098 UInt uiIdx = 0; 5162 5099 Bool bCheckMcpDv = false; 5163 TComDataCU* pcTmpCU = NULL;5100 const TComDataCU* pcTmpCU = NULL; 5164 5101 5165 5102 //// ******* Get disparity from left block ******* ///// 5103 #if NH_3D_FIX_TICKET_91 5104 pcTmpCU = getPULeft(uiIdx, uiPartIdxLB); 5105 #else 5166 5106 pcTmpCU = getPULeft(uiIdx, uiPartIdxLB, true, false); 5107 #endif 5167 5108 bCheckMcpDv = true; 5168 5109 if ( xCheckSpatialNBDV( pcTmpCU, uiIdx, pDInfo, bCheckMcpDv, &cIDVInfo, DVFROM_LEFT … … 5199 5140 pDInfo->m_aVIdxCan = cIDVInfo.m_aVIdxCan[iList][ curPos ]; 5200 5141 #if NH_3D_NBDV_REF 5201 #if H_3D_FCO _VSP_DONBDV_E01635142 #if H_3D_FCO 5202 5143 TComPic* picDepth = NULL; 5203 5144 … … 5238 5179 #if NH_3D_NBDV_REF 5239 5180 TComPic* picDepth = NULL; 5240 #if H_3D_FCO _VSP_DONBDV_E01635181 #if H_3D_FCO 5241 5182 picDepth = getSlice()->getIvPic(true, getSlice()->getViewIndex() ); 5242 5183 if ( picDepth->getPicYuvRec() != NULL ) … … 5307 5248 5308 5249 5309 Bool TComDataCU::xCheckSpatialNBDV( TComDataCU* pcTmpCU, UInt uiIdx, DisInfo* pNbDvInfo, Bool bSearchForMvpDv, IDVInfo* paIDVInfo, UInt uiMvpDvPos5250 Bool TComDataCU::xCheckSpatialNBDV( const TComDataCU* pcTmpCU, UInt uiIdx, DisInfo* pNbDvInfo, Bool bSearchForMvpDv, IDVInfo* paIDVInfo, UInt uiMvpDvPos 5310 5251 #if NH_3D_NBDV_REF 5311 5252 , Bool bDepthRefine … … 5332 5273 TComPic* picDepth = NULL; 5333 5274 assert(getSlice()->getRefPic(eRefPicList, refId)->getPOC() == getSlice()->getPOC()); 5334 #if H_3D_FCO _VSP_DONBDV_E01635275 #if H_3D_FCO 5335 5276 picDepth = getSlice()->getIvPic(true, getSlice()->getViewIndex() ); 5336 5277 if ( picDepth->getPicYuvRec() != NULL ) … … 5466 5407 } 5467 5408 5468 #if NH_3D_FIX_NBDV_COL5469 5409 // The picture pColCU->getSlice()->getRefPic(eColRefPicList, iColRefIdx) might not be in DPB anymore 5470 5410 // So don't access it directly. 5471 5411 iColRefViewIdx = pColCU->getSlice()->getVPS()->getViewOrderIdx( pColCU->getSlice()->getRefLayerId( eColRefPicList, iColRefIdx ) ); 5472 #else5473 iColRefViewIdx = pColCU->getSlice()->getRefPic(eColRefPicList, iColRefIdx)->getViewIndex();5474 #endif5475 5412 5476 5413 … … 6065 6002 Int depthRefViewIdx = pcCU->getDvInfo(partAddr).m_aVIdxCan; 6066 6003 6067 #if H_3D_FCO _VSP_DONBDV_E01636004 #if H_3D_FCO 6068 6005 TComPic* pRefPicBaseDepth = 0; 6069 6006 Bool bIsCurrDepthCoded = false; … … 6100 6037 pcCU->clipMv(cDv); 6101 6038 6102 #if H_3D_FCO _VSP_DONBDV_E01636039 #if H_3D_FCO 6103 6040 if ( bIsCurrDepthCoded ) 6104 6041 { -
TabularUnified trunk/source/Lib/TLibCommon/TComDataCU.h ¶
r1321 r1386 112 112 UChar* m_ucDISType; 113 113 #endif 114 Char* m_pePartSize; ///< array of partition sizes115 Char* m_pePredMode;///< array of prediction modes116 Char*m_crossComponentPredictionAlpha[MAX_NUM_COMPONENT]; ///< array of cross-component prediction alpha values114 SChar* m_pePartSize; ///< array of partition sizes 115 SChar* m_pePredMode; ///< array of prediction modes 116 SChar* m_crossComponentPredictionAlpha[MAX_NUM_COMPONENT]; ///< array of cross-component prediction alpha values 117 117 Bool* m_CUTransquantBypass; ///< array of cu_transquant_bypass flags 118 Char* m_phQP;///< array of QP values118 SChar* m_phQP; ///< array of QP values 119 119 UChar* m_ChromaQpAdj; ///< array of chroma QP adjustments (indexed). when value = 0, cu_chroma_qp_offset_flag=0; when value>0, indicates cu_chroma_qp_offset_flag=1 and cu_chroma_qp_offset_idx=value-1 120 120 UInt m_codedChromaQpAdj; … … 125 125 TCoeff* m_pcTrCoeff[MAX_NUM_COMPONENT]; ///< array of transform coefficient buffers (0->Y, 1->Cb, 2->Cr) 126 126 #if ADAPTIVE_QP_SELECTION 127 TCoeff* m_pcArlCoeff[MAX_NUM_COMPONENT]; //ARL coefficient buffer (0->Y, 1->Cb, 2->Cr)127 TCoeff* m_pcArlCoeff[MAX_NUM_COMPONENT]; ///< ARL coefficient buffer (0->Y, 1->Cb, 2->Cr) 128 128 Bool m_ArlCoeffIsAliasedAllocation; ///< ARL coefficient buffer is an alias of the global buffer and must not be free()'d 129 129 #endif … … 154 154 Bool m_bIsMergeAMP; 155 155 #endif 156 UChar* m_puhIntraDir[MAX_NUM_CHANNEL_TYPE]; // 0-> Luma, 1-> Chroma156 UChar* m_puhIntraDir[MAX_NUM_CHANNEL_TYPE]; 157 157 UChar* m_puhInterDir; ///< array of inter directions 158 Char*m_apiMVPIdx[NUM_REF_PIC_LIST_01]; ///< array of motion vector predictor candidates159 Char*m_apiMVPNum[NUM_REF_PIC_LIST_01]; ///< array of number of possible motion vectors predictors158 SChar* m_apiMVPIdx[NUM_REF_PIC_LIST_01]; ///< array of motion vector predictor candidates 159 SChar* m_apiMVPNum[NUM_REF_PIC_LIST_01]; ///< array of number of possible motion vectors predictors 160 160 Bool* m_pbIPCMFlag; ///< array of intra_pcm flags 161 161 #if NH_3D_NBDV … … 163 163 #endif 164 164 #if NH_3D_VSP 165 Char*m_piVSPFlag; ///< array of VSP flags to indicate whehter a block uses VSP or not ///< 0: non-VSP; 1: VSP165 SChar* m_piVSPFlag; ///< array of VSP flags to indicate whehter a block uses VSP or not ///< 0: non-VSP; 1: VSP 166 166 #endif 167 167 #if NH_3D_SPIVMP … … 208 208 UInt m_uiTotalBits; ///< sum of partition bits 209 209 UInt m_uiTotalBins; ///< sum of partition bins 210 Charm_codedQP;210 SChar m_codedQP; 211 211 #if NH_3D_MLC 212 212 DisInfo m_cDefaultDisInfo; ///< Default disparity information for initializing … … 219 219 protected: 220 220 221 /// add possible motion vector predictor candidates 222 Bool xAddMVPCand ( AMVPInfo* pInfo, RefPicList eRefPicList, Int iRefIdx, UInt uiPartUnitIdx, MVP_DIR eDir ); 223 Bool xAddMVPCandOrder ( AMVPInfo* pInfo, RefPicList eRefPicList, Int iRefIdx, UInt uiPartUnitIdx, MVP_DIR eDir ); 221 /// adds a single possible motion vector predictor candidate 222 Bool xAddMVPCandUnscaled ( AMVPInfo &info, const RefPicList eRefPicList, const Int iRefIdx, const UInt uiPartUnitIdx, const MVP_DIR eDir ) const; 223 Bool xAddMVPCandWithScaling ( AMVPInfo &info, const RefPicList eRefPicList, const Int iRefIdx, const UInt uiPartUnitIdx, const MVP_DIR eDir ) const; 224 224 225 #if NH_3D_VSP 225 226 Bool xAddVspCand( Int mrgCandIdx, DisInfo* pDInfo, Int& iCount); … … 229 230 #endif 230 231 231 Void deriveRightBottomIdx ( UInt uiPartIdx, UInt& ruiPartIdxRB );232 Bool xGetColMVP( RefPicList eRefPicList, Int ctuRsAddr, Int uiPartUnitIdx, TComMv& rcMv, Int& riRefIdx 232 Void deriveRightBottomIdx ( UInt uiPartIdx, UInt& ruiPartIdxRB ) const; 233 233 234 #if NH_3D_TMVP 234 , Bool bMRG = true235 #e ndif236 );237 235 Bool xGetColMVP ( const RefPicList eRefPicList, const Int ctuRsAddr, const Int partUnitIdx, TComMv& rcMv, Int& refIdx, Bool bMRG = true ) const; 236 #else 237 Bool xGetColMVP ( const RefPicList eRefPicList, const Int ctuRsAddr, const Int partUnitIdx, TComMv& rcMv, const Int refIdx ) const; 238 #endif 238 239 239 240 /// compute scaling factor from POC difference 240 241 #if !NH_3D_ARP 241 Int xGetDistScaleFactor ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC ); 242 #endif 243 244 Void xDeriveCenterIdx( UInt uiPartIdx, UInt& ruiPartIdxCenter ); 242 static Int xGetDistScaleFactor ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC ); 243 #endif 244 Void xDeriveCenterIdx ( UInt uiPartIdx, UInt& ruiPartIdxCenter ) const; 245 245 246 246 #if NH_3D_VSP … … 249 249 250 250 public: 251 252 #if NH_3D_ARP 253 static Int xGetDistScaleFactor ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC ); 254 #endif 255 251 256 TComDataCU(); 252 257 virtual ~TComDataCU(); … … 255 260 // create / destroy / initialize / copy 256 261 // ------------------------------------------------------------------------------------------------------------------- 257 #if NH_3D_ARP258 /// compute scaling factor from POC difference259 Int xGetDistScaleFactor ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC );260 #endif261 262 Void create ( ChromaFormat chromaFormatIDC, UInt uiNumPartition, UInt uiWidth, UInt uiHeight, Bool bDecSubCu, Int unitSize 262 263 #if ADAPTIVE_QP_SELECTION … … 275 276 276 277 Void copySubCU ( TComDataCU* pcCU, UInt uiPartUnitIdx ); 277 Void copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList278 278 #if NH_3D_NBDV 279 , Bool bNBDV = false 280 #endif 281 ); 279 Void copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, Bool bNBDV = false ); 280 #else 281 Void copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList ); 282 #endif 282 283 Void copyPartFrom ( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth ); 283 284 … … 315 316 // ------------------------------------------------------------------------------------------------------------------- 316 317 317 Char* getPartitionSize () { return m_pePartSize;}318 PartSize getPartitionSize ( UInt uiIdx ){ return static_cast<PartSize>( m_pePartSize[uiIdx] ); }318 SChar* getPartitionSize ( ) { return m_pePartSize; } 319 PartSize getPartitionSize ( UInt uiIdx ) const { return static_cast<PartSize>( m_pePartSize[uiIdx] ); } 319 320 Void setPartitionSize ( UInt uiIdx, PartSize uh){ m_pePartSize[uiIdx] = uh; } 320 321 Void setPartSizeSubParts ( PartSize eMode, UInt uiAbsPartIdx, UInt uiDepth ); … … 326 327 327 328 Bool* getSkipFlag () { return m_skipFlag; } 328 Bool getSkipFlag (UInt idx) { return m_skipFlag[idx];}329 Bool getSkipFlag ( UInt idx ) const { return m_skipFlag[idx]; } 329 330 Void setSkipFlag ( UInt idx, Bool skip) { m_skipFlag[idx] = skip; } 330 331 Void setSkipFlagSubParts ( Bool skip, UInt absPartIdx, UInt depth ); … … 340 341 Void setDISTypeSubParts ( UChar ucDISType, UInt uiAbsPartIdx, UInt uiDepth ); 341 342 #endif 342 Char* getPredictionMode () { return m_pePredMode;}343 PredMode getPredictionMode ( UInt uiIdx ){ return static_cast<PredMode>( m_pePredMode[uiIdx] ); }343 SChar* getPredictionMode ( ) { return m_pePredMode; } 344 PredMode getPredictionMode ( UInt uiIdx ) const { return static_cast<PredMode>( m_pePredMode[uiIdx] ); } 344 345 Void setPredictionMode ( UInt uiIdx, PredMode uh){ m_pePredMode[uiIdx] = uh; } 345 346 Void setPredModeSubParts ( PredMode eMode, UInt uiAbsPartIdx, UInt uiDepth ); 346 347 347 348 #if NH_3D_DBBP 348 Bool* getDBBPFlag () { return m_pbDBBPFlag; }349 Bool getDBBPFlag ( UInt uiIdx ) { return m_pbDBBPFlag[uiIdx]; }349 Bool* getDBBPFlag () const { return m_pbDBBPFlag; } 350 Bool getDBBPFlag ( UInt uiIdx ) const { return m_pbDBBPFlag[uiIdx]; } 350 351 Void setDBBPFlag ( UInt uiIdx, Bool b ) { m_pbDBBPFlag[uiIdx] = b; } 351 352 Void setDBBPFlagSubParts ( Bool bDBBPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); … … 353 354 #endif 354 355 355 Char* getCrossComponentPredictionAlpha( ComponentID compID ) { return m_crossComponentPredictionAlpha[compID];}356 Char getCrossComponentPredictionAlpha( UInt uiIdx, ComponentID compID ) { return m_crossComponentPredictionAlpha[compID][uiIdx];}356 SChar* getCrossComponentPredictionAlpha( ComponentID compID ) { return m_crossComponentPredictionAlpha[compID]; } 357 SChar getCrossComponentPredictionAlpha( UInt uiIdx, ComponentID compID ) { return m_crossComponentPredictionAlpha[compID][uiIdx]; } 357 358 358 359 Bool* getCUTransquantBypass () { return m_CUTransquantBypass; } 359 Bool getCUTransquantBypass ( UInt uiIdx ) { return m_CUTransquantBypass[uiIdx];}360 Bool getCUTransquantBypass ( UInt uiIdx ) const { return m_CUTransquantBypass[uiIdx]; } 360 361 361 362 UChar* getWidth () { return m_puhWidth; } 362 UChar getWidth ( UInt uiIdx ) { return m_puhWidth[uiIdx];}363 UChar getWidth ( UInt uiIdx ) const { return m_puhWidth[uiIdx]; } 363 364 Void setWidth ( UInt uiIdx, UChar uh ) { m_puhWidth[uiIdx] = uh; } 364 365 365 366 UChar* getHeight () { return m_puhHeight; } 366 UChar getHeight ( UInt uiIdx ) { return m_puhHeight[uiIdx];}367 UChar getHeight ( UInt uiIdx ) const { return m_puhHeight[uiIdx]; } 367 368 Void setHeight ( UInt uiIdx, UChar uh ) { m_puhHeight[uiIdx] = uh; } 368 369 369 370 Void setSizeSubParts ( UInt uiWidth, UInt uiHeight, UInt uiAbsPartIdx, UInt uiDepth ); 370 371 371 Char* getQP () { return m_phQP;}372 Char getQP ( UInt uiIdx ) const { return m_phQP[uiIdx];}373 Void setQP ( UInt uiIdx, Char value ){ m_phQP[uiIdx] = value;}372 SChar* getQP ( ) { return m_phQP; } 373 SChar getQP ( UInt uiIdx ) const { return m_phQP[uiIdx]; } 374 Void setQP ( UInt uiIdx, SChar value ) { m_phQP[uiIdx] = value; } 374 375 Void setQPSubParts ( Int qp, UInt uiAbsPartIdx, UInt uiDepth ); 375 Int getLastValidPartIdx ( Int iAbsPartIdx );376 Char getLastCodedQP ( UInt uiAbsPartIdx );376 Int getLastValidPartIdx ( Int iAbsPartIdx ) const; 377 SChar getLastCodedQP ( UInt uiAbsPartIdx ) const; 377 378 Void setQPSubCUs ( Int qp, UInt absPartIdx, UInt depth, Bool &foundNonZeroCbf ); 378 Void setCodedQP ( Char qp ) { m_codedQP = qp;}379 Char getCodedQP () { return m_codedQP;}379 Void setCodedQP ( SChar qp ) { m_codedQP = qp; } 380 SChar getCodedQP ( ) const { return m_codedQP; } 380 381 381 382 UChar* getChromaQpAdj () { return m_ChromaQpAdj; } ///< array of chroma QP adjustments (indexed). when value = 0, cu_chroma_qp_offset_flag=0; when value>0, indicates cu_chroma_qp_offset_flag=1 and cu_chroma_qp_offset_idx=value-1 … … 383 384 Void setChromaQpAdj (Int idx, UChar val) { m_ChromaQpAdj[idx] = val; } ///< When val = 0, cu_chroma_qp_offset_flag=0; when val>0, indicates cu_chroma_qp_offset_flag=1 and cu_chroma_qp_offset_idx=val-1 384 385 Void setChromaQpAdjSubParts( UChar val, Int absPartIdx, Int depth ); 385 Void setCodedChromaQpAdj ( Char qp ) { m_codedChromaQpAdj = qp;}386 Char getCodedChromaQpAdj () { return m_codedChromaQpAdj;}387 388 Bool isLosslessCoded ( UInt absPartIdx );386 Void setCodedChromaQpAdj ( SChar qp ) { m_codedChromaQpAdj = qp; } 387 SChar getCodedChromaQpAdj ( ) const { return m_codedChromaQpAdj; } 388 389 Bool isLosslessCoded ( UInt absPartIdx ) const; 389 390 390 391 UChar* getTransformIdx () { return m_puhTrIdx; } 391 UChar getTransformIdx ( UInt uiIdx ) { return m_puhTrIdx[uiIdx];}392 UChar getTransformIdx ( UInt uiIdx ) const { return m_puhTrIdx[uiIdx]; } 392 393 Void setTrIdxSubParts ( UInt uiTrIdx, UInt uiAbsPartIdx, UInt uiDepth ); 393 394 394 395 UChar* getTransformSkip ( ComponentID compID ) { return m_puhTransformSkip[compID];} 395 UChar getTransformSkip ( UInt uiIdx, ComponentID compID) { return m_puhTransformSkip[compID][uiIdx];}396 UChar getTransformSkip ( UInt uiIdx, ComponentID compID ) const { return m_puhTransformSkip[compID][uiIdx]; } 396 397 Void setTransformSkipSubParts ( UInt useTransformSkip, ComponentID compID, UInt uiAbsPartIdx, UInt uiDepth); 397 398 Void setTransformSkipSubParts ( const UInt useTransformSkip[MAX_NUM_COMPONENT], UInt uiAbsPartIdx, UInt uiDepth ); 398 399 399 400 UChar* getExplicitRdpcmMode ( ComponentID component ) { return m_explicitRdpcmMode[component]; } 400 UChar getExplicitRdpcmMode ( ComponentID component, UInt partIdx ) {return m_explicitRdpcmMode[component][partIdx]; }401 UChar getExplicitRdpcmMode ( ComponentID component, UInt partIdx ) const { return m_explicitRdpcmMode[component][partIdx]; } 401 402 Void setExplicitRdpcmModePartRange ( UInt rdpcmMode, ComponentID compID, UInt uiAbsPartIdx, UInt uiCoveredPartIdxes ); 402 403 403 Bool isRDPCMEnabled ( UInt uiAbsPartIdx ){ return getSlice()->getSPS()->getSpsRangeExtension().getRdpcmEnabledFlag(isIntra(uiAbsPartIdx) ? RDPCM_SIGNAL_IMPLICIT : RDPCM_SIGNAL_EXPLICIT); }404 405 Void setCrossComponentPredictionAlphaPartRange (Char alphaValue, ComponentID compID, UInt uiAbsPartIdx, UInt uiCoveredPartIdxes );404 Bool isRDPCMEnabled ( UInt uiAbsPartIdx ) const { return getSlice()->getSPS()->getSpsRangeExtension().getRdpcmEnabledFlag(isIntra(uiAbsPartIdx) ? RDPCM_SIGNAL_IMPLICIT : RDPCM_SIGNAL_EXPLICIT); } 405 406 Void setCrossComponentPredictionAlphaPartRange ( SChar alphaValue, ComponentID compID, UInt uiAbsPartIdx, UInt uiCoveredPartIdxes ); 406 407 Void setTransformSkipPartRange ( UInt useTransformSkip, ComponentID compID, UInt uiAbsPartIdx, UInt uiCoveredPartIdxes ); 407 408 408 UInt getQuadtreeTULog2MinSizeInCU ( UInt uiIdx );409 UInt getQuadtreeTULog2MinSizeInCU ( UInt uiIdx ) const; 409 410 410 411 TComCUMvField* getCUMvField ( RefPicList e ) { return &m_acCUMvField[e]; } 412 const TComCUMvField* getCUMvField ( RefPicList e ) const { return &m_acCUMvField[e]; } 411 413 412 414 TCoeff* getCoeff (ComponentID component) { return m_pcTrCoeff[component]; } … … 417 419 Pel* getPCMSample ( ComponentID component ) { return m_pcIPCMSample[component]; } 418 420 419 UChar getCbf ( UInt uiIdx, ComponentID eType ) { return m_puhCbf[eType][uiIdx];}421 UChar getCbf ( UInt uiIdx, ComponentID eType ) const { return m_puhCbf[eType][uiIdx]; } 420 422 UChar* getCbf ( ComponentID eType ) { return m_puhCbf[eType]; } 421 UChar getCbf ( UInt uiIdx, ComponentID eType, UInt uiTrDepth ){ return ( ( getCbf( uiIdx, eType ) >> uiTrDepth ) & 0x1 ); }423 UChar getCbf ( UInt uiIdx, ComponentID eType, UInt uiTrDepth ) const { return ( ( getCbf( uiIdx, eType ) >> uiTrDepth ) & 0x1 ); } 422 424 Void setCbf ( UInt uiIdx, ComponentID eType, UChar uh ) { m_puhCbf[eType][uiIdx] = uh; } 423 425 Void clearCbf ( UInt uiIdx, ComponentID eType, UInt uiNumParts ); 424 UChar getQtRootCbf ( UInt uiIdx );426 UChar getQtRootCbf ( UInt uiIdx ) const; 425 427 426 428 Void setCbfSubParts ( const UInt uiCbf[MAX_NUM_COMPONENT], UInt uiAbsPartIdx, UInt uiDepth ); … … 436 438 437 439 Bool* getMergeFlag () { return m_pbMergeFlag; } 438 Bool getMergeFlag ( UInt uiIdx ) { return m_pbMergeFlag[uiIdx];}440 Bool getMergeFlag ( UInt uiIdx ) const { return m_pbMergeFlag[uiIdx]; } 439 441 Void setMergeFlag ( UInt uiIdx, Bool b ) { m_pbMergeFlag[uiIdx] = b; } 440 442 Void setMergeFlagSubParts ( Bool bMergeFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 441 443 442 444 UChar* getMergeIndex () { return m_puhMergeIndex; } 443 UChar getMergeIndex ( UInt uiIdx ) { return m_puhMergeIndex[uiIdx];}445 UChar getMergeIndex ( UInt uiIdx ) const { return m_puhMergeIndex[uiIdx]; } 444 446 Void setMergeIndex ( UInt uiIdx, UInt uiMergeIndex ) { m_puhMergeIndex[uiIdx] = uiMergeIndex; } 445 447 Void setMergeIndexSubParts ( UInt uiMergeIndex, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); … … 453 455 #if AMP_MRG 454 456 Void setMergeAMP( Bool b ) { m_bIsMergeAMP = b; } 455 Bool getMergeAMP ( ) { return m_bIsMergeAMP;}457 Bool getMergeAMP ( ) const { return m_bIsMergeAMP; } 456 458 #endif 457 459 … … 465 467 466 468 UChar* getInterDir () { return m_puhInterDir; } 467 UChar getInterDir ( UInt uiIdx ) { return m_puhInterDir[uiIdx];}469 UChar getInterDir ( UInt uiIdx ) const { return m_puhInterDir[uiIdx]; } 468 470 Void setInterDir ( UInt uiIdx, UChar uh ) { m_puhInterDir[uiIdx] = uh; } 469 471 Void setInterDirSubParts ( UInt uiDir, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 470 472 Bool* getIPCMFlag () { return m_pbIPCMFlag; } 471 Bool getIPCMFlag (UInt uiIdx ) { return m_pbIPCMFlag[uiIdx];}473 Bool getIPCMFlag ( UInt uiIdx ) const { return m_pbIPCMFlag[uiIdx]; } 472 474 Void setIPCMFlag (UInt uiIdx, Bool b ) { m_pbIPCMFlag[uiIdx] = b; } 473 475 Void setIPCMFlagSubParts (Bool bIpcmFlag, UInt uiAbsPartIdx, UInt uiDepth); … … 482 484 #if NH_3D_NBDV 483 485 Void xDeriveRightBottomNbIdx(Int &uiLCUIdxRBNb, Int &uiPartIdxRBNb ); 484 Bool xCheckSpatialNBDV ( TComDataCU* pcTmpCU, UInt uiIdx, DisInfo* pNbDvInfo, Bool bSearchForMvpDv, IDVInfo* paMvpDvInfo,486 Bool xCheckSpatialNBDV (const TComDataCU* pcTmpCU, UInt uiIdx, DisInfo* pNbDvInfo, Bool bSearchForMvpDv, IDVInfo* paMvpDvInfo, 485 487 UInt uiMvpDvPos 486 488 #if NH_3D_NBDV_REF … … 525 527 #endif 526 528 #if NH_3D_ARP 527 UChar* getARPW () { return m_puhARPW; }528 UChar getARPW ( UInt uiIdx ) { return m_puhARPW[uiIdx]; }529 UChar* getARPW () const { return m_puhARPW; } 530 UChar getARPW ( UInt uiIdx ) const { return m_puhARPW[uiIdx]; } 529 531 Void setARPW ( UInt uiIdx, UChar w ) { m_puhARPW[uiIdx] = w; } 530 532 Void setARPWSubParts ( UChar w, UInt uiAbsPartIdx, UInt uiDepth ); … … 536 538 Void setICFlagSubParts ( Bool bICFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 537 539 Bool isICFlagRequired ( UInt uiAbsPartIdx ); 538 Void getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx = 0, Bool bLCU = false) ;540 Void getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx = 0, Bool bLCU = false) const; 539 541 #elif NH_3D_VSP 540 Void getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx = 0, Bool bLCU = false) ;542 Void getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx = 0, Bool bLCU = false) const; 541 543 #else 542 544 // ------------------------------------------------------------------------------------------------------------------- … … 544 546 // ------------------------------------------------------------------------------------------------------------------- 545 547 546 Void getPartIndexAndSize ( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight ); // This is for use by a leaf/sub CU object only, with no additional AbsPartIdx547 #endif 548 UChar getNumPartitions ( const UInt uiAbsPartIdx = 0 );549 Bool isFirstAbsZorderIdxInDepth (UInt uiAbsPartIdx, UInt uiDepth);548 Void getPartIndexAndSize ( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight ) const; // This is for use by a leaf/sub CU object only, with no additional AbsPartIdx 549 #endif 550 UChar getNumPartitions ( const UInt uiAbsPartIdx = 0 ) const; 551 Bool isFirstAbsZorderIdxInDepth ( UInt uiAbsPartIdx, UInt uiDepth ) const; 550 552 551 553 #if NH_3D_DMM … … 575 577 // ------------------------------------------------------------------------------------------------------------------- 576 578 577 Void getMvField (TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, TComMvField& rcMvField );578 579 Void fillMvpCand ( UInt uiPartIdx, UInt uiPartAddr, RefPicList eRefPicList, Int iRefIdx, AMVPInfo* pInfo );580 Bool isDiffMER ( Int xN, Int yN, Int xP, Int yP);581 Void getPartPosition ( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH);579 static Void getMvField ( const TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, TComMvField& rcMvField ); 580 581 Void fillMvpCand ( const UInt uiPartIdx, const UInt uiPartAddr, const RefPicList eRefPicList, const Int iRefIdx, AMVPInfo* pInfo ) const; 582 Bool isDiffMER ( Int xN, Int yN, Int xP, Int yP ) const; 583 Void getPartPosition ( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH ) const; 582 584 583 585 Void setMVPIdx ( RefPicList eRefPicList, UInt uiIdx, Int iMVPIdx) { m_apiMVPIdx[eRefPicList][uiIdx] = iMVPIdx; } 584 Int getMVPIdx ( RefPicList eRefPicList, UInt uiIdx) { return m_apiMVPIdx[eRefPicList][uiIdx];}585 Char* getMVPIdx ( RefPicList eRefPicList ) { return m_apiMVPIdx[eRefPicList];}586 Int getMVPIdx ( RefPicList eRefPicList, UInt uiIdx) const { return m_apiMVPIdx[eRefPicList][uiIdx]; } 587 SChar* getMVPIdx ( RefPicList eRefPicList ) { return m_apiMVPIdx[eRefPicList]; } 586 588 587 589 Void setMVPNum ( RefPicList eRefPicList, UInt uiIdx, Int iMVPNum ) { m_apiMVPNum[eRefPicList][uiIdx] = iMVPNum; } 588 Int getMVPNum ( RefPicList eRefPicList, UInt uiIdx ) { return m_apiMVPNum[eRefPicList][uiIdx];}589 Char* getMVPNum ( RefPicList eRefPicList ) { return m_apiMVPNum[eRefPicList];}590 Int getMVPNum ( RefPicList eRefPicList, UInt uiIdx ) const { return m_apiMVPNum[eRefPicList][uiIdx]; } 591 SChar* getMVPNum ( RefPicList eRefPicList ) { return m_apiMVPNum[eRefPicList]; } 590 592 591 593 Void setMVPIdxSubParts ( Int iMVPIdx, RefPicList eRefPicList, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 592 594 Void setMVPNumSubParts ( Int iMVPNum, RefPicList eRefPicList, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 593 595 594 Void clipMv ( TComMv& rcMv ); 596 Void clipMv ( TComMv& rcMv ) const; 597 595 598 #if NH_MV 596 599 Void checkMvVertRest (TComMv& rcMv, RefPicList eRefPicList, int iRefIdx ); 597 600 #endif 598 Void getMvPredLeft ( TComMv& rcMvPred ) { rcMvPred = m_cMvFieldA.getMv();}599 Void getMvPredAbove ( TComMv& rcMvPred ) { rcMvPred = m_cMvFieldB.getMv();}600 Void getMvPredAboveRight ( TComMv& rcMvPred ) { rcMvPred = m_cMvFieldC.getMv();}601 Void getMvPredLeft ( TComMv& rcMvPred ) const { rcMvPred = m_cMvFieldA.getMv(); } 602 Void getMvPredAbove ( TComMv& rcMvPred ) const { rcMvPred = m_cMvFieldB.getMv(); } 603 Void getMvPredAboveRight ( TComMv& rcMvPred ) const { rcMvPred = m_cMvFieldC.getMv(); } 601 604 #if NH_3D 602 605 Void compressMV ( Int scale ); … … 618 621 Bool CUIsFromSameSliceAndTile ( const TComDataCU *pCU /* Can be NULL */) const; 619 622 Bool CUIsFromSameSliceTileAndWavefrontRow( const TComDataCU *pCU /* Can be NULL */) const; 620 Bool isLastSubCUOfCtu (const UInt absPartIdx);621 622 623 TComDataCU* getPULeft ( UInt&uiLPartUnitIdx,623 Bool isLastSubCUOfCtu ( const UInt absPartIdx ) const; 624 625 626 const TComDataCU* getPULeft ( UInt& uiLPartUnitIdx, 624 627 UInt uiCurrPartUnitIdx, 625 628 Bool bEnforceSliceRestriction=true, 626 Bool bEnforceTileRestriction=true ); 627 TComDataCU* getPUAbove ( UInt& uiAPartUnitIdx, 629 Bool bEnforceTileRestriction=true ) const; 630 631 const TComDataCU* getPUAbove ( UInt& uiAPartUnitIdx, 628 632 UInt uiCurrPartUnitIdx, 629 633 Bool bEnforceSliceRestriction=true, 630 634 Bool planarAtCTUBoundary = false, 631 Bool bEnforceTileRestriction=true );632 TComDataCU* getPUAboveLeft ( UInt& uiALPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true ); 633 634 TComDataCU* getQpMinCuLeft ( UInt& uiLPartUnitIdx , UInt uiCurrAbsIdxInCtu ); 635 TComDataCU* getQpMinCuAbove ( UInt& uiAPartUnitIdx , UInt uiCurrAbsIdxInCtu );636 Char getRefQP ( UInt uiCurrAbsIdxInCtu );635 Bool bEnforceTileRestriction=true ) const; 636 637 const TComDataCU* getPUAboveLeft ( UInt& uiALPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true ) const; 638 639 const TComDataCU* getQpMinCuLeft ( UInt& uiLPartUnitIdx, UInt uiCurrAbsIdxInCtu ) const; 640 const TComDataCU* getQpMinCuAbove ( UInt& uiAPartUnitIdx, UInt uiCurrAbsIdxInCtu ) const; 637 641 638 642 /// returns CU and part index of the PU above the top row of the current uiCurrPartUnitIdx of the CU, at a horizontal offset (to the right) of uiPartUnitOffset (in parts) 639 TComDataCU* getPUAboveRight ( UInt& uiARPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true );643 const TComDataCU* getPUAboveRight ( UInt& uiARPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true ) const; 640 644 /// returns CU and part index of the PU left of the lefthand column of the current uiCurrPartUnitIdx of the CU, at a vertical offset (below) of uiPartUnitOffset (in parts) 641 TComDataCU* getPUBelowLeft ( UInt& uiBLPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true ); 642 643 Void deriveLeftRightTopIdx ( UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ); 644 Void deriveLeftBottomIdx ( UInt uiPartIdx, UInt& ruiPartIdxLB ); 645 646 Bool hasEqualMotion ( UInt uiAbsPartIdx, TComDataCU* pcCandCU, UInt uiCandAbsPartIdx ); 645 const TComDataCU* getPUBelowLeft ( UInt& uiBLPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true ) const; 646 647 SChar getRefQP ( UInt uiCurrAbsIdxInCtu ) const; 648 649 Void deriveLeftRightTopIdx ( UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ) const; 650 Void deriveLeftBottomIdx ( UInt uiPartIdx, UInt& ruiPartIdxLB ) const; 651 647 652 #if NH_3D 648 653 Bool hasEqualMotion ( Int dirA, const TComMvField* mvFieldA, Int dirB, const TComMvField* mvFieldB ); 649 654 #endif 655 Bool hasEqualMotion ( UInt uiAbsPartIdx, const TComDataCU* pcCandCU, UInt uiCandAbsPartIdx ) const; 656 650 657 #if NH_3D_MLC 651 658 Bool getAvailableFlagA1() { return m_bAvailableFlagA1; } … … 670 677 , Int& numValidMergeCand, Int mrgCandIdx = -1 ); 671 678 #endif 679 #if NH_3D 672 680 Void getInterMergeCandidates ( UInt uiAbsPartIdx, UInt uiPUIdx, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int mrgCandIdx = -1 ); 681 #else 682 Void getInterMergeCandidates ( UInt uiAbsPartIdx, UInt uiPUIdx, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int mrgCandIdx = -1 ) const; 683 #endif 673 684 674 685 #if NH_3D_VSP 675 686 #if NH_3D_SPIVMP 676 Bool* getSPIVMPFlag () { return m_pbSPIVMPFlag; }677 Bool getSPIVMPFlag ( UInt uiIdx ) { return m_pbSPIVMPFlag[uiIdx]; }687 Bool* getSPIVMPFlag () const { return m_pbSPIVMPFlag; } 688 Bool getSPIVMPFlag ( UInt uiIdx ) const { return m_pbSPIVMPFlag[uiIdx]; } 678 689 Void setSPIVMPFlag ( UInt uiIdx, Bool n ) { m_pbSPIVMPFlag[uiIdx] = n; } 679 690 Void setSPIVMPFlagSubParts( Bool bSPIVMPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 680 691 #endif 681 692 682 Char* getVSPFlag (){ return m_piVSPFlag; }683 Char getVSPFlag ( UInt uiIdx ){ return m_piVSPFlag[uiIdx]; }693 SChar* getVSPFlag () const { return m_piVSPFlag; } 694 SChar getVSPFlag ( UInt uiIdx ) const { return m_piVSPFlag[uiIdx]; } 684 695 Void setVSPFlag ( UInt uiIdx, Int n ) { m_piVSPFlag[uiIdx] = n; } 685 Void setVSPFlagSubParts( Char iVSPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );696 Void setVSPFlagSubParts( SChar iVSPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 686 697 Void setMvFieldPUForVSP ( TComDataCU* cu, UInt partAddr, Int width, Int height, RefPicList refPicList, Int refIdx, Int &vspSize ); 687 698 #endif 688 Void deriveLeftRightTopIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ); 689 Void deriveLeftBottomIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLB ); 690 699 Void deriveLeftRightTopIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ) const; 700 Void deriveLeftBottomIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLB ) const; 691 701 // ------------------------------------------------------------------------------------------------------------------- 692 702 // member functions for modes … … 695 705 Bool isIntra ( UInt uiPartIdx ) const { return m_pePredMode[ uiPartIdx ] == MODE_INTRA; } 696 706 Bool isInter ( UInt uiPartIdx ) const { return m_pePredMode[ uiPartIdx ] == MODE_INTER; } 697 Bool isSkipped ( UInt uiPartIdx );///< returns true, if the partiton is skipped698 Bool isBipredRestriction ( UInt puIdx );707 Bool isSkipped ( UInt uiPartIdx ) const; ///< returns true, if the partiton is skipped 708 Bool isBipredRestriction ( UInt puIdx ) const; 699 709 700 710 // ------------------------------------------------------------------------------------------------------------------- … … 702 712 // ------------------------------------------------------------------------------------------------------------------- 703 713 704 UInt getIntraSizeIdx ( UInt uiAbsPartIdx );705 706 Void getAllowedChromaDir ( UInt uiAbsPartIdx, UInt* uiModeList );707 Void getIntraDirPredictor ( UInt uiAbsPartIdx, Int uiIntraDirPred[NUM_MOST_PROBABLE_MODES], const ComponentID compID, Int* piMode = NULL );714 UInt getIntraSizeIdx ( UInt uiAbsPartIdx ) const; 715 716 Void getAllowedChromaDir ( UInt uiAbsPartIdx, UInt* uiModeList ) const; 717 Void getIntraDirPredictor ( UInt uiAbsPartIdx, Int uiIntraDirPred[NUM_MOST_PROBABLE_MODES], const ComponentID compID, Int* piMode = NULL ) const; 708 718 709 719 // ------------------------------------------------------------------------------------------------------------------- … … 711 721 // ------------------------------------------------------------------------------------------------------------------- 712 722 713 UInt getCtxSplitFlag ( UInt uiAbsPartIdx, UInt uiDepth );714 UInt getCtxQtCbf ( TComTU &rTu, const ChannelType chType );715 716 UInt getCtxSkipFlag ( UInt uiAbsPartIdx );717 UInt getCtxInterDir ( UInt uiAbsPartIdx );723 UInt getCtxSplitFlag ( UInt uiAbsPartIdx, UInt uiDepth ) const; 724 UInt getCtxQtCbf ( TComTU &rTu, const ChannelType chType ) const; 725 726 UInt getCtxSkipFlag ( UInt uiAbsPartIdx ) const; 727 UInt getCtxInterDir ( UInt uiAbsPartIdx ) const; 718 728 #if NH_3D_ARP 719 729 UInt getCTXARPWFlag ( UInt uiAbsPartIdx ); -
TabularUnified trunk/source/Lib/TLibCommon/TComInterpolationFilter.cpp ¶
r1313 r1386 360 360 * \param bitDepth Bit depth 361 361 */ 362 Void TComInterpolationFilter::filterHor(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast, const ChromaFormat fmt, const Int bitDepth 363 #if NH_3D_ARP 364 , Bool filterType 365 #endif 366 ) 362 #if NH_3D_ARP 363 Void TComInterpolationFilter::filterHor(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast, const ChromaFormat fmt, const Int bitDepth, Bool filterType ) 364 #else 365 Void TComInterpolationFilter::filterHor(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast, const ChromaFormat fmt, const Int bitDepth ) 366 #endif 367 367 368 { 368 369 if ( frac == 0 ) … … 423 424 * \param bitDepth Bit depth 424 425 */ 425 Void TComInterpolationFilter::filterVer(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast, const ChromaFormat fmt, const Int bitDepth 426 #if NH_3D_ARP 427 , Bool filterType428 #endif 429 ) 426 #if NH_3D_ARP 427 Void TComInterpolationFilter::filterVer(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast, const ChromaFormat fmt, const Int bitDepth, Bool filterType ) 428 #else 429 Void TComInterpolationFilter::filterVer(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast, const ChromaFormat fmt, const Int bitDepth ) 430 #endif 430 431 { 431 432 if ( frac == 0 ) -
TabularUnified trunk/source/Lib/TLibCommon/TComInterpolationFilter.h ¶
r1313 r1386 82 82 ~TComInterpolationFilter() {} 83 83 84 Void filterHor(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast, const ChromaFormat fmt, const Int bitDepth85 84 #if NH_3D_ARP 86 , Bool filterType = false 85 Void filterHor(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast, const ChromaFormat fmt, const Int bitDepth , Bool filterType = false ); 86 #else 87 Void filterHor(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast, const ChromaFormat fmt, const Int bitDepth ); 87 88 #endif 88 ); 89 Void filterVer(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast, const ChromaFormat fmt, const Int bitDepth 89 90 90 #if NH_3D_ARP 91 , Bool filterType = false 91 Void filterVer(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast, const ChromaFormat fmt, const Int bitDepth , Bool filterType = false ); 92 #else 93 Void filterVer(const ComponentID compID, Pel *src, Int srcStride, Pel *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast, const ChromaFormat fmt, const Int bitDepth ); 92 94 #endif 93 );94 95 }; 95 96 -
TabularUnified trunk/source/Lib/TLibCommon/TComLoopFilter.cpp ¶
r1313 r1386 365 365 UInt uiY = pcCU->getCUPelY() + g_auiRasterToPelY[ g_auiZscanToRaster[ uiAbsZorderIdx ] ]; 366 366 367 TComDataCU* pcTempCU;368 367 UInt uiTempPartIdx; 369 368 … … 380 379 if ( m_stLFCUParam.bLeftEdge ) 381 380 { 382 pcTempCU = pcCU->getPULeft( uiTempPartIdx, uiAbsZorderIdx, !pcCU->getSlice()->getLFCrossSliceBoundaryFlag(), !m_bLFCrossTileBoundary);381 const TComDataCU* pcTempCU = pcCU->getPULeft( uiTempPartIdx, uiAbsZorderIdx, !pcCU->getSlice()->getLFCrossSliceBoundaryFlag(), !m_bLFCrossTileBoundary); 383 382 384 383 if ( pcTempCU != NULL ) … … 402 401 if ( m_stLFCUParam.bTopEdge ) 403 402 { 404 pcTempCU = pcCU->getPUAbove( uiTempPartIdx, uiAbsZorderIdx, !pcCU->getSlice()->getLFCrossSliceBoundaryFlag(), false, !m_bLFCrossTileBoundary);403 const TComDataCU* pcTempCU = pcCU->getPUAbove( uiTempPartIdx, uiAbsZorderIdx, !pcCU->getSlice()->getLFCrossSliceBoundaryFlag(), false, !m_bLFCrossTileBoundary); 405 404 406 405 if ( pcTempCU != NULL ) … … 425 424 426 425 UInt uiPartP; 427 TComDataCU* pcCUP;426 const TComDataCU* pcCUP; 428 427 UInt uiBs = 0; 429 428 … … 459 458 { 460 459 Int iRefIdx; 461 TComPic *piRefP0, *piRefP1, *piRefQ0, *piRefQ1;462 460 iRefIdx = pcCUP->getCUMvField(REF_PIC_LIST_0)->getRefIdx(uiPartP); 463 piRefP0 = (iRefIdx < 0) ? NULL : pcCUP->getSlice()->getRefPic(REF_PIC_LIST_0, iRefIdx);461 const TComPic *piRefP0 = (iRefIdx < 0) ? NULL : pcCUP->getSlice()->getRefPic(REF_PIC_LIST_0, iRefIdx); 464 462 iRefIdx = pcCUP->getCUMvField(REF_PIC_LIST_1)->getRefIdx(uiPartP); 465 piRefP1 = (iRefIdx < 0) ? NULL : pcCUP->getSlice()->getRefPic(REF_PIC_LIST_1, iRefIdx);463 const TComPic *piRefP1 = (iRefIdx < 0) ? NULL : pcCUP->getSlice()->getRefPic(REF_PIC_LIST_1, iRefIdx); 466 464 iRefIdx = pcCUQ->getCUMvField(REF_PIC_LIST_0)->getRefIdx(uiPartQ); 467 piRefQ0 = (iRefIdx < 0) ? NULL : pcSlice->getRefPic(REF_PIC_LIST_0, iRefIdx);465 const TComPic *piRefQ0 = (iRefIdx < 0) ? NULL : pcSlice->getRefPic(REF_PIC_LIST_0, iRefIdx); 468 466 iRefIdx = pcCUQ->getCUMvField(REF_PIC_LIST_1)->getRefIdx(uiPartQ); 469 piRefQ1 = (iRefIdx < 0) ? NULL : pcSlice->getRefPic(REF_PIC_LIST_1, iRefIdx);467 const TComPic *piRefQ1 = (iRefIdx < 0) ? NULL : pcSlice->getRefPic(REF_PIC_LIST_1, iRefIdx); 470 468 471 469 TComMv pcMvP0 = pcCUP->getCUMvField(REF_PIC_LIST_0)->getMv(uiPartP); … … 530 528 { 531 529 Int iRefIdx; 532 TComPic *piRefP0, *piRefQ0;533 530 iRefIdx = pcCUP->getCUMvField(REF_PIC_LIST_0)->getRefIdx(uiPartP); 534 piRefP0 = (iRefIdx < 0) ? NULL : pcCUP->getSlice()->getRefPic(REF_PIC_LIST_0, iRefIdx);531 const TComPic *piRefP0 = (iRefIdx < 0) ? NULL : pcCUP->getSlice()->getRefPic(REF_PIC_LIST_0, iRefIdx); 535 532 iRefIdx = pcCUQ->getCUMvField(REF_PIC_LIST_0)->getRefIdx(uiPartQ); 536 piRefQ0 = (iRefIdx < 0) ? NULL : pcSlice->getRefPic(REF_PIC_LIST_0, iRefIdx);533 const TComPic *piRefQ0 = (iRefIdx < 0) ? NULL : pcSlice->getRefPic(REF_PIC_LIST_0, iRefIdx); 537 534 TComMv pcMvP0 = pcCUP->getCUMvField(REF_PIC_LIST_0)->getMv(uiPartP); 538 535 TComMv pcMvQ0 = pcCUQ->getCUMvField(REF_PIC_LIST_0)->getMv(uiPartQ); … … 583 580 UInt uiPartPIdx = 0; 584 581 UInt uiPartQIdx = 0; 585 TComDataCU* pcCUP = pcCU;582 const TComDataCU* pcCUP = pcCU; 586 583 TComDataCU* pcCUQ = pcCU; 587 584 Int betaOffsetDiv2 = pcCUQ->getSlice()->getDeblockingFilterBetaOffsetDiv2(); … … 758 755 UInt uiPartQIdx = uiBsAbsIdx; 759 756 // Derive neighboring PU index 760 TComDataCU* pcCUP;757 const TComDataCU* pcCUP; 761 758 UInt uiPartPIdx; 762 759 -
TabularUnified trunk/source/Lib/TLibCommon/TComMotionInfo.cpp ¶
r1321 r1386 66 66 m_pcMv = new TComMv[ uiNumPartition ]; 67 67 m_pcMvd = new TComMv[ uiNumPartition ]; 68 m_piRefIdx = new Char[ uiNumPartition ];68 m_piRefIdx = new SChar [ uiNumPartition ]; 69 69 70 70 m_uiNumPartition = uiNumPartition; … … 321 321 Void TComCUMvField::setAllRefIdx ( Int iRefIdx, PartSize eCUMode, Int iPartAddr, UInt uiDepth, Int iPartIdx ) 322 322 { 323 setAll(m_piRefIdx, static_cast< Char>(iRefIdx), eCUMode, iPartAddr, uiDepth, iPartIdx);323 setAll(m_piRefIdx, static_cast<SChar>(iRefIdx), eCUMode, iPartAddr, uiDepth, iPartIdx); 324 324 } 325 325 … … 358 358 * \param scale Factor by which to subsample motion information 359 359 */ 360 Void TComCUMvField::compress( Char* pePredMode, Int scale)360 Void TComCUMvField::compress(SChar* pePredMode, Int scale) 361 361 { 362 362 Int N = scale * scale; … … 381 381 382 382 #if NH_MV 383 Void TComCUMvField::print( Char* pePredMode)383 Void TComCUMvField::print(SChar* pePredMode) 384 384 { 385 385 for ( Int uiPartIdx = 0; uiPartIdx < m_uiNumPartition; uiPartIdx += 1 ) -
TabularUnified trunk/source/Lib/TLibCommon/TComMotionInfo.h ¶
r1321 r1386 57 57 typedef struct _AMVPInfo 58 58 { 59 TComMv m_acMvCand[ AMVP_MAX_NUM_CANDS _MEM]; ///< array of motion vector predictor candidates59 TComMv m_acMvCand[ AMVP_MAX_NUM_CANDS ]; ///< array of motion vector predictor candidates 60 60 Int iN; ///< number of motion vector predictor candidates 61 61 } AMVPInfo; … … 122 122 TComMv* m_pcMv; 123 123 TComMv* m_pcMvd; 124 Char*m_piRefIdx;124 SChar* m_piRefIdx; 125 125 UInt m_uiNumPartition; 126 126 AMVPInfo m_cAMVPInfo; … … 188 188 } 189 189 190 Void compress( Char* pePredMode, Int scale);190 Void compress(SChar* pePredMode, Int scale); 191 191 #if NH_MV 192 Void print ( Char* pePredMode);192 Void print (SChar* pePredMode); 193 193 #endif 194 194 }; -
TabularUnified trunk/source/Lib/TLibCommon/TComMv.h ¶
r1313 r1386 100 100 Void setHor ( Short i ) { m_iHor = i; } 101 101 Void setVer ( Short i ) { m_iVer = i; } 102 Void setZero () { m_iHor = m_iVer = 0; 103 #if NH_3D_NBDV 104 m_bIDV = false; m_iIDVHor = m_iIDVVer = 0; 105 m_iIDVVId = 0; 106 #endif 107 } 108 #if NH_3D_NBDV 102 #if NH_3D_NBDV 103 Void setZero () { m_iHor = m_iVer = 0; m_bIDV = false; m_iIDVHor = m_iIDVVer = 0; m_iIDVVId = 0; } 109 104 Void setIDVHor (Short i) {m_iIDVHor = i;} 110 105 Void setIDVVer (Short i) {m_iIDVVer = i;} 111 106 Void setIDVFlag (Bool b ) {m_bIDV = b;} 112 107 Void setIDVVId (Short i) {m_iIDVVId = i;} 108 #else 109 Void setZero () { m_iHor = m_iVer = 0; } 113 110 #endif 114 111 // ------------------------------------------------------------------------------------------------------------------ … … 145 142 } 146 143 144 #if NH_3D 145 #if ME_ENABLE_ROUNDING_OF_MVS 146 147 147 const TComMv& operator>>= (const Int i) 148 148 { … … 151 151 return *this; 152 152 } 153 #endif 154 #endif 155 156 #if !ME_ENABLE_ROUNDING_OF_MVS 157 const TComMv& operator>>= (const Int i) 158 { 159 m_iHor >>= i; 160 m_iVer >>= i; 161 return *this; 162 } 163 #endif 164 165 #if ME_ENABLE_ROUNDING_OF_MVS 166 //! shift right with rounding 167 Void divideByPowerOf2 (const Int i) 168 { 169 Int offset = (i == 0) ? 0 : 1 << (i - 1); 170 m_iHor += offset; 171 m_iVer += offset; 172 173 m_iHor >>= i; 174 m_iVer >>= i; 175 } 176 #endif 153 177 154 178 const TComMv& operator<<= (const Int i) -
TabularUnified trunk/source/Lib/TLibCommon/TComPattern.cpp ¶
r1313 r1386 66 66 67 67 /// constrained intra prediction 68 Bool isAboveLeftAvailable ( TComDataCU* pcCU, UInt uiPartIdxLT );69 Int isAboveAvailable ( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool* bValidFlags );70 Int isLeftAvailable ( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool* bValidFlags );71 Int isAboveRightAvailable ( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool* bValidFlags );72 Int isBelowLeftAvailable ( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool* bValidFlags );68 Bool isAboveLeftAvailable ( const TComDataCU* pcCU, UInt uiPartIdxLT ); 69 Int isAboveAvailable ( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool* bValidFlags ); 70 Int isLeftAvailable ( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool* bValidFlags ); 71 Int isAboveRightAvailable ( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool* bValidFlags ); 72 Int isBelowLeftAvailable ( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool* bValidFlags ); 73 73 74 74 … … 566 566 } 567 567 568 Bool isAboveLeftAvailable( TComDataCU* pcCU, UInt uiPartIdxLT )568 Bool isAboveLeftAvailable( const TComDataCU* pcCU, UInt uiPartIdxLT ) 569 569 { 570 570 Bool bAboveLeftFlag; 571 571 UInt uiPartAboveLeft; 572 TComDataCU* pcCUAboveLeft = pcCU->getPUAboveLeft( uiPartAboveLeft, uiPartIdxLT );572 const TComDataCU* pcCUAboveLeft = pcCU->getPUAboveLeft( uiPartAboveLeft, uiPartIdxLT ); 573 573 if(pcCU->getSlice()->getPPS()->getConstrainedIntraPred()) 574 574 { … … 582 582 } 583 583 584 Int isAboveAvailable( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool *bValidFlags )584 Int isAboveAvailable( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool *bValidFlags ) 585 585 { 586 586 const UInt uiRasterPartBegin = g_auiZscanToRaster[uiPartIdxLT]; … … 593 593 { 594 594 UInt uiPartAbove; 595 TComDataCU* pcCUAbove = pcCU->getPUAbove( uiPartAbove, g_auiRasterToZscan[uiRasterPart] );595 const TComDataCU* pcCUAbove = pcCU->getPUAbove( uiPartAbove, g_auiRasterToZscan[uiRasterPart] ); 596 596 if(pcCU->getSlice()->getPPS()->getConstrainedIntraPred()) 597 597 { … … 623 623 } 624 624 625 Int isLeftAvailable( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool *bValidFlags )625 Int isLeftAvailable( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool *bValidFlags ) 626 626 { 627 627 const UInt uiRasterPartBegin = g_auiZscanToRaster[uiPartIdxLT]; … … 634 634 { 635 635 UInt uiPartLeft; 636 TComDataCU* pcCULeft = pcCU->getPULeft( uiPartLeft, g_auiRasterToZscan[uiRasterPart] );636 const TComDataCU* pcCULeft = pcCU->getPULeft( uiPartLeft, g_auiRasterToZscan[uiRasterPart] ); 637 637 if(pcCU->getSlice()->getPPS()->getConstrainedIntraPred()) 638 638 { … … 665 665 } 666 666 667 Int isAboveRightAvailable( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool *bValidFlags )667 Int isAboveRightAvailable( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxRT, Bool *bValidFlags ) 668 668 { 669 669 const UInt uiNumUnitsInPU = g_auiZscanToRaster[uiPartIdxRT] - g_auiZscanToRaster[uiPartIdxLT] + 1; … … 674 674 { 675 675 UInt uiPartAboveRight; 676 TComDataCU* pcCUAboveRight = pcCU->getPUAboveRight( uiPartAboveRight, uiPartIdxRT, uiOffset );676 const TComDataCU* pcCUAboveRight = pcCU->getPUAboveRight( uiPartAboveRight, uiPartIdxRT, uiOffset ); 677 677 if(pcCU->getSlice()->getPPS()->getConstrainedIntraPred()) 678 678 { … … 705 705 } 706 706 707 Int isBelowLeftAvailable( TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool *bValidFlags )707 Int isBelowLeftAvailable( const TComDataCU* pcCU, UInt uiPartIdxLT, UInt uiPartIdxLB, Bool *bValidFlags ) 708 708 { 709 709 const UInt uiNumUnitsInPU = (g_auiZscanToRaster[uiPartIdxLB] - g_auiZscanToRaster[uiPartIdxLT]) / pcCU->getPic()->getNumPartInCtuWidth() + 1; … … 714 714 { 715 715 UInt uiPartBelowLeft; 716 TComDataCU* pcCUBelowLeft = pcCU->getPUBelowLeft( uiPartBelowLeft, uiPartIdxLB, uiOffset );716 const TComDataCU* pcCUBelowLeft = pcCU->getPUBelowLeft( uiPartBelowLeft, uiPartIdxLB, uiOffset ); 717 717 if(pcCU->getSlice()->getPPS()->getConstrainedIntraPred()) 718 718 { -
TabularUnified trunk/source/Lib/TLibCommon/TComPattern.h ¶
r1313 r1386 69 69 return m_piROIOrigin; 70 70 } 71 __inline const Pel* getROIOrigin() const 72 { 73 return m_piROIOrigin; 74 } 71 75 72 76 /// set parameters from Pel buffer for accessing neighbouring pixels … … 93 97 // ROI & pattern information, (ROI = &pattern[AboveOffset][LeftOffset]) 94 98 Pel* getROIY() { return m_cPatternY.getROIOrigin(); } 95 Int getROIYWidth() { return m_cPatternY.m_iROIWidth; } 96 Int getROIYHeight() { return m_cPatternY.m_iROIHeight; } 97 Int getPatternLStride() { return m_cPatternY.m_iPatternStride; } 98 Int getBitDepthY() { return m_cPatternY.m_bitDepth; } 99 const Pel* getROIY() const { return m_cPatternY.getROIOrigin(); } 100 Int getROIYWidth() const { return m_cPatternY.m_iROIWidth; } 101 Int getROIYHeight() const { return m_cPatternY.m_iROIHeight; } 102 Int getPatternLStride() const { return m_cPatternY.m_iPatternStride; } 103 Int getBitDepthY() const { return m_cPatternY.m_bitDepth; } 99 104 100 105 #if NH_3D_IC 101 Bool getICFlag() { return m_bICFlag; }106 Bool getICFlag() const { return m_bICFlag; } 102 107 Void setICFlag( Bool bICFlag ) { m_bICFlag = bICFlag; } 103 108 #endif 104 109 #if NH_3D_SDC_INTER 105 Bool getSDCMRSADFlag() { return m_bSDCMRSADFlag; }110 Bool getSDCMRSADFlag() const { return m_bSDCMRSADFlag; } 106 111 Void setSDCMRSADFlag( Bool bSDCMRSADFlag ) { m_bSDCMRSADFlag = bSDCMRSADFlag; } 107 112 #endif -
TabularUnified trunk/source/Lib/TLibCommon/TComPic.cpp ¶
r1321 r1386 60 60 , m_viewId (0) 61 61 , m_bPicOutputFlag (false) 62 #if NH_3D 62 #if NH_3D_VSO 63 63 , m_viewIndex (0) 64 64 , m_isDepth (false) … … 449 449 m_abTIVRINCurrRL[curCandPic][iColRefDir][iColRefIdx] = false; 450 450 Int iColViewIdx = pcCandColSlice->getViewIndex(); 451 #if H_3D_FIX_ARP_CHECK_NOT_IN_DPB452 451 // The picture pcCandColSlice->getRefPic((RefPicList)iColRefDir, iColRefIdx) might not be in DPB anymore 453 452 // So don't access it directly. 454 453 Int iColRefViewIdx = pcCandColSlice->getVPS()->getViewOrderIdx( pcCandColSlice->getRefLayerId( (RefPicList)iColRefDir, iColRefIdx ) ); 455 #else456 Int iColRefViewIdx = pcCandColSlice->getRefPic((RefPicList)iColRefDir, iColRefIdx)->getViewIndex();457 #endif458 454 if(iColViewIdx == iColRefViewIdx) 459 455 { … … 993 989 } 994 990 995 #if NH_3D 996 TComPicYuv* TComPicLists::getPicYuv( Int viewIndex, Bool depthFlag, Int poc, Bool recon )991 #if NH_3D_VSO 992 TComPicYuv* TComPicLists::getPicYuv( Int viewIndex, Bool depthFlag, Int auxId, Int poc, Bool recon ) 997 993 { 998 Int layerIdInNuh = m_vps->getLayerIdInNuh( viewIndex, depthFlag );994 Int layerIdInNuh = m_vps->getLayerIdInNuh( viewIndex, depthFlag, auxId ); 999 995 return getPicYuv( layerIdInNuh, poc, recon ); 1000 996 } 1001 997 1002 TComPic* TComPicLists::getPic( Int viewIndex, Bool depthFlag, Int poc )1003 { 1004 return getPic ( m_vps->getLayerIdInNuh( viewIndex, depthFlag ), poc );998 TComPic* TComPicLists::getPic( Int viewIndex, Bool depthFlag, Int auxId, Int poc ) 999 { 1000 return getPic ( m_vps->getLayerIdInNuh( viewIndex, depthFlag, auxId ), poc ); 1005 1001 } 1006 1002 -
TabularUnified trunk/source/Lib/TLibCommon/TComPic.h ¶
r1321 r1386 154 154 TComDecodedRps m_decodedRps; 155 155 #endif 156 #if NH_3D 156 #if NH_3D_VSO 157 157 Int m_viewIndex; 158 158 Bool m_isDepth; … … 189 189 190 190 TComPicSym* getPicSym() { return &m_picSym; } 191 const TComPicSym* getPicSym() const { return &m_picSym; } 191 192 TComSlice* getSlice(Int i) { return m_picSym.getSlice(i); } 192 193 Int getPOC() const { return m_picSym.getSlice(m_uiCurrSliceIdx)->getPOC(); } … … 247 248 #if NH_MV 248 249 Void setLayerId ( Int layerId ) { m_layerId = layerId; } 249 Int getLayerId () 250 Int getLayerId () const { return m_layerId; } 250 251 251 252 Void setViewId ( Int viewId ) { m_viewId = viewId; } 252 Int getViewId () 253 Int getViewId () const { return m_viewId; } 253 254 254 255 Void setPicOutputFlag(Bool b) { m_bPicOutputFlag = b; } 255 Bool getPicOutputFlag() 256 Bool getPicOutputFlag() const { return m_bPicOutputFlag ; } 256 257 257 258 Bool getPocResetPeriodId(); … … 310 311 Void print( Int outputLevel ); 311 312 312 #if NH_3D 313 #if NH_3D_VSO 313 314 Void setViewIndex ( Int viewIndex ) { m_viewIndex = viewIndex; } 314 Int getViewIndex () 315 Int getViewIndex () const { return m_viewIndex; } 315 316 316 317 Void setIsDepth ( Bool isDepth ) { m_isDepth = isDepth; } … … 403 404 TComList<TComSubDpb*> m_subDpbs; 404 405 Bool m_printPicOutput; 405 #if NH_3D 406 #if NH_3D_VSO 406 407 const TComVPS* m_vps; 407 408 #endif … … 447 448 Void print(); 448 449 449 #if NH_3D 450 #if NH_3D_VSO 450 451 Void setVPS ( const TComVPS* vps ) { m_vps = vps; }; 451 TComPic* getPic ( Int viewIndex, Bool depthFlag, Int poc );452 TComPicYuv* getPicYuv ( Int viewIndex, Bool depthFlag, Int poc, Bool recon );452 TComPic* getPic ( Int viewIndex, Bool depthFlag, Int auxId, Int poc ); 453 TComPicYuv* getPicYuv ( Int viewIndex, Bool depthFlag, Int auxId, Int poc, Bool recon ); 453 454 #endif 454 455 -
TabularUnified trunk/source/Lib/TLibCommon/TComPicSym.cpp ¶
r1313 r1386 140 140 clearSliceBuffer(); 141 141 142 if (m_pictureCtuArray) 143 { 142 144 for (Int i = 0; i < m_numCtusInFrame; i++) 143 145 { 146 if (m_pictureCtuArray[i]) 147 { 144 148 m_pictureCtuArray[i]->destroy(); 145 149 delete m_pictureCtuArray[i]; 146 150 m_pictureCtuArray[i] = NULL; 147 151 } 152 } 148 153 delete [] m_pictureCtuArray; 149 154 m_pictureCtuArray = NULL; 155 } 150 156 151 157 delete [] m_ctuTsToRsAddrMap; -
TabularUnified trunk/source/Lib/TLibCommon/TComPicYuv.cpp ¶
r1313 r1386 79 79 80 80 81 Void TComPicYuv::create ( const Int iPicWidth, ///< picture width 82 const Int iPicHeight, ///< picture height 81 Void TComPicYuv::createWithoutCUInfo ( const Int picWidth, ///< picture width 82 const Int picHeight, ///< picture height 83 const ChromaFormat chromaFormatIDC, ///< chroma format 84 const Bool bUseMargin, ///< if true, then a margin of uiMaxCUWidth+16 and uiMaxCUHeight+16 is created around the image. 85 const UInt maxCUWidth, ///< used for margin only 86 const UInt maxCUHeight) ///< used for margin only 87 88 { 89 m_picWidth = picWidth; 90 m_picHeight = picHeight; 91 92 #if NH_3D_IV_MERGE 93 m_iCuWidth = maxCUWidth; 94 m_iCuHeight = maxCUHeight; 95 96 m_iNumCuInWidth = picWidth / m_iCuWidth; 97 m_iNumCuInWidth += ( picHeight % m_iCuWidth ) ? 1 : 0; 98 // Check if m_iBaseUnitWidth and m_iBaseUnitHeight need to be derived here 99 #endif 100 101 m_chromaFormatIDC = chromaFormatIDC; 102 m_marginX = (bUseMargin?maxCUWidth:0) + 16; // for 16-byte alignment 103 m_marginY = (bUseMargin?maxCUHeight:0) + 16; // margin for 8-tap filter and infinite padding 104 m_bIsBorderExtended = false; 105 106 // assign the picture arrays and set up the ptr to the top left of the original picture 107 for(UInt comp=0; comp<getNumberValidComponents(); comp++) 108 { 109 const ComponentID ch=ComponentID(comp); 110 m_apiPicBuf[comp] = (Pel*)xMalloc( Pel, getStride(ch) * getTotalHeight(ch)); 111 m_piPicOrg[comp] = m_apiPicBuf[comp] + (m_marginY >> getComponentScaleY(ch)) * getStride(ch) + (m_marginX >> getComponentScaleX(ch)); 112 } 113 // initialize pointers for unused components to NULL 114 for(UInt comp=getNumberValidComponents();comp<MAX_NUM_COMPONENT; comp++) 115 { 116 m_apiPicBuf[comp] = NULL; 117 m_piPicOrg[comp] = NULL; 118 } 119 120 for(Int chan=0; chan<MAX_NUM_CHANNEL_TYPE; chan++) 121 { 122 m_ctuOffsetInBuffer[chan] = NULL; 123 m_subCuOffsetInBuffer[chan] = NULL; 124 } 125 } 126 127 128 129 Void TComPicYuv::create ( const Int picWidth, ///< picture width 130 const Int picHeight, ///< picture height 83 131 const ChromaFormat chromaFormatIDC, ///< chroma format 84 const UInt uiMaxCUWidth, ///< used for generating offsets to CUs. Can use iPicWidth if no offsets are required85 const UInt uiMaxCUHeight, ///< used for generating offsets to CUs. Can use iPicHeight if no offsets are required86 const UInt uiMaxCUDepth, ///< used for generating offsets to CUs. Can use 0 if no offsets are required132 const UInt maxCUWidth, ///< used for generating offsets to CUs. 133 const UInt maxCUHeight, ///< used for generating offsets to CUs. 134 const UInt maxCUDepth, ///< used for generating offsets to CUs. 87 135 const Bool bUseMargin) ///< if true, then a margin of uiMaxCUWidth+16 and uiMaxCUHeight+16 is created around the image. 88 136 89 137 { 90 m_iPicWidth = iPicWidth; 91 m_iPicHeight = iPicHeight; 138 createWithoutCUInfo(picWidth, picHeight, chromaFormatIDC, bUseMargin, maxCUWidth, maxCUHeight); 92 139 93 140 #if NH_3D_IV_MERGE 94 m_iCuWidth = uiMaxCUWidth; 95 m_iCuHeight = uiMaxCUHeight; 96 97 m_iNumCuInWidth = m_iPicWidth / m_iCuWidth; 98 m_iNumCuInWidth += ( m_iPicWidth % m_iCuWidth ) ? 1 : 0; 99 100 m_iBaseUnitWidth = uiMaxCUWidth >> uiMaxCUDepth; 101 m_iBaseUnitHeight = uiMaxCUHeight >> uiMaxCUDepth; 102 #endif 103 104 m_chromaFormatIDC = chromaFormatIDC; 105 m_iMarginX = (bUseMargin?uiMaxCUWidth:0) + 16; // for 16-byte alignment 106 m_iMarginY = (bUseMargin?uiMaxCUHeight:0) + 16; // margin for 8-tap filter and infinite padding 107 m_bIsBorderExtended = false; 108 109 // assign the picture arrays and set up the ptr to the top left of the original picture 110 { 111 Int chan=0; 112 for(; chan<getNumberValidComponents(); chan++) 113 { 114 const ComponentID ch=ComponentID(chan); 115 m_apiPicBuf[chan] = (Pel*)xMalloc( Pel, getStride(ch) * getTotalHeight(ch)); 116 m_piPicOrg[chan] = m_apiPicBuf[chan] + (m_iMarginY >> getComponentScaleY(ch)) * getStride(ch) + (m_iMarginX >> getComponentScaleX(ch)); 117 } 118 for(;chan<MAX_NUM_COMPONENT; chan++) 119 { 120 m_apiPicBuf[chan] = NULL; 121 m_piPicOrg[chan] = NULL; 122 } 123 } 124 125 126 const Int numCuInWidth = m_iPicWidth / uiMaxCUWidth + (m_iPicWidth % uiMaxCUWidth != 0); 127 const Int numCuInHeight = m_iPicHeight / uiMaxCUHeight + (m_iPicHeight % uiMaxCUHeight != 0); 128 for(Int chan=0; chan<2; chan++) 129 { 130 const ComponentID ch=ComponentID(chan); 131 const Int ctuHeight=uiMaxCUHeight>>getComponentScaleY(ch); 132 const Int ctuWidth=uiMaxCUWidth>>getComponentScaleX(ch); 141 m_iBaseUnitWidth = maxCUWidth >> maxCUDepth; 142 m_iBaseUnitHeight = maxCUHeight >> maxCUDepth; 143 #endif 144 145 146 const Int numCuInWidth = m_picWidth / maxCUWidth + (m_picWidth % maxCUWidth != 0); 147 const Int numCuInHeight = m_picHeight / maxCUHeight + (m_picHeight % maxCUHeight != 0); 148 for(Int chan=0; chan<MAX_NUM_CHANNEL_TYPE; chan++) 149 { 150 const ChannelType ch= ChannelType(chan); 151 const Int ctuHeight = maxCUHeight>>getChannelTypeScaleY(ch); 152 const Int ctuWidth = maxCUWidth>>getChannelTypeScaleX(ch); 133 153 const Int stride = getStride(ch); 134 154 … … 143 163 } 144 164 145 m_subCuOffsetInBuffer[chan] = new Int[(size_t)1 << (2 * uiMaxCUDepth)];146 147 const Int numSubBlockPartitions=(1<< uiMaxCUDepth);148 const Int minSubBlockHeight =(ctuHeight >> uiMaxCUDepth);149 const Int minSubBlockWidth =(ctuWidth >> uiMaxCUDepth);165 m_subCuOffsetInBuffer[chan] = new Int[(size_t)1 << (2 * maxCUDepth)]; 166 167 const Int numSubBlockPartitions=(1<<maxCUDepth); 168 const Int minSubBlockHeight =(ctuHeight >> maxCUDepth); 169 const Int minSubBlockWidth =(ctuWidth >> maxCUDepth); 150 170 151 171 for (Int buRow = 0; buRow < numSubBlockPartitions; buRow++) … … 153 173 for (Int buCol = 0; buCol < numSubBlockPartitions; buCol++) 154 174 { 155 m_subCuOffsetInBuffer[chan][(buRow << uiMaxCUDepth) + buCol] = stride * buRow * minSubBlockHeight + buCol * minSubBlockWidth; 156 } 157 } 158 } 159 return; 175 m_subCuOffsetInBuffer[chan][(buRow << maxCUDepth) + buCol] = stride * buRow * minSubBlockHeight + buCol * minSubBlockWidth; 176 } 177 } 178 } 160 179 } 161 180 … … 164 183 Void TComPicYuv::destroy() 165 184 { 166 for(Int c han=0; chan<MAX_NUM_COMPONENT; chan++)167 { 168 m_piPicOrg[c han] = NULL;169 170 if( m_apiPicBuf[c han] )171 { 172 xFree( m_apiPicBuf[c han] );173 m_apiPicBuf[c han] = NULL;185 for(Int comp=0; comp<MAX_NUM_COMPONENT; comp++) 186 { 187 m_piPicOrg[comp] = NULL; 188 189 if( m_apiPicBuf[comp] ) 190 { 191 xFree( m_apiPicBuf[comp] ); 192 m_apiPicBuf[comp] = NULL; 174 193 } 175 194 } … … 194 213 Void TComPicYuv::copyToPic (TComPicYuv* pcPicYuvDst) const 195 214 { 196 assert( m_iPicWidth == pcPicYuvDst->getWidth(COMPONENT_Y) );197 assert( m_iPicHeight == pcPicYuvDst->getHeight(COMPONENT_Y) );198 215 assert( m_chromaFormatIDC == pcPicYuvDst->getChromaFormat() ); 199 216 200 for(Int chan=0; chan<getNumberValidComponents(); chan++) 201 { 202 const ComponentID ch=ComponentID(chan); 203 ::memcpy ( pcPicYuvDst->getBuf(ch), m_apiPicBuf[ch], sizeof (Pel) * getStride(ch) * getTotalHeight(ch)); 204 } 205 return; 217 for(Int comp=0; comp<getNumberValidComponents(); comp++) 218 { 219 const ComponentID compId=ComponentID(comp); 220 const Int width = getWidth(compId); 221 const Int height = getHeight(compId); 222 const Int strideSrc = getStride(compId); 223 assert(pcPicYuvDst->getWidth(compId) == width); 224 assert(pcPicYuvDst->getHeight(compId) == height); 225 if (strideSrc==pcPicYuvDst->getStride(compId)) 226 { 227 ::memcpy ( pcPicYuvDst->getBuf(compId), getBuf(compId), sizeof(Pel)*strideSrc*getTotalHeight(compId)); 228 } 229 else 230 { 231 const Pel *pSrc = getAddr(compId); 232 Pel *pDest = pcPicYuvDst->getAddr(compId); 233 const UInt strideDest = pcPicYuvDst->getStride(compId); 234 235 for(Int y=0; y<height; y++, pSrc+=strideSrc, pDest+=strideDest) 236 { 237 ::memcpy(pDest, pSrc, width*sizeof(Pel)); 238 } 239 } 240 } 206 241 } 207 242 … … 214 249 } 215 250 216 for(Int c han=0; chan<getNumberValidComponents(); chan++)217 { 218 const ComponentID c h=ComponentID(chan);219 Pel *piTxt=getAddr(c h); // piTxt = point to (0,0) of image within bigger picture.220 const Int iStride=getStride(ch);221 const Int iWidth=getWidth(ch);222 const Int iHeight=getHeight(ch);223 const Int iMarginX=getMarginX(ch);224 const Int iMarginY=getMarginY(ch);251 for(Int comp=0; comp<getNumberValidComponents(); comp++) 252 { 253 const ComponentID compId=ComponentID(comp); 254 Pel *piTxt=getAddr(compId); // piTxt = point to (0,0) of image within bigger picture. 255 const Int stride=getStride(compId); 256 const Int width=getWidth(compId); 257 const Int height=getHeight(compId); 258 const Int marginX=getMarginX(compId); 259 const Int marginY=getMarginY(compId); 225 260 226 261 Pel* pi = piTxt; 227 262 // do left and right margins 228 for (Int y = 0; y < iHeight; y++)229 { 230 for (Int x = 0; x < iMarginX; x++ )231 { 232 pi[ - iMarginX + x ] = pi[0];233 pi[ iWidth + x ] = pi[iWidth-1];234 } 235 pi += iStride;263 for (Int y = 0; y < height; y++) 264 { 265 for (Int x = 0; x < marginX; x++ ) 266 { 267 pi[ -marginX + x ] = pi[0]; 268 pi[ width + x ] = pi[width-1]; 269 } 270 pi += stride; 236 271 } 237 272 238 273 // pi is now the (0,height) (bottom left of image within bigger picture 239 pi -= ( iStride + iMarginX);274 pi -= (stride + marginX); 240 275 // pi is now the (-marginX, height-1) 241 for (Int y = 0; y < iMarginY; y++ )242 { 243 ::memcpy( pi + (y+1)* iStride, pi, sizeof(Pel)*(iWidth + (iMarginX<<1)) );276 for (Int y = 0; y < marginY; y++ ) 277 { 278 ::memcpy( pi + (y+1)*stride, pi, sizeof(Pel)*(width + (marginX<<1)) ); 244 279 } 245 280 246 281 // pi is still (-marginX, height-1) 247 pi -= (( iHeight-1) * iStride);282 pi -= ((height-1) * stride); 248 283 // pi is now (-marginX, 0) 249 for (Int y = 0; y < iMarginY; y++ )250 { 251 ::memcpy( pi - (y+1)* iStride, pi, sizeof(Pel)*(iWidth + (iMarginX<<1)) );284 for (Int y = 0; y < marginY; y++ ) 285 { 286 ::memcpy( pi - (y+1)*stride, pi, sizeof(Pel)*(width + (marginX<<1)) ); 252 287 } 253 288 } … … 259 294 260 295 // NOTE: This function is never called, but may be useful for developers. 261 Void TComPicYuv::dump (const Char* pFileName, const BitDepths &bitDepths, Bool bAdd) const262 { 263 FILE * pFile;264 if (!bAdd) 265 {266 pFile = fopen (pFileName, "wb");267 }268 else269 { 270 pFile = fopen (pFileName, "ab");271 }272 273 274 for(Int c han = 0; chan < getNumberValidComponents(); chan++)275 { 276 const ComponentID c h = ComponentID(chan);277 const Int shift = bitDepths.recon[toChannelType(ch)] - 8;278 const Int offset = (shift>0)?(1<<(shift-1)):0;279 const Pel *pi = getAddr(ch);280 const Int stride = getStride(ch);281 const Int height = getHeight(ch); 282 const Int width = getWidth(ch);283 296 Void TComPicYuv::dump (const std::string &fileName, const BitDepths &bitDepths, const Bool bAppend, const Bool bForceTo8Bit) const 297 { 298 FILE *pFile = fopen (fileName.c_str(), bAppend?"ab":"wb"); 299 300 Bool is16bit=false; 301 for(Int comp = 0; comp < getNumberValidComponents() && !bForceTo8Bit; comp++) 302 { 303 if (bitDepths.recon[toChannelType(ComponentID(comp))]>8) 304 { 305 is16bit=true; 306 } 307 } 308 309 for(Int comp = 0; comp < getNumberValidComponents(); comp++) 310 { 311 const ComponentID compId = ComponentID(comp); 312 const Pel *pi = getAddr(compId); 313 const Int stride = getStride(compId); 314 const Int height = getHeight(compId); 315 const Int width = getWidth(compId); 316 317 if (is16bit) 318 { 284 319 for (Int y = 0; y < height; y++ ) 285 320 { 286 321 for (Int x = 0; x < width; x++ ) 287 322 { 288 UChar uc = (UChar)Clip3<Pel>(0, 255, (pi[x]+offset)>>shift);323 UChar uc = (UChar)((pi[x]>>0) & 0xff); 289 324 fwrite( &uc, sizeof(UChar), 1, pFile ); 325 uc = (UChar)((pi[x]>>8) & 0xff); 326 fwrite( &uc, sizeof(UChar), 1, pFile ); 290 327 } 291 328 pi += stride; 329 } 330 } 331 else 332 { 333 const Int shift = bitDepths.recon[toChannelType(compId)] - 8; 334 const Int offset = (shift>0)?(1<<(shift-1)):0; 335 for (Int y = 0; y < height; y++ ) 336 { 337 for (Int x = 0; x < width; x++ ) 338 { 339 UChar uc = (UChar)Clip3<Pel>(0, 255, (pi[x]+offset)>>shift); 340 fwrite( &uc, sizeof(UChar), 1, pFile ); 341 } 342 pi += stride; 343 } 292 344 } 293 345 } -
TabularUnified trunk/source/Lib/TLibCommon/TComPicYuv.h ¶
r1321 r1386 69 69 // ------------------------------------------------------------------------------------------------ 70 70 71 Int m_ iPicWidth;///< Width of picture in pixels72 Int m_ iPicHeight;///< Height of picture in pixels71 Int m_picWidth; ///< Width of picture in pixels 72 Int m_picHeight; ///< Height of picture in pixels 73 73 ChromaFormat m_chromaFormatIDC; ///< Chroma Format 74 74 … … 76 76 Int* m_subCuOffsetInBuffer[MAX_NUM_CHANNEL_TYPE];///< Gives an offset in the buffer for a given sub-CU (and channel), relative to start of CTU 77 77 78 Int m_ iMarginX;///< margin of Luma channel (chroma's may be smaller, depending on ratio)79 Int m_ iMarginY;///< margin of Luma channel (chroma's may be smaller, depending on ratio)78 Int m_marginX; ///< margin of Luma channel (chroma's may be smaller, depending on ratio) 79 Int m_marginY; ///< margin of Luma channel (chroma's may be smaller, depending on ratio) 80 80 81 81 Bool m_bIsBorderExtended; … … 100 100 // ------------------------------------------------------------------------------------------------ 101 101 102 Void create (const Int iPicWidth,103 const Int iPicHeight,102 Void create (const Int picWidth, 103 const Int picHeight, 104 104 const ChromaFormat chromaFormatIDC, 105 const UInt uiMaxCUWidth, ///< used for generating offsets to CUs. Can use iPicWidth if no offsets are required106 const UInt uiMaxCUHeight, ///< used for generating offsets to CUs. Can use iPicHeight if no offsets are required107 const UInt uiMaxCUDepth, ///< used for generating offsets to CUs. Can use 0 if no offsets are required105 const UInt maxCUWidth, ///< used for generating offsets to CUs. 106 const UInt maxCUHeight, ///< used for generating offsets to CUs. 107 const UInt maxCUDepth, ///< used for generating offsets to CUs. 108 108 const Bool bUseMargin); ///< if true, then a margin of uiMaxCUWidth+16 and uiMaxCUHeight+16 is created around the image. 109 110 Void createWithoutCUInfo(const Int picWidth, 111 const Int picHeight, 112 const ChromaFormat chromaFormatIDC, 113 const Bool bUseMargin=false, ///< if true, then a margin of uiMaxCUWidth+16 and uiMaxCUHeight+16 is created around the image. 114 const UInt maxCUWidth=0, ///< used for margin only 115 const UInt maxCUHeight=0); ///< used for margin only 109 116 110 117 Void destroy (); … … 118 125 // ------------------------------------------------------------------------------------------------ 119 126 120 Int getWidth (const ComponentID id) const { return m_ iPicWidth >> getComponentScaleX(id); }121 Int getHeight (const ComponentID id) const { return m_ iPicHeight >> getComponentScaleY(id); }127 Int getWidth (const ComponentID id) const { return m_picWidth >> getComponentScaleX(id); } 128 Int getHeight (const ComponentID id) const { return m_picHeight >> getComponentScaleY(id); } 122 129 ChromaFormat getChromaFormat () const { return m_chromaFormatIDC; } 123 130 UInt getNumberValidComponents() const { return ::getNumberValidComponents(m_chromaFormatIDC); } 124 131 125 Int getStride (const ComponentID id) const { return ((m_iPicWidth ) + (m_iMarginX <<1)) >> getComponentScaleX(id); } 126 Int getTotalHeight (const ComponentID id) const { return ((m_iPicHeight ) + (m_iMarginY <<1)) >> getComponentScaleY(id); } 127 128 Int getMarginX (const ComponentID id) const { return m_iMarginX >> getComponentScaleX(id); } 129 Int getMarginY (const ComponentID id) const { return m_iMarginY >> getComponentScaleY(id); } 132 Int getStride (const ComponentID id) const { return ((m_picWidth ) + (m_marginX <<1)) >> getComponentScaleX(id); } 133 private: 134 Int getStride (const ChannelType id) const { return ((m_picWidth ) + (m_marginX <<1)) >> getChannelTypeScaleX(id); } 135 public: 136 Int getTotalHeight (const ComponentID id) const { return ((m_picHeight ) + (m_marginY <<1)) >> getComponentScaleY(id); } 137 138 Int getMarginX (const ComponentID id) const { return m_marginX >> getComponentScaleX(id); } 139 Int getMarginY (const ComponentID id) const { return m_marginY >> getComponentScaleY(id); } 130 140 131 141 // ------------------------------------------------------------------------------------------------ … … 135 145 // Access starting position of picture buffer with margin 136 146 Pel* getBuf (const ComponentID ch) { return m_apiPicBuf[ch]; } 147 const Pel* getBuf (const ComponentID ch) const { return m_apiPicBuf[ch]; } 137 148 138 149 // Access starting position of original picture … … 151 162 UInt getComponentScaleY(const ComponentID id) const { return ::getComponentScaleY(id, m_chromaFormatIDC); } 152 163 164 UInt getChannelTypeScaleX(const ChannelType id) const { return ::getChannelTypeScaleX(id, m_chromaFormatIDC); } 165 UInt getChannelTypeScaleY(const ChannelType id) const { return ::getChannelTypeScaleY(id, m_chromaFormatIDC); } 166 153 167 // ------------------------------------------------------------------------------------------------ 154 168 // Miscellaneous … … 162 176 163 177 // Dump picture 164 Void dump (const Char* pFileName, const BitDepths &bitDepths, Bool bAdd =false) const ;178 Void dump (const std::string &fileName, const BitDepths &bitDepths, const Bool bAppend=false, const Bool bForceTo8Bit=false) const ; 165 179 166 180 // Set border extension flag … … 169 183 Bool getBorderExtension( ) { return m_bIsBorderExtended; } 170 184 #endif 171 #if NH_3D 185 #if NH_3D_VSO 172 186 // Set Function 173 187 Void setLumaTo ( Pel pVal ); 174 188 Void setChromaTo ( Pel pVal ); 189 #endif 190 #if NH_3D 175 191 #if NH_3D_IV_MERGE 176 192 // sample to block and block to sample conversion -
TabularUnified trunk/source/Lib/TLibCommon/TComPicYuvMD5.cpp ¶
r1313 r1386 209 209 std::string hashToString(const TComPictureHash &digest, Int numChar) 210 210 { 211 static const Char* hex = "0123456789abcdef";211 static const TChar* hex = "0123456789abcdef"; 212 212 std::string result; 213 213 -
TabularUnified trunk/source/Lib/TLibCommon/TComPrediction.cpp ¶
r1321 r1386 562 562 Int RefPOCL0 = pcCU->getSlice()->getRefPic(REF_PIC_LIST_0, pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(PartAddr))->getPOC(); 563 563 Int RefPOCL1 = pcCU->getSlice()->getRefPic(REF_PIC_LIST_1, pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(PartAddr))->getPOC(); 564 #if NH_MV_FIX_TICKET_106565 564 #if NH_MV 566 565 Int layerIdL0 = pcCU->getSlice()->getRefPic(REF_PIC_LIST_0, pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(PartAddr))->getLayerId(); … … 573 572 #else 574 573 if(RefPOCL0 == RefPOCL1 && pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr) == pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr)) 575 #endif576 #else577 #if NH_3D_ARP578 if(!pcCU->getARPW(PartAddr) && RefPOCL0 == RefPOCL1 && pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr) == pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr))579 #else580 if(RefPOCL0 == RefPOCL1 && pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr) == pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr))581 #endif582 574 #endif 583 575 { … … 1139 1131 Int iHeight; 1140 1132 UInt uiPartAddr; 1133 const TComSlice *pSlice = pcCU->getSlice(); 1134 const SliceType sliceType = pSlice->getSliceType(); 1135 const TComPPS &pps = *(pSlice->getPPS()); 1141 1136 1142 1137 if ( iPartIdx >= 0 ) … … 1147 1142 { 1148 1143 #endif 1149 if ( eRefPicList != REF_PIC_LIST_X ) 1150 { 1151 if( pcCU->getSlice()->getPPS()->getUseWP()) 1152 { 1153 xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred, true ); 1154 } 1155 else 1156 { 1157 xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred ); 1158 } 1159 if ( pcCU->getSlice()->getPPS()->getUseWP() ) 1160 { 1161 xWeightedPredictionUni( pcCU, pcYuvPred, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred ); 1162 } 1144 if ( eRefPicList != REF_PIC_LIST_X ) 1145 { 1146 if( (sliceType == P_SLICE && pps.getUseWP()) || (sliceType == B_SLICE && pps.getWPBiPred())) 1147 { 1148 xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred, true ); 1149 xWeightedPredictionUni( pcCU, pcYuvPred, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred ); 1163 1150 } 1164 1151 else 1165 1152 { 1153 xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred ); 1154 } 1155 } 1156 else 1157 { 1166 1158 #if NH_3D_SPIVMP 1167 1159 if ( pcCU->getSPIVMPFlag(uiPartAddr)!=0) … … 1235 1227 if ( eRefPicList != REF_PIC_LIST_X ) 1236 1228 { 1237 if( pcCU->getSlice()->getPPS()->getUseWP())1229 if( (sliceType == P_SLICE && pps.getUseWP()) || (sliceType == B_SLICE && pps.getWPBiPred())) 1238 1230 { 1239 1231 xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred, true ); 1232 xWeightedPredictionUni( pcCU, pcYuvPred, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred ); 1240 1233 } 1241 1234 else 1242 1235 { 1243 1236 xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred ); 1244 }1245 if ( pcCU->getSlice()->getPPS()->getUseWP() )1246 {1247 xWeightedPredictionUni( pcCU, pcYuvPred, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred );1248 1237 } 1249 1238 } … … 1317 1306 pcCU->clipMv(cMv); 1318 1307 1319 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC1308 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 1320 1309 if ( g_traceMotionInfoBeforUniPred ) 1321 1310 { … … 1449 1438 Int iCurrPOC = pcCU->getSlice()->getPOC(); 1450 1439 Int iColRefPOC = pcCU->getSlice()->getRefPOC( eRefPicList, iRefIdx ); 1451 Int iCurrRefPOC = pcCU->getSlice()->getRefPOC( eRefPicList, arpRefIdx );1452 Int iScale = pcCU->xGetDistScaleFactor(iCurrPOC, iCurrRefPOC, iCurrPOC, iColRefPOC);1440 Int iCurrRefPOC = pcCU->getSlice()->getRefPOC( eRefPicList, arpRefIdx ); 1441 Int iScale = pcCU->xGetDistScaleFactor(iCurrPOC, iCurrRefPOC, iCurrPOC, iColRefPOC); 1453 1442 if ( iScale != 4096 ) 1454 1443 { 1455 1444 cMv = cMv.scaleMv( iScale ); 1456 1445 } 1457 iRefIdx = arpRefIdx;1458 }1446 iRefIdx = arpRefIdx; 1447 } 1459 1448 1460 1449 pcCU->clipMv(cMv); … … 1830 1819 1831 1820 1821 #if NH_3D 1832 1822 Void TComPrediction::xPredInterBlk(const ComponentID compID, TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *dstPic, Bool bi, const Int bitDepth 1833 1823 #if NH_3D_ARP … … 1838 1828 #endif 1839 1829 ) 1830 #else 1831 Void TComPrediction::xPredInterBlk(const ComponentID compID, TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *dstPic, Bool bi, const Int bitDepth ) 1832 #endif 1840 1833 { 1841 1834 #if NH_MV … … 1873 1866 if ( yFrac == 0 ) 1874 1867 { 1868 #if NH_3D 1869 m_if.filterHor(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, xFrac, !bi 1875 1870 #if NH_3D_IC 1876 m_if.filterHor(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, xFrac, !bi || bICFlag, chFmt, bitDepth 1877 #else 1878 m_if.filterHor(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, xFrac, !bi, chFmt, bitDepth 1879 #endif 1871 || bICFlag 1872 #endif 1873 , chFmt, bitDepth 1880 1874 #if NH_3D_ARP 1881 1875 , filterType 1882 1876 #endif 1883 1877 ); 1878 #else 1879 m_if.filterHor(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, xFrac, !bi, chFmt, bitDepth ); 1880 #endif 1884 1881 } 1885 1882 else if ( xFrac == 0 ) 1886 1883 { 1884 #if NH_3D 1885 m_if.filterVer(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, yFrac, true, !bi 1887 1886 #if NH_3D_IC 1888 m_if.filterVer(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, yFrac, true, !bi || bICFlag, chFmt, bitDepth 1889 #else 1890 m_if.filterVer(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, yFrac, true, !bi, chFmt, bitDepth 1891 #endif 1887 || bICFlag 1888 #endif 1889 , chFmt, bitDepth 1892 1890 #if NH_3D_ARP 1893 1891 , filterType 1894 1892 #endif 1895 1893 ); 1894 #else 1895 m_if.filterVer(compID, ref, refStride, dst, dstStride, cxWidth, cxHeight, yFrac, true, !bi, chFmt, bitDepth ); 1896 1897 #endif 1896 1898 } 1897 1899 else … … 1902 1904 const Int vFilterSize = isLuma(compID) ? NTAPS_LUMA : NTAPS_CHROMA; 1903 1905 1904 m_if.filterHor(compID, ref - ((vFilterSize>>1) -1)*refStride, refStride, tmp, tmpStride, cxWidth, cxHeight+vFilterSize-1, xFrac, false, chFmt, bitDepth1905 1906 #if NH_3D_ARP 1906 , filterType 1907 m_if.filterHor(compID, ref - ((vFilterSize>>1) -1)*refStride, refStride, tmp, tmpStride, cxWidth, cxHeight+vFilterSize-1, xFrac, false, chFmt, bitDepth, filterType ); 1908 #else 1909 m_if.filterHor(compID, ref - ((vFilterSize>>1) -1)*refStride, refStride, tmp, tmpStride, cxWidth, cxHeight+vFilterSize-1, xFrac, false, chFmt, bitDepth ); 1907 1910 #endif 1908 ); 1911 1912 #if NH_3D 1913 m_if.filterVer(compID, tmp + ((vFilterSize>>1) -1)*tmpStride, tmpStride, dst, dstStride, cxWidth, cxHeight, yFrac, false, !bi 1909 1914 #if NH_3D_IC 1910 m_if.filterVer(compID, tmp + ((vFilterSize>>1) -1)*tmpStride, tmpStride, dst, dstStride, cxWidth, cxHeight, yFrac, false, !bi || bICFlag, chFmt, bitDepth 1911 #else 1912 m_if.filterVer(compID, tmp + ((vFilterSize>>1) -1)*tmpStride, tmpStride, dst, dstStride, cxWidth, cxHeight, yFrac, false, !bi, chFmt, bitDepth 1913 #endif 1915 || bICFlag 1916 #endif 1917 , chFmt, bitDepth 1914 1918 #if NH_3D_ARP 1915 1919 , filterType 1916 1920 #endif 1917 1921 ); 1922 #else 1923 m_if.filterVer(compID, tmp + ((vFilterSize>>1) -1)*tmpStride, tmpStride, dst, dstStride, cxWidth, cxHeight, yFrac, false, !bi, chFmt, bitDepth ); 1924 #endif 1918 1925 } 1919 1926 … … 1954 1961 } 1955 1962 1956 Void TComPrediction::xWeightedAverage( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartIdx, Int iWidth, Int iHeight, TComYuv* pcYuvDst, const BitDepths &clipBitDepths 1957 ) 1963 Void TComPrediction::xWeightedAverage( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartIdx, Int iWidth, Int iHeight, TComYuv* pcYuvDst, const BitDepths &clipBitDepths ) 1958 1964 { 1959 1965 if( iRefIdx0 >= 0 && iRefIdx1 >= 0 ) -
TabularUnified trunk/source/Lib/TLibCommon/TComPrediction.h ¶
r1321 r1386 115 115 #endif 116 116 117 #if NH_3D 117 118 Void xPredInterBlk(const ComponentID compID, TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *dstPic, Bool bi, const Int bitDepth 118 119 #if NH_3D_ARP … … 123 124 #endif 124 125 ); 125 126 #else 127 Void xPredInterBlk(const ComponentID compID, TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *dstPic, Bool bi, const Int bitDepth ); 128 #endif 126 129 #if NH_3D_VSP 127 130 Void xPredInterUniSubPU ( TComDataCU *cu, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi, Int widthSubPU=4, Int heightSubPU=4 ); -
TabularUnified trunk/source/Lib/TLibCommon/TComRdCost.cpp ¶
r1321 r1386 41 41 #include "TComRom.h" 42 42 #include "TComRdCost.h" 43 #if NH_3D 43 #if NH_3D_VSO 44 44 #include "TComDataCU.h" 45 45 #include "TComRectangle.h" … … 64 64 // Calculate RD functions 65 65 #if NH_3D_VSO 66 Double TComRdCost::calcRdCost( UInt uiBits, Dist uiDistortion, Bool bFlag, DFunc eDFunc ) 66 Double TComRdCost::calcRdCost( Double numBits, Dist intDistortion, DFunc eDFunc ) 67 { 68 Double distortion = (Double) intDistortion; 67 69 #else 68 Double TComRdCost::calcRdCost( UInt uiBits, Distortion uiDistortion, Bool bFlag, DFunc eDFunc )69 #endif 70 { 71 Double dRdCost = 0.0;72 Double dLambda = 0.0;70 Double TComRdCost::calcRdCost( Double numBits, Double distortion, DFunc eDFunc ) 71 { 72 #endif 73 74 Double lambda = 1.0; 73 75 74 76 switch ( eDFunc ) … … 78 80 break; 79 81 case DF_SAD: 80 #if RExt__HIGH_BIT_DEPTH_SUPPORT 81 dLambda = m_dLambdaMotionSAD[0]; // 0 is valid, because for lossless blocks, the cost equation is modified to compensate. 82 #else 83 dLambda = (Double)m_uiLambdaMotionSAD[0]; // 0 is valid, because for lossless blocks, the cost equation is modified to compensate. 84 #endif 82 lambda = m_dLambdaMotionSAD[0]; // 0 is valid, because for lossless blocks, the cost equation is modified to compensate. 85 83 break; 86 84 case DF_DEFAULT: 87 dLambda =m_dLambda;85 lambda = m_dLambda; 88 86 break; 89 87 case DF_SSE_FRAME: 90 dLambda =m_dFrameLambda;88 lambda = m_dFrameLambda; 91 89 break; 92 90 default: … … 95 93 } 96 94 97 if (bFlag) //NOTE: this "bFlag" is never true 98 { 99 // Intra8x8, Intra4x4 Block only... 95 #if NH_MV 96 // D_PRINT_INDENT( g_traceRDCost, "Dist: " + n2s(distortion) + " Bits: " + n2s(numBits) + " RD Cost: " + n2s(dRdCost)); 97 D_PRINT_INDENT( g_traceRDCost, "Dist: " + n2s(distortion) + " Bits: " + n2s(numBits) ); 98 #endif 99 100 if (eDFunc == DF_SAD) 101 { 100 102 if (m_costMode != COST_STANDARD_LOSSY) 101 103 { 102 dRdCost = (Double(uiDistortion) / dLambda) + Double(uiBits); // all lossless costs would have uiDistortion=0, and therefore this cost function can be used.104 return ((distortion * 65536.0) / lambda) + numBits; // all lossless costs would have uiDistortion=0, and therefore this cost function can be used. 103 105 } 104 106 else 105 107 { 106 dRdCost = (((Double)uiDistortion) + ((Double)uiBits * dLambda));108 return distortion + (((numBits * lambda) ) / 65536.0); 107 109 } 108 110 } 109 111 else 110 112 { 111 if (eDFunc == DF_SAD) 112 { 113 if (m_costMode != COST_STANDARD_LOSSY) 114 { 115 dRdCost = ((Double(uiDistortion) * 65536) / dLambda) + Double(uiBits); // all lossless costs would have uiDistortion=0, and therefore this cost function can be used. 116 } 117 else 118 { 119 dRdCost = floor(Double(uiDistortion) + (floor((Double(uiBits) * dLambda) + 0.5) / 65536.0)); 120 } 113 if (m_costMode != COST_STANDARD_LOSSY) 114 { 115 return (distortion / lambda) + numBits; // all lossless costs would have uiDistortion=0, and therefore this cost function can be used. 121 116 } 122 117 else 123 118 { 124 if (m_costMode != COST_STANDARD_LOSSY) 125 { 126 dRdCost = (Double(uiDistortion) / dLambda) + Double(uiBits); // all lossless costs would have uiDistortion=0, and therefore this cost function can be used. 127 } 128 else 129 { 130 dRdCost = floor(Double(uiDistortion) + (Double(uiBits) * dLambda) + 0.5); 131 } 132 } 133 } 134 135 #if NH_MV 136 D_PRINT_INDENT( g_traceRDCost, "Dist: " + n2s(uiDistortion) + " Bits: " + n2s(uiBits) + " RD Cost: " + n2s(dRdCost)); 137 #endif 138 return dRdCost; 139 } 140 141 #if NH_3D_VSO 142 Double TComRdCost::calcRdCost64( UInt64 uiBits, Dist64 uiDistortion, Bool bFlag, DFunc eDFunc ) 143 #else 144 Double TComRdCost::calcRdCost64( UInt64 uiBits, UInt64 uiDistortion, Bool bFlag, DFunc eDFunc ) 145 #endif 146 { 147 Double dRdCost = 0.0; 148 Double dLambda = 0.0; 149 150 switch ( eDFunc ) 151 { 152 case DF_SSE: 153 assert(0); 154 break; 155 case DF_SAD: 156 #if RExt__HIGH_BIT_DEPTH_SUPPORT 157 dLambda = m_dLambdaMotionSAD[0]; // 0 is valid, because for lossless blocks, the cost equation is modified to compensate. 158 #else 159 dLambda = (Double)m_uiLambdaMotionSAD[0]; // 0 is valid, because for lossless blocks, the cost equation is modified to compensate. 160 #endif 161 break; 162 case DF_DEFAULT: 163 dLambda = m_dLambda; 164 break; 165 case DF_SSE_FRAME: 166 dLambda = m_dFrameLambda; 167 break; 168 default: 169 assert (0); 170 break; 171 } 172 173 if (bFlag) //NOTE: this "bFlag" is never true 174 { 175 // Intra8x8, Intra4x4 Block only... 176 if (m_costMode != COST_STANDARD_LOSSY) 177 { 178 dRdCost = (Double(uiDistortion) / dLambda) + Double(uiBits); // all lossless costs would have uiDistortion=0, and therefore this cost function can be used. 179 } 180 else 181 { 182 dRdCost = (((Double)(Int64)uiDistortion) + ((Double)(Int64)uiBits * dLambda)); 183 } 184 } 185 else 186 { 187 if (eDFunc == DF_SAD) 188 { 189 if (m_costMode != COST_STANDARD_LOSSY) 190 { 191 dRdCost = ((Double(uiDistortion) * 65536) / dLambda) + Double(uiBits); // all lossless costs would have uiDistortion=0, and therefore this cost function can be used. 192 } 193 else 194 { 195 dRdCost = floor(Double(uiDistortion) + (floor((Double(uiBits) * dLambda) + 0.5) / 65536.0)); 196 } 197 } 198 else 199 { 200 if (m_costMode != COST_STANDARD_LOSSY) 201 { 202 dRdCost = (Double(uiDistortion) / dLambda) + Double(uiBits); // all lossless costs would have uiDistortion=0, and therefore this cost function can be used. 203 } 204 else 205 { 206 dRdCost = floor(Double(uiDistortion) + (Double(uiBits) * dLambda) + 0.5); 207 } 208 } 209 } 210 211 return dRdCost; 119 return distortion + (numBits * lambda); 120 } 121 } 212 122 } 213 123 … … 216 126 m_dLambda = dLambda; 217 127 m_sqrtLambda = sqrt(m_dLambda); 218 #if RExt__HIGH_BIT_DEPTH_SUPPORT219 128 m_dLambdaMotionSAD[0] = 65536.0 * m_sqrtLambda; 220 129 m_dLambdaMotionSSE[0] = 65536.0 * m_dLambda; … … 226 135 m_dLambdaMotionSAD[1] = 65536.0 * sqrt(dLambda); 227 136 m_dLambdaMotionSSE[1] = 65536.0 * dLambda; 228 #else229 m_uiLambdaMotionSAD[0] = (UInt)floor(65536.0 * m_sqrtLambda);230 m_uiLambdaMotionSSE[0] = (UInt)floor(65536.0 * m_dLambda );231 #if FULL_NBIT232 dLambda = 0.57 * pow(2.0, ((LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME - 12) / 3.0));233 #else234 dLambda = 0.57 * pow(2.0, ((LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME - 12 - 6 * (bitDepths.recon[CHANNEL_TYPE_LUMA] - 8)) / 3.0));235 #endif236 m_uiLambdaMotionSAD[1] = (UInt)floor(65536.0 * sqrt(dLambda));237 m_uiLambdaMotionSSE[1] = (UInt)floor(65536.0 * dLambda );238 #endif239 137 } 240 138 … … 298 196 m_costMode = COST_STANDARD_LOSSY; 299 197 300 #if RExt__HIGH_BIT_DEPTH_SUPPORT 301 m_dCost = 0; 302 #else 303 m_uiCost = 0; 304 #endif 198 m_motionLambda = 0; 305 199 m_iCostScale = 0; 306 200 … … 370 264 // initialize 371 265 rcDistParam.iSubShift = 0; 266 rcDistParam.m_maximumDistortionForEarlyExit = std::numeric_limits<Distortion>::max(); 372 267 } 373 268 374 269 // Setting the Distortion Parameter for Inter (ME) 375 Void TComRdCost::setDistParam( TComPattern* pcPatternKey,Pel* piRefY, Int iRefStride, DistParam& rcDistParam )270 Void TComRdCost::setDistParam( const TComPattern* const pcPatternKey, const Pel* piRefY, Int iRefStride, DistParam& rcDistParam ) 376 271 { 377 272 // set Original & Curr Pointer / Stride … … 386 281 rcDistParam.iRows = pcPatternKey->getROIYHeight(); 387 282 rcDistParam.DistFunc = m_afpDistortFunc[DF_SAD + g_aucConvertToBit[ rcDistParam.iCols ] + 1 ]; 283 rcDistParam.m_maximumDistortionForEarlyExit = std::numeric_limits<Distortion>::max(); 388 284 389 285 if (rcDistParam.iCols == 12) … … 411 307 412 308 // Setting the Distortion Parameter for Inter (subpel ME with step) 413 Void TComRdCost::setDistParam( TComPattern* pcPatternKey,Pel* piRefY, Int iRefStride, Int iStep, DistParam& rcDistParam, Bool bHADME )309 Void TComRdCost::setDistParam( const TComPattern* const pcPatternKey, const Pel* piRefY, Int iRefStride, Int iStep, DistParam& rcDistParam, Bool bHADME ) 414 310 { 415 311 // set Original & Curr Pointer / Stride … … 427 323 rcDistParam.iRows = pcPatternKey->getROIYHeight(); 428 324 325 rcDistParam.m_maximumDistortionForEarlyExit = std::numeric_limits<Distortion>::max(); 326 429 327 // set distortion function 430 328 if ( !bHADME ) … … 459 357 } 460 358 461 Void TComRdCost::setDistParam( DistParam& rcDP, Int bitDepth, Pel* p1, Int iStride1,Pel* p2, Int iStride2, Int iWidth, Int iHeight, Bool bHadamard )359 Void TComRdCost::setDistParam( DistParam& rcDP, Int bitDepth, const Pel* p1, Int iStride1, const Pel* p2, Int iStride2, Int iWidth, Int iHeight, Bool bHadamard ) 462 360 { 463 361 rcDP.pOrg = p1; … … 471 369 rcDP.bitDepth = bitDepth; 472 370 rcDP.DistFunc = m_afpDistortFunc[ ( bHadamard ? DF_HADS : DF_SADS ) + g_aucConvertToBit[ iWidth ] + 1 ]; 371 rcDP.m_maximumDistortionForEarlyExit = std::numeric_limits<Distortion>::max(); 473 372 #if NH_3D_DBBP 474 373 if( m_bUseMask ) … … 479 378 } 480 379 481 Distortion TComRdCost::calcHAD( Int bitDepth, Pel* pi0, Int iStride0,Pel* pi1, Int iStride1, Int iWidth, Int iHeight )380 Distortion TComRdCost::calcHAD( Int bitDepth, const Pel* pi0, Int iStride0, const Pel* pi1, Int iStride1, Int iWidth, Int iHeight ) 482 381 { 483 382 Distortion uiSum = 0; … … 550 449 551 450 552 Distortion TComRdCost::getDistPart( Int bitDepth, Pel* piCur, Int iCurStride,Pel* piOrg, Int iOrgStride, UInt uiBlkWidth, UInt uiBlkHeight, const ComponentID compID, DFunc eDFunc )451 Distortion TComRdCost::getDistPart( Int bitDepth, const Pel* piCur, Int iCurStride, const Pel* piOrg, Int iOrgStride, UInt uiBlkWidth, UInt uiBlkHeight, const ComponentID compID, DFunc eDFunc ) 553 452 { 554 453 DistParam cDtParam; … … 604 503 605 504 cDtParam.bitDepth = bitDepth; 606 505 #if NH_3D 607 506 cDtParam.bUseIC = false; 507 #endif 608 508 #if NH_3D_SDC_INTER 609 509 cDtParam.bUseSDCMRSAD = false; … … 663 563 UInt TComRdCost::xGetMaskedSSE( DistParam* pcDtParam ) 664 564 { 665 Pel* piOrg = pcDtParam->pOrg;666 Pel* piCur = pcDtParam->pCur;565 const Pel* piOrg = pcDtParam->pOrg; 566 const Pel* piCur = pcDtParam->pCur; 667 567 Int iRows = pcDtParam->iRows; 668 568 Int iCols = pcDtParam->iCols; … … 701 601 #endif 702 602 703 Pel* piOrg = pcDtParam->pOrg;704 Pel* piCur = pcDtParam->pCur;603 const Pel* piOrg = pcDtParam->pOrg; 604 const Pel* piCur = pcDtParam->pCur; 705 605 Int iRows = pcDtParam->iRows; 706 606 Int iCols = pcDtParam->iCols; … … 729 629 UInt TComRdCost::xGetMaskedVSD( DistParam* pcDtParam ) 730 630 { 731 Pel* piOrg = pcDtParam->pOrg;732 Pel* piCur = pcDtParam->pCur;733 Pel* piVirRec = pcDtParam->pVirRec;734 Pel* piVirOrg = pcDtParam->pVirOrg;631 const Pel* piOrg = pcDtParam->pOrg; 632 const Pel* piCur = pcDtParam->pCur; 633 const Pel* piVirRec = pcDtParam->pVirRec; 634 const Pel* piVirOrg = pcDtParam->pVirOrg; 735 635 Int iRows = pcDtParam->iRows; 736 636 Int iCols = pcDtParam->iCols; … … 786 686 const Pel* piOrg = pcDtParam->pOrg; 787 687 const Pel* piCur = pcDtParam->pCur; 788 Int iRows = pcDtParam->iRows;789 Int iCols = pcDtParam->iCols;790 Int iStrideCur = pcDtParam->iStrideCur;791 Int iStrideOrg = pcDtParam->iStrideOrg;688 const Int iCols = pcDtParam->iCols; 689 const Int iStrideCur = pcDtParam->iStrideCur; 690 const Int iStrideOrg = pcDtParam->iStrideOrg; 691 const UInt distortionShift = DISTORTION_PRECISION_ADJUSTMENT(pcDtParam->bitDepth - 8); 792 692 793 693 Distortion uiSum = 0; 794 694 795 for( ; iRows != 0; iRows-- )695 for(Int iRows = pcDtParam->iRows ; iRows != 0; iRows-- ) 796 696 { 797 697 for (Int n = 0; n < iCols; n++ ) … … 799 699 uiSum += abs( piOrg[n] - piCur[n] ); 800 700 } 801 piOrg += iStrideOrg; 802 piCur += iStrideCur; 803 } 804 805 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT(pcDtParam->bitDepth-8) ); 701 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift )) 702 { 703 return ( uiSum >> distortionShift ); 704 } 705 piOrg += iStrideOrg; 706 piCur += iStrideCur; 707 } 708 709 return ( uiSum >> distortionShift ); 806 710 } 807 711 … … 1403 1307 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 1404 1308 } 1405 Pel* piOrg = pcDtParam->pOrg;1406 Pel* piCur = pcDtParam->pCur;1309 const Pel* piOrg = pcDtParam->pOrg; 1310 const Pel* piCur = pcDtParam->pCur; 1407 1311 Int iRows = pcDtParam->iRows; 1408 1312 Int iCols = pcDtParam->iCols; … … 1451 1355 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 1452 1356 } 1453 Pel* piOrg = pcDtParam->pOrg;1454 Pel* piCur = pcDtParam->pCur;1357 const Pel* piOrg = pcDtParam->pOrg; 1358 const Pel* piCur = pcDtParam->pCur; 1455 1359 Int iRows = pcDtParam->iRows; 1456 1360 Int iSubShift = pcDtParam->iSubShift; … … 1508 1412 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 1509 1413 } 1510 Pel* piOrg = pcDtParam->pOrg;1511 Pel* piCur = pcDtParam->pCur;1414 const Pel* piOrg = pcDtParam->pOrg; 1415 const Pel* piCur = pcDtParam->pCur; 1512 1416 Int iRows = pcDtParam->iRows; 1513 1417 Int iSubShift = pcDtParam->iSubShift; … … 1577 1481 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 1578 1482 } 1579 Pel* piOrg = pcDtParam->pOrg;1580 Pel* piCur = pcDtParam->pCur;1483 const Pel* piOrg = pcDtParam->pOrg; 1484 const Pel* piCur = pcDtParam->pCur; 1581 1485 Int iRows = pcDtParam->iRows; 1582 1486 Int iSubShift = pcDtParam->iSubShift; … … 1670 1574 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 1671 1575 } 1672 Pel* piOrg = pcDtParam->pOrg;1673 Pel* piCur = pcDtParam->pCur;1576 const Pel* piOrg = pcDtParam->pOrg; 1577 const Pel* piCur = pcDtParam->pCur; 1674 1578 Int iRows = pcDtParam->iRows; 1675 1579 Int iSubShift = pcDtParam->iSubShift; … … 1748 1652 UInt TComRdCost::xGetSAD16Nic( DistParam* pcDtParam ) 1749 1653 { 1750 Pel* piOrg = pcDtParam->pOrg;1751 Pel* piCur = pcDtParam->pCur;1654 const Pel* piOrg = pcDtParam->pOrg; 1655 const Pel* piCur = pcDtParam->pCur; 1752 1656 Int iRows = pcDtParam->iRows; 1753 1657 Int iCols = pcDtParam->iCols; … … 1845 1749 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 1846 1750 } 1847 Pel* piOrg = pcDtParam->pOrg;1848 Pel* piCur = pcDtParam->pCur;1751 const Pel* piOrg = pcDtParam->pOrg; 1752 const Pel* piCur = pcDtParam->pCur; 1849 1753 Int iRows = pcDtParam->iRows; 1850 1754 Int iSubShift = pcDtParam->iSubShift; … … 1987 1891 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 1988 1892 } 1989 Pel* piOrg = pcDtParam->pOrg;1990 Pel* piCur = pcDtParam->pCur;1893 const Pel* piOrg = pcDtParam->pOrg; 1894 const Pel* piCur = pcDtParam->pCur; 1991 1895 Int iRows = pcDtParam->iRows; 1992 1896 Int iSubShift = pcDtParam->iSubShift; … … 2104 2008 return TComRdCostWeightPrediction::xGetSADw( pcDtParam ); 2105 2009 } 2106 Pel* piOrg = pcDtParam->pOrg;2107 Pel* piCur = pcDtParam->pCur;2010 const Pel* piOrg = pcDtParam->pOrg; 2011 const Pel* piCur = pcDtParam->pCur; 2108 2012 Int iRows = pcDtParam->iRows; 2109 2013 Int iSubShift = pcDtParam->iSubShift; … … 2343 2247 } 2344 2248 2345 Pel* piOrg = pcDtParam->pOrg;2346 Pel* piCur = pcDtParam->pCur;2249 const Pel* piOrg = pcDtParam->pOrg; 2250 const Pel* piCur = pcDtParam->pCur; 2347 2251 Int iRows = pcDtParam->iRows; 2348 2252 Int iSubShift = pcDtParam->iSubShift; … … 2879 2783 #if NH_3D_VSO 2880 2784 //SAIT_VSO_EST_A0033 2881 UInt TComRdCost::getVSDEstimate( Int dDM, Pel* pOrg, Int iOrgStride, Pel* pVirRec,Pel* pVirOrg, Int iVirStride, Int x, Int y )2785 UInt TComRdCost::getVSDEstimate( Int dDM, const Pel* pOrg, Int iOrgStride, const Pel* pVirRec, const Pel* pVirOrg, Int iVirStride, Int x, Int y ) 2882 2786 { 2883 2787 // change to use bit depth from DistParam struct … … 2894 2798 UInt TComRdCost::xGetVSD( DistParam* pcDtParam ) 2895 2799 { 2896 Pel* piOrg = pcDtParam->pOrg;2897 Pel* piCur = pcDtParam->pCur;2898 Pel* piVirRec = pcDtParam->pVirRec;2899 Pel* piVirOrg = pcDtParam->pVirOrg;2800 const Pel* piOrg = pcDtParam->pOrg; 2801 const Pel* piCur = pcDtParam->pCur; 2802 const Pel* piVirRec = pcDtParam->pVirRec; 2803 const Pel* piVirOrg = pcDtParam->pVirOrg; 2900 2804 Int iRows = pcDtParam->iRows; 2901 2805 Int iCols = pcDtParam->iCols; … … 2925 2829 UInt TComRdCost::xGetVSD4( DistParam* pcDtParam ) 2926 2830 { 2927 Pel* piOrg = pcDtParam->pOrg;2928 Pel* piCur = pcDtParam->pCur;2929 Pel* piVirRec = pcDtParam->pVirRec;2930 Pel* piVirOrg = pcDtParam->pVirOrg;2831 const Pel* piOrg = pcDtParam->pOrg; 2832 const Pel* piCur = pcDtParam->pCur; 2833 const Pel* piVirRec = pcDtParam->pVirRec; 2834 const Pel* piVirOrg = pcDtParam->pVirOrg; 2931 2835 Int iRows = pcDtParam->iRows; 2932 2836 Int iStrideOrg = pcDtParam->iStrideOrg; … … 2955 2859 UInt TComRdCost::xGetVSD8( DistParam* pcDtParam ) 2956 2860 { 2957 Pel* piOrg = pcDtParam->pOrg;2958 Pel* piCur = pcDtParam->pCur;2959 Pel* piVirRec = pcDtParam->pVirRec;2960 Pel* piVirOrg = pcDtParam->pVirOrg;2861 const Pel* piOrg = pcDtParam->pOrg; 2862 const Pel* piCur = pcDtParam->pCur; 2863 const Pel* piVirRec = pcDtParam->pVirRec; 2864 const Pel* piVirOrg = pcDtParam->pVirOrg; 2961 2865 Int iRows = pcDtParam->iRows; 2962 2866 Int iStrideOrg = pcDtParam->iStrideOrg; … … 2985 2889 UInt TComRdCost::xGetVSD16( DistParam* pcDtParam ) 2986 2890 { 2987 Pel* piOrg = pcDtParam->pOrg;2988 Pel* piCur = pcDtParam->pCur;2989 Pel* piVirRec = pcDtParam->pVirRec;2990 Pel* piVirOrg = pcDtParam->pVirOrg;2891 const Pel* piOrg = pcDtParam->pOrg; 2892 const Pel* piCur = pcDtParam->pCur; 2893 const Pel* piVirRec = pcDtParam->pVirRec; 2894 const Pel* piVirOrg = pcDtParam->pVirOrg; 2991 2895 Int iRows = pcDtParam->iRows; 2992 2896 Int iStrideOrg = pcDtParam->iStrideOrg; … … 3015 2919 UInt TComRdCost::xGetVSD16N( DistParam* pcDtParam ) 3016 2920 { 3017 Pel* piOrg = pcDtParam->pOrg;3018 Pel* piCur = pcDtParam->pCur;3019 Pel* piVirRec = pcDtParam->pVirRec;3020 Pel* piVirOrg = pcDtParam->pVirOrg;2921 const Pel* piOrg = pcDtParam->pOrg; 2922 const Pel* piCur = pcDtParam->pCur; 2923 const Pel* piVirRec = pcDtParam->pVirRec; 2924 const Pel* piVirOrg = pcDtParam->pVirOrg; 3021 2925 Int iRows = pcDtParam->iRows; 3022 2926 Int iCols = pcDtParam->iCols; … … 3049 2953 UInt TComRdCost::xGetVSD32( DistParam* pcDtParam ) 3050 2954 { 3051 Pel* piOrg = pcDtParam->pOrg;3052 Pel* piCur = pcDtParam->pCur;3053 Pel* piVirRec = pcDtParam->pVirRec;3054 Pel* piVirOrg = pcDtParam->pVirOrg;2955 const Pel* piOrg = pcDtParam->pOrg; 2956 const Pel* piCur = pcDtParam->pCur; 2957 const Pel* piVirRec = pcDtParam->pVirRec; 2958 const Pel* piVirOrg = pcDtParam->pVirOrg; 3055 2959 Int iRows = pcDtParam->iRows; 3056 2960 Int iStrideOrg = pcDtParam->iStrideOrg; … … 3079 2983 UInt TComRdCost::xGetVSD64( DistParam* pcDtParam ) 3080 2984 { 3081 Pel* piOrg = pcDtParam->pOrg;3082 Pel* piCur = pcDtParam->pCur;3083 Pel* piVirRec = pcDtParam->pVirRec;3084 Pel* piVirOrg = pcDtParam->pVirOrg;2985 const Pel* piOrg = pcDtParam->pOrg; 2986 const Pel* piCur = pcDtParam->pCur; 2987 const Pel* piVirRec = pcDtParam->pVirRec; 2988 const Pel* piVirOrg = pcDtParam->pVirOrg; 3085 2989 Int iRows = pcDtParam->iRows; 3086 2990 Int iStrideOrg = pcDtParam->iStrideOrg; … … 3113 3017 // -------------------------------------------------------------------------------------------------------------------- 3114 3018 3115 Distortion TComRdCost::xCalcHADs2x2( Pel *piOrg,Pel *piCur, Int iStrideOrg, Int iStrideCur, Int iStep )3019 Distortion TComRdCost::xCalcHADs2x2( const Pel *piOrg, const Pel *piCur, Int iStrideOrg, Int iStrideCur, Int iStep ) 3116 3020 { 3117 3021 Distortion satd = 0; … … 3135 3039 } 3136 3040 3137 Distortion TComRdCost::xCalcHADs4x4( Pel *piOrg,Pel *piCur, Int iStrideOrg, Int iStrideCur, Int iStep )3041 Distortion TComRdCost::xCalcHADs4x4( const Pel *piOrg, const Pel *piCur, Int iStrideOrg, Int iStrideCur, Int iStep ) 3138 3042 { 3139 3043 Int k; … … 3231 3135 } 3232 3136 3233 Distortion TComRdCost::xCalcHADs8x8( Pel *piOrg,Pel *piCur, Int iStrideOrg, Int iStrideCur, Int iStep )3137 Distortion TComRdCost::xCalcHADs8x8( const Pel *piOrg, const Pel *piCur, Int iStrideOrg, Int iStrideCur, Int iStep ) 3234 3138 { 3235 3139 Int k, i, j, jj; … … 3348 3252 #endif 3349 3253 3350 Pel* piOrg= pcDtParam->pOrg;3351 Pel* piCur= pcDtParam->pCur;3352 Int iRows= pcDtParam->iRows;3353 Int iCols= pcDtParam->iCols;3354 Int iStrideCur = pcDtParam->iStrideCur;3355 Int iStrideOrg = pcDtParam->iStrideOrg;3356 Int iStep= pcDtParam->iStep;3254 const Pel* piOrg = pcDtParam->pOrg; 3255 const Pel* piCur = pcDtParam->pCur; 3256 const Int iRows = pcDtParam->iRows; 3257 const Int iCols = pcDtParam->iCols; 3258 const Int iStrideCur = pcDtParam->iStrideCur; 3259 const Int iStrideOrg = pcDtParam->iStrideOrg; 3260 const Int iStep = pcDtParam->iStep; 3357 3261 3358 3262 Int x, y; … … 3418 3322 return TComRdCostWeightPrediction::xGetHADsw( pcDtParam ); 3419 3323 } 3420 Pel* piOrg = pcDtParam->pOrg; 3421 Pel* piCur = pcDtParam->pCur; 3324 const Pel* piOrg = pcDtParam->pOrg; 3325 const Pel* piCur = pcDtParam->pCur; 3326 3422 3327 Int iRows = pcDtParam->iRows; 3423 3328 Int iCols = pcDtParam->iCols; … … 3449 3354 iDeltaC = (iOrigAvg - iCurAvg)/iRows/iCols; 3450 3355 3356 const Int orgMaxSize = MAX_CU_SIZE*MAX_CU_SIZE; 3357 assert( iRows * iCols <= orgMaxSize ); 3358 3359 Pel orgMinusDeltaDc[ orgMaxSize ]; 3360 Pel* tempOrgMinusDeltaDc = orgMinusDeltaDc; 3361 3451 3362 for ( y=0; y<iRows; y++ ) 3452 3363 { 3453 3364 for ( x=0; x<iCols; x++ ) 3454 3365 { 3455 piOrg[x] -= iDeltaC; 3456 } 3457 piOrg += iStrideOrg; 3458 } 3366 tempOrgMinusDeltaDc[x] = (piOrg[x] - iDeltaC); 3367 } 3368 piOrg += iStrideOrg; 3369 tempOrgMinusDeltaDc += iStrideOrg; 3370 } 3371 3372 tempOrgMinusDeltaDc = orgMinusDeltaDc; 3459 3373 3460 3374 piOrg = pcDtParam->pOrg; … … 3472 3386 for ( x=0; x<iCols; x+= 8 ) 3473 3387 { 3474 uiSum += xCalcHADs8x8( & piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep );3388 uiSum += xCalcHADs8x8( &tempOrgMinusDeltaDc[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3475 3389 } 3476 piOrg+= iOffsetOrg;3477 piCur += iOffsetCur;3390 tempOrgMinusDeltaDc += iOffsetOrg; 3391 piCur += iOffsetCur; 3478 3392 } 3479 3393 } … … 3487 3401 for ( x=0; x<iCols; x+= 16 ) 3488 3402 { 3489 uiSum += xCalcHADs16x4( & piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep );3403 uiSum += xCalcHADs16x4( &tempOrgMinusDeltaDc[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3490 3404 } 3491 piOrg+= iOffsetOrg;3492 piCur += iOffsetCur;3405 tempOrgMinusDeltaDc += iOffsetOrg; 3406 piCur += iOffsetCur; 3493 3407 } 3494 3408 } … … 3501 3415 for ( x=0; x<iCols; x+= 4 ) 3502 3416 { 3503 uiSum += xCalcHADs4x16( & piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep );3417 uiSum += xCalcHADs4x16( &tempOrgMinusDeltaDc[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3504 3418 } 3505 piOrg+= iOffsetOrg;3506 piCur += iOffsetCur;3419 tempOrgMinusDeltaDc += iOffsetOrg; 3420 piCur += iOffsetCur; 3507 3421 } 3508 3422 } … … 3517 3431 for ( x=0; x<iCols; x+= 4 ) 3518 3432 { 3519 uiSum += xCalcHADs4x4( & piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep );3433 uiSum += xCalcHADs4x4( &tempOrgMinusDeltaDc[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3520 3434 } 3521 piOrg+= iOffsetOrg;3522 piCur += iOffsetCur;3435 tempOrgMinusDeltaDc += iOffsetOrg; 3436 piCur += iOffsetCur; 3523 3437 } 3524 3438 } … … 3531 3445 for ( x=0; x<iCols; x+=2 ) 3532 3446 { 3533 uiSum += xCalcHADs2x2( & piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep );3447 uiSum += xCalcHADs2x2( &tempOrgMinusDeltaDc[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3534 3448 } 3535 piOrg+= iOffsetOrg;3536 piCur += iOffsetCur;3449 tempOrgMinusDeltaDc += iOffsetOrg; 3450 piCur += iOffsetCur; 3537 3451 } 3538 3452 } … … 3540 3454 { 3541 3455 assert(false); 3542 }3543 3544 piOrg = pcDtParam->pOrg;3545 3546 for ( y=0; y<iRows; y++ )3547 {3548 for ( x=0; x<iCols; x++ )3549 {3550 piOrg[x] += iDeltaC;3551 }3552 piOrg += iStrideOrg;3553 3456 } 3554 3457 -
TabularUnified trunk/source/Lib/TLibCommon/TComRdCost.h ¶
r1313 r1386 46 46 #include "TComSlice.h" 47 47 #include "TComRdCostWeightPrediction.h" 48 #if NH_3D 48 #if NH_3D_VSO 49 49 #include "../TLibRenderer/TRenModel.h" 50 50 #include "TComYuv.h" … … 57 57 class DistParam; 58 58 class TComPattern; 59 #if NH_3D 59 #if NH_3D_VSO 60 60 class TComRdCost; 61 61 #endif … … 68 68 typedef Distortion (*FpDistFunc) (DistParam*); // TODO: can this pointer be replaced with a reference? - there are no NULL checks on pointer. 69 69 70 #if NH_3D 70 71 71 #if NH_3D_VSO 72 72 typedef Dist (TComRdCost::*FpDistFuncVSO) ( Int, Int, Pel*, Int, Pel*, Int, UInt, UInt, Bool ); 73 #endif74 73 #endif 75 74 // ==================================================================================================================== … … 81 80 { 82 81 public: 83 Pel*pOrg;84 Pel*pCur;82 const Pel* pOrg; 83 const Pel* pCur; 85 84 Int iStrideOrg; 86 85 Int iStrideCur; … … 104 103 105 104 Bool bApplyWeight; // whether weighted prediction is used or not 106 WPScalingParam *wpCur; // weighted prediction scaling parameters for current ref 105 Bool bIsBiPred; 106 107 const WPScalingParam *wpCur; // weighted prediction scaling parameters for current ref 107 108 ComponentID compIdx; 109 Distortion m_maximumDistortionForEarlyExit; /// During cost calculations, if distortion exceeds this value, cost calculations may early-terminate. 108 110 109 111 // (vertical) subsampling shift (for reducing complexity) … … 112 114 113 115 DistParam() 116 : pOrg(NULL), 117 pCur(NULL), 118 iStrideOrg(0), 119 iStrideCur(0), 120 iRows(0), 121 iCols(0), 122 iStep(1), 123 DistFunc(NULL), 124 bitDepth(0), 125 bApplyWeight(false), 126 bIsBiPred(false), 127 wpCur(NULL), 128 compIdx(MAX_NUM_COMPONENT), 129 m_maximumDistortionForEarlyExit(std::numeric_limits<Distortion>::max()), 130 iSubShift(0) 114 131 { 115 pOrg = NULL;116 pCur = NULL;117 iStrideOrg = 0;118 iStrideCur = 0;119 iRows = 0;120 iCols = 0;121 iStep = 1;122 DistFunc = NULL;123 iSubShift = 0;124 bitDepth = 0;125 132 #if NH_3D_VSO 126 133 // SAIT_VSO_EST_A0033 … … 146 153 Double m_dLambda; 147 154 Double m_sqrtLambda; 148 #if RExt__HIGH_BIT_DEPTH_SUPPORT149 155 Double m_dLambdaMotionSAD[2 /* 0=standard, 1=for transquant bypass when mixed-lossless cost evaluation enabled*/]; 150 156 Double m_dLambdaMotionSSE[2 /* 0=standard, 1=for transquant bypass when mixed-lossless cost evaluation enabled*/]; 151 #else152 UInt m_uiLambdaMotionSAD[2 /* 0=standard, 1=for transquant bypass when mixed-lossless cost evaluation enabled*/];153 UInt m_uiLambdaMotionSSE[2 /* 0=standard, 1=for transquant bypass when mixed-lossless cost evaluation enabled*/];154 #endif155 157 Double m_dFrameLambda; 156 158 #if NH_3D_VSO … … 161 163 // for motion cost 162 164 TComMv m_mvPredictor; 163 #if RExt__HIGH_BIT_DEPTH_SUPPORT 164 Double m_dCost; 165 #else 166 UInt m_uiCost; 167 #endif 165 Double m_motionLambda; 168 166 Int m_iCostScale; 169 167 #if NH_3D_DBBP … … 175 173 virtual ~TComRdCost(); 176 174 #if NH_3D_VSO 177 Double calcRdCost ( UInt uiBits, DistuiDistortion, Bool bFlag = false, DFunc eDFunc = DF_DEFAULT );178 Double calcRdCost 64( UInt64 uiBits, Dist64 uiDistortion, Bool bFlag = false, DFunc eDFunc= DF_DEFAULT );175 Double calcRdCost64( UInt64 uiBits , Dist64 uiDistortion, Bool bFlag = false, DFunc eDFunc = DF_DEFAULT ); 176 Double calcRdCost( Double numBits, Dist intDistortion, DFunc eDFunc = DF_DEFAULT ); 179 177 #else 180 Double calcRdCost ( UInt uiBits, Distortion uiDistortion, Bool bFlag = false, DFunc eDFunc = DF_DEFAULT );181 Double calcRdCost64( UInt64 uiBits, UInt64 uiDistortion, Bool bFlag = false, DFunc eDFunc = DF_DEFAULT ); 182 #endif 178 Double calcRdCost( Double numBits, Double distortion, DFunc eDFunc = DF_DEFAULT ); 179 #endif 180 183 181 184 182 Void setDistortionWeight ( const ComponentID compID, const Double distortionWeight ) { m_distortionWeight[compID] = distortionWeight; } … … 202 200 203 201 Void setDistParam( UInt uiBlkWidth, UInt uiBlkHeight, DFunc eDFunc, DistParam& rcDistParam ); 204 Void setDistParam( TComPattern* pcPatternKey,Pel* piRefY, Int iRefStride, DistParam& rcDistParam );205 Void setDistParam( TComPattern* pcPatternKey,Pel* piRefY, Int iRefStride, Int iStep, DistParam& rcDistParam, Bool bHADME=false );206 Void setDistParam( DistParam& rcDP, Int bitDepth, Pel* p1, Int iStride1,Pel* p2, Int iStride2, Int iWidth, Int iHeight, Bool bHadamard = false );202 Void setDistParam( const TComPattern* const pcPatternKey, const Pel* piRefY, Int iRefStride, DistParam& rcDistParam ); 203 Void setDistParam( const TComPattern* const pcPatternKey, const Pel* piRefY, Int iRefStride, Int iStep, DistParam& rcDistParam, Bool bHADME=false ); 204 Void setDistParam( DistParam& rcDP, Int bitDepth, const Pel* p1, Int iStride1, const Pel* p2, Int iStride2, Int iWidth, Int iHeight, Bool bHadamard = false ); 207 205 208 206 #if NH_3D_DBBP … … 210 208 #endif 211 209 212 Distortion calcHAD(Int bitDepth, Pel* pi0, Int iStride0,Pel* pi1, Int iStride1, Int iWidth, Int iHeight );210 Distortion calcHAD(Int bitDepth, const Pel* pi0, Int iStride0, const Pel* pi1, Int iStride1, Int iWidth, Int iHeight ); 213 211 214 212 #if NH_3D_ENC_DEPTH … … 218 216 // for motion cost 219 217 static UInt xGetExpGolombNumberOfBits( Int iVal ); 220 #if RExt__HIGH_BIT_DEPTH_SUPPORT 221 Void getMotionCost( Bool bSad, Int iAdd, Bool bIsTransquantBypass ) { m_dCost = (bSad ? m_dLambdaMotionSAD[(bIsTransquantBypass && m_costMode==COST_MIXED_LOSSLESS_LOSSY_CODING) ?1:0] + iAdd : m_dLambdaMotionSSE[(bIsTransquantBypass && m_costMode==COST_MIXED_LOSSLESS_LOSSY_CODING)?1:0] + iAdd); } 222 #else 223 Void getMotionCost( Bool bSad, Int iAdd, Bool bIsTransquantBypass ) { m_uiCost = (bSad ? m_uiLambdaMotionSAD[(bIsTransquantBypass && m_costMode==COST_MIXED_LOSSLESS_LOSSY_CODING) ?1:0] + iAdd : m_uiLambdaMotionSSE[(bIsTransquantBypass && m_costMode==COST_MIXED_LOSSLESS_LOSSY_CODING)?1:0] + iAdd); } 224 #endif 218 Void selectMotionLambda( Bool bSad, Int iAdd, Bool bIsTransquantBypass ) { m_motionLambda = (bSad ? m_dLambdaMotionSAD[(bIsTransquantBypass && m_costMode==COST_MIXED_LOSSLESS_LOSSY_CODING) ?1:0] + iAdd : m_dLambdaMotionSSE[(bIsTransquantBypass && m_costMode==COST_MIXED_LOSSLESS_LOSSY_CODING)?1:0] + iAdd); } 225 219 Void setPredictor( TComMv& rcMv ) 226 220 { … … 228 222 } 229 223 Void setCostScale( Int iCostScale ) { m_iCostScale = iCostScale; } 230 __inline Distortion getCost( Int x, Int y ) 224 Distortion getCost( UInt b ) { return Distortion(( m_motionLambda * b ) / 65536.0); } 225 Distortion getCostOfVectorWithPredictor( const Int x, const Int y ) 231 226 { 232 #if RExt__HIGH_BIT_DEPTH_SUPPORT 233 return Distortion((m_dCost * getBits(x, y)) / 65536.0); 234 #else 235 return m_uiCost * getBits(x, y) >> 16; 236 #endif 227 return Distortion((m_motionLambda * getBitsOfVectorWithPredictor(x, y)) / 65536.0); 237 228 } 238 #if RExt__HIGH_BIT_DEPTH_SUPPORT 239 Distortion getCost( UInt b ) { return Distortion(( m_dCost * b ) / 65536.0); } 240 #else 241 Distortion getCost( UInt b ) { return ( m_uiCost * b ) >> 16; } 242 #endif 243 UInt getBits( Int x, Int y ) 229 UInt getBitsOfVectorWithPredictor( const Int x, const Int y ) 244 230 { 245 231 return xGetExpGolombNumberOfBits((x << m_iCostScale) - m_mvPredictor.getHor()) … … 299 285 300 286 static Distortion xGetHADs ( DistParam* pcDtParam ); 301 static Distortion xCalcHADs2x2 ( Pel *piOrg,Pel *piCurr, Int iStrideOrg, Int iStrideCur, Int iStep );302 static Distortion xCalcHADs4x4 ( Pel *piOrg,Pel *piCurr, Int iStrideOrg, Int iStrideCur, Int iStep );303 static Distortion xCalcHADs8x8 ( Pel *piOrg,Pel *piCurr, Int iStrideOrg, Int iStrideCur, Int iStep );287 static Distortion xCalcHADs2x2 ( const Pel *piOrg, const Pel *piCurr, Int iStrideOrg, Int iStrideCur, Int iStep ); 288 static Distortion xCalcHADs4x4 ( const Pel *piOrg, const Pel *piCurr, Int iStrideOrg, Int iStrideCur, Int iStep ); 289 static Distortion xCalcHADs8x8 ( const Pel *piOrg, const Pel *piCurr, Int iStrideOrg, Int iStrideCur, Int iStep ); 304 290 #if NH_3D_DBBP 305 291 static UInt xGetMaskedSSE ( DistParam* pcDtParam ); … … 311 297 public: 312 298 313 Distortion getDistPart(Int bitDepth, Pel* piCur, Int iCurStride,Pel* piOrg, Int iOrgStride, UInt uiBlkWidth, UInt uiBlkHeight, const ComponentID compID, DFunc eDFunc = DF_SSE );299 Distortion getDistPart(Int bitDepth, const Pel* piCur, Int iCurStride, const Pel* piOrg, Int iOrgStride, UInt uiBlkWidth, UInt uiBlkHeight, const ComponentID compID, DFunc eDFunc = DF_SSE ); 314 300 315 301 #if KWU_RC_MADPRED_E0227 … … 320 306 // SAIT_VSO_EST_A0033 321 307 UInt getDistPartVSD( TComDataCU* pcCu, UInt uiPartOffset, Int bitDepth, Pel* piCur, Int iCurStride, Pel* piOrg, Int iOrgStride, UInt uiBlkWidth, UInt uiBlkHeight, Bool bHad, DFunc eDFunc = DF_VSD); 322 static UInt getVSDEstimate( Int dDM, Pel* pOrg, Int iOrgStride, Pel* pVirRec,Pel* pVirOrg, Int iVirStride, Int x, Int y );308 static UInt getVSDEstimate( Int dDM, const Pel* pOrg, Int iOrgStride, const Pel* pVirRec, const Pel* pVirOrg, Int iVirStride, Int x, Int y ); 323 309 324 310 private: -
TabularUnified trunk/source/Lib/TLibCommon/TComRdCostWeightPrediction.cpp ¶
r1313 r1386 70 70 const Int shift = wpCur.shift; 71 71 const Int round = wpCur.round; 72 const Int distortionShift = DISTORTION_PRECISION_ADJUSTMENT(pcDtParam->bitDepth-8); 72 73 73 74 Distortion uiSum = 0; 74 75 76 #if !U0040_MODIFIED_WEIGHTEDPREDICTION_WITH_BIPRED_AND_CLIPPING 75 77 for(Int iRows = pcDtParam->iRows; iRows != 0; iRows-- ) 76 78 { … … 80 82 81 83 uiSum += abs( piOrg[n] - pred ); 84 } 85 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift)) 86 { 87 return uiSum >> distortionShift; 82 88 } 83 89 piOrg += iStrideOrg; … … 86 92 87 93 pcDtParam->compIdx = MAX_NUM_COMPONENT; // reset for DEBUG (assert test) 88 89 return uiSum >> DISTORTION_PRECISION_ADJUSTMENT(pcDtParam->bitDepth-8); 94 #else 95 // Default weight 96 if (w0 == 1 << shift) 97 { 98 // no offset 99 if (offset == 0) 100 { 101 for(Int iRows = pcDtParam->iRows; iRows != 0; iRows-- ) 102 { 103 for (Int n = 0; n < iCols; n++ ) 104 { 105 uiSum += abs( piOrg[n] - piCur[n] ); 106 } 107 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift)) 108 { 109 return uiSum >> distortionShift; 110 } 111 piOrg += iStrideOrg; 112 piCur += iStrideCur; 113 } 114 } 115 else 116 { 117 // Lets not clip for the bipredictive case since clipping should be done after 118 // combining both elements. Unfortunately the code uses the suboptimal "subtraction" 119 // method, which is faster but introduces the clipping issue (therefore Bipred is suboptimal). 120 if (pcDtParam->bIsBiPred) 121 { 122 for(Int iRows = pcDtParam->iRows; iRows != 0; iRows-- ) 123 { 124 for (Int n = 0; n < iCols; n++ ) 125 { 126 uiSum += abs( piOrg[n] - (piCur[n] + offset) ); 127 } 128 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift)) 129 { 130 return uiSum >> distortionShift; 131 } 132 133 piOrg += iStrideOrg; 134 piCur += iStrideCur; 135 } 136 } 137 else 138 { 139 const Pel iMaxValue = (Pel) ((1 << pcDtParam->bitDepth) - 1); 140 for(Int iRows = pcDtParam->iRows; iRows != 0; iRows-- ) 141 { 142 for (Int n = 0; n < iCols; n++ ) 143 { 144 const Pel pred = Clip3((Pel) 0, iMaxValue, (Pel) (piCur[n] + offset)) ; 145 146 uiSum += abs( piOrg[n] - pred ); 147 } 148 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift)) 149 { 150 return uiSum >> distortionShift; 151 } 152 piOrg += iStrideOrg; 153 piCur += iStrideCur; 154 } 155 } 156 } 157 } 158 else 159 { 160 // Lets not clip for the bipredictive case since clipping should be done after 161 // combining both elements. Unfortunately the code uses the suboptimal "subtraction" 162 // method, which is faster but introduces the clipping issue (therefore Bipred is suboptimal). 163 if (pcDtParam->bIsBiPred) 164 { 165 for(Int iRows = pcDtParam->iRows; iRows != 0; iRows-- ) 166 { 167 for (Int n = 0; n < iCols; n++ ) 168 { 169 const Pel pred = ( (w0*piCur[n] + round) >> shift ) + offset ; 170 uiSum += abs( piOrg[n] - pred ); 171 } 172 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift)) 173 { 174 return uiSum >> distortionShift; 175 } 176 177 piOrg += iStrideOrg; 178 piCur += iStrideCur; 179 } 180 } 181 else 182 { 183 const Pel iMaxValue = (Pel) ((1 << pcDtParam->bitDepth) - 1); 184 185 if (offset == 0) 186 { 187 for(Int iRows = pcDtParam->iRows; iRows != 0; iRows-- ) 188 { 189 for (Int n = 0; n < iCols; n++ ) 190 { 191 const Pel pred = Clip3((Pel) 0, iMaxValue, (Pel) (( (w0*piCur[n] + round) >> shift ))) ; 192 193 uiSum += abs( piOrg[n] - pred ); 194 } 195 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift)) 196 { 197 return uiSum >> distortionShift; 198 } 199 piOrg += iStrideOrg; 200 piCur += iStrideCur; 201 } 202 } 203 else 204 { 205 for(Int iRows = pcDtParam->iRows; iRows != 0; iRows-- ) 206 { 207 for (Int n = 0; n < iCols; n++ ) 208 { 209 const Pel pred = Clip3((Pel) 0, iMaxValue, (Pel) (( (w0*piCur[n] + round) >> shift ) + offset)) ; 210 211 uiSum += abs( piOrg[n] - pred ); 212 } 213 if (pcDtParam->m_maximumDistortionForEarlyExit < ( uiSum >> distortionShift)) 214 { 215 return uiSum >> distortionShift; 216 } 217 piOrg += iStrideOrg; 218 piCur += iStrideCur; 219 } 220 } 221 } 222 } 223 //pcDtParam->compIdx = MAX_NUM_COMPONENT; // reset for DEBUG (assert test) 224 #endif 225 226 return uiSum >> distortionShift; 90 227 } 91 228 … … 119 256 Distortion sum = 0; 120 257 258 #if !U0040_MODIFIED_WEIGHTEDPREDICTION_WITH_BIPRED_AND_CLIPPING 121 259 for(Int iRows = pcDtParam->iRows ; iRows != 0; iRows-- ) 122 260 { … … 132 270 133 271 pcDtParam->compIdx = MAX_NUM_COMPONENT; // reset for DEBUG (assert test) 272 #else 273 if (pcDtParam->bIsBiPred) 274 { 275 for(Int iRows = pcDtParam->iRows ; iRows != 0; iRows-- ) 276 { 277 for (Int n = 0; n < iCols; n++ ) 278 { 279 const Pel pred = ( (w0*piCur[n] + round) >> shift ) + offset ; 280 const Pel residual = piOrg[n] - pred; 281 sum += ( Distortion(residual) * Distortion(residual) ) >> distortionShift; 282 } 283 piOrg += iStrideOrg; 284 piCur += iStrideCur; 285 } 286 } 287 else 288 { 289 const Pel iMaxValue = (Pel) ((1 << pcDtParam->bitDepth) - 1); 290 291 for(Int iRows = pcDtParam->iRows ; iRows != 0; iRows-- ) 292 { 293 for (Int n = 0; n < iCols; n++ ) 294 { 295 const Pel pred = Clip3((Pel) 0, iMaxValue, (Pel) (( (w0*piCur[n] + round) >> shift ) + offset)) ; 296 const Pel residual = piOrg[n] - pred; 297 sum += ( Distortion(residual) * Distortion(residual) ) >> distortionShift; 298 } 299 piOrg += iStrideOrg; 300 piCur += iStrideCur; 301 } 302 } 303 304 //pcDtParam->compIdx = MAX_NUM_COMPONENT; // reset for DEBUG (assert test) 305 #endif 134 306 135 307 return sum; … … 416 588 const ComponentID compIdx = pcDtParam->compIdx; 417 589 assert(compIdx<MAX_NUM_COMPONENT); 418 const WPScalingParam wpCur= pcDtParam->wpCur[compIdx];590 const WPScalingParam &wpCur = pcDtParam->wpCur[compIdx]; 419 591 420 592 Distortion uiSum = 0; -
TabularUnified trunk/source/Lib/TLibCommon/TComRom.cpp ¶
r1321 r1386 47 47 //! \ingroup TLibCommon 48 48 //! \{ 49 const Char* nalUnitTypeToString(NalUnitType type)49 const TChar* nalUnitTypeToString(NalUnitType type) 50 50 { 51 51 switch (type) … … 221 221 } 222 222 #if NH_MV 223 #if H_MV_HLS_PTL_LIMITS223 #if NH_MV_HLS_PTL_LIMITS 224 224 g_generalTierAndLevelLimits[ Level::LEVEL1 ] = TComGeneralTierAndLevelLimits( 36864, 350, MIN_INT, 16, 1, 1 ); 225 225 g_generalTierAndLevelLimits[ Level::LEVEL2 ] = TComGeneralTierAndLevelLimits( 122880, 1500, MIN_INT, 16, 1, 1 ); … … 532 532 // Misc. 533 533 // ==================================================================================================================== 534 Char g_aucConvertToBit [ MAX_CU_SIZE+1 ];534 SChar g_aucConvertToBit [ MAX_CU_SIZE+1 ]; 535 535 #if ENC_DEC_TRACE 536 536 FILE* g_hTrace = NULL; // Set to NULL to open up a file. Set to stdout to use the current output … … 540 540 Bool g_bJustDoIt = false; 541 541 UInt64 g_nSymbolCounter = 0; 542 #if H_MV_ENC_DEC_TRAC542 #if NH_MV_ENC_DEC_TRAC 543 543 Bool g_traceCU = false; 544 544 Bool g_tracePU = false; … … 582 582 const UInt g_uiMinInGroup[ LAST_SIGNIFICANT_GROUPS ] = {0,1,2,3,4,6,8,12,16,24}; 583 583 const UInt g_uiGroupIdx[ MAX_TU_SIZE ] = {0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9}; 584 const Char *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM] =584 const TChar *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM] = 585 585 { 586 586 { … … 617 617 }, 618 618 }; 619 const Char *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM] =619 const TChar *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM] = 620 620 { 621 621 { … … 671 671 const UInt g_scalingListSize [SCALING_LIST_SIZE_NUM] = {16,64,256,1024}; 672 672 const UInt g_scalingListSizeX [SCALING_LIST_SIZE_NUM] = { 4, 8, 16, 32}; 673 #if H_MV_ENC_DEC_TRAC673 #if NH_MV_ENC_DEC_TRAC 674 674 #if ENC_DEC_TRACE 675 Void tracePSHeader( const Char* psName, Int layerId )675 Void tracePSHeader( const TChar* psName, Int layerId ) 676 676 { 677 677 if ( !g_disableHLSTrace ) … … 727 727 } 728 728 } 729 Void writeToTraceFile( const Char* symbolName, Int val, Bool doIt )729 Void writeToTraceFile( const TChar* symbolName, Int val, Bool doIt ) 730 730 { 731 731 if ( ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) && doIt ) … … 749 749 return g_nSymbolCounter; 750 750 } 751 Void writeToTraceFile( const Char* symbolName, Bool doIt )751 Void writeToTraceFile( const TChar* symbolName, Bool doIt ) 752 752 { 753 753 if ( ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) && doIt ) -
TabularUnified trunk/source/Lib/TLibCommon/TComRom.h ¶
r1321 r1386 112 112 // ==================================================================================================================== 113 113 extern const TMatrixCoeff g_as_DST_MAT_4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4]; 114 #if H_MV_HLS_PTL_LIMITS114 #if NH_MV_HLS_PTL_LIMITS 115 115 class TComGeneralTierAndLevelLimits 116 116 { … … 149 149 // Misc. 150 150 // ==================================================================================================================== 151 extern Char g_aucConvertToBit [ MAX_CU_SIZE+1 ]; // from width to log2(width)-2151 extern SChar g_aucConvertToBit [ MAX_CU_SIZE+1 ]; // from width to log2(width)-2 152 152 #if NH_MV 153 153 // Change later … … 172 172 #define DTRACE_CABAC_R( x,y ) if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, x, y ); 173 173 #define DTRACE_CABAC_N if ( ( g_nSymbolCounter >= COUNTER_START && g_nSymbolCounter <= COUNTER_END )|| g_bJustDoIt ) fprintf( g_hTrace, "\n" ); 174 #if H_MV_ENC_DEC_TRAC174 #if NH_MV_ENC_DEC_TRAC 175 175 extern Bool g_traceCU; 176 176 extern Bool g_tracePU ; … … 206 206 #define D_PRINT_INC_INDENT( b, str ) prinStrIncIndent( b, str ); 207 207 #define D_PRINT_INDENT( b, str ) printStrIndent ( b, str); 208 Void tracePSHeader ( const Char* psName, Int layerId );209 Void writeToTraceFile( const Char* symbolName, Int val, Bool doIt );210 Void writeToTraceFile( const Char* symbolName, Bool doIt );208 Void tracePSHeader ( const TChar* psName, Int layerId ); 209 Void writeToTraceFile( const TChar* symbolName, Int val, Bool doIt ); 210 Void writeToTraceFile( const TChar* symbolName, Bool doIt ); 211 211 UInt64 incSymbolCounter(); 212 212 Void stopAtPos ( Int poc, Int layerId, Int cuPelX, Int cuPelY, Int cuWidth, Int cuHeight ); … … 243 243 #endif 244 244 #endif 245 const Char* nalUnitTypeToString(NalUnitType type); 246 extern const Char *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 247 extern const Char *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 245 const TChar* nalUnitTypeToString(NalUnitType type); 246 247 extern const TChar *MatrixType[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 248 extern const TChar *MatrixType_DC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; 248 249 extern const Int g_quantTSDefault4x4[4*4]; 249 250 extern const Int g_quantIntraDefault8x8[8*8]; -
TabularUnified trunk/source/Lib/TLibCommon/TComSampleAdaptiveOffset.cpp ¶
r1313 r1386 324 324 m_signLineBuf1 = NULL; 325 325 } 326 m_signLineBuf1 = new Char[m_lineBufWidth+1];326 m_signLineBuf1 = new SChar[m_lineBufWidth+1]; 327 327 328 328 if (m_signLineBuf2) … … 331 331 m_signLineBuf2 = NULL; 332 332 } 333 m_signLineBuf2 = new Char[m_lineBufWidth+1];333 m_signLineBuf2 = new SChar[m_lineBufWidth+1]; 334 334 } 335 335 … … 338 338 Int x,y, startX, startY, endX, endY, edgeType; 339 339 Int firstLineStartX, firstLineEndX, lastLineStartX, lastLineEndX; 340 Char signLeft, signRight, signDown;340 SChar signLeft, signRight, signDown; 341 341 342 342 Pel* srcLine = srcBlk; … … 352 352 for (y=0; y< height; y++) 353 353 { 354 signLeft = ( Char)sgn(srcLine[startX] - srcLine[startX-1]);354 signLeft = (SChar)sgn(srcLine[startX] - srcLine[startX-1]); 355 355 for (x=startX; x< endX; x++) 356 356 { 357 signRight = ( Char)sgn(srcLine[x] - srcLine[x+1]);357 signRight = (SChar)sgn(srcLine[x] - srcLine[x+1]); 358 358 edgeType = signRight + signLeft; 359 359 signLeft = -signRight; … … 370 370 { 371 371 offset += 2; 372 Char *signUpLine = m_signLineBuf1;372 SChar *signUpLine = m_signLineBuf1; 373 373 374 374 startY = isAboveAvail ? 0 : 1; … … 383 383 for (x=0; x< width; x++) 384 384 { 385 signUpLine[x] = ( Char)sgn(srcLine[x] - srcLineAbove[x]);385 signUpLine[x] = (SChar)sgn(srcLine[x] - srcLineAbove[x]); 386 386 } 387 387 … … 393 393 for (x=0; x< width; x++) 394 394 { 395 signDown = ( Char)sgn(srcLine[x] - srcLineBelow[x]);395 signDown = (SChar)sgn(srcLine[x] - srcLineBelow[x]); 396 396 edgeType = signDown + signUpLine[x]; 397 397 signUpLine[x]= -signDown; … … 408 408 { 409 409 offset += 2; 410 Char *signUpLine, *signDownLine, *signTmpLine;410 SChar *signUpLine, *signDownLine, *signTmpLine; 411 411 412 412 signUpLine = m_signLineBuf1; … … 420 420 for (x=startX; x< endX+1; x++) 421 421 { 422 signUpLine[x] = ( Char)sgn(srcLineBelow[x] - srcLine[x- 1]);422 signUpLine[x] = (SChar)sgn(srcLineBelow[x] - srcLine[x- 1]); 423 423 } 424 424 … … 444 444 for (x=startX; x<endX; x++) 445 445 { 446 signDown = ( Char)sgn(srcLine[x] - srcLineBelow[x+ 1]);446 signDown = (SChar)sgn(srcLine[x] - srcLineBelow[x+ 1]); 447 447 edgeType = signDown + signUpLine[x]; 448 448 resLine[x] = Clip3<Int>(0, maxSampleValueIncl, srcLine[x] + offset[edgeType]); … … 450 450 signDownLine[x+1] = -signDown; 451 451 } 452 signDownLine[startX] = ( Char)sgn(srcLineBelow[startX] - srcLine[startX-1]);452 signDownLine[startX] = (SChar)sgn(srcLineBelow[startX] - srcLine[startX-1]); 453 453 454 454 signTmpLine = signUpLine; … … 475 475 { 476 476 offset += 2; 477 Char *signUpLine = m_signLineBuf1+1;477 SChar *signUpLine = m_signLineBuf1+1; 478 478 479 479 startX = isLeftAvail ? 0 : 1; … … 484 484 for (x=startX-1; x< endX; x++) 485 485 { 486 signUpLine[x] = ( Char)sgn(srcLineBelow[x] - srcLine[x+1]);486 signUpLine[x] = (SChar)sgn(srcLineBelow[x] - srcLine[x+1]); 487 487 } 488 488 … … 507 507 for(x= startX; x< endX; x++) 508 508 { 509 signDown = ( Char)sgn(srcLine[x] - srcLineBelow[x-1]);509 signDown = (SChar)sgn(srcLine[x] - srcLineBelow[x-1]); 510 510 edgeType = signDown + signUpLine[x]; 511 511 resLine[x] = Clip3<Int>(0, maxSampleValueIncl, srcLine[x] + offset[edgeType]); 512 512 signUpLine[x-1] = -signDown; 513 513 } 514 signUpLine[endX-1] = ( Char)sgn(srcLineBelow[endX-1] - srcLine[endX]);514 signUpLine[endX-1] = (SChar)sgn(srcLineBelow[endX-1] - srcLine[endX]); 515 515 srcLine += srcStride; 516 516 resLine += resStride; -
TabularUnified trunk/source/Lib/TLibCommon/TComSampleAdaptiveOffset.h ¶
r1313 r1386 96 96 97 97 Int m_lineBufWidth; 98 Char* m_signLineBuf1;99 Char* m_signLineBuf2;98 SChar* m_signLineBuf1; 99 SChar* m_signLineBuf2; 100 100 ChromaFormat m_chromaFormatIDC; 101 101 private: -
TabularUnified trunk/source/Lib/TLibCommon/TComSlice.cpp ¶
r1321 r1386 118 118 , m_viewId (0) 119 119 , m_viewIndex (0) 120 #if NH_3D 120 #if NH_3D_VSO 121 121 , m_isDepth (false) 122 122 #endif … … 452 452 Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic, Bool checkNumPocTotalCurr ) 453 453 { 454 if (!checkNumPocTotalCurr)455 {456 454 if (m_eSliceType == I_SLICE) 457 455 { … … 459 457 ::memset( m_aiNumRefIdx, 0, sizeof ( m_aiNumRefIdx )); 460 458 459 if (!checkNumPocTotalCurr) 460 { 461 461 return; 462 462 } 463 464 m_aiNumRefIdx[REF_PIC_LIST_0] = getNumRefIdx(REF_PIC_LIST_0);465 m_aiNumRefIdx[REF_PIC_LIST_1] = getNumRefIdx(REF_PIC_LIST_1);466 463 } 467 464 … … 536 533 if (m_eSliceType == I_SLICE) 537 534 { 538 ::memset( m_apcRefPicList, 0, sizeof (m_apcRefPicList));539 ::memset( m_aiNumRefIdx, 0, sizeof ( m_aiNumRefIdx ));540 541 535 return; 542 536 } … … 545 539 // general tier and level limit: 546 540 assert(numPicTotalCurr <= 8); 547 548 m_aiNumRefIdx[0] = getNumRefIdx(REF_PIC_LIST_0);549 m_aiNumRefIdx[1] = getNumRefIdx(REF_PIC_LIST_1);550 541 } 551 542 … … 1932 1923 for ( Int i = 0; i < MAX_VPS_OUTPUTLAYER_SETS; i++) 1933 1924 { 1925 #if !NH_3D_FIX_TICKET_107 1934 1926 m_layerSetIdxForOlsMinus1[i] = -1; 1927 #endif 1935 1928 for ( Int j = 0; j < MAX_VPS_NUH_LAYER_ID_PLUS1; j++) 1936 1929 { … … 2191 2184 } 2192 2185 2193 #if NH_3D 2194 Int TComVPS::getLayerIdInNuh( Int viewIndex, Bool depthFlag ) const2186 #if NH_3D_VSO 2187 Int TComVPS::getLayerIdInNuh( Int viewIndex, Bool depthFlag, Int auxId ) const 2195 2188 { 2196 2189 Int foundLayerIdinNuh = -1; … … 2199 2192 { 2200 2193 Int layerIdInNuh = getLayerIdInNuh( layerIdInVps ); 2194 #if !NH_3D 2195 if( ( getViewIndex( layerIdInNuh ) == viewIndex ) && ( getAuxId( layerIdInNuh ) == ( depthFlag ? 2 : 0 ) ) ) 2196 #else 2201 2197 if( ( getViewIndex( layerIdInNuh ) == viewIndex ) && ( getDepthId( layerIdInNuh ) == ( depthFlag ? 1 : 0 ) ) ) 2198 #endif 2202 2199 { 2203 2200 foundLayerIdinNuh = layerIdInNuh; … … 2207 2204 return foundLayerIdinNuh; 2208 2205 } 2209 2206 #endif 2207 #if NH_3D 2210 2208 Void TComVPS::createCamPars(Int iNumViews) 2211 2209 { … … 2767 2765 m_uiSpsMaxLatencyIncreasePlus1[i] = 0; 2768 2766 #else 2769 m_uiMaxLatencyIncrease [i] = 0;2767 m_uiMaxLatencyIncreasePlus1[i] = 0; 2770 2768 #endif 2771 2769 m_uiMaxDecPicBuffering[i] = 1; … … 3676 3674 } 3677 3675 tempRefPicInListsFlag = (getFirstTRefIdx(REF_PIC_LIST_0) >= 0 || getFirstTRefIdx(REF_PIC_LIST_1) >= 0) && getDefaultRefViewIdxAvailableFlag(); 3678 m_nARPStepNum = tempRefPicInListsFlag ? H_3D_ARP_WFNR: 0;3676 m_nARPStepNum = tempRefPicInListsFlag ? 3 : 0; 3679 3677 } 3680 3678 … … 3866 3864 } 3867 3865 #endif 3868 #if NH_3D 3866 #if NH_3D_QTL 3869 3867 Void TComSlice::setIvPicLists( TComPicLists* m_ivPicLists ) 3870 3868 { … … 3873 3871 for ( Int depthId = 0; depthId < 2; depthId++ ) 3874 3872 { 3875 m_ivPicsCurrPoc[ depthId ][ i ] = ( i <= m_viewIndex ) ? m_ivPicLists->getPic( i, ( depthId == 1) , getPOC() ) : NULL;3873 m_ivPicsCurrPoc[ depthId ][ i ] = ( i <= m_viewIndex ) ? m_ivPicLists->getPic( i, ( depthId == 1) , 0, getPOC() ) : NULL; 3876 3874 } 3877 3875 } 3878 3876 } 3877 #endif 3878 #if NH_3D 3879 3879 Void TComSlice::setDepthToDisparityLUTs() 3880 3880 { … … 3937 3937 { 3938 3938 Int iInVoi = vps->getVoiInVps( i ); 3939 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC3939 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 3940 3940 if ( g_traceCameraParameters ) 3941 3941 { … … 4320 4320 const TComSps3dExtension* sps3dExt = getSPS()->getSps3dExtension(); 4321 4321 4322 m_ivMvPredFlag = sps3dExt->getIv MvPredFlag( depthFlag ) && nRLLG0 ;4323 m_ivMvScalingFlag = sps3dExt->getIvMvScal ingFlag( depthFlag ) ;4324 m_ivResPredFlag = sps3dExt->getIvResPred Flag( depthFlag ) && nRLLG0 ;4325 m_depthRefinementFlag = sps3dExt->getDepthRef inementFlag( depthFlag ) && getInCompPredFlag() && m_cpAvailableFlag;4326 m_viewSynthesisPredFlag = sps3dExt->getV iewSynthesisPredFlag( depthFlag ) && nRLLG0 && getInCompPredFlag() && m_cpAvailableFlag;4327 m_depthBasedBlkPartFlag = sps3dExt->getD epthBasedBlkPartFlag( depthFlag ) && getInCompPredFlag();4328 m_mpiFlag = sps3dExt->get MpiFlag( depthFlag ) && getInCompPredFlag();4329 m_intraContourFlag = sps3dExt->getIntraContour Flag( depthFlag ) && getInCompPredFlag();4330 m_intraSdcWedgeFlag = sps3dExt->getIntra SdcWedgeFlag( depthFlag ) ;4331 m_qtPredFlag = sps3dExt->get QtPredFlag( depthFlag ) && getInCompPredFlag();4332 m_interSdcFlag = sps3dExt->getInter SdcFlag( depthFlag ) ;4333 m_depthIntraSkipFlag = sps3dExt->get DepthIntraSkipFlag( depthFlag ) ;4334 4335 m_subPbSize = 1 << ( sps3dExt->getLog2 SubPbSizeMinus3( depthFlag ) + 3 );4336 m_mpiSubPbSize = 1 << ( sps3dExt->getLog2 MpiSubPbSizeMinus3( depthFlag ) + 3 );4337 4338 4339 #if H_3D_OUTPUT_ACTIVE_TOOLS4322 m_ivMvPredFlag = sps3dExt->getIvDiMcEnabledFlag ( depthFlag ) && nRLLG0 ; 4323 m_ivMvScalingFlag = sps3dExt->getIvMvScalEnabledFlag ( depthFlag ) ; 4324 m_ivResPredFlag = sps3dExt->getIvResPredEnabledFlag ( depthFlag ) && nRLLG0 ; 4325 m_depthRefinementFlag = sps3dExt->getDepthRefEnabledFlag ( depthFlag ) && getInCompPredFlag() && m_cpAvailableFlag; 4326 m_viewSynthesisPredFlag = sps3dExt->getVspMcEnabledFlag ( depthFlag ) && nRLLG0 && getInCompPredFlag() && m_cpAvailableFlag; 4327 m_depthBasedBlkPartFlag = sps3dExt->getDbbpEnabledFlag ( depthFlag ) && getInCompPredFlag(); 4328 m_mpiFlag = sps3dExt->getTexMcEnabledFlag ( depthFlag ) && getInCompPredFlag(); 4329 m_intraContourFlag = sps3dExt->getIntraContourEnabledFlag ( depthFlag ) && getInCompPredFlag(); 4330 m_intraSdcWedgeFlag = sps3dExt->getIntraDcOnlyWedgeEnabledFlag( depthFlag ) ; 4331 m_qtPredFlag = sps3dExt->getCqtCuPartPredEnabledFlag ( depthFlag ) && getInCompPredFlag(); 4332 m_interSdcFlag = sps3dExt->getInterDcOnlyEnabledFlag ( depthFlag ) ; 4333 m_depthIntraSkipFlag = sps3dExt->getSkipIntraEnabledFlag ( depthFlag ) ; 4334 4335 m_subPbSize = 1 << ( sps3dExt->getLog2IvmcSubPbSizeMinus3 ( depthFlag ) + 3 ); 4336 m_mpiSubPbSize = 1 << ( sps3dExt->getLog2TexmcSubPbSizeMinus3( depthFlag ) + 3 ); 4337 4338 4339 #if NH_3D_OUTPUT_ACTIVE_TOOLS 4340 4340 std::cout << "Layer: :" << getLayerId() << std::endl; 4341 4341 std::cout << "DepthFlag: :" << getIsDepth() << std::endl; … … 4415 4415 if( !getIsDepth() ) 4416 4416 { 4417 m_inCmpPredAvailFlag = sps3dExt->getV iewSynthesisPredFlag( getIsDepth() ) ||4418 sps3dExt->getD epthBasedBlkPartFlag( getIsDepth() ) ||4419 sps3dExt->getDepthRef inementFlag ( getIsDepth() );4417 m_inCmpPredAvailFlag = sps3dExt->getVspMcEnabledFlag( getIsDepth() ) || 4418 sps3dExt->getDbbpEnabledFlag( getIsDepth() ) || 4419 sps3dExt->getDepthRefEnabledFlag ( getIsDepth() ); 4420 4420 } 4421 4421 else 4422 4422 { 4423 m_inCmpPredAvailFlag = sps3dExt->getIntraContour Flag( getIsDepth() ) ||4424 sps3dExt->get QtPredFlag( getIsDepth() ) ||4425 sps3dExt->get MpiFlag( getIsDepth() );4423 m_inCmpPredAvailFlag = sps3dExt->getIntraContourEnabledFlag( getIsDepth() ) || 4424 sps3dExt->getCqtCuPartPredEnabledFlag( getIsDepth() ) || 4425 sps3dExt->getTexMcEnabledFlag( getIsDepth() ); 4426 4426 } 4427 4427 } … … 4545 4545 } 4546 4546 4547 Bool TComScalingList::xParseScalingList( Char* pchFile)4547 Bool TComScalingList::xParseScalingList(const std::string &fileName) 4548 4548 { 4549 4549 static const Int LINE_SIZE=1024; 4550 4550 FILE *fp = NULL; 4551 Char line[LINE_SIZE];4552 4553 if ( pchFile == NULL)4551 TChar line[LINE_SIZE]; 4552 4553 if (fileName.empty()) 4554 4554 { 4555 4555 fprintf(stderr, "Error: no scaling list file specified. Help on scaling lists being output\n"); … … 4560 4560 return true; 4561 4561 } 4562 else if ((fp = fopen( pchFile,"r")) == (FILE*)NULL)4563 { 4564 fprintf(stderr, "Error: cannot open scaling list file %s for reading\n", pchFile);4562 else if ((fp = fopen(fileName.c_str(),"r")) == (FILE*)NULL) 4563 { 4564 fprintf(stderr, "Error: cannot open scaling list file %s for reading\n", fileName.c_str()); 4565 4565 return true; 4566 4566 } … … 4590 4590 while ((!feof(fp)) && (!bFound)) 4591 4591 { 4592 Char *ret = fgets(line, LINE_SIZE, fp);4593 Char *findNamePosition= ret==NULL ? NULL : strstr(line, MatrixType[sizeIdc][listIdc]);4592 TChar *ret = fgets(line, LINE_SIZE, fp); 4593 TChar *findNamePosition= ret==NULL ? NULL : strstr(line, MatrixType[sizeIdc][listIdc]); 4594 4594 // This could be a match against the DC string as well, so verify it isn't 4595 4595 if (findNamePosition!= NULL && (MatrixType_DC[sizeIdc][listIdc]==NULL || strstr(line, MatrixType_DC[sizeIdc][listIdc])==NULL)) … … 4600 4600 if (!bFound) 4601 4601 { 4602 fprintf(stderr, "Error: cannot find Matrix %s from scaling list file %s\n", MatrixType[sizeIdc][listIdc], pchFile);4602 fprintf(stderr, "Error: cannot find Matrix %s from scaling list file %s\n", MatrixType[sizeIdc][listIdc], fileName.c_str()); 4603 4603 return true; 4604 4604 } … … 4609 4609 if (fscanf(fp, "%d,", &data)!=1) 4610 4610 { 4611 fprintf(stderr, "Error: cannot read value #%d for Matrix %s from scaling list file %s at file position %ld\n", i, MatrixType[sizeIdc][listIdc], pchFile, ftell(fp));4611 fprintf(stderr, "Error: cannot read value #%d for Matrix %s from scaling list file %s at file position %ld\n", i, MatrixType[sizeIdc][listIdc], fileName.c_str(), ftell(fp)); 4612 4612 return true; 4613 4613 } 4614 4614 if (data<0 || data>255) 4615 4615 { 4616 fprintf(stderr, "Error: QMatrix entry #%d of value %d for Matrix %s from scaling list file %s at file position %ld is out of range (0 to 255)\n", i, data, MatrixType[sizeIdc][listIdc], pchFile, ftell(fp));4616 fprintf(stderr, "Error: QMatrix entry #%d of value %d for Matrix %s from scaling list file %s at file position %ld is out of range (0 to 255)\n", i, data, MatrixType[sizeIdc][listIdc], fileName.c_str(), ftell(fp)); 4617 4617 return true; 4618 4618 } … … 4630 4630 while ((!feof(fp)) && (!bFound)) 4631 4631 { 4632 Char *ret = fgets(line, LINE_SIZE, fp);4633 Char *findNamePosition= ret==NULL ? NULL : strstr(line, MatrixType_DC[sizeIdc][listIdc]);4632 TChar *ret = fgets(line, LINE_SIZE, fp); 4633 TChar *findNamePosition= ret==NULL ? NULL : strstr(line, MatrixType_DC[sizeIdc][listIdc]); 4634 4634 if (findNamePosition!= NULL) 4635 4635 { … … 4640 4640 if (!bFound) 4641 4641 { 4642 fprintf(stderr, "Error: cannot find DC Matrix %s from scaling list file %s\n", MatrixType_DC[sizeIdc][listIdc], pchFile);4642 fprintf(stderr, "Error: cannot find DC Matrix %s from scaling list file %s\n", MatrixType_DC[sizeIdc][listIdc], fileName.c_str()); 4643 4643 return true; 4644 4644 } … … 4647 4647 if (fscanf(fp, "%d,", &data)!=1) 4648 4648 { 4649 fprintf(stderr, "Error: cannot read DC %s from scaling list file %s at file position %ld\n", MatrixType_DC[sizeIdc][listIdc], pchFile, ftell(fp));4649 fprintf(stderr, "Error: cannot read DC %s from scaling list file %s at file position %ld\n", MatrixType_DC[sizeIdc][listIdc], fileName.c_str(), ftell(fp)); 4650 4650 return true; 4651 4651 } 4652 4652 if (data<0 || data>255) 4653 4653 { 4654 fprintf(stderr, "Error: DC value %d for Matrix %s from scaling list file %s at file position %ld is out of range (0 to 255)\n", data, MatrixType[sizeIdc][listIdc], pchFile, ftell(fp));4654 fprintf(stderr, "Error: DC value %d for Matrix %s from scaling list file %s at file position %ld is out of range (0 to 255)\n", data, MatrixType[sizeIdc][listIdc], fileName.c_str(), ftell(fp)); 4655 4655 return true; 4656 4656 } -
TabularUnified trunk/source/Lib/TLibCommon/TComSlice.h ¶
r1321 r1386 292 292 Void checkDcOfMatrix(); 293 293 Void processRefMatrix(UInt sizeId, UInt listId , UInt refListId ); 294 Bool xParseScalingList( Char* pchFile);294 Bool xParseScalingList(const std::string &fileName); 295 295 #if NH_MV 296 296 Void inferFrom ( const TComScalingList& srcScLi ); … … 1384 1384 /// VPS EXTENSION 2 SYNTAX ELEMENTS 1385 1385 Int getDepthId ( Int layerIdInNuh) const { return getScalabilityId( getLayerIdInVps(layerIdInNuh), DEPTH_ID ); } 1386 #if NH_3D 1386 #if NH_3D_VSO 1387 1387 Bool getVpsDepthFlag ( Int layerIdInNuh) const { return (getDepthId( layerIdInNuh ) > 0); } 1388 Int getLayerIdInNuh ( Int viewIndex, Bool depthFlag ) const; 1389 1388 Int getLayerIdInNuh ( Int viewIndex, Bool depthFlag, Int auxId ) const; 1389 #endif 1390 #if NH_3D 1390 1391 Void createCamPars ( Int iNumViews ); 1391 1392 Void initCamParaVPS ( Int vOIdxInVps, Int numCp, Bool cpInSliceSegmentHeaderFlag, Int* cpRefVoi, Int** aaiScale, Int** aaiOffset ); … … 1426 1427 #endif 1427 1428 1428 template <typename T, typename S, typename U> Void xPrintArray( const Char* name, Int numElemDim1, U idx, S numElemDim2, T vec, Bool printNumber, Bool printIdx = true ) const1429 template <typename T, typename S, typename U> Void xPrintArray( const TChar* name, Int numElemDim1, U idx, S numElemDim2, T vec, Bool printNumber, Bool printIdx = true ) const 1429 1430 { 1430 1431 std::cout << std::endl; … … 1810 1811 for (Int d = 0; d < 2; d++) 1811 1812 { 1812 m_iv MvPredFlag [d] = false;1813 m_ivMvScal ingFlag [d] = false;1814 m_log2 SubPbSizeMinus3 [d] = 3;1815 m_ivResPred Flag [d] = false;1816 m_depthRef inementFlag [d] = false;1817 m_v iewSynthesisPredFlag [d] = false;1818 m_d epthBasedBlkPartFlag [d] = false;1819 m_ mpiFlag [d] = false;1820 m_log2 MpiSubPbSizeMinus3[d] = 3;1821 m_intraContour Flag [d] = false;1822 m_intra SdcWedgeFlag [d] = false;1823 m_ qtPredFlag [d] = false;1824 m_inter SdcFlag [d] = false;1825 m_ depthIntraSkipFlag [d] = false;1813 m_ivDiMcEnabledFlag [d] = false; 1814 m_ivMvScalEnabledFlag [d] = false; 1815 m_log2IvmcSubPbSizeMinus3 [d] = 3; 1816 m_ivResPredEnabledFlag [d] = false; 1817 m_depthRefEnabledFlag [d] = false; 1818 m_vspMcEnabledFlag [d] = false; 1819 m_dbbpEnabledFlag [d] = false; 1820 m_texMcEnabledFlag [d] = false; 1821 m_log2TexmcSubPbSizeMinus3[d] = 3; 1822 m_intraContourEnabledFlag [d] = false; 1823 m_intraDcOnlyWedgeEnabledFlag [d] = false; 1824 m_cqtCuPartPredEnabledFlag [d] = false; 1825 m_interDcOnlyEnabledFlag [d] = false; 1826 m_skipIntraEnabledFlag [d] = false; 1826 1827 } 1827 1828 } 1828 1829 1829 Void setIv MvPredFlag( Int d, Bool flag ) { m_ivMvPredFlag[d] = flag; }1830 Bool getIv MvPredFlag( Int d ) const { return m_ivMvPredFlag[d]; }1831 1832 Void setIvMvScal ingFlag( Int d, Bool flag ) { m_ivMvScalingFlag[d] = flag; }1833 Bool getIvMvScal ingFlag( Int d ) const { return m_ivMvScalingFlag[d]; }1834 1835 Void setLog2 SubPbSizeMinus3( Int d, Int val ) { m_log2SubPbSizeMinus3[d] = val; }1836 Int getLog2 SubPbSizeMinus3( Int d ) const { return m_log2SubPbSizeMinus3[d]; }1837 1838 Void setIvResPred Flag( Int d, Bool flag ) { m_ivResPredFlag[d] = flag; }1839 Bool getIvResPred Flag( Int d ) const { return m_ivResPredFlag[d]; }1840 1841 Void setDepthRef inementFlag( Int d, Bool flag ) { m_depthRefinementFlag[d] = flag; }1842 Bool getDepthRef inementFlag( Int d ) const { return m_depthRefinementFlag[d]; }1843 1844 Void setV iewSynthesisPredFlag( Int d, Bool flag ) { m_viewSynthesisPredFlag[d] = flag; }1845 Bool getV iewSynthesisPredFlag( Int d ) const { return m_viewSynthesisPredFlag[d]; }1846 1847 Void setD epthBasedBlkPartFlag( Int d, Bool flag ) { m_depthBasedBlkPartFlag[d] = flag; }1848 Bool getD epthBasedBlkPartFlag( Int d ) const { return m_depthBasedBlkPartFlag[d]; }1849 1850 Void set MpiFlag( Int d, Bool flag ) { m_mpiFlag[d] = flag; }1851 Bool get MpiFlag( Int d ) const { return m_mpiFlag[d]; }1852 1853 Void setLog2 MpiSubPbSizeMinus3( Int d, Int val ) { m_log2MpiSubPbSizeMinus3[d] = val; }1854 Int getLog2 MpiSubPbSizeMinus3( Int d ) const { return m_log2MpiSubPbSizeMinus3[d]; }1855 1856 Void setIntraContour Flag( Int d, Bool flag ) { m_intraContourFlag[d] = flag; }1857 Bool getIntraContour Flag( Int d ) const { return m_intraContourFlag[d]; }1858 1859 Void setIntra SdcWedgeFlag( Int d, Bool flag ) { m_intraSdcWedgeFlag[d] = flag; }1860 Bool getIntra SdcWedgeFlag( Int d ) const { return m_intraSdcWedgeFlag[d]; }1861 1862 Void set QtPredFlag( Int d, Bool flag ) { m_qtPredFlag[d] = flag; }1863 Bool get QtPredFlag( Int d ) const { return m_qtPredFlag[d]; }1864 1865 Void setInter SdcFlag( Int d, Bool flag ) { m_interSdcFlag[d] = flag; }1866 Bool getInter SdcFlag( Int d ) const { return m_interSdcFlag[d]; }1867 1868 Void set DepthIntraSkipFlag( Int d, Bool flag ) { m_depthIntraSkipFlag[d] = flag; }1869 Bool get DepthIntraSkipFlag( Int d ) const { return m_depthIntraSkipFlag[d]; }1830 Void setIvDiMcEnabledFlag( Int d, Bool flag ) { m_ivDiMcEnabledFlag[d] = flag; } 1831 Bool getIvDiMcEnabledFlag( Int d ) const { return m_ivDiMcEnabledFlag[d]; } 1832 1833 Void setIvMvScalEnabledFlag( Int d, Bool flag ) { m_ivMvScalEnabledFlag[d] = flag; } 1834 Bool getIvMvScalEnabledFlag( Int d ) const { return m_ivMvScalEnabledFlag[d]; } 1835 1836 Void setLog2IvmcSubPbSizeMinus3( Int d, Int val ) { m_log2IvmcSubPbSizeMinus3[d] = val; } 1837 Int getLog2IvmcSubPbSizeMinus3( Int d ) const { return m_log2IvmcSubPbSizeMinus3[d]; } 1838 1839 Void setIvResPredEnabledFlag( Int d, Bool flag ) { m_ivResPredEnabledFlag[d] = flag; } 1840 Bool getIvResPredEnabledFlag( Int d ) const { return m_ivResPredEnabledFlag[d]; } 1841 1842 Void setDepthRefEnabledFlag( Int d, Bool flag ) { m_depthRefEnabledFlag[d] = flag; } 1843 Bool getDepthRefEnabledFlag( Int d ) const { return m_depthRefEnabledFlag[d]; } 1844 1845 Void setVspMcEnabledFlag( Int d, Bool flag ) { m_vspMcEnabledFlag[d] = flag; } 1846 Bool getVspMcEnabledFlag( Int d ) const { return m_vspMcEnabledFlag[d]; } 1847 1848 Void setDbbpEnabledFlag( Int d, Bool flag ) { m_dbbpEnabledFlag[d] = flag; } 1849 Bool getDbbpEnabledFlag( Int d ) const { return m_dbbpEnabledFlag[d]; } 1850 1851 Void setTexMcEnabledFlag( Int d, Bool flag ) { m_texMcEnabledFlag[d] = flag; } 1852 Bool getTexMcEnabledFlag( Int d ) const { return m_texMcEnabledFlag[d]; } 1853 1854 Void setLog2TexmcSubPbSizeMinus3( Int d, Int val ) { m_log2TexmcSubPbSizeMinus3[d] = val; } 1855 Int getLog2TexmcSubPbSizeMinus3( Int d ) const { return m_log2TexmcSubPbSizeMinus3[d]; } 1856 1857 Void setIntraContourEnabledFlag( Int d, Bool flag ) { m_intraContourEnabledFlag[d] = flag; } 1858 Bool getIntraContourEnabledFlag( Int d ) const { return m_intraContourEnabledFlag[d]; } 1859 1860 Void setIntraDcOnlyWedgeEnabledFlag( Int d, Bool flag ) { m_intraDcOnlyWedgeEnabledFlag[d] = flag; } 1861 Bool getIntraDcOnlyWedgeEnabledFlag( Int d ) const { return m_intraDcOnlyWedgeEnabledFlag[d]; } 1862 1863 Void setCqtCuPartPredEnabledFlag( Int d, Bool flag ) { m_cqtCuPartPredEnabledFlag[d] = flag; } 1864 Bool getCqtCuPartPredEnabledFlag( Int d ) const { return m_cqtCuPartPredEnabledFlag[d]; } 1865 1866 Void setInterDcOnlyEnabledFlag( Int d, Bool flag ) { m_interDcOnlyEnabledFlag[d] = flag; } 1867 Bool getInterDcOnlyEnabledFlag( Int d ) const { return m_interDcOnlyEnabledFlag[d]; } 1868 1869 Void setSkipIntraEnabledFlag( Int d, Bool flag ) { m_skipIntraEnabledFlag[d] = flag; } 1870 Bool getSkipIntraEnabledFlag( Int d ) const { return m_skipIntraEnabledFlag[d]; } 1870 1871 private: 1871 1872 1872 Bool m_iv MvPredFlag [2];1873 Bool m_ivMvScal ingFlag[2];1874 Int m_log2 SubPbSizeMinus3[2];1875 Bool m_ivResPred Flag[2];1876 Bool m_depthRef inementFlag[2];1877 Bool m_v iewSynthesisPredFlag[2];1878 Bool m_d epthBasedBlkPartFlag[2];1879 Bool m_ mpiFlag[2];1880 Int m_log2 MpiSubPbSizeMinus3[2];1881 Bool m_intraContour Flag[2];1882 Bool m_intra SdcWedgeFlag[2];1883 Bool m_ qtPredFlag[2];1884 Bool m_inter SdcFlag[2];1885 Bool m_ depthIntraSkipFlag[2];1873 Bool m_ivDiMcEnabledFlag [2]; 1874 Bool m_ivMvScalEnabledFlag [2]; 1875 Int m_log2IvmcSubPbSizeMinus3 [2]; 1876 Bool m_ivResPredEnabledFlag [2]; 1877 Bool m_depthRefEnabledFlag [2]; 1878 Bool m_vspMcEnabledFlag [2]; 1879 Bool m_dbbpEnabledFlag [2]; 1880 Bool m_texMcEnabledFlag [2]; 1881 Int m_log2TexmcSubPbSizeMinus3 [2]; 1882 Bool m_intraContourEnabledFlag [2]; 1883 Bool m_intraDcOnlyWedgeEnabledFlag[2]; 1884 Bool m_cqtCuPartPredEnabledFlag [2]; 1885 Bool m_interDcOnlyEnabledFlag [2]; 1886 Bool m_skipIntraEnabledFlag [2]; 1886 1887 }; 1887 1888 … … 1955 1956 #if NH_MV 1956 1957 UInt m_uiSpsMaxLatencyIncreasePlus1[MAX_TLAYER]; 1957 // Calling a member m_uiMaxLatencyIncrease although it is m_uiMaxLatencyIncreasePlus1 is really bad style.1958 1958 #else 1959 UInt m_uiMaxLatencyIncrease [MAX_TLAYER]; // Really max latency increase plus 1 (value 0 expresses no limit)1959 UInt m_uiMaxLatencyIncreasePlus1[MAX_TLAYER]; 1960 1960 #endif 1961 1961 … … 2135 2135 Bool getScalingListPresentFlag() const { return m_scalingListPresentFlag; } 2136 2136 Void setScalingListPresentFlag( Bool b ) { m_scalingListPresentFlag = b; } 2137 Void setScalingList( TComScalingList *scalingList);2138 2137 TComScalingList& getScalingList() { return m_scalingList; } 2139 2138 const TComScalingList& getScalingList() const { return m_scalingList; } … … 2146 2145 Int getSpsMaxLatencyPictures( Int i ) const { return ( getSpsMaxNumReorderPics(i) + getSpsMaxLatencyIncreasePlus1(i)-1); } 2147 2146 #else 2148 UInt getMaxLatencyIncrease (UInt tlayer) const { return m_uiMaxLatencyIncrease[tlayer];}2149 Void setMaxLatencyIncrease ( UInt ui , UInt tlayer) { m_uiMaxLatencyIncrease[tlayer] = ui;}2147 UInt getMaxLatencyIncreasePlus1(UInt tlayer) const { return m_uiMaxLatencyIncreasePlus1[tlayer]; } 2148 Void setMaxLatencyIncreasePlus1( UInt ui , UInt tlayer) { m_uiMaxLatencyIncreasePlus1[tlayer] = ui; } 2150 2149 #endif 2151 2150 … … 2166 2165 const TComSPSRExt& getSpsRangeExtension() const { return m_spsRangeExtension; } 2167 2166 TComSPSRExt& getSpsRangeExtension() { return m_spsRangeExtension; } 2168 2169 // Sequence parameter set range extension syntax2170 // WAS: getUseResidualRotation and setUseResidualRotation2171 // Now getSpsRangeExtension().getTransformSkipRotationEnabledFlag and getSpsRangeExtension().setTransformSkipRotationEnabledFlag2172 2173 // WAS: getUseSingleSignificanceMapContext and setUseSingleSignificanceMapContext2174 // Now: getSpsRangeExtension().getTransformSkipContextEnabledFlag and getSpsRangeExtension().setTransformSkipContextEnabledFlag2175 2176 // WAS: getUseResidualDPCM and setUseResidualDPCM2177 // Now: getSpsRangeExtension().getRdpcmEnabledFlag and getSpsRangeExtension().setRdpcmEnabledFlag and2178 2179 // WAS: getUseExtendedPrecision and setUseExtendedPrecision2180 // Now: getSpsRangeExtension().getExtendedPrecisionProcessingFlag and getSpsRangeExtension().setExtendedPrecisionProcessingFlag2181 2182 // WAS: getDisableIntraReferenceSmoothing and setDisableIntraReferenceSmoothing2183 // Now: getSpsRangeExtension().getIntraSmoothingDisabledFlag and getSpsRangeExtension().setIntraSmoothingDisabledFlag2184 2185 // WAS: getUseHighPrecisionPredictionWeighting and setUseHighPrecisionPredictionWeighting2186 // Now: getSpsRangeExtension().getHighPrecisionOffsetsEnabledFlag and getSpsRangeExtension().setHighPrecisionOffsetsEnabledFlag2187 2188 // WAS: getUseGolombRiceParameterAdaptation and setUseGolombRiceParameterAdaptation2189 // Now: getSpsRangeExtension().getPersistentRiceAdaptationEnabledFlag and getSpsRangeExtension().setPersistentRiceAdaptationEnabledFlag2190 2191 // WAS: getAlignCABACBeforeBypass and setAlignCABACBeforeBypass2192 // Now: getSpsRangeExtension().getCabacBypassAlignmentEnabledFlag and getSpsRangeExtension().setCabacBypassAlignmentEnabledFlag2193 2194 2167 2195 2168 #if NH_MV … … 2274 2247 virtual ~TComRefPicListModification(); 2275 2248 2276 Void create();2277 Void destroy();2278 2249 2279 2250 Bool getRefPicListModificationFlagL0() const { return m_refPicListModificationFlagL0; } … … 2299 2270 Void setListEntryL0( Int i, Int val ) { m_RefPicSetIdxL0[i] = val; } 2300 2271 Void setListEntryL1( Int i, Int val ) { m_RefPicSetIdxL1[i] = val; } 2301 2302 2303 2272 #endif 2304 2273 }; 2274 2305 2275 2306 2276 /// PPS RExt class … … 2556 2526 const TComPPSRExt& getPpsRangeExtension() const { return m_ppsRangeExtension; } 2557 2527 TComPPSRExt& getPpsRangeExtension() { return m_ppsRangeExtension; } 2558 2559 // WAS: getTransformSkipLog2MaxSize and setTransformSkipLog2MaxSize2560 // Now: getPpsRangeExtension().getLog2MaxTransformSkipBlockSize and getPpsRangeExtension().setLog2MaxTransformSkipBlockSize2561 2562 // WAS: getUseCrossComponentPrediction and setUseCrossComponentPrediction2563 // Now: getPpsRangeExtension().getCrossComponentPredictionEnabledFlag and getPpsRangeExtension().setCrossComponentPredictionEnabledFlag2564 2565 // WAS: clearChromaQpAdjTable2566 // Now: getPpsRangeExtension().clearChromaQpOffsetList2567 2568 // WAS: getMaxCuChromaQpAdjDepth and setMaxCuChromaQpAdjDepth2569 // Now: getPpsRangeExtension().getDiffCuChromaQpOffsetDepth and getPpsRangeExtension().setDiffCuChromaQpOffsetDepth2570 2571 // WAS: getChromaQpAdjTableSize2572 // Now: getPpsRangeExtension().getChromaQpOffsetListLen2573 2574 // WAS: getChromaQpAdjTableAt and setChromaQpAdjTableAt2575 // Now: getPpsRangeExtension().getChromaQpOffsetListEntry and getPpsRangeExtension().setChromaQpOffsetListEntry2576 2577 // WAS: getSaoOffsetBitShift and setSaoOffsetBitShift2578 // Now: getPpsRangeExtension().getLog2SaoOffsetScale and getPpsRangeExtension().setLog2SaoOffsetScale2579 2580 2528 #if NH_MV 2581 2529 Void setLayerId( Int val ) { m_layerId = val; } … … 2753 2701 Int m_viewId; 2754 2702 Int m_viewIndex; 2755 #if NH_3D 2703 #if NH_3D_VSO 2756 2704 Bool m_isDepth; 2757 2705 #endif … … 2805 2753 Bool m_cpAvailableFlag; 2806 2754 Int m_numViews; 2755 #endif 2756 #if NH_3D_QTL 2807 2757 TComPic* m_ivPicsCurrPoc [2][MAX_NUM_LAYERS]; 2758 #endif 2759 #if NH_3D 2808 2760 Int** m_depthToDisparityB; 2809 2761 Int** m_depthToDisparityF; … … 2876 2828 Int getPOC() const { return m_iPOC; } 2877 2829 Int getSliceQp() const { return m_iSliceQp; } 2830 Bool getUseWeightedPrediction() const { return( (m_eSliceType==P_SLICE && testWeightPred()) || (m_eSliceType==B_SLICE && testWeightBiPred()) ); } 2878 2831 Bool getDependentSliceSegmentFlag() const { return m_dependentSliceSegmentFlag; } 2879 2832 Void setDependentSliceSegmentFlag(Bool val) { m_dependentSliceSegmentFlag = val; } … … 2892 2845 TComPic* getPic() { return m_pcPic; } 2893 2846 TComPic* getRefPic( RefPicList e, Int iRefIdx) { return m_apcRefPicList[e][iRefIdx]; } 2894 Int getRefPOC( RefPicList e, Int iRefIdx) { return m_aiRefPOCList[e][iRefIdx]; } 2847 const TComPic* getRefPic( RefPicList e, Int iRefIdx) const { return m_apcRefPicList[e][iRefIdx]; } 2848 Int getRefPOC( RefPicList e, Int iRefIdx) const { return m_aiRefPOCList[e][iRefIdx]; } 2895 2849 #if NH_3D 2896 2850 Bool getInCmpPredAvailFlag( ) const { return m_inCmpPredAvailFlag; } … … 2901 2855 Int getNumCurCmpLIds( ) const { return (Int) m_inCmpRefViewIdcs.size(); } 2902 2856 TComPic* getIvPic( Bool depthFlag, Int viewIndex) const { return m_ivPicsCurrPoc[ depthFlag ? 1 : 0 ][ viewIndex ]; } 2857 #endif 2858 #if NH_3D_QTL 2903 2859 TComPic* getTexturePic () { return m_ivPicsCurrPoc[0][ m_viewIndex ]; } 2860 2904 2861 #endif 2905 2862 #if NH_3D_IC … … 3180 3137 3181 3138 Void setEnableTMVPFlag( Bool b ) { m_enableTMVPFlag = b; } 3182 Bool getEnableTMVPFlag() 3139 Bool getEnableTMVPFlag() const { return m_enableTMVPFlag; } 3183 3140 3184 3141 Void setEncCABACTableIdx( SliceType idx ) { m_encCABACTableIdx = idx; } … … 3206 3163 Int getFirstTRefIdx ( RefPicList e ) { return m_aiFirstTRefIdx[e]; } 3207 3164 Void setFirstTRefIdx ( RefPicList e, Int i ) { m_aiFirstTRefIdx[e] = i; } 3208 Bool getArpRefPicAvailable ( RefPicList e, Int viewIdx) { return m_arpRefPicAvailable[e][getVPS()->getLayerIdInNuh(viewIdx, 0)]; } 3165 3166 Bool getArpRefPicAvailable ( RefPicList e, Int viewIdx) { return m_arpRefPicAvailable[e][getVPS()->getLayerIdInNuh(viewIdx, false, 0 )]; } 3209 3167 IntAry1d getPocsInCurrRPSs() { return m_pocsInCurrRPSs; } 3210 #endif 3168 #endif 3169 #endif 3170 #if NH_3D_VSO 3211 3171 Void setIsDepth ( Bool isDepth ) { m_isDepth = isDepth; } 3212 3172 Bool getIsDepth () const { return m_isDepth; } 3173 #endif 3174 #if NH_3D 3213 3175 Void setCamparaSlice ( Int** aaiScale = 0, Int** aaiOffset = 0 ); 3214 3176 … … 3230 3192 Int getCpInvOff( Int j ) { return m_aaiCodedOffset[1][j]; } 3231 3193 3194 #endif 3195 #if NH_3D_QTL 3232 3196 Void setIvPicLists( TComPicLists* m_ivPicLists ); 3197 #endif 3198 #if NH_3D 3233 3199 Void setDepthToDisparityLUTs(); 3234 3200 -
TabularUnified trunk/source/Lib/TLibCommon/TComWeightPrediction.cpp ¶
r1313 r1386 55 55 } 56 56 57 static inline Pel noWeightUnidir( Pel P0, Int round, Int shift, Int offset, Int clipBD) 58 { 59 return ClipBD( ( ((P0 + IF_INTERNAL_OFFS) + round) >> shift ) + offset, clipBD ); 60 } 61 62 static inline Pel noWeightOffsetUnidir( Pel P0, Int round, Int shift, Int clipBD) 63 { 64 return ClipBD( ( ((P0 + IF_INTERNAL_OFFS) + round) >> shift ), clipBD ); 65 } 66 67 57 68 // ==================================================================================================================== 58 69 // Class definition … … 154 165 const Int shiftNum = std::max<Int>(2, (IF_INTERNAL_PREC - clipBD)); 155 166 const Int shift = wp0[compID].shift + shiftNum; 156 const Int round = (shift > 0) ? (1<<(shift-1)) : 0;157 167 const UInt iSrc0Stride = pcYuvSrc0->getStride(compID); 158 168 const UInt iDstStride = pcYuvDst->getStride(compID); … … 162 172 const Int iWidth = uiWidth>>csx; 163 173 174 if (w0 != 1 << wp0[compID].shift) 175 { 176 const Int round = (shift > 0) ? (1<<(shift-1)) : 0; 164 177 for (Int y = iHeight-1; y >= 0; y-- ) 165 178 { … … 178 191 pSrc0 += iSrc0Stride; 179 192 pDst += iDstStride; 193 } 194 } 195 else 196 { 197 const Int round = (shiftNum > 0) ? (1<<(shiftNum-1)) : 0; 198 if (offset == 0) 199 { 200 for (Int y = iHeight-1; y >= 0; y-- ) 201 { 202 Int x = iWidth-1; 203 for ( ; x >= 3; ) 204 { 205 pDst[x] = noWeightOffsetUnidir(pSrc0[x], round, shiftNum, clipBD); x--; 206 pDst[x] = noWeightOffsetUnidir(pSrc0[x], round, shiftNum, clipBD); x--; 207 pDst[x] = noWeightOffsetUnidir(pSrc0[x], round, shiftNum, clipBD); x--; 208 pDst[x] = noWeightOffsetUnidir(pSrc0[x], round, shiftNum, clipBD); x--; 209 } 210 for( ; x >= 0; x--) 211 { 212 pDst[x] = noWeightOffsetUnidir(pSrc0[x], round, shiftNum, clipBD); 213 } 214 pSrc0 += iSrc0Stride; 215 pDst += iDstStride; 216 } 217 } 218 else 219 { 220 for (Int y = iHeight-1; y >= 0; y-- ) 221 { 222 Int x = iWidth-1; 223 for ( ; x >= 3; ) 224 { 225 pDst[x] = noWeightUnidir(pSrc0[x], round, shiftNum, offset, clipBD); x--; 226 pDst[x] = noWeightUnidir(pSrc0[x], round, shiftNum, offset, clipBD); x--; 227 pDst[x] = noWeightUnidir(pSrc0[x], round, shiftNum, offset, clipBD); x--; 228 pDst[x] = noWeightUnidir(pSrc0[x], round, shiftNum, offset, clipBD); x--; 229 } 230 for( ; x >= 0; x--) 231 { 232 pDst[x] = noWeightUnidir(pSrc0[x], round, shiftNum, offset, clipBD); 233 } 234 pSrc0 += iSrc0Stride; 235 pDst += iDstStride; 236 } 237 } 180 238 } 181 239 } … … 197 255 TComSlice *const pcSlice = pcCU->getSlice(); 198 256 const Bool wpBiPred = pcCU->getSlice()->getPPS()->getWPBiPred(); 199 const Bool bBi Dir= (iRefIdx0>=0 && iRefIdx1>=0);200 const Bool bUni Dir = !bBiDir;201 202 if ( bUni Dir|| wpBiPred )257 const Bool bBiPred = (iRefIdx0>=0 && iRefIdx1>=0); 258 const Bool bUniPred = !bBiPred; 259 260 if ( bUniPred || wpBiPred ) 203 261 { // explicit -------------------- 204 262 if ( iRefIdx0 >= 0 ) … … 228 286 const Bool bUseHighPrecisionPredictionWeighting = pcSlice->getSPS()->getSpsRangeExtension().getHighPrecisionOffsetsEnabledFlag(); 229 287 230 if ( bBi Dir)231 { // Bi- Dircase288 if ( bBiPred ) 289 { // Bi-predictive case 232 290 for ( Int yuv=0 ; yuv<numValidComponent ; yuv++ ) 233 291 { … … 248 306 } 249 307 else 250 { // Uni dir308 { // UniPred 251 309 WPScalingParam *const pwp = (iRefIdx0>=0) ? wp0 : wp1 ; 252 310 -
TabularUnified trunk/source/Lib/TLibCommon/TComYuv.cpp ¶
r1313 r1386 124 124 { 125 125 ::memcpy( pDst, pSrc, sizeof(Pel)*iWidth); 126 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC126 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 127 127 if ( g_traceCopyBack && compID == COMPONENT_Y) 128 128 { -
TabularUnified trunk/source/Lib/TLibCommon/TComYuv.h ¶
r1313 r1386 204 204 UInt getComponentScaleX (const ComponentID id) const { return ::getComponentScaleX(id, m_chromaFormatIDC); } 205 205 UInt getComponentScaleY (const ComponentID id) const { return ::getComponentScaleY(id, m_chromaFormatIDC); } 206 #if NH_3D_VSO 207 Void addClipPartLuma( Int bitDepth, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize ); 208 #endif 206 209 #if NH_3D 207 Void addClipPartLuma( Int bitDepth, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );208 210 #if NH_3D_ARP 209 211 Void addARP ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight , Bool bClip, const BitDepths &clipBitDepths ); -
TabularUnified trunk/source/Lib/TLibCommon/TypeDef.h ¶
r1356 r1386 32 32 */ 33 33 /** \file TypeDef.h 34 \brief Define basic types, new types and enumerations34 \brief Define macros, basic types, new types and enumerations 35 35 */ 36 36 #ifndef __TYPEDEF__ … … 64 64 ///////////////////////////////////////////////////////////////////////////////////////// 65 65 #if NH_MV 66 #define NH_MV_SEI_TBD 0 67 #define NH_MV_SEI 1 68 #define NH_MV_FIX_TICKET_106 1 // Identical motion check. 66 // Recent bug fixes 67 #define NH_3D_FIX_TICKET_107 1 // Clean up. 68 #define NH_3D_FIX_TICKET_91 1 // NBDV availability in case of tiles. 69 // Things that needs to be fixed also in the Specification ... 69 70 #define NH_MV_FIX_NO_REF_PICS_CHECK 1 // !!SPEC!! 70 71 #define NH_MV_FIX_INIT_NUM_ACTIVE_REF_LAYER_PICS 1 // Derivation of NumActiveRefLayerPIcs. !!SPEC!! 71 72 #define NH_MV_FIX_NUM_POC_TOTAL_CUR 1 // Derivation of NumPocTotalCur for IDR pictures. !!SPEC!! 72 #define NH_MV_LAYERS_NOT_PRESENT_SEI 1 // Layers not present SEI message JCTMV-M0043 73 #if NH_MV_SEI 74 #define SEI_DRI_F0169 1 75 #endif 76 #endif 77 #if NH_3D 78 #define H_3D_FIX_ARP_CHECK_NOT_IN_DPB 1 79 #define NH_3D_FIX_NBDV_COL 1 73 // To be done 74 #define NH_MV_HLS_PTL_LIMITS 0 75 #define NH_MV_SEI_TBD 0 80 76 #endif 81 77 ///////////////////////////////////////////////////////////////////////////////////////// … … 83 79 ///////////////////////////////////////////////////////////////////////////////////////// 84 80 #if NH_MV 85 #define H_MV_ENC_DEC_TRAC 1 //< CU/PU level tracking81 #define NH_MV_ENC_DEC_TRAC 1 //< CU/PU level tracking 86 82 #if NH_3D 87 83 #define NH_3D_INTEGER_MV_DEPTH 1 … … 104 100 // SEC_ARP_VIEW_REF_CHECK_J0037 Signaling iv_res_pred_weight_idx when the current slice has both view and temporal reference picture(s), JCT3V-J0037 item1 105 101 // SEC_ARP_REM_ENC_RESTRICT_K0035 Removal of encoder restriction of ARP, JCT3V-K0035 102 #define NH_3D_QTL 1 106 103 #define NH_3D_QTLPC 1 // OL_QTLIMIT_PREDCODING_B0068 //JCT3V-B0068 107 104 // HHI_QTLPC_RAU_OFF_C0160 JCT3V-C0160 change 2: quadtree limitation and predictive coding switched off in random access units … … 275 272 // MTK_FAST_TEXTURE_ENCODING_E0173 276 273 //HLS 277 // HHI_DEPENDENCY_SIGNALLING_I1_J0107 278 // HHI_TOOL_PARAMETERS_I2_J0107 279 // HHI_VPS_3D_EXTENSION_I3_J0107 280 // HHI_INTER_COMP_PRED_K0052 281 // HHI_RES_PRED_K0052 282 // HHI_CAM_PARA_K0052 283 // H_3D_DIRECT_DEP_TYPE 274 // HHI_DEPENDENCY_SIGNALLING_I1_J0107 275 // HHI_TOOL_PARAMETERS_I2_J0107 276 // HHI_VPS_3D_EXTENSION_I3_J0107 277 // HHI_INTER_COMP_PRED_K0052 278 // HHI_RES_PRED_K0052 279 // HHI_CAM_PARA_K0052 280 // H_3D_DIRECT_DEP_TYPE 281 #endif // NH_3D 282 #if NH_MV 283 //////////////////////// 284 /// Consider Removal 285 //////////////////////// 284 286 // Rate Control 285 287 #define KWU_FIX_URQ 0 286 288 #define KWU_RC_VIEWRC_E0227 0 ///< JCT3V-E0227, view-wise target bitrate allocation 287 289 #define KWU_RC_MADPRED_E0227 0 ///< JCT3V-E0227, inter-view MAD prediction 288 #endif // NH_3D 290 #define NH_MV_HLS_PTL_LIMITS 0 291 #if NH_3D 292 // Unclear Fix 293 #define H_3D_PPS_FIX_DEPTH 0 294 #endif 295 #endif 289 296 ///////////////////////////////////////////////////////////////////////////////////////// 290 297 /////////////////////////////////// DERIVED DEFINES /////////////////////////////////// 291 298 ///////////////////////////////////////////////////////////////////////////////////////// 292 299 #if NH_3D 293 #define H_3D_OUTPUT_ACTIVE_TOOLS 0294 #define H_3D_REN_MAX_DEV_OUT 0300 #define NH_3D_OUTPUT_ACTIVE_TOOLS 0 301 #define NH_3D_REN_MAX_DEV_OUT 0 295 302 #endif 296 303 ///// ***** VIEW SYNTHESIS OPTIMIZAION ********* … … 307 314 #define DVFROM_ABOVE 1 308 315 #define IDV_CANDS 2 309 #endif310 ///// ***** ADVANCED INTERVIEW RESIDUAL PREDICTION *********311 #if NH_3D_ARP312 #define H_3D_ARP_WFNR 3313 316 #endif 314 317 ///////////////////////////////////////////////////////////////////////////////////// … … 325 328 #if NH_3D_DBBP 326 329 #define DBBP_INVALID_SHORT (-4) 327 #define DBBP_PACK_MODE SIZE_2NxN 328 #endif 329 ///// ***** FCO ********* 330 #if H_3D_FCO 331 #define H_3D_FCO_VSP_DONBDV_E0163 1 // Adaptive depth reference for flexible coding order 332 #else 333 #define H_3D_FCO_VSP_DONBDV_E0163 0 // Adaptive depth reference for flexible coding order 334 #endif 335 #if H_3D 336 #define PPS_FIX_DEPTH 1 337 #endif 338 ///////////////////////////////////////////////////////////////////////////////// 339 /////////////////////////////////// MV_HEVC HLS ////////////////////////////// 340 ///////////////////////////////////////////////////////////////////////////////// 341 // TBD: Check if integration is necessary. 342 #define H_MV_HLS_PTL_LIMITS 0 330 #endif 343 331 ///////////////////////////////////////////////////////////////////////////////////////// 344 332 /////////////////////////////////// HM RELATED DEFINES //////////////////////////////// … … 373 361 #define DECODER_CHECK_SUBSTREAM_AND_SLICE_TRAILING_BYTES 1 ///< TODO: integrate this macro into a broader conformance checking system. 374 362 #define T0196_SELECTIVE_RDOQ 1 ///< selective RDOQ 363 #define U0040_MODIFIED_WEIGHTEDPREDICTION_WITH_BIPRED_AND_CLIPPING 1 375 364 // ==================================================================================================================== 376 365 // Tool Switches … … 389 378 #define MATRIX_MULT 0 ///< Brute force matrix multiplication instead of partial butterfly 390 379 #define O0043_BEST_EFFORT_DECODING 0 ///< 0 (default) = disable code related to best effort decoding, 1 = enable code relating to best effort decoding [ decode-side only ]. 380 #define ME_ENABLE_ROUNDING_OF_MVS 1 ///< 0 (default) = disables rounding of motion vectors when right shifted, 1 = enables rounding 391 381 #define RDOQ_CHROMA_LAMBDA 1 ///< F386: weighting of chroma for RDOQ 392 382 // This can be enabled by the makefile … … 394 384 #define RExt__HIGH_BIT_DEPTH_SUPPORT 0 ///< 0 (default) use data type definitions for 8-10 bit video, 1 = use larger data types to allow for up to 16-bit video (originally developed as part of N0188) 395 385 #endif 386 #define U0132_TARGET_BITS_SATURATION 1 ///< Rate control with target bits saturation method 396 387 // ==================================================================================================================== 397 388 // Derived macros … … 443 434 typedef void Void; 444 435 typedef bool Bool; 445 #ifdef __arm__ 446 typedef signed char Char; 447 #else 448 typedef char Char; 449 #endif 450 typedef unsigned char UChar; 436 typedef char TChar; // Used for text/characters 437 typedef signed char SChar; // Signed 8-bit values 438 typedef unsigned char UChar; // Unsigned 8-bit values 451 439 typedef short Short; 452 440 typedef unsigned short UShort; … … 576 564 IPCOLOURSPACE_RGBtoGBR = 3, 577 565 NUMBER_INPUT_COLOUR_SPACE_CONVERSIONS = 4 566 }; 567 enum MATRIX_COEFFICIENTS // Table E.5 (Matrix coefficients) 568 { 569 MATRIX_COEFFICIENTS_RGB = 0, 570 MATRIX_COEFFICIENTS_BT709 = 1, 571 MATRIX_COEFFICIENTS_UNSPECIFIED = 2, 572 MATRIX_COEFFICIENTS_RESERVED_BY_ITUISOIEC = 3, 573 MATRIX_COEFFICIENTS_USFCCT47 = 4, 574 MATRIX_COEFFICIENTS_BT601_625 = 5, 575 MATRIX_COEFFICIENTS_BT601_525 = 6, 576 MATRIX_COEFFICIENTS_SMPTE240 = 7, 577 MATRIX_COEFFICIENTS_YCGCO = 8, 578 MATRIX_COEFFICIENTS_BT2020_NON_CONSTANT_LUMINANCE = 9, 579 MATRIX_COEFFICIENTS_BT2020_CONSTANT_LUMINANCE = 10, 578 580 }; 579 581 enum DeblockEdgeDir … … 713 715 enum MESearchMethod 714 716 { 715 FULL_SEARCH = 0, ///< Full search 716 DIAMOND = 1, ///< Fast search 717 SELECTIVE = 2 ///< Selective search 717 MESEARCH_FULL = 0, 718 MESEARCH_DIAMOND = 1, 719 MESEARCH_SELECTIVE = 2, 720 MESEARCH_DIAMOND_ENHANCED = 3, 721 MESEARCH_NUMBER_OF_METHODS = 4 718 722 }; 719 723 /// coefficient scanning type used in ACS … … 760 764 FIXED_NUMBER_OF_BYTES = 2, ///< Limit maximum number of bytes in a slice / slice segment 761 765 FIXED_NUMBER_OF_TILES = 3, ///< slices / slice segments span an integer number of tiles 766 NUMBER_OF_SLICE_CONSTRAINT_MODES = 4 767 }; 768 // For use with decoded picture hash SEI messages, generated by encoder. 769 enum HashType 770 { 771 HASHTYPE_MD5 = 0, 772 HASHTYPE_CRC = 1, 773 HASHTYPE_CHECKSUM = 2, 774 HASHTYPE_NONE = 3, 775 NUMBER_OF_HASHTYPES = 4 762 776 }; 763 777 enum SAOMode //mode … … 860 874 COST_LOSSLESS_CODING = 2, 861 875 COST_MIXED_LOSSLESS_LOSSY_CODING = 3 876 }; 877 enum WeightedPredictionMethod 878 { 879 WP_PER_PICTURE_WITH_SIMPLE_DC_COMBINED_COMPONENT =0, 880 WP_PER_PICTURE_WITH_SIMPLE_DC_PER_COMPONENT =1, 881 WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT =2, 882 WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT_AND_CLIPPING =3, 883 WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT_AND_CLIPPING_AND_EXTENSION=4 884 }; 885 enum FastInterSearchMode 886 { 887 FASTINTERSEARCH_DISABLED = 0, 888 FASTINTERSEARCH_MODE1 = 1, // TODO: assign better names to these. 889 FASTINTERSEARCH_MODE2 = 2, 890 FASTINTERSEARCH_MODE3 = 3 862 891 }; 863 892 enum SPSExtensionFlagIndex … … 961 990 }; 962 991 #endif 963 #if NH_3D 992 #if NH_3D_VSO 964 993 // Renderer 965 994 enum BlenMod -
TabularUnified trunk/source/Lib/TLibDecoder/SEIread.cpp ¶
r1356 r1386 63 63 #endif 64 64 65 Void SEIReader::sei_read_code(std::ostream *pOS, UInt uiLength, UInt& ruiCode, const Char *pSymbolName)65 Void SEIReader::sei_read_code(std::ostream *pOS, UInt uiLength, UInt& ruiCode, const TChar *pSymbolName) 66 66 { 67 67 READ_CODE(uiLength, ruiCode, pSymbolName); … … 72 72 } 73 73 74 Void SEIReader::sei_read_uvlc(std::ostream *pOS, UInt& ruiCode, const Char *pSymbolName)74 Void SEIReader::sei_read_uvlc(std::ostream *pOS, UInt& ruiCode, const TChar *pSymbolName) 75 75 { 76 76 READ_UVLC(ruiCode, pSymbolName); … … 81 81 } 82 82 83 Void SEIReader::sei_read_svlc(std::ostream *pOS, Int& ruiCode, const Char *pSymbolName)83 Void SEIReader::sei_read_svlc(std::ostream *pOS, Int& ruiCode, const TChar *pSymbolName) 84 84 { 85 85 READ_SVLC(ruiCode, pSymbolName); … … 90 90 } 91 91 92 Void SEIReader::sei_read_flag(std::ostream *pOS, UInt& ruiCode, const Char *pSymbolName)92 Void SEIReader::sei_read_flag(std::ostream *pOS, UInt& ruiCode, const TChar *pSymbolName) 93 93 { 94 94 READ_FLAG(ruiCode, pSymbolName); … … 99 99 } 100 100 101 Void SEIReader::sei_read_string(std::ostream *pOS, UInt uiBufSize, UChar* pucCode, UInt& ruiLength, const Char *pSymbolName) 101 #if NH_MV 102 Void SEIReader::sei_read_string(std::ostream *pOS, UInt uiBufSize, UChar* pucCode, UInt& ruiLength, const TChar *pSymbolName) 102 103 { 103 104 READ_STRING(uiBufSize, pucCode, ruiLength, pSymbolName); … … 107 108 } 108 109 } 109 110 #if NH_MV_SEI111 110 inline Void SEIReader::output_sei_message_header(SEI &sei, std::ostream *pDecodedMessageOutputStream, UInt payloadSize) 112 111 #else … … 118 117 std::string seiMessageHdr(SEI::getSEIMessageString(sei.payloadType())); seiMessageHdr+=" SEI message"; 119 118 (*pDecodedMessageOutputStream) << std::setfill('-') << std::setw(seiMessageHdr.size()) << "-" << std::setfill(' ') << "\n" << seiMessageHdr << " (" << payloadSize << " bytes)"<< "\n"; 120 #if NH_MV _SEI119 #if NH_MV 121 120 (*pDecodedMessageOutputStream) << std::setfill(' ') << "LayerId: " << m_layerId << std::setw(2) << " Picture: " << m_decOrder << std::setw( 5 ) << std::endl; 122 121 #endif … … 133 132 * unmarshal a single SEI message from bitstream bs 134 133 */ 135 #if NH_MV _LAYERS_NOT_PRESENT_SEI134 #if NH_MV 136 135 Void SEIReader::parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 137 136 #else … … 144 143 do 145 144 { 146 #if NH_MV _LAYERS_NOT_PRESENT_SEI145 #if NH_MV 147 146 xReadSEImessage(seis, nalUnitType, vps, sps, pDecodedMessageOutputStream); 148 147 #else … … 158 157 } 159 158 160 #if NH_MV _LAYERS_NOT_PRESENT_SEI159 #if NH_MV 161 160 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 162 161 #else … … 281 280 case SEI::SCALABLE_NESTING: 282 281 sei = new SEIScalableNesting; 283 #if NH_MV _LAYERS_NOT_PRESENT_SEI282 #if NH_MV 284 283 xParseSEIScalableNesting((SEIScalableNesting&) *sei, nalUnitType, payloadSize, vps, sps, pDecodedMessageOutputStream); 285 284 #else … … 295 294 xParseSEITimeCode((SEITimeCode&) *sei, payloadSize, pDecodedMessageOutputStream); 296 295 break; 297 case SEI::CHROMA_ SAMPLING_FILTER_HINT:298 sei = new SEIChroma SamplingFilterHint;299 xParseSEIChroma SamplingFilterHint((SEIChromaSamplingFilterHint&) *sei, payloadSize/*, sps*/, pDecodedMessageOutputStream);296 case SEI::CHROMA_RESAMPLING_FILTER_HINT: 297 sei = new SEIChromaResamplingFilterHint; 298 xParseSEIChromaResamplingFilterHint((SEIChromaResamplingFilterHint&) *sei, payloadSize, pDecodedMessageOutputStream); 300 299 //} 301 300 break; … … 304 303 xParseSEIKneeFunctionInfo((SEIKneeFunctionInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 305 304 break; 305 case SEI::COLOUR_REMAPPING_INFO: 306 sei = new SEIColourRemappingInfo; 307 xParseSEIColourRemappingInfo((SEIColourRemappingInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 308 break; 306 309 case SEI::MASTERING_DISPLAY_COLOUR_VOLUME: 307 310 sei = new SEIMasteringDisplayColourVolume; 308 311 xParseSEIMasteringDisplayColourVolume((SEIMasteringDisplayColourVolume&) *sei, payloadSize, pDecodedMessageOutputStream); 309 312 break; 310 #if !NH_MV_SEI 311 case SEI::SUB_BITSTREAM_PROPERTY: 312 sei = new SEISubBitstreamProperty; 313 xParseSEISubBitstreamProperty((SEISubBitstreamProperty&) *sei, payloadSize, pDecodedMessageOutputStream ); 314 break; 315 #else 316 #if NH_MV_LAYERS_NOT_PRESENT_SEI 313 #if NH_MV 317 314 case SEI::LAYERS_NOT_PRESENT: 318 315 if (!vps) … … 326 323 } 327 324 break; 328 #endif329 325 case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS: 330 326 sei = new SEIInterLayerConstrainedTileSets; … … 367 363 xParseSEIThreeDimensionalReferenceDisplaysInfo((SEIThreeDimensionalReferenceDisplaysInfo&) *sei, payloadSize, pDecodedMessageOutputStream ); 368 364 break; 369 #if SEI_DRI_F0169370 365 case SEI::DEPTH_REPRESENTATION_INFO: 371 366 sei = new SEIDepthRepresentationInfo; 372 367 xParseSEIDepthRepresentationInfo((SEIDepthRepresentationInfo&) *sei, payloadSize, pDecodedMessageOutputStream ); 373 368 break; 374 #endif375 369 case SEI::MULTIVIEW_SCENE_INFO: 376 370 sei = new SEIMultiviewSceneInfo; … … 531 525 UInt val; 532 526 sei_read_code( pDecodedMessageOutputStream, 8, val, "hash_type"); 533 sei.method = static_cast< SEIDecodedPictureHash::Method>(val); bytesRead++;534 535 const Char *traceString="\0";527 sei.method = static_cast<HashType>(val); bytesRead++; 528 529 const TChar *traceString="\0"; 536 530 switch (sei.method) 537 531 { 538 case SEIDecodedPictureHash::MD5: traceString="picture_md5"; break;539 case SEIDecodedPictureHash::CRC: traceString="picture_crc"; break;540 case SEIDecodedPictureHash::CHECKSUM: traceString="picture_checksum"; break;532 case HASHTYPE_MD5: traceString="picture_md5"; break; 533 case HASHTYPE_CRC: traceString="picture_crc"; break; 534 case HASHTYPE_CHECKSUM: traceString="picture_checksum"; break; 541 535 default: assert(false); break; 542 536 } … … 916 910 } 917 911 918 #if NH_MV _LAYERS_NOT_PRESENT_SEI912 #if NH_MV 919 913 Void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 920 914 #else … … 962 956 do 963 957 { 964 #if NH_MV _LAYERS_NOT_PRESENT_SEI958 #if NH_MV 965 959 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream); 966 960 #else … … 974 968 } 975 969 } 976 977 #if NH_MV978 #if !NH_MV_SEI979 Void SEIReader::xParseSEISubBitstreamProperty(SEISubBitstreamProperty &sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream )980 {981 UInt code;982 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize);983 sei_read_code( pDecodedMessageOutputStream, 4, code, "active_vps_id" ); sei.m_activeVpsId = code;984 sei_read_uvlc( pDecodedMessageOutputStream, code, "num_additional_sub_streams_minus1" ); sei.m_numAdditionalSubStreams = code + 1;985 986 xResizeSubBitstreamPropertySeiArrays(sei);987 for( Int i = 0; i < sei.m_numAdditionalSubStreams; i++ )988 {989 sei_read_code( pDecodedMessageOutputStream, 2, code, "sub_bitstream_mode[i]" ); sei.m_subBitstreamMode[i] = code;990 sei_read_uvlc( pDecodedMessageOutputStream, code, "output_layer_set_idx_to_vps[i]" ); sei.m_outputLayerSetIdxToVps[i] = code;991 sei_read_code( pDecodedMessageOutputStream, 3, code, "highest_sub_layer_id[i]" ); sei.m_highestSublayerId[i] = code;992 sei_read_code( pDecodedMessageOutputStream, 16, code, "avg_bit_rate[i]" ); sei.m_avgBitRate[i] = code;993 sei_read_code( pDecodedMessageOutputStream, 16, code, "max_bit_rate[i]" ); sei.m_maxBitRate[i] = code;994 }995 }996 997 Void SEIReader::xResizeSubBitstreamPropertySeiArrays(SEISubBitstreamProperty &sei)998 {999 sei.m_subBitstreamMode.resize( sei.m_numAdditionalSubStreams );1000 sei.m_outputLayerSetIdxToVps.resize( sei.m_numAdditionalSubStreams );1001 sei.m_highestSublayerId.resize( sei.m_numAdditionalSubStreams );1002 sei.m_avgBitRate.resize( sei.m_numAdditionalSubStreams );1003 sei.m_maxBitRate.resize( sei.m_numAdditionalSubStreams );1004 }1005 #endif1006 #endif1007 970 1008 971 … … 1123 1086 } 1124 1087 1125 Void SEIReader::xParseSEIChroma SamplingFilterHint(SEIChromaSamplingFilterHint& sei, UInt payloadSize/*, TComSPS* sps*/, std::ostream *pDecodedMessageOutputStream)1088 Void SEIReader::xParseSEIChromaResamplingFilterHint(SEIChromaResamplingFilterHint& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1126 1089 { 1127 1090 UInt uiCode; … … 1130 1093 sei_read_code( pDecodedMessageOutputStream, 8, uiCode, "ver_chroma_filter_idc"); sei.m_verChromaFilterIdc = uiCode; 1131 1094 sei_read_code( pDecodedMessageOutputStream, 8, uiCode, "hor_chroma_filter_idc"); sei.m_horChromaFilterIdc = uiCode; 1132 sei_read_flag( pDecodedMessageOutputStream, uiCode, "ver_filtering_ process_flag"); sei.m_verFilteringProcessFlag = uiCode;1095 sei_read_flag( pDecodedMessageOutputStream, uiCode, "ver_filtering_field_processing_flag"); sei.m_verFilteringFieldProcessingFlag = uiCode; 1133 1096 if(sei.m_verChromaFilterIdc == 1 || sei.m_horChromaFilterIdc == 1) 1134 1097 { … … 1136 1099 if(sei.m_verChromaFilterIdc == 1) 1137 1100 { 1138 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_vertical_filters"); sei.m_numVerticalFilters = uiCode; 1139 if(sei.m_numVerticalFilters > 0) 1140 { 1141 sei.m_verTapLengthMinus1 = (Int*)malloc(sei.m_numVerticalFilters * sizeof(Int)); 1142 sei.m_verFilterCoeff = (Int**)malloc(sei.m_numVerticalFilters * sizeof(Int*)); 1143 for(Int i = 0; i < sei.m_numVerticalFilters; i ++) 1144 { 1145 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "ver_tap_length_minus_1"); sei.m_verTapLengthMinus1[i] = uiCode; 1146 sei.m_verFilterCoeff[i] = (Int*)malloc(sei.m_verTapLengthMinus1[i] * sizeof(Int)); 1147 for(Int j = 0; j < sei.m_verTapLengthMinus1[i]; j ++) 1101 UInt numVerticalFilters; 1102 sei_read_uvlc( pDecodedMessageOutputStream, numVerticalFilters, "num_vertical_filters"); sei.m_verFilterCoeff.resize(numVerticalFilters); 1103 if(numVerticalFilters > 0) 1104 { 1105 for(Int i = 0; i < numVerticalFilters; i++) 1106 { 1107 UInt verTapLengthMinus1; 1108 sei_read_uvlc( pDecodedMessageOutputStream, verTapLengthMinus1, "ver_tap_length_minus_1"); sei.m_verFilterCoeff[i].resize(verTapLengthMinus1+1); 1109 for(Int j = 0; j < (verTapLengthMinus1 + 1); j++) 1148 1110 { 1149 1111 sei_read_svlc( pDecodedMessageOutputStream, sei.m_verFilterCoeff[i][j], "ver_filter_coeff"); … … 1154 1116 if(sei.m_horChromaFilterIdc == 1) 1155 1117 { 1156 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_horizontal_filters"); sei.m_numHorizontalFilters = uiCode; 1157 if(sei.m_numHorizontalFilters > 0) 1158 { 1159 sei.m_horTapLengthMinus1 = (Int*)malloc(sei.m_numHorizontalFilters * sizeof(Int)); 1160 sei.m_horFilterCoeff = (Int**)malloc(sei.m_numHorizontalFilters * sizeof(Int*)); 1161 for(Int i = 0; i < sei.m_numHorizontalFilters; i ++) 1162 { 1163 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "hor_tap_length_minus_1"); sei.m_horTapLengthMinus1[i] = uiCode; 1164 sei.m_horFilterCoeff[i] = (Int*)malloc(sei.m_horTapLengthMinus1[i] * sizeof(Int)); 1165 for(Int j = 0; j < sei.m_horTapLengthMinus1[i]; j ++) 1118 UInt numHorizontalFilters; 1119 sei_read_uvlc( pDecodedMessageOutputStream, numHorizontalFilters, "num_horizontal_filters"); sei.m_horFilterCoeff.resize(numHorizontalFilters); 1120 if(numHorizontalFilters > 0) 1121 { 1122 for(Int i = 0; i < numHorizontalFilters; i++) 1123 { 1124 UInt horTapLengthMinus1; 1125 sei_read_uvlc( pDecodedMessageOutputStream, horTapLengthMinus1, "hor_tap_length_minus_1"); sei.m_horFilterCoeff[i].resize(horTapLengthMinus1+1); 1126 for(Int j = 0; j < (horTapLengthMinus1 + 1); j++) 1166 1127 { 1167 1128 sei_read_svlc( pDecodedMessageOutputStream, sei.m_horFilterCoeff[i][j], "hor_filter_coeff"); … … 1200 1161 } 1201 1162 1163 Void SEIReader::xParseSEIColourRemappingInfo(SEIColourRemappingInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1164 { 1165 UInt uiVal; 1166 Int iVal; 1167 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1168 1169 sei_read_uvlc( pDecodedMessageOutputStream, uiVal, "colour_remap_id" ); sei.m_colourRemapId = uiVal; 1170 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_cancel_flag" ); sei.m_colourRemapCancelFlag = uiVal; 1171 if( !sei.m_colourRemapCancelFlag ) 1172 { 1173 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_persistence_flag" ); sei.m_colourRemapPersistenceFlag = uiVal; 1174 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_video_signal_info_present_flag" ); sei.m_colourRemapVideoSignalInfoPresentFlag = uiVal; 1175 if ( sei.m_colourRemapVideoSignalInfoPresentFlag ) 1176 { 1177 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_full_range_flag" ); sei.m_colourRemapFullRangeFlag = uiVal; 1178 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_primaries" ); sei.m_colourRemapPrimaries = uiVal; 1179 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_transfer_function" ); sei.m_colourRemapTransferFunction = uiVal; 1180 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_matrix_coefficients" ); sei.m_colourRemapMatrixCoefficients = uiVal; 1181 } 1182 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_input_bit_depth" ); sei.m_colourRemapInputBitDepth = uiVal; 1183 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_bit_depth" ); sei.m_colourRemapBitDepth = uiVal; 1184 1185 for( Int c=0 ; c<3 ; c++ ) 1186 { 1187 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "pre_lut_num_val_minus1[c]" ); sei.m_preLutNumValMinus1[c] = (uiVal==0) ? 1 : uiVal; 1188 sei.m_preLut[c].resize(sei.m_preLutNumValMinus1[c]+1); 1189 if( uiVal> 0 ) 1190 { 1191 for ( Int i=0 ; i<=sei.m_preLutNumValMinus1[c] ; i++ ) 1192 { 1193 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapInputBitDepth + 7 ) >> 3 ) << 3, uiVal, "pre_lut_coded_value[c][i]" ); sei.m_preLut[c][i].codedValue = uiVal; 1194 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "pre_lut_target_value[c][i]" ); sei.m_preLut[c][i].targetValue = uiVal; 1195 } 1196 } 1197 else // pre_lut_num_val_minus1[c] == 0 1198 { 1199 sei.m_preLut[c][0].codedValue = 0; 1200 sei.m_preLut[c][0].targetValue = 0; 1201 sei.m_preLut[c][1].codedValue = (1 << sei.m_colourRemapInputBitDepth) - 1 ; 1202 sei.m_preLut[c][1].targetValue = (1 << sei.m_colourRemapBitDepth) - 1 ; 1203 } 1204 } 1205 1206 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_matrix_present_flag" ); sei.m_colourRemapMatrixPresentFlag = uiVal; 1207 if( sei.m_colourRemapMatrixPresentFlag ) 1208 { 1209 sei_read_code( pDecodedMessageOutputStream, 4, uiVal, "log2_matrix_denom" ); sei.m_log2MatrixDenom = uiVal; 1210 for ( Int c=0 ; c<3 ; c++ ) 1211 { 1212 for ( Int i=0 ; i<3 ; i++ ) 1213 { 1214 sei_read_svlc( pDecodedMessageOutputStream, iVal, "colour_remap_coeffs[c][i]" ); sei.m_colourRemapCoeffs[c][i] = iVal; 1215 } 1216 } 1217 } 1218 else // setting default matrix (I3) 1219 { 1220 sei.m_log2MatrixDenom = 10; 1221 for ( Int c=0 ; c<3 ; c++ ) 1222 { 1223 for ( Int i=0 ; i<3 ; i++ ) 1224 { 1225 sei.m_colourRemapCoeffs[c][i] = (c==i) << sei.m_log2MatrixDenom; 1226 } 1227 } 1228 } 1229 for( Int c=0 ; c<3 ; c++ ) 1230 { 1231 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "post_lut_num_val_minus1[c]" ); sei.m_postLutNumValMinus1[c] = (uiVal==0) ? 1 : uiVal; 1232 sei.m_postLut[c].resize(sei.m_postLutNumValMinus1[c]+1); 1233 if( uiVal > 0 ) 1234 { 1235 for ( Int i=0 ; i<=sei.m_postLutNumValMinus1[c] ; i++ ) 1236 { 1237 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "post_lut_coded_value[c][i]" ); sei.m_postLut[c][i].codedValue = uiVal; 1238 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "post_lut_target_value[c][i]" ); sei.m_postLut[c][i].targetValue = uiVal; 1239 } 1240 } 1241 else 1242 { 1243 sei.m_postLut[c][0].codedValue = 0; 1244 sei.m_postLut[c][0].targetValue = 0; 1245 sei.m_postLut[c][1].targetValue = (1 << sei.m_colourRemapBitDepth) - 1; 1246 sei.m_postLut[c][1].codedValue = (1 << sei.m_colourRemapBitDepth) - 1; 1247 } 1248 } 1249 } 1250 } 1251 1252 1202 1253 Void SEIReader::xParseSEIMasteringDisplayColourVolume(SEIMasteringDisplayColourVolume& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1203 1254 { … … 1221 1272 sei_read_code( pDecodedMessageOutputStream, 32, code, "min_display_mastering_luminance" ); sei.values.minLuminance = code; 1222 1273 } 1223 1224 #if NH_MV_LAYERS_NOT_PRESENT_SEI 1274 #if NH_MV 1225 1275 Void SEIReader::xParseSEILayersNotPresent(SEILayersNotPresent &sei, UInt payloadSize, const TComVPS *vps, std::ostream *pDecodedMessageOutputStream) 1226 1276 { … … 1239 1289 } 1240 1290 }; 1241 #endif1242 1291 1243 1292 Void SEIReader::xParseSEIInterLayerConstrainedTileSets(SEIInterLayerConstrainedTileSets& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) … … 1506 1555 }; 1507 1556 1508 #if SEI_DRI_F01691509 1557 Void SEIReader::xParseSEIDepthRepInfoElement(double& f,std::ostream *pDecodedMessageOutputStream) 1510 1558 { … … 1609 1657 } 1610 1658 } 1611 #endif 1659 1612 1660 Void SEIReader::xParseSEIMultiviewSceneInfo(SEIMultiviewSceneInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1613 1661 { … … 1820 1868 }; 1821 1869 #endif 1870 #endif 1822 1871 1823 1872 //! \} -
TabularUnified trunk/source/Lib/TLibDecoder/SEIread.h ¶
r1356 r1386 56 56 SEIReader() {}; 57 57 virtual ~SEIReader() {}; 58 #if NH_MV_LAYERS_NOT_PRESENT_SEI 59 Void parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream); 58 #if NH_MV 59 Void setLayerId( Int layerId ) { m_layerId = layerId; }; 60 Void setDecOrder( Int64 decOrder ) { m_decOrder = decOrder; }; 61 Void parseSEImessage( TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream ); 60 62 #else 61 63 Void parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream); 62 64 #endif 63 #if NH_MV_SEI64 Void setLayerId ( Int layerId ) { m_layerId = layerId; };65 Void setDecOrder ( Int64 decOrder ) { m_decOrder = decOrder; };66 #endif67 65 protected: 68 #if NH_MV _LAYERS_NOT_PRESENT_SEI66 #if NH_MV 69 67 Void xReadSEImessage (SEIMessages& seis, const NalUnitType nalUnitType, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream); 70 68 #else … … 86 84 Void xParseSEIToneMappingInfo (SEIToneMappingInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 87 85 Void xParseSEISOPDescription (SEISOPDescription &sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 88 #if NH_MV _LAYERS_NOT_PRESENT_SEI86 #if NH_MV 89 87 Void xParseSEIScalableNesting (SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, const TComVPS *vps, const TComSPS *sps, std::ostream *pDecodedMessageOutputStream); 90 88 #else … … 93 91 Void xParseSEITempMotionConstraintsTileSets (SEITempMotionConstrainedTileSets& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 94 92 Void xParseSEITimeCode (SEITimeCode& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 95 Void xParseSEIChroma SamplingFilterHint (SEIChromaSamplingFilterHint& sei, UInt payloadSize/*,TComSPS* */,std::ostream *pDecodedMessageOutputStream);93 Void xParseSEIChromaResamplingFilterHint (SEIChromaResamplingFilterHint& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 96 94 Void xParseSEIKneeFunctionInfo (SEIKneeFunctionInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 97 95 Void xParseSEIMasteringDisplayColourVolume (SEIMasteringDisplayColourVolume& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 96 Void xParseSEIColourRemappingInfo (SEIColourRemappingInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 98 97 #if NH_MV 99 #if !NH_MV_SEI100 Void xParseSEISubBitstreamProperty (SEISubBitstreamProperty &sei , UInt payloadSize, std::ostream *pDecodedMessageOutputStream);101 Void xResizeSubBitstreamPropertySeiArrays (SEISubBitstreamProperty &sei);102 #endif103 #endif104 #if NH_MV_LAYERS_NOT_PRESENT_SEI105 98 Void xParseSEILayersNotPresent (SEILayersNotPresent &sei, UInt payloadSize, const TComVPS *vps ,std::ostream *pDecodedMessageOutputStream); 106 #endif107 99 Void xParseSEIInterLayerConstrainedTileSets (SEIInterLayerConstrainedTileSets& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 108 100 #if NH_MV_SEI_TBD … … 118 110 #endif 119 111 Void xParseSEIThreeDimensionalReferenceDisplaysInfo (SEIThreeDimensionalReferenceDisplaysInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 120 #if SEI_DRI_F0169121 112 Void xParseSEIDepthRepInfoElement (double &f,std::ostream *pDecodedMessageOutputStream); 122 113 Void xParseSEIDepthRepresentationInfo (SEIDepthRepresentationInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 123 #endif124 114 Void xParseSEIMultiviewSceneInfo (SEIMultiviewSceneInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 125 126 115 Void xParseSEIMultiviewAcquisitionInfo (SEIMultiviewAcquisitionInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 127 128 #if NH_MV_SEI129 116 Void xParseSEIMultiviewViewPosition (SEIMultiviewViewPosition& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 130 #endif131 117 #if NH_3D 132 118 Void xParseSEIAlternativeDepthInfo (SEIAlternativeDepthInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream); 133 119 #endif 134 135 Void sei_read_code(std::ostream *pOS, UInt uiLength, UInt& ruiCode, const Char *pSymbolName);136 Void sei_read_uvlc(std::ostream *pOS, UInt& ruiCode, const Char *pSymbolName);137 Void sei_read_svlc(std::ostream *pOS, Int& ruiCode, const Char *pSymbolName);138 Void sei_read_flag(std::ostream *pOS, UInt& ruiCode, const Char *pSymbolName);139 Void sei_read_string(std::ostream *pOS, UInt uiBufSize, UChar* pucCode, UInt& ruiLength, const Char *pSymbolName); 140 #if NH_MV_SEI 120 #endif 121 Void sei_read_code(std::ostream *pOS, UInt uiLength, UInt& ruiCode, const TChar *pSymbolName); 122 Void sei_read_uvlc(std::ostream *pOS, UInt& ruiCode, const TChar *pSymbolName); 123 Void sei_read_svlc(std::ostream *pOS, Int& ruiCode, const TChar *pSymbolName); 124 Void sei_read_flag(std::ostream *pOS, UInt& ruiCode, const TChar *pSymbolName); 125 #if NH_MV 126 Void sei_read_string(std::ostream *pOS, UInt uiBufSize, UChar* pucCode, UInt& ruiLength, const TChar *pSymbolName); 141 127 inline Void output_sei_message_header(SEI &sei, std::ostream *pDecodedMessageOutputStream, UInt payloadSize); 142 128 private: -
TabularUnified trunk/source/Lib/TLibDecoder/SyntaxElementParser.cpp ¶
r1356 r1386 49 49 #if ENC_DEC_TRACE 50 50 51 Void SyntaxElementParser::xReadCodeTr (UInt length, UInt& rValue, const Char *pSymbolName)51 Void SyntaxElementParser::xReadCodeTr (UInt length, UInt& rValue, const TChar *pSymbolName) 52 52 { 53 53 #if RExt__DECODER_DEBUG_BIT_STATISTICS … … 56 56 xReadCode (length, rValue); 57 57 #endif 58 #if H_MV_ENC_DEC_TRAC58 #if NH_MV_ENC_DEC_TRAC 59 59 if ( g_disableHLSTrace || !g_HLSTraceEnable ) 60 60 { … … 80 80 } 81 81 82 Void SyntaxElementParser::xReadUvlcTr (UInt& rValue, const Char *pSymbolName)82 Void SyntaxElementParser::xReadUvlcTr (UInt& rValue, const TChar *pSymbolName) 83 83 { 84 84 #if RExt__DECODER_DEBUG_BIT_STATISTICS … … 87 87 xReadUvlc (rValue); 88 88 #endif 89 #if H_MV_ENC_DEC_TRAC89 #if NH_MV_ENC_DEC_TRAC 90 90 if ( g_disableHLSTrace || !g_HLSTraceEnable ) 91 91 { … … 104 104 } 105 105 106 Void SyntaxElementParser::xReadSvlcTr (Int& rValue, const Char *pSymbolName)106 Void SyntaxElementParser::xReadSvlcTr (Int& rValue, const TChar *pSymbolName) 107 107 { 108 108 #if RExt__DECODER_DEBUG_BIT_STATISTICS … … 111 111 xReadSvlc (rValue); 112 112 #endif 113 #if H_MV_ENC_DEC_TRAC113 #if NH_MV_ENC_DEC_TRAC 114 114 if ( g_disableHLSTrace || !g_HLSTraceEnable ) 115 115 { … … 128 128 } 129 129 130 Void SyntaxElementParser::xReadFlagTr (UInt& rValue, const Char *pSymbolName)130 Void SyntaxElementParser::xReadFlagTr (UInt& rValue, const TChar *pSymbolName) 131 131 { 132 132 #if RExt__DECODER_DEBUG_BIT_STATISTICS … … 135 135 xReadFlag (rValue); 136 136 #endif 137 #if H_MV_ENC_DEC_TRAC137 #if NH_MV_ENC_DEC_TRAC 138 138 if ( g_disableHLSTrace || !g_HLSTraceEnable ) 139 139 { … … 152 152 } 153 153 154 Void SyntaxElementParser::xReadStringTr (UInt buSize, UChar *pValue, UInt& rLength, const Char *pSymbolName) 154 #if NH_MV 155 Void SyntaxElementParser::xReadStringTr (UInt buSize, UChar *pValue, UInt& rLength, const TChar *pSymbolName) 155 156 { 156 157 #if RExt__DECODER_DEBUG_BIT_STATISTICS … … 163 164 fflush ( g_hTrace ); 164 165 } 165 166 #endif 166 167 Void xTraceAccessUnitDelimiter () 167 168 { … … 181 182 // ==================================================================================================================== 182 183 #if RExt__DECODER_DEBUG_BIT_STATISTICS 183 Void SyntaxElementParser::xReadCode (UInt uiLength, UInt& ruiCode, const Char *pSymbolName)184 Void SyntaxElementParser::xReadCode (UInt uiLength, UInt& ruiCode, const TChar *pSymbolName) 184 185 #else 185 186 Void SyntaxElementParser::xReadCode (UInt uiLength, UInt& ruiCode) … … 194 195 195 196 #if RExt__DECODER_DEBUG_BIT_STATISTICS 196 Void SyntaxElementParser::xReadUvlc( UInt& ruiVal, const Char *pSymbolName)197 Void SyntaxElementParser::xReadUvlc( UInt& ruiVal, const TChar *pSymbolName) 197 198 #else 198 199 Void SyntaxElementParser::xReadUvlc( UInt& ruiVal) … … 232 233 233 234 #if RExt__DECODER_DEBUG_BIT_STATISTICS 234 Void SyntaxElementParser::xReadSvlc( Int& riVal, const Char *pSymbolName)235 Void SyntaxElementParser::xReadSvlc( Int& riVal, const TChar *pSymbolName) 235 236 #else 236 237 Void SyntaxElementParser::xReadSvlc( Int& riVal) … … 270 271 271 272 #if RExt__DECODER_DEBUG_BIT_STATISTICS 272 Void SyntaxElementParser::xReadFlag (UInt& ruiCode, const Char *pSymbolName)273 Void SyntaxElementParser::xReadFlag (UInt& ruiCode, const TChar *pSymbolName) 273 274 #else 274 275 Void SyntaxElementParser::xReadFlag (UInt& ruiCode) … … 281 282 } 282 283 283 #if RExt__DECODER_DEBUG_BIT_STATISTICS 284 Void SyntaxElementParser::xReadString (UInt bufSize, UChar *pVal, UInt& rLength, const Char *pSymbolName) 284 #if NH_MV 285 #if RExt__DECODER_DEBUG_BIT_STATISTICS 286 Void SyntaxElementParser::xReadString (UInt bufSize, UChar *pVal, UInt& rLength, const TChar *pSymbolName) 285 287 #else 286 288 Void SyntaxElementParser::xReadString (UInt bufSize, UChar *pVal, UInt& rLength) … … 302 304 assert( pVal[rLength] == 0 ); 303 305 } 306 #endif 304 307 305 308 Void SyntaxElementParser::xReadRbspTrailingBits() -
TabularUnified trunk/source/Lib/TLibDecoder/SyntaxElementParser.h ¶
r1356 r1386 49 49 #define READ_SVLC( code, name) xReadSvlcTr ( code, name ) 50 50 #define READ_FLAG( code, name) xReadFlagTr ( code, name ) 51 #if NH_MV 51 52 #define READ_STRING(bufSize, code, length, name) xReadStringTr ( bufSize, code, length, name ) 52 53 #endif 53 54 #else 54 55 … … 59 60 #define READ_SVLC( code, name) xReadSvlc ( code, name ) 60 61 #define READ_FLAG( code, name) xReadFlag ( code, name ) 62 #if NH_MV 61 63 #define READ_STRING(bufSize, code, length, name) xReadString ( bufSize, code, length, name ) 62 64 #endif 63 65 #else 64 66 … … 67 69 #define READ_SVLC( code, name) xReadSvlc ( code ) 68 70 #define READ_FLAG( code, name) xReadFlag ( code ) 71 #if NH_MV 69 72 #define READ_STRING(bufSize, code, length, name) xReadString ( bufSize, code, length ) 73 #endif 70 74 71 75 #endif … … 91 95 92 96 #if RExt__DECODER_DEBUG_BIT_STATISTICS 93 Void xReadCode ( UInt length, UInt& val, const Char *pSymbolName ); 94 Void xReadUvlc ( UInt& val, const Char *pSymbolName ); 95 Void xReadSvlc ( Int& val, const Char *pSymbolName ); 96 Void xReadFlag ( UInt& val, const Char *pSymbolName ); 97 Void xReadString ( UInt bufSize, UChar *val, UInt& length, const Char *pSymbolName); 97 Void xReadCode ( UInt length, UInt& val, const TChar *pSymbolName ); 98 Void xReadUvlc ( UInt& val, const TChar *pSymbolName ); 99 Void xReadSvlc ( Int& val, const TChar *pSymbolName ); 100 Void xReadFlag ( UInt& val, const TChar *pSymbolName ); 101 #if NH_MV 102 Void xReadString ( UInt bufSize, UChar *val, UInt& length, const TChar *pSymbolName); 103 #endif 98 104 #else 99 105 Void xReadCode ( UInt length, UInt& val ); … … 101 107 Void xReadSvlc ( Int& val ); 102 108 Void xReadFlag ( UInt& val ); 109 #if NH_MV 103 110 Void xReadString ( UInt bufSize, UChar *val, UInt& length); 104 111 #endif 112 #endif 105 113 #if ENC_DEC_TRACE 106 Void xReadCodeTr (UInt length, UInt& rValue, const Char *pSymbolName); 107 Void xReadUvlcTr ( UInt& rValue, const Char *pSymbolName); 108 Void xReadSvlcTr ( Int& rValue, const Char *pSymbolName); 109 Void xReadFlagTr ( UInt& rValue, const Char *pSymbolName); 110 Void xReadStringTr(UInt bufSize, UChar *pValue, UInt& rLength, const Char *pSymbolName); 114 Void xReadCodeTr (UInt length, UInt& rValue, const TChar *pSymbolName); 115 Void xReadUvlcTr ( UInt& rValue, const TChar *pSymbolName); 116 Void xReadSvlcTr ( Int& rValue, const TChar *pSymbolName); 117 Void xReadFlagTr ( UInt& rValue, const TChar *pSymbolName); 118 #if NH_MV 119 Void xReadStringTr(UInt bufSize, UChar *pValue, UInt& rLength, const TChar *pSymbolName); 120 #endif 111 121 #endif 112 122 public: -
TabularUnified trunk/source/Lib/TLibDecoder/TDecBinCoderCABAC.cpp ¶
r1313 r1386 169 169 if (g_debugCounter >= debugCabacBinTargetLine) 170 170 { 171 Char breakPointThis;171 UChar breakPointThis; 172 172 breakPointThis = 7; 173 173 } -
TabularUnified trunk/source/Lib/TLibDecoder/TDecCAVLC.cpp ¶
r1321 r1386 51 51 52 52 #if ENC_DEC_TRACE 53 #if ! H_MV_ENC_DEC_TRAC53 #if !NH_MV_ENC_DEC_TRAC 54 54 Void xTraceVPSHeader () 55 55 { … … 234 234 { 235 235 #if ENC_DEC_TRACE 236 #if H_MV_ENC_DEC_TRAC236 #if NH_MV_ENC_DEC_TRAC 237 237 tracePSHeader( "PPS", pcPPS->getLayerId() ); 238 238 #else … … 454 454 #else 455 455 #if ENC_DEC_TRACE || RExt__DECODER_DEBUG_BIT_STATISTICS 456 static const char *syntaxStrings[]={ "pps_range_extension_flag",456 static const TChar *syntaxStrings[]={ "pps_range_extension_flag", 457 457 "pps_multilayer_extension_flag", 458 458 "pps_extension_6bits[0]", … … 871 871 { 872 872 #if ENC_DEC_TRACE 873 #if H_MV_ENC_DEC_TRAC873 #if NH_MV_ENC_DEC_TRAC 874 874 tracePSHeader( "SPS", pcSPS->getLayerId() ); 875 875 #else … … 1017 1017 pcSPS->setSpsMaxLatencyIncreasePlus1( uiCode, i ); 1018 1018 #else 1019 pcSPS->setMaxLatencyIncrease ( uiCode, i );1019 pcSPS->setMaxLatencyIncreasePlus1( uiCode, i ); 1020 1020 #endif 1021 1021 … … 1029 1029 pcSPS->setSpsMaxLatencyIncreasePlus1(pcSPS->getSpsMaxLatencyIncreasePlus1(0), i); 1030 1030 #else 1031 pcSPS->setMaxLatencyIncrease (pcSPS->getMaxLatencyIncrease(0), i);1031 pcSPS->setMaxLatencyIncreasePlus1(pcSPS->getMaxLatencyIncreasePlus1(0), i); 1032 1032 #endif 1033 1033 } … … 1165 1165 if ( pcSPS->getSpsRangeExtensionsFlag() ) 1166 1166 { 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1167 TComSPSRExt &spsRangeExtension = pcSPS->getSpsRangeExtension(); 1168 READ_FLAG( uiCode, "transform_skip_rotation_enabled_flag"); spsRangeExtension.setTransformSkipRotationEnabledFlag(uiCode != 0); 1169 READ_FLAG( uiCode, "transform_skip_context_enabled_flag"); spsRangeExtension.setTransformSkipContextEnabledFlag (uiCode != 0); 1170 READ_FLAG( uiCode, "implicit_rdpcm_enabled_flag"); spsRangeExtension.setRdpcmEnabledFlag(RDPCM_SIGNAL_IMPLICIT, (uiCode != 0)); 1171 READ_FLAG( uiCode, "explicit_rdpcm_enabled_flag"); spsRangeExtension.setRdpcmEnabledFlag(RDPCM_SIGNAL_EXPLICIT, (uiCode != 0)); 1172 READ_FLAG( uiCode, "extended_precision_processing_flag"); spsRangeExtension.setExtendedPrecisionProcessingFlag (uiCode != 0); 1173 READ_FLAG( uiCode, "intra_smoothing_disabled_flag"); spsRangeExtension.setIntraSmoothingDisabledFlag (uiCode != 0); 1174 READ_FLAG( uiCode, "high_precision_offsets_enabled_flag"); spsRangeExtension.setHighPrecisionOffsetsEnabledFlag (uiCode != 0); 1175 READ_FLAG( uiCode, "persistent_rice_adaptation_enabled_flag"); spsRangeExtension.setPersistentRiceAdaptationEnabledFlag (uiCode != 0); 1176 READ_FLAG( uiCode, "cabac_bypass_alignment_enabled_flag"); spsRangeExtension.setCabacBypassAlignmentEnabledFlag (uiCode != 0); 1177 1177 } 1178 1178 … … 1206 1206 1207 1207 #if ENC_DEC_TRACE || RExt__DECODER_DEBUG_BIT_STATISTICS 1208 static const char *syntaxStrings[]={ "sps_range_extension_flag",1208 static const TChar *syntaxStrings[]={ "sps_range_extension_flag", 1209 1209 "sps_multilayer_extension_flag", 1210 1210 "sps_extension_6bits[0]", … … 1277 1277 for( Int d = 0; d <= 1; d++ ) 1278 1278 { 1279 READ_FLAG( uiCode, "iv_ mv_pred_flag" ); sps3dExt.setIvMvPredFlag( d, uiCode == 1 );1280 READ_FLAG( uiCode, "iv_mv_scal ing_flag" ); sps3dExt.setIvMvScalingFlag( d, uiCode == 1 );1279 READ_FLAG( uiCode, "iv_di_mc_enabled_flag" ); sps3dExt.setIvDiMcEnabledFlag( d, uiCode == 1 ); 1280 READ_FLAG( uiCode, "iv_mv_scal_enabled_flag" ); sps3dExt.setIvMvScalEnabledFlag( d, uiCode == 1 ); 1281 1281 if( d == 0 ) 1282 1282 { 1283 READ_UVLC( uiCode, "log2_sub_pb_size_minus3" ); sps3dExt.setLog2SubPbSizeMinus3( d, uiCode );1284 READ_FLAG( uiCode, "iv_res_pred_ flag" ); sps3dExt.setIvResPredFlag( d, uiCode == 1 );1285 READ_FLAG( uiCode, "depth_ref inement_flag" ); sps3dExt.setDepthRefinementFlag( d, uiCode == 1 );1286 READ_FLAG( uiCode, "v iew_synthesis_pred_flag" ); sps3dExt.setViewSynthesisPredFlag( d, uiCode == 1 );1287 READ_FLAG( uiCode, "d epth_based_blk_part_flag" ); sps3dExt.setDepthBasedBlkPartFlag( d, uiCode == 1 );1283 READ_UVLC( uiCode, "log2_sub_pb_size_minus3" ); sps3dExt.setLog2IvmcSubPbSizeMinus3( d, uiCode ); 1284 READ_FLAG( uiCode, "iv_res_pred_enabled_flag" ); sps3dExt.setIvResPredEnabledFlag( d, uiCode == 1 ); 1285 READ_FLAG( uiCode, "depth_ref_enabled_flag" ); sps3dExt.setDepthRefEnabledFlag( d, uiCode == 1 ); 1286 READ_FLAG( uiCode, "vsp_mc_enabled_flag" ); sps3dExt.setVspMcEnabledFlag( d, uiCode == 1 ); 1287 READ_FLAG( uiCode, "dbbp_enabled_flag" ); sps3dExt.setDbbpEnabledFlag( d, uiCode == 1 ); 1288 1288 } 1289 1289 else 1290 1290 { 1291 READ_FLAG( uiCode, " mpi_flag" ); sps3dExt.setMpiFlag( d, uiCode == 1 );1292 READ_UVLC( uiCode, "log2_ mpi_sub_pb_size_minus3" ); sps3dExt.setLog2MpiSubPbSizeMinus3( d, uiCode );1293 READ_FLAG( uiCode, "intra_contour_ flag" ); sps3dExt.setIntraContourFlag( d, uiCode == 1 );1294 READ_FLAG( uiCode, "intra_ sdc_wedge_flag" ); sps3dExt.setIntraSdcWedgeFlag( d, uiCode == 1 );1295 READ_FLAG( uiCode, " qt_pred_flag" ); sps3dExt.setQtPredFlag( d, uiCode == 1 );1296 READ_FLAG( uiCode, "inter_ sdc_flag" ); sps3dExt.setInterSdcFlag( d, uiCode == 1 );1297 READ_FLAG( uiCode, " intra_skip_flag" ); sps3dExt.setDepthIntraSkipFlag( d, uiCode == 1 );1291 READ_FLAG( uiCode, "tex_mc_enabled_flag" ); sps3dExt.setTexMcEnabledFlag( d, uiCode == 1 ); 1292 READ_UVLC( uiCode, "log2_texmc_sub_pb_size_minus3" ); sps3dExt.setLog2TexmcSubPbSizeMinus3( d, uiCode ); 1293 READ_FLAG( uiCode, "intra_contour_enabled_flag" ); sps3dExt.setIntraContourEnabledFlag( d, uiCode == 1 ); 1294 READ_FLAG( uiCode, "intra_dc_only_wedge_enabled_flag" ); sps3dExt.setIntraDcOnlyWedgeEnabledFlag( d, uiCode == 1 ); 1295 READ_FLAG( uiCode, "cqt_cu_part_pred_enabled_flag" ); sps3dExt.setCqtCuPartPredEnabledFlag( d, uiCode == 1 ); 1296 READ_FLAG( uiCode, "inter_dc_only_enabled_flag" ); sps3dExt.setInterDcOnlyEnabledFlag( d, uiCode == 1 ); 1297 READ_FLAG( uiCode, "skip_intra_enabled_flag" ); sps3dExt.setSkipIntraEnabledFlag( d, uiCode == 1 ); 1298 1298 } 1299 1299 } … … 1358 1358 { 1359 1359 #if ENC_DEC_TRACE 1360 #if H_MV_ENC_DEC_TRAC1360 #if NH_MV_ENC_DEC_TRAC 1361 1361 tracePSHeader( "VPS", getDecTop()->getLayerId() ); 1362 1362 #else -
TabularUnified trunk/source/Lib/TLibDecoder/TDecCu.cpp ¶
r1321 r1386 213 213 UInt uiTPelY = pcCU->getCUPelY() + g_auiRasterToPelY[ g_auiZscanToRaster[uiAbsPartIdx] ]; 214 214 UInt uiBPelY = uiTPelY + (maxCuHeight>>uiDepth) - 1; 215 #if H_MV_ENC_DEC_TRAC215 #if NH_MV_ENC_DEC_TRAC 216 216 DTRACE_CU_S("=========== coding_quadtree ===========\n") 217 217 DTRACE_CU("x0", uiLPelX) … … 270 270 } 271 271 272 #if H_MV_ENC_DEC_TRAC272 #if NH_MV_ENC_DEC_TRAC 273 273 DTRACE_CU_S("=========== coding_unit ===========\n") 274 #if H_MV_ENC_DEC_TRAC274 #if NH_MV_ENC_DEC_TRAC 275 275 #if ENC_DEC_TRACE 276 276 stopAtPos ( pcCU->getSlice()->getPOC(), … … 359 359 } 360 360 #endif 361 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC361 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 362 362 if ( g_decTraceDispDer ) 363 363 { … … 396 396 if( pcCU->isSkipped(uiAbsPartIdx) ) 397 397 { 398 #if H_MV_ENC_DEC_TRAC398 #if NH_MV_ENC_DEC_TRAC 399 399 DTRACE_PU_S("=========== prediction_unit ===========\n") 400 400 DTRACE_PU("x0", uiLPelX) … … 493 493 } 494 494 #endif 495 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC495 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 496 496 if ( g_decTraceMvFromMerge ) 497 497 { … … 531 531 pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight); 532 532 } 533 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC533 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 534 534 if ( g_traceSubPBMotion ) 535 535 { -
TabularUnified trunk/source/Lib/TLibDecoder/TDecEntropy.cpp ¶
r1321 r1386 267 267 for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset ) 268 268 { 269 #if H_MV_ENC_DEC_TRAC269 #if NH_MV_ENC_DEC_TRAC 270 270 DTRACE_PU_S("=========== prediction_unit ===========\n") 271 271 // ToDo: … … 484 484 for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset ) 485 485 { 486 #if H_MV_ENC_DEC_TRAC486 #if NH_MV_ENC_DEC_TRAC 487 487 DTRACE_PU_S("=========== prediction_unit ===========\n") 488 488 // ToDo: … … 505 505 #endif 506 506 507 UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);507 const UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx); 508 508 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 ) 509 509 { … … 547 547 else 548 548 { 549 uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);550 549 551 550 #if NH_3D_MLC … … 742 741 { 743 742 m_pcEntropyDecoderIf->parseMVPIdx( iMVPIdx ); 744 #if H_MV_ENC_DEC_TRAC743 #if NH_MV_ENC_DEC_TRAC 745 744 #if ENC_DEC_TRACE 746 745 if ( eRefList == REF_PIC_LIST_0 ) … … 799 798 { 800 799 m_pcEntropyDecoderIf->parseMVPIdx( iMVPIdx ); 801 #if H_MV_ENC_DEC_TRAC800 #if NH_MV_ENC_DEC_TRAC 802 801 #if ENC_DEC_TRACE 803 802 if ( eRefList == REF_PIC_LIST_0 ) … … 834 833 const UInt uiTrDepth = rTu.GetTransformDepthRel(); 835 834 836 #if H_MV_ENC_DEC_TRAC835 #if NH_MV_ENC_DEC_TRAC 837 836 #if ENC_DEC_TRACE 838 837 UInt uiLPelX = pcCU->getCUPelX() + g_auiRasterToPelX[ g_auiZscanToRaster[uiAbsPartIdx] ]; … … 941 940 pcCU->setTrIdxSubParts( uiTrDepth, uiAbsPartIdx, uiDepth ); 942 941 943 #if ! H_MV_ENC_DEC_TRAC942 #if !NH_MV_ENC_DEC_TRAC 944 943 { 945 944 DTRACE_CABAC_VL( g_nSymbolCounter++ ); -
TabularUnified trunk/source/Lib/TLibDecoder/TDecGop.cpp ¶
r1313 r1386 177 177 pcPic->compressMotion(); 178 178 #endif 179 Char c = (pcSlice->isIntra() ? 'I' : pcSlice->isInterP() ? 'P' : 'B');179 TChar c = (pcSlice->isIntra() ? 'I' : pcSlice->isInterP() ? 'P' : 'B'); 180 180 if (!pcSlice->isReferenced()) 181 181 { … … 255 255 TComPictureHash recon_digest; 256 256 Int numChar=0; 257 const Char* hashType = "\0";257 const TChar* hashType = "\0"; 258 258 259 259 if (pictureHashSEI) … … 261 261 switch (pictureHashSEI->method) 262 262 { 263 case SEIDecodedPictureHash::MD5:263 case HASHTYPE_MD5: 264 264 { 265 265 hashType = "MD5"; … … 267 267 break; 268 268 } 269 case SEIDecodedPictureHash::CRC:269 case HASHTYPE_CRC: 270 270 { 271 271 hashType = "CRC"; … … 273 273 break; 274 274 } 275 case SEIDecodedPictureHash::CHECKSUM:275 case HASHTYPE_CHECKSUM: 276 276 { 277 277 hashType = "Checksum"; … … 288 288 289 289 /* compare digest against received version */ 290 const Char* ok = "(unk)";290 const TChar* ok = "(unk)"; 291 291 Bool mismatch = false; 292 292 -
TabularUnified trunk/source/Lib/TLibDecoder/TDecSbac.cpp ¶
r1313 r1386 423 423 m_pcTDecBinIf->decodeBinTrm(uiSymbol); 424 424 425 #if H_MV_ENC_DEC_TRAC425 #if NH_MV_ENC_DEC_TRAC 426 426 DTRACE_CU("pcm_flag", uiSymbol) 427 427 #endif … … 467 467 UInt uiSymbol; 468 468 m_pcTDecBinIf->decodeBin( uiSymbol, m_CUTransquantBypassFlagSCModel.get( 0, 0, 0 ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(STATS__CABAC_BITS__TQ_BYPASS_FLAG) ); 469 #if H_MV_ENC_DEC_TRAC469 #if NH_MV_ENC_DEC_TRAC 470 470 DTRACE_CU("cu_transquant_bypass_flag", uiSymbol); 471 471 #endif … … 490 490 UInt uiCtxSkip = pcCU->getCtxSkipFlag( uiAbsPartIdx ); 491 491 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSkipFlagSCModel.get( 0, 0, uiCtxSkip ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(STATS__CABAC_BITS__SKIP_FLAG) ); 492 #if ! H_MV_ENC_DEC_TRAC492 #if !NH_MV_ENC_DEC_TRAC 493 493 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 494 494 DTRACE_CABAC_T( "\tSkipFlag" ); … … 507 507 pcCU->setMergeFlagSubParts( true , uiAbsPartIdx, 0, uiDepth ); 508 508 } 509 #if H_MV_ENC_DEC_TRAC509 #if NH_MV_ENC_DEC_TRAC 510 510 DTRACE_CU("cu_skip_flag", uiSymbol); 511 511 #endif … … 570 570 UInt uiSymbol; 571 571 m_pcTDecBinIf->decodeBin( uiSymbol, *m_cCUMergeFlagExtSCModel.get( 0 ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(STATS__CABAC_BITS__MERGE_FLAG) ); 572 #if H_MV_ENC_DEC_TRAC572 #if NH_MV_ENC_DEC_TRAC 573 573 DTRACE_PU("merge_flag", uiSymbol) 574 574 #endif 575 575 pcCU->setMergeFlagSubParts( uiSymbol ? true : false, uiAbsPartIdx, uiPUIdx, uiDepth ); 576 #if ! H_MV_ENC_DEC_TRAC576 #if !NH_MV_ENC_DEC_TRAC 577 577 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 578 578 DTRACE_CABAC_T( "\tMergeFlag: " ); … … 608 608 } 609 609 } 610 #if H_MV_ENC_DEC_TRAC610 #if NH_MV_ENC_DEC_TRAC 611 611 DTRACE_PU("merge_idx", uiUnaryIdx) 612 612 #endif … … 614 614 ruiMergeIndex = uiUnaryIdx; 615 615 616 #if ! H_MV_ENC_DEC_TRAC616 #if !NH_MV_ENC_DEC_TRAC 617 617 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 618 618 DTRACE_CABAC_T( "\tparseMergeIndex()" ) … … 666 666 #endif 667 667 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSplitFlagSCModel.get( 0, 0, pcCU->getCtxSplitFlag( uiAbsPartIdx, uiDepth ) ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) ); 668 #if H_MV_ENC_DEC_TRAC668 #if NH_MV_ENC_DEC_TRAC 669 669 DTRACE_CU("split_cu_flag", uiSymbol); 670 670 #else … … 748 748 { 749 749 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, 0) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) ); 750 #if H_MV_ENC_DEC_TRAC750 #if NH_MV_ENC_DEC_TRAC 751 751 DTRACE_CU("part_mode", uiSymbol) 752 752 #endif … … 884 884 } 885 885 #endif 886 #if H_MV_ENC_DEC_TRAC886 #if NH_MV_ENC_DEC_TRAC 887 887 DTRACE_CU("part_mode", eMode ) 888 888 #endif … … 914 914 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPredModeSCModel.get( 0, 0, 0 ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(STATS__CABAC_BITS__PRED_MODE) ); 915 915 iPredMode += uiSymbol; 916 #if H_MV_ENC_DEC_TRAC916 #if NH_MV_ENC_DEC_TRAC 917 917 DTRACE_CU("pred_mode_flag", uiSymbol) 918 918 #endif … … 948 948 m_pcTDecBinIf->decodeBin( symbol, m_cCUIntraPredSCModel.get( 0, 0, 0) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) ); 949 949 mpmPred[j] = symbol; 950 #if H_MV_ENC_DEC_TRAC950 #if NH_MV_ENC_DEC_TRAC 951 951 DTRACE_CU("prev_intra_luma_pred_flag", symbol) 952 952 #endif … … 971 971 symbol++; 972 972 } 973 #if H_MV_ENC_DEC_TRAC973 #if NH_MV_ENC_DEC_TRAC 974 974 DTRACE_CU("mpm_idx", symbol) 975 975 #endif … … 980 980 m_pcTDecBinIf->decodeBinsEP( symbol, 5 RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) ); 981 981 intraPredMode = symbol; 982 #if H_MV_ENC_DEC_TRAC982 #if NH_MV_ENC_DEC_TRAC 983 983 DTRACE_CU("rem_intra_luma_pred_mode", symbol) 984 984 #endif … … 1020 1020 if( uiSymbol == 0 ) 1021 1021 { 1022 #if H_MV_ENC_DEC_TRAC1022 #if NH_MV_ENC_DEC_TRAC 1023 1023 DTRACE_CU("intra_chroma_pred_mode", uiSymbol ) 1024 1024 #endif … … 1029 1029 UInt uiIPredMode; 1030 1030 m_pcTDecBinIf->decodeBinsEP( uiIPredMode, 2 RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) ); 1031 #if H_MV_ENC_DEC_TRAC1031 #if NH_MV_ENC_DEC_TRAC 1032 1032 DTRACE_CU("intra_chroma_pred_mode", uiIPredMode ) 1033 1033 #endif … … 1064 1064 uiSymbol++; 1065 1065 ruiInterDir = uiSymbol; 1066 #if H_MV_ENC_DEC_TRAC1066 #if NH_MV_ENC_DEC_TRAC 1067 1067 DTRACE_PU("inter_pred_idc", ruiInterDir - 1 ) 1068 1068 #endif … … 1101 1101 } 1102 1102 riRefFrmIdx = uiSymbol; 1103 #if H_MV_ENC_DEC_TRAC1103 #if NH_MV_ENC_DEC_TRAC 1104 1104 #if ENC_DEC_TRACE 1105 1105 if ( eRefList == REF_PIC_LIST_0 ) … … 1194 1194 if (!pcCU->isIntra(uiAbsPartIdx) || (pcCU->getIntraDir( CHANNEL_TYPE_CHROMA, uiAbsPartIdx ) == DM_CHROMA_IDX)) 1195 1195 { 1196 Char alpha= 0;1196 SChar alpha = 0; 1197 1197 UInt symbol = 0; 1198 1198 … … 1239 1239 RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(TComCodingStatisticsClassType(STATS__CABAC_BITS__TRANSFORM_SUBDIV_FLAG, 5-uiLog2TransformBlockSize)) 1240 1240 ); 1241 #if ! H_MV_ENC_DEC_TRAC1241 #if !NH_MV_ENC_DEC_TRAC 1242 1242 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1243 1243 DTRACE_CABAC_T( "\tparseTransformSubdivFlag()" ) … … 1258 1258 const UInt uiCtx = 0; 1259 1259 m_pcTDecBinIf->decodeBin( uiSymbol , m_cCUQtRootCbfSCModel.get( 0, 0, uiCtx ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(STATS__CABAC_BITS__QT_ROOT_CBF) ); 1260 #if ! H_MV_ENC_DEC_TRAC1260 #if !NH_MV_ENC_DEC_TRAC 1261 1261 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1262 1262 DTRACE_CABAC_T( "\tparseQtRootCbf()" ) … … 1386 1386 pcCU->setCbfPartRange((uiCbf << subTUDepth), compID, subTUAbsPartIdx, partIdxesPerSubTU); 1387 1387 combinedSubTUCBF |= uiCbf; 1388 #if ! H_MV_ENC_DEC_TRAC1388 #if !NH_MV_ENC_DEC_TRAC 1389 1389 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1390 1390 DTRACE_CABAC_T( "\tparseQtCbf()" ) … … 1430 1430 1431 1431 pcCU->setCbfSubParts((uiCbf << lowestTUDepth), compID, absPartIdx, rTu.GetTransformDepthTotalAdj(compID)); 1432 #if ! H_MV_ENC_DEC_TRAC1432 #if !NH_MV_ENC_DEC_TRAC 1433 1433 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1434 1434 DTRACE_CABAC_T( "\tparseQtCbf()" ) … … 1491 1491 ); 1492 1492 1493 #if ! H_MV_ENC_DEC_TRAC1493 #if !NH_MV_ENC_DEC_TRAC 1494 1494 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1495 1495 DTRACE_CABAC_T("\tparseTransformSkip()"); … … 1605 1605 TCoeff* pcCoef=(pcCU->getCoeff(compID)+rTu.getCoefficientOffset(compID)); 1606 1606 const TComSPS &sps=*(pcCU->getSlice()->getSPS()); 1607 #if ! H_MV_ENC_DEC_TRAC1607 #if !NH_MV_ENC_DEC_TRAC 1608 1608 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1609 1609 DTRACE_CABAC_T( "\tparseCoeffNxN()\teType=" ) … … 2284 2284 uiW += ( 1 == uiCode ? 1 : 0 ); 2285 2285 } 2286 #if H_MV_ENC_DEC_TRAC2286 #if NH_MV_ENC_DEC_TRAC 2287 2287 DTRACE_CU("iv_res_pred_weight_idx", uiW ) 2288 2288 #endif … … 2303 2303 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUICFlagSCModel.get( 0, 0, 0 ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(STATS__CABAC_BITS__3D_IC) ); 2304 2304 2305 #if ! H_MV_ENC_DEC_TRAC2305 #if !NH_MV_ENC_DEC_TRAC 2306 2306 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 2307 2307 DTRACE_CABAC_T( "\tICFlag" ); … … 2394 2394 } 2395 2395 } 2396 #if H_MV_ENC_DEC_TRAC2396 #if NH_MV_ENC_DEC_TRAC 2397 2397 DTRACE_CU("delta_dc", rValDeltaDC); 2398 2398 #endif … … 2495 2495 2496 2496 m_pcTDecBinIf->decodeBin( uiSymbol, m_cSDCFlagSCModel.get( 0, 0, 0 ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(STATS__CABAC_BITS__SDC_INTRA_FLAG) ); 2497 #if H_MV_ENC_DEC_TRAC2497 #if NH_MV_ENC_DEC_TRAC 2498 2498 DTRACE_CU("dc_only_flag", uiSymbol) 2499 2499 #endif -
TabularUnified trunk/source/Lib/TLibDecoder/TDecSlice.cpp ¶
r1313 r1386 90 90 g_bJustDoIt = g_bEncDecTraceEnable; 91 91 #endif 92 #if H_MV_ENC_DEC_TRAC92 #if NH_MV_ENC_DEC_TRAC 93 93 #if ENC_DEC_TRACE 94 94 incSymbolCounter(); … … 100 100 DTRACE_CABAC_T( "\tPOC: " ); 101 101 DTRACE_CABAC_V( pcPic->getPOC() ); 102 #if H_MV_ENC_DEC_TRAC102 #if NH_MV_ENC_DEC_TRAC 103 103 DTRACE_CABAC_T( " Layer: " ); 104 104 DTRACE_CABAC_V( pcPic->getLayerId() ); -
TabularUnified trunk/source/Lib/TLibDecoder/TDecTop.cpp ¶
r1356 r1386 687 687 } 688 688 } 689 #if NH_MV_SEI690 689 m_seiReader.setLayerId ( newPic->getLayerId ( ) ); 691 690 m_seiReader.setDecOrder( newPic->getDecodingOrder( ) ); 692 #endif693 691 #endif 694 692 … … 839 837 InputNALUnit &nalu=*m_prefixSEINALUs.front(); 840 838 #if NH_MV 841 #if NH_MV_LAYERS_NOT_PRESENT_SEI842 839 m_seiReader.parseSEImessage(&(nalu.getBitstream()), m_SEIs, nalu.m_nalUnitType, m_parameterSetManager.getActiveVPS(), m_parameterSetManager.getActiveSPS(getLayerId()), m_pDecodedSEIOutputStream); 843 #else844 m_seiReader.parseSEImessage( &(nalu.getBitstream()), m_SEIs, nalu.m_nalUnitType, m_parameterSetManager.getActiveSPS( getLayerId() ), m_pDecodedSEIOutputStream );845 #endif846 840 #else 847 841 m_seiReader.parseSEImessage( &(nalu.getBitstream()), m_SEIs, nalu.m_nalUnitType, m_parameterSetManager.getActiveSPS(), m_pDecodedSEIOutputStream ); … … 1315 1309 { 1316 1310 #if NH_MV 1317 #if NH_MV_LAYERS_NOT_PRESENT_SEI1318 1311 m_seiReader.parseSEImessage( &(nalu.getBitstream()), m_pcPic->getSEIs(), nalu.m_nalUnitType, m_parameterSetManager.getActiveVPS(), m_parameterSetManager.getActiveSPS(getLayerId()), m_pDecodedSEIOutputStream); 1319 #else1320 m_seiReader.parseSEImessage( &(nalu.getBitstream()), m_pcPic->getSEIs(), nalu.m_nalUnitType, m_parameterSetManager.getActiveSPS( getLayerId() ), m_pDecodedSEIOutputStream );1321 #endif1322 1312 #else 1323 1313 m_seiReader.parseSEImessage( &(nalu.getBitstream()), m_pcPic->getSEIs(), nalu.m_nalUnitType, m_parameterSetManager.getActiveSPS(), m_pDecodedSEIOutputStream ); … … 1771 1761 xG813DecProcForInterLayerRefPicSet(); 1772 1762 } 1763 else 1764 { 1765 #if NH_MV_FIX_INIT_NUM_ACTIVE_REF_LAYER_PICS 1766 TComDecodedRps* decRps = m_pcPic->getDecodedRps(); 1767 decRps->m_numActiveRefLayerPics0 = 0; 1768 decRps->m_numActiveRefLayerPics1 = 0; 1769 #endif 1770 } 1773 1771 } 1774 1772 } -
TabularUnified trunk/source/Lib/TLibEncoder/AnnexBwrite.h ¶
r1313 r1386 60 60 UInt size = 0; /* size of annexB unit in bytes */ 61 61 62 static const Char start_code_prefix[] = {0,0,0,1};62 static const UChar start_code_prefix[] = {0,0,0,1}; 63 63 if (it == au.begin() || nalu.m_nalUnitType == NAL_UNIT_VPS || nalu.m_nalUnitType == NAL_UNIT_SPS || nalu.m_nalUnitType == NAL_UNIT_PPS) 64 64 { … … 71 71 * 7.4.1.2.3. 72 72 */ 73 out.write( start_code_prefix, 4);73 out.write(reinterpret_cast<const TChar*>(start_code_prefix), 4); 74 74 size += 4; 75 75 } 76 76 else 77 77 { 78 out.write( start_code_prefix+1, 3);78 out.write(reinterpret_cast<const TChar*>(start_code_prefix+1), 3); 79 79 size += 3; 80 80 } -
TabularUnified trunk/source/Lib/TLibEncoder/NALwrite.cpp ¶
r1313 r1386 45 45 //! \{ 46 46 47 static const Char emulation_prevention_three_byte[] = {3};47 static const UChar emulation_prevention_three_byte[] = {3}; 48 48 49 49 Void writeNalUnitHeader(ostream& out, OutputNALUnit& nalu) // nal_unit_header() … … 60 60 bsNALUHeader.write(nalu.m_temporalId+1, 3); // nuh_temporal_id_plus1 61 61 62 out.write( bsNALUHeader.getByteStream(), bsNALUHeader.getByteStreamLength());62 out.write(reinterpret_cast<const TChar*>(bsNALUHeader.getByteStream()), bsNALUHeader.getByteStreamLength()); 63 63 } 64 64 /** … … 124 124 outputBuffer[outputAmount++]=emulation_prevention_three_byte[0]; 125 125 } 126 out.write( (Char*)&(*outputBuffer.begin()), outputAmount);126 out.write(reinterpret_cast<const TChar*>(&(*outputBuffer.begin())), outputAmount); 127 127 } 128 128 -
TabularUnified trunk/source/Lib/TLibEncoder/SEIEncoder.cpp ¶
r1356 r1386 294 294 assert (pcPic!=NULL); 295 295 296 if(m_pcCfg->getDecodedPictureHashSEIEnabled() == 1) 297 { 298 decodedPictureHashSEI->method = SEIDecodedPictureHash::MD5; 296 decodedPictureHashSEI->method = m_pcCfg->getDecodedPictureHashSEIType(); 297 switch (m_pcCfg->getDecodedPictureHashSEIType()) 298 { 299 case HASHTYPE_MD5: 300 { 299 301 UInt numChar=calcMD5(*pcPic->getPicYuvRec(), decodedPictureHashSEI->m_pictureHash, bitDepths); 300 302 rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); 301 303 } 302 else if(m_pcCfg->getDecodedPictureHashSEIEnabled() == 2)303 {304 decodedPictureHashSEI->method = SEIDecodedPictureHash::CRC;304 break; 305 case HASHTYPE_CRC: 306 { 305 307 UInt numChar=calcCRC(*pcPic->getPicYuvRec(), decodedPictureHashSEI->m_pictureHash, bitDepths); 306 308 rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); 307 309 } 308 else if(m_pcCfg->getDecodedPictureHashSEIEnabled() == 3) 309 { 310 decodedPictureHashSEI->method = SEIDecodedPictureHash::CHECKSUM; 310 break; 311 case HASHTYPE_CHECKSUM: 312 default: 313 { 311 314 UInt numChar=calcChecksum(*pcPic->getPicYuvRec(), decodedPictureHashSEI->m_pictureHash, bitDepths); 312 315 rHashString = hashToString(decodedPictureHashSEI->m_pictureHash, numChar); 316 } 317 break; 313 318 } 314 319 } … … 397 402 } 398 403 } 399 400 Void SEIEncoder::initSEIChromaSamplingFilterHint(SEIChromaSamplingFilterHint *seiChromaSamplingFilterHint, Int iHorFilterIndex, Int iVerFilterIndex) 401 { 402 assert (m_isInitialized); 403 assert (seiChromaSamplingFilterHint!=NULL); 404 405 seiChromaSamplingFilterHint->m_verChromaFilterIdc = iVerFilterIndex; 406 seiChromaSamplingFilterHint->m_horChromaFilterIdc = iHorFilterIndex; 407 seiChromaSamplingFilterHint->m_verFilteringProcessFlag = 1; 408 seiChromaSamplingFilterHint->m_targetFormatIdc = 3; 409 seiChromaSamplingFilterHint->m_perfectReconstructionFlag = false; 410 if(seiChromaSamplingFilterHint->m_verChromaFilterIdc == 1) 411 { 412 seiChromaSamplingFilterHint->m_numVerticalFilters = 1; 413 seiChromaSamplingFilterHint->m_verTapLengthMinus1 = (Int*)malloc(seiChromaSamplingFilterHint->m_numVerticalFilters * sizeof(Int)); 414 seiChromaSamplingFilterHint->m_verFilterCoeff = (Int**)malloc(seiChromaSamplingFilterHint->m_numVerticalFilters * sizeof(Int*)); 415 for(Int i = 0; i < seiChromaSamplingFilterHint->m_numVerticalFilters; i ++) 416 { 417 seiChromaSamplingFilterHint->m_verTapLengthMinus1[i] = 0; 418 seiChromaSamplingFilterHint->m_verFilterCoeff[i] = (Int*)malloc(seiChromaSamplingFilterHint->m_verTapLengthMinus1[i] * sizeof(Int)); 419 for(Int j = 0; j < seiChromaSamplingFilterHint->m_verTapLengthMinus1[i]; j ++) 420 { 421 seiChromaSamplingFilterHint->m_verFilterCoeff[i][j] = 0; 422 } 423 } 404 template <typename T> 405 static Void readTokenValue(T &returnedValue, /// value returned 406 Bool &failed, /// used and updated 407 std::istream &is, /// stream to read token from 408 const TChar *pToken) /// token string 409 { 410 returnedValue=T(); 411 if (failed) 412 { 413 return; 414 } 415 416 Int c; 417 // Ignore any whitespace 418 while ((c=is.get())!=EOF && isspace(c)); 419 // test for comment mark 420 while (c=='#') 421 { 422 // Ignore to the end of the line 423 while ((c=is.get())!=EOF && (c!=10 && c!=13)); 424 // Ignore any white space at the start of the next line 425 while ((c=is.get())!=EOF && isspace(c)); 426 } 427 // test first character of token 428 failed=(c!=pToken[0]); 429 // test remaining characters of token 430 Int pos; 431 for(pos=1;!failed && pToken[pos]!=0 && is.get()==pToken[pos]; pos++); 432 failed|=(pToken[pos]!=0); 433 // Ignore any whitespace before the ':' 434 while (!failed && (c=is.get())!=EOF && isspace(c)); 435 failed|=(c!=':'); 436 // Now read the value associated with the token: 437 if (!failed) 438 { 439 is >> returnedValue; 440 failed=!is.good(); 441 if (!failed) 442 { 443 c=is.get(); 444 failed=(c!=EOF && !isspace(c)); 445 } 446 } 447 if (failed) 448 { 449 std::cerr << "Unable to read token '" << pToken << "'\n"; 450 } 451 } 452 453 template <typename T> 454 static Void readTokenValueAndValidate(T &returnedValue, /// value returned 455 Bool &failed, /// used and updated 456 std::istream &is, /// stream to read token from 457 const TChar *pToken, /// token string 458 const T &minInclusive, /// minimum value allowed, inclusive 459 const T &maxInclusive) /// maximum value allowed, inclusive 460 { 461 readTokenValue(returnedValue, failed, is, pToken); 462 if (!failed) 463 { 464 if (returnedValue<minInclusive || returnedValue>maxInclusive) 465 { 466 failed=true; 467 std::cerr << "Value for token " << pToken << " must be in the range " << minInclusive << " to " << maxInclusive << " (inclusive); value read: " << returnedValue << std::endl; 468 } 469 } 470 } 471 472 // Bool version does not have maximum and minimum values. 473 static Void readTokenValueAndValidate(Bool &returnedValue, /// value returned 474 Bool &failed, /// used and updated 475 std::istream &is, /// stream to read token from 476 const TChar *pToken) /// token string 477 { 478 readTokenValue(returnedValue, failed, is, pToken); 479 } 480 481 Bool SEIEncoder::initSEIColourRemappingInfo(SEIColourRemappingInfo* seiColourRemappingInfo, Int currPOC) // returns true on success, false on failure. 482 { 483 assert (m_isInitialized); 484 assert (seiColourRemappingInfo!=NULL); 485 486 // reading external Colour Remapping Information SEI message parameters from file 487 if( !m_pcCfg->getColourRemapInfoSEIFileRoot().empty()) 488 { 489 Bool failed=false; 490 491 // building the CRI file name with poc num in prefix "_poc.txt" 492 std::string colourRemapSEIFileWithPoc(m_pcCfg->getColourRemapInfoSEIFileRoot()); 493 { 494 std::stringstream suffix; 495 suffix << "_" << currPOC << ".txt"; 496 colourRemapSEIFileWithPoc+=suffix.str(); 497 } 498 499 std::ifstream fic(colourRemapSEIFileWithPoc.c_str()); 500 if (!fic.good() || !fic.is_open()) 501 { 502 std::cerr << "No Colour Remapping Information SEI parameters file " << colourRemapSEIFileWithPoc << " for POC " << currPOC << std::endl; 503 return false; 504 } 505 506 // TODO: identify and remove duplication with decoder parsing through abstraction. 507 508 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapId, failed, fic, "colour_remap_id", UInt(0), UInt(0x7fffffff) ); 509 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapCancelFlag, failed, fic, "colour_remap_cancel_flag" ); 510 if( !seiColourRemappingInfo->m_colourRemapCancelFlag ) 511 { 512 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapPersistenceFlag, failed, fic, "colour_remap_persistence_flag" ); 513 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapVideoSignalInfoPresentFlag, failed, fic, "colour_remap_video_signal_info_present_flag"); 514 if( seiColourRemappingInfo->m_colourRemapVideoSignalInfoPresentFlag ) 515 { 516 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapFullRangeFlag, failed, fic, "colour_remap_full_range_flag" ); 517 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapPrimaries, failed, fic, "colour_remap_primaries", Int(0), Int(255) ); 518 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapTransferFunction, failed, fic, "colour_remap_transfer_function", Int(0), Int(255) ); 519 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapMatrixCoefficients, failed, fic, "colour_remap_matrix_coefficients", Int(0), Int(255) ); 520 } 521 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapInputBitDepth, failed, fic, "colour_remap_input_bit_depth", Int(8), Int(16) ); 522 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapBitDepth, failed, fic, "colour_remap_bit_depth", Int(8), Int(16) ); 523 524 const Int maximumInputValue = (1 << (((seiColourRemappingInfo->m_colourRemapInputBitDepth + 7) >> 3) << 3)) - 1; 525 const Int maximumRemappedValue = (1 << (((seiColourRemappingInfo->m_colourRemapBitDepth + 7) >> 3) << 3)) - 1; 526 527 for( Int c=0 ; c<3 ; c++ ) 528 { 529 readTokenValueAndValidate(seiColourRemappingInfo->m_preLutNumValMinus1[c], failed, fic, "pre_lut_num_val_minus1[c]", Int(0), Int(32) ); 530 if( seiColourRemappingInfo->m_preLutNumValMinus1[c]>0 ) 531 { 532 seiColourRemappingInfo->m_preLut[c].resize(seiColourRemappingInfo->m_preLutNumValMinus1[c]+1); 533 for( Int i=0 ; i<=seiColourRemappingInfo->m_preLutNumValMinus1[c] ; i++ ) 534 { 535 readTokenValueAndValidate(seiColourRemappingInfo->m_preLut[c][i].codedValue, failed, fic, "pre_lut_coded_value[c][i]", Int(0), maximumInputValue ); 536 readTokenValueAndValidate(seiColourRemappingInfo->m_preLut[c][i].targetValue, failed, fic, "pre_lut_target_value[c][i]", Int(0), maximumRemappedValue ); 537 } 538 } 539 } 540 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapMatrixPresentFlag, failed, fic, "colour_remap_matrix_present_flag" ); 541 if( seiColourRemappingInfo->m_colourRemapMatrixPresentFlag ) 542 { 543 readTokenValueAndValidate(seiColourRemappingInfo->m_log2MatrixDenom, failed, fic, "log2_matrix_denom", Int(0), Int(15) ); 544 for( Int c=0 ; c<3 ; c++ ) 545 { 546 for( Int i=0 ; i<3 ; i++ ) 547 { 548 readTokenValueAndValidate(seiColourRemappingInfo->m_colourRemapCoeffs[c][i], failed, fic, "colour_remap_coeffs[c][i]", -32768, 32767 ); 549 } 550 } 551 } 552 for( Int c=0 ; c<3 ; c++ ) 553 { 554 readTokenValueAndValidate(seiColourRemappingInfo->m_postLutNumValMinus1[c], failed, fic, "post_lut_num_val_minus1[c]", Int(0), Int(32) ); 555 if( seiColourRemappingInfo->m_postLutNumValMinus1[c]>0 ) 556 { 557 seiColourRemappingInfo->m_postLut[c].resize(seiColourRemappingInfo->m_postLutNumValMinus1[c]+1); 558 for( Int i=0 ; i<=seiColourRemappingInfo->m_postLutNumValMinus1[c] ; i++ ) 559 { 560 readTokenValueAndValidate(seiColourRemappingInfo->m_postLut[c][i].codedValue, failed, fic, "post_lut_coded_value[c][i]", Int(0), maximumRemappedValue ); 561 readTokenValueAndValidate(seiColourRemappingInfo->m_postLut[c][i].targetValue, failed, fic, "post_lut_target_value[c][i]", Int(0), maximumRemappedValue ); 562 } 563 } 564 } 565 } 566 567 if( failed ) 568 { 569 std::cerr << "Error while reading Colour Remapping Information SEI parameters file '" << colourRemapSEIFileWithPoc << "'" << std::endl; 570 exit(EXIT_FAILURE); 571 } 572 } 573 return true; 574 } 575 576 577 Void SEIEncoder::initSEIChromaResamplingFilterHint(SEIChromaResamplingFilterHint *seiChromaResamplingFilterHint, Int iHorFilterIndex, Int iVerFilterIndex) 578 { 579 assert (m_isInitialized); 580 assert (seiChromaResamplingFilterHint!=NULL); 581 582 seiChromaResamplingFilterHint->m_verChromaFilterIdc = iVerFilterIndex; 583 seiChromaResamplingFilterHint->m_horChromaFilterIdc = iHorFilterIndex; 584 seiChromaResamplingFilterHint->m_verFilteringFieldProcessingFlag = 1; 585 seiChromaResamplingFilterHint->m_targetFormatIdc = 3; 586 seiChromaResamplingFilterHint->m_perfectReconstructionFlag = false; 587 588 // this creates some example filter values, if explicit filter definition is selected 589 if (seiChromaResamplingFilterHint->m_verChromaFilterIdc == 1) 590 { 591 const Int numVerticalFilters = 3; 592 const Int verTapLengthMinus1[] = {5,3,3}; 593 594 seiChromaResamplingFilterHint->m_verFilterCoeff.resize(numVerticalFilters); 595 for(Int i = 0; i < numVerticalFilters; i ++) 596 { 597 seiChromaResamplingFilterHint->m_verFilterCoeff[i].resize(verTapLengthMinus1[i]+1); 598 } 599 // Note: C++11 -> seiChromaResamplingFilterHint->m_verFilterCoeff[0] = {-3,13,31,23,3,-3}; 600 seiChromaResamplingFilterHint->m_verFilterCoeff[0][0] = -3; 601 seiChromaResamplingFilterHint->m_verFilterCoeff[0][1] = 13; 602 seiChromaResamplingFilterHint->m_verFilterCoeff[0][2] = 31; 603 seiChromaResamplingFilterHint->m_verFilterCoeff[0][3] = 23; 604 seiChromaResamplingFilterHint->m_verFilterCoeff[0][4] = 3; 605 seiChromaResamplingFilterHint->m_verFilterCoeff[0][5] = -3; 606 607 seiChromaResamplingFilterHint->m_verFilterCoeff[1][0] = -1; 608 seiChromaResamplingFilterHint->m_verFilterCoeff[1][1] = 25; 609 seiChromaResamplingFilterHint->m_verFilterCoeff[1][2] = 247; 610 seiChromaResamplingFilterHint->m_verFilterCoeff[1][3] = -15; 611 612 seiChromaResamplingFilterHint->m_verFilterCoeff[2][0] = -20; 613 seiChromaResamplingFilterHint->m_verFilterCoeff[2][1] = 186; 614 seiChromaResamplingFilterHint->m_verFilterCoeff[2][2] = 100; 615 seiChromaResamplingFilterHint->m_verFilterCoeff[2][3] = -10; 424 616 } 425 617 else 426 618 { 427 seiChromaSamplingFilterHint->m_numVerticalFilters = 0; 428 seiChromaSamplingFilterHint->m_verTapLengthMinus1 = NULL; 429 seiChromaSamplingFilterHint->m_verFilterCoeff = NULL; 430 } 431 if(seiChromaSamplingFilterHint->m_horChromaFilterIdc == 1) 432 { 433 seiChromaSamplingFilterHint->m_numHorizontalFilters = 1; 434 seiChromaSamplingFilterHint->m_horTapLengthMinus1 = (Int*)malloc(seiChromaSamplingFilterHint->m_numHorizontalFilters * sizeof(Int)); 435 seiChromaSamplingFilterHint->m_horFilterCoeff = (Int**)malloc(seiChromaSamplingFilterHint->m_numHorizontalFilters * sizeof(Int*)); 436 for(Int i = 0; i < seiChromaSamplingFilterHint->m_numHorizontalFilters; i ++) 437 { 438 seiChromaSamplingFilterHint->m_horTapLengthMinus1[i] = 0; 439 seiChromaSamplingFilterHint->m_horFilterCoeff[i] = (Int*)malloc(seiChromaSamplingFilterHint->m_horTapLengthMinus1[i] * sizeof(Int)); 440 for(Int j = 0; j < seiChromaSamplingFilterHint->m_horTapLengthMinus1[i]; j ++) 441 { 442 seiChromaSamplingFilterHint->m_horFilterCoeff[i][j] = 0; 443 } 444 } 619 seiChromaResamplingFilterHint->m_verFilterCoeff.resize(0); 620 } 621 622 if (seiChromaResamplingFilterHint->m_horChromaFilterIdc == 1) 623 { 624 Int const numHorizontalFilters = 1; 625 const Int horTapLengthMinus1[] = {3}; 626 627 seiChromaResamplingFilterHint->m_horFilterCoeff.resize(numHorizontalFilters); 628 for(Int i = 0; i < numHorizontalFilters; i ++) 629 { 630 seiChromaResamplingFilterHint->m_horFilterCoeff[i].resize(horTapLengthMinus1[i]+1); 631 } 632 seiChromaResamplingFilterHint->m_horFilterCoeff[0][0] = 1; 633 seiChromaResamplingFilterHint->m_horFilterCoeff[0][1] = 6; 634 seiChromaResamplingFilterHint->m_horFilterCoeff[0][2] = 1; 445 635 } 446 636 else 447 637 { 448 seiChromaSamplingFilterHint->m_numHorizontalFilters = 0; 449 seiChromaSamplingFilterHint->m_horTapLengthMinus1 = NULL; 450 seiChromaSamplingFilterHint->m_horFilterCoeff = NULL; 638 seiChromaResamplingFilterHint->m_horFilterCoeff.resize(0); 451 639 } 452 640 } … … 465 653 466 654 #if NH_MV 467 #if !NH_MV_SEI468 Void SEIEncoder::initSEISubBitstreamProperty(SEISubBitstreamProperty *seiSubBitstreamProperty, const TComSPS *sps)469 {470 seiSubBitstreamProperty->m_activeVpsId = sps->getVPSId();471 /* These values can be determined by the encoder; for now we will use the input parameter */472 seiSubBitstreamProperty->m_numAdditionalSubStreams = m_pcCfg->getNumAdditionalSubStreams();473 seiSubBitstreamProperty->m_subBitstreamMode = m_pcCfg->getSubBitstreamMode();474 seiSubBitstreamProperty->m_outputLayerSetIdxToVps = m_pcCfg->getOutputLayerSetIdxToVps();475 seiSubBitstreamProperty->m_highestSublayerId = m_pcCfg->getHighestSublayerId();476 seiSubBitstreamProperty->m_avgBitRate = m_pcCfg->getAvgBitRate();477 seiSubBitstreamProperty->m_maxBitRate = m_pcCfg->getMaxBitRate();478 }479 #else480 655 Void SEIEncoder::createAnnexFGISeiMessages( SEIMessages& seiMessage, const TComSlice* slice ) 481 656 { … … 509 684 } 510 685 #endif 511 #endif512 686 513 687 //! \} -
TabularUnified trunk/source/Lib/TLibEncoder/SEIEncoder.h ¶
r1356 r1386 79 79 Void initSEITempMotionConstrainedTileSets (SEITempMotionConstrainedTileSets *sei, const TComPPS *pps); 80 80 Void initSEIKneeFunctionInfo(SEIKneeFunctionInfo *sei); 81 Void initSEIChroma SamplingFilterHint(SEIChromaSamplingFilterHint *sei, Int iHorFilterIndex, Int iVerFilterIndex);81 Void initSEIChromaResamplingFilterHint(SEIChromaResamplingFilterHint *sei, Int iHorFilterIndex, Int iVerFilterIndex); 82 82 Void initSEITimeCode(SEITimeCode *sei); 83 Bool initSEIColourRemappingInfo(SEIColourRemappingInfo *sei, Int currPOC); // returns true on success, false on failure. 83 84 84 85 // trailing SEIs … … 86 87 Void initTemporalLevel0IndexSEI(SEITemporalLevel0Index *sei, TComSlice *slice); 87 88 #if NH_MV 88 #if !NH_MV_SEI89 Void initSEISubBitstreamProperty(SEISubBitstreamProperty *seiSubBitstreamProperty, const TComSPS *sps);90 #else91 89 Void createAnnexFGISeiMessages( SEIMessages& seiMessage, const TComSlice* slice );; 92 #endif93 90 #endif 94 91 private: -
TabularUnified trunk/source/Lib/TLibEncoder/SEIwrite.cpp ¶
r1356 r1386 106 106 xWriteSEIScalableNesting(bs, *static_cast<const SEIScalableNesting*>(&sei), sps); 107 107 break; 108 case SEI::CHROMA_ SAMPLING_FILTER_HINT:109 xWriteSEIChroma SamplingFilterHint(*static_cast<const SEIChromaSamplingFilterHint*>(&sei)/*, sps*/);108 case SEI::CHROMA_RESAMPLING_FILTER_HINT: 109 xWriteSEIChromaResamplingFilterHint(*static_cast<const SEIChromaResamplingFilterHint*>(&sei)); 110 110 break; 111 111 case SEI::TEMP_MOTION_CONSTRAINED_TILE_SETS: … … 118 118 xWriteSEIKneeFunctionInfo(*static_cast<const SEIKneeFunctionInfo*>(&sei)); 119 119 break; 120 case SEI::COLOUR_REMAPPING_INFO: 121 xWriteSEIColourRemappingInfo(*static_cast<const SEIColourRemappingInfo*>(&sei)); 122 break; 120 123 case SEI::MASTERING_DISPLAY_COLOUR_VOLUME: 121 124 xWriteSEIMasteringDisplayColourVolume(*static_cast<const SEIMasteringDisplayColourVolume*>(&sei)); 122 125 break; 123 126 #if NH_MV 124 #if !NH_MV_SEI125 case SEI::SUB_BITSTREAM_PROPERTY:126 xWriteSEISubBitstreamProperty(*static_cast<const SEISubBitstreamProperty*>(&sei));127 break;128 #endif129 #endif130 #if NH_MV_SEI131 #if NH_MV_LAYERS_NOT_PRESENT_SEI132 127 case SEI::LAYERS_NOT_PRESENT: 133 128 xWriteSEILayersNotPresent(*static_cast<const SEILayersNotPresent*>(&sei)); 134 129 break; 135 #endif136 130 case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS: 137 131 xWriteSEIInterLayerConstrainedTileSets(*static_cast<const SEIInterLayerConstrainedTileSets*>(&sei)); … … 165 159 xWriteSEIThreeDimensionalReferenceDisplaysInfo(*static_cast<const SEIThreeDimensionalReferenceDisplaysInfo*>(&sei)); 166 160 break; 167 #if SEI_DRI_F0169168 161 case SEI::DEPTH_REPRESENTATION_INFO: 169 162 xWriteSEIDepthRepresentationInfo(*static_cast<const SEIDepthRepresentationInfo*>(&sei)); 170 163 break; 171 #endif172 164 case SEI::MULTIVIEW_SCENE_INFO: 173 165 xWriteSEIMultiviewSceneInfo(*static_cast<const SEIMultiviewSceneInfo*>(&sei)); … … 189 181 190 182 default: 191 assert(!" Unhandled SEI message");183 assert(!"Trying to write unhandled SEI message"); 192 184 break; 193 185 } … … 277 269 Void SEIWriter::xWriteSEIDecodedPictureHash(const SEIDecodedPictureHash& sei) 278 270 { 279 const Char *traceString="\0";271 const TChar *traceString="\0"; 280 272 switch (sei.method) 281 273 { 282 case SEIDecodedPictureHash::MD5: traceString="picture_md5"; break;283 case SEIDecodedPictureHash::CRC: traceString="picture_crc"; break;284 case SEIDecodedPictureHash::CHECKSUM: traceString="picture_checksum"; break;274 case HASHTYPE_MD5: traceString="picture_md5"; break; 275 case HASHTYPE_CRC: traceString="picture_crc"; break; 276 case HASHTYPE_CHECKSUM: traceString="picture_checksum"; break; 285 277 default: assert(false); break; 286 278 } … … 726 718 } 727 719 728 Void SEIWriter::xWriteSEIChroma SamplingFilterHint(const SEIChromaSamplingFilterHint &sei/*, TComSPS* sps*/)720 Void SEIWriter::xWriteSEIChromaResamplingFilterHint(const SEIChromaResamplingFilterHint &sei) 729 721 { 730 722 WRITE_CODE(sei.m_verChromaFilterIdc, 8, "ver_chroma_filter_idc"); 731 723 WRITE_CODE(sei.m_horChromaFilterIdc, 8, "hor_chroma_filter_idc"); 732 WRITE_FLAG(sei.m_verFiltering ProcessFlag, "ver_filtering_process_flag");724 WRITE_FLAG(sei.m_verFilteringFieldProcessingFlag, "ver_filtering_field_processing_flag"); 733 725 if(sei.m_verChromaFilterIdc == 1 || sei.m_horChromaFilterIdc == 1) 734 726 { 735 writeUserDefinedCoefficients(sei); 736 } 737 } 738 739 // write hardcoded chroma filter coefficients in the SEI messages 740 Void SEIWriter::writeUserDefinedCoefficients(const SEIChromaSamplingFilterHint &sei) 741 { 742 Int const iNumVerticalFilters = 3; 743 Int verticalTapLength_minus1[iNumVerticalFilters] = {5,3,3}; 744 Int* userVerticalCoefficients[iNumVerticalFilters]; 745 for(Int i = 0; i < iNumVerticalFilters; i ++) 746 { 747 userVerticalCoefficients[i] = (Int*)malloc( (verticalTapLength_minus1[i]+1) * sizeof(Int)); 748 } 749 userVerticalCoefficients[0][0] = -3; 750 userVerticalCoefficients[0][1] = 13; 751 userVerticalCoefficients[0][2] = 31; 752 userVerticalCoefficients[0][3] = 23; 753 userVerticalCoefficients[0][4] = 3; 754 userVerticalCoefficients[0][5] = -3; 755 756 userVerticalCoefficients[1][0] = -1; 757 userVerticalCoefficients[1][1] = 25; 758 userVerticalCoefficients[1][2] = 247; 759 userVerticalCoefficients[1][3] = -15; 760 761 userVerticalCoefficients[2][0] = -20; 762 userVerticalCoefficients[2][1] = 186; 763 userVerticalCoefficients[2][2] = 100; 764 userVerticalCoefficients[2][3] = -10; 765 766 Int const iNumHorizontalFilters = 1; 767 Int horizontalTapLength_minus1[iNumHorizontalFilters] = {3}; 768 Int* userHorizontalCoefficients[iNumHorizontalFilters]; 769 for(Int i = 0; i < iNumHorizontalFilters; i ++) 770 { 771 userHorizontalCoefficients[i] = (Int*)malloc( (horizontalTapLength_minus1[i]+1) * sizeof(Int)); 772 } 773 userHorizontalCoefficients[0][0] = 1; 774 userHorizontalCoefficients[0][1] = 6; 775 userHorizontalCoefficients[0][2] = 1; 776 777 WRITE_UVLC(3, "target_format_idc"); 778 if(sei.m_verChromaFilterIdc == 1) 779 { 780 WRITE_UVLC(iNumVerticalFilters, "num_vertical_filters"); 781 if(iNumVerticalFilters > 0) 782 { 783 for(Int i = 0; i < iNumVerticalFilters; i ++) 784 { 785 WRITE_UVLC(verticalTapLength_minus1[i], "ver_tap_length_minus_1"); 786 for(Int j = 0; j < verticalTapLength_minus1[i]; j ++) 787 { 788 WRITE_SVLC(userVerticalCoefficients[i][j], "ver_filter_coeff"); 789 } 790 } 791 } 792 } 793 if(sei.m_horChromaFilterIdc == 1) 794 { 795 WRITE_UVLC(iNumHorizontalFilters, "num_horizontal_filters"); 796 if(iNumHorizontalFilters > 0) 797 { 798 for(Int i = 0; i < iNumHorizontalFilters; i ++) 799 { 800 WRITE_UVLC(horizontalTapLength_minus1[i], "hor_tap_length_minus_1"); 801 for(Int j = 0; j < horizontalTapLength_minus1[i]; j ++) 802 { 803 WRITE_SVLC(userHorizontalCoefficients[i][j], "hor_filter_coeff"); 804 } 805 } 806 } 807 } 808 } 809 810 #if NH_MV 811 #if !NH_MV_SEI 812 Void SEIWriter::xWriteSEISubBitstreamProperty(const SEISubBitstreamProperty &sei) 813 { 814 WRITE_CODE( sei.m_activeVpsId, 4, "active_vps_id" ); 815 assert( sei.m_numAdditionalSubStreams >= 1 ); 816 WRITE_UVLC( sei.m_numAdditionalSubStreams - 1, "num_additional_sub_streams_minus1" ); 817 818 for( Int i = 0; i < sei.m_numAdditionalSubStreams; i++ ) 819 { 820 WRITE_CODE( sei.m_subBitstreamMode[i], 2, "sub_bitstream_mode[i]" ); 821 WRITE_UVLC( sei.m_outputLayerSetIdxToVps[i], "output_layer_set_idx_to_vps[i]" ); 822 WRITE_CODE( sei.m_highestSublayerId[i], 3, "highest_sub_layer_id[i]" ); 823 WRITE_CODE( sei.m_avgBitRate[i], 16, "avg_bit_rate[i]" ); 824 WRITE_CODE( sei.m_maxBitRate[i], 16, "max_bit_rate[i]" ); 825 } 826 xWriteByteAlign(); 827 } 828 #endif 829 #endif 727 WRITE_UVLC(sei.m_targetFormatIdc, "target_format_idc"); 728 if(sei.m_verChromaFilterIdc == 1) 729 { 730 const Int numVerticalFilter = (Int)sei.m_verFilterCoeff.size(); 731 WRITE_UVLC(numVerticalFilter, "num_vertical_filters"); 732 if(numVerticalFilter > 0) 733 { 734 for(Int i = 0; i < numVerticalFilter; i ++) 735 { 736 const Int verTapLengthMinus1 = (Int) sei.m_verFilterCoeff[i].size() - 1; 737 WRITE_UVLC(verTapLengthMinus1, "ver_tap_length_minus_1"); 738 for(Int j = 0; j < (verTapLengthMinus1 + 1); j ++) 739 { 740 WRITE_SVLC(sei.m_verFilterCoeff[i][j], "ver_filter_coeff"); 741 } 742 } 743 } 744 } 745 if(sei.m_horChromaFilterIdc == 1) 746 { 747 const Int numHorizontalFilter = (Int) sei.m_horFilterCoeff.size(); 748 WRITE_UVLC(numHorizontalFilter, "num_horizontal_filters"); 749 if(numHorizontalFilter > 0) 750 { 751 for(Int i = 0; i < numHorizontalFilter; i ++) 752 { 753 const Int horTapLengthMinus1 = (Int) sei.m_horFilterCoeff[i].size() - 1; 754 WRITE_UVLC(horTapLengthMinus1, "hor_tap_length_minus_1"); 755 for(Int j = 0; j < (horTapLengthMinus1 + 1); j ++) 756 { 757 WRITE_SVLC(sei.m_horFilterCoeff[i][j], "hor_filter_coeff"); 758 } 759 } 760 } 761 } 762 } 763 } 830 764 831 765 Void SEIWriter::xWriteSEIKneeFunctionInfo(const SEIKneeFunctionInfo &sei) … … 849 783 } 850 784 785 Void SEIWriter::xWriteSEIColourRemappingInfo(const SEIColourRemappingInfo& sei) 786 { 787 WRITE_UVLC( sei.m_colourRemapId, "colour_remap_id" ); 788 WRITE_FLAG( sei.m_colourRemapCancelFlag, "colour_remap_cancel_flag" ); 789 if( !sei.m_colourRemapCancelFlag ) 790 { 791 WRITE_FLAG( sei.m_colourRemapPersistenceFlag, "colour_remap_persistence_flag" ); 792 WRITE_FLAG( sei.m_colourRemapVideoSignalInfoPresentFlag, "colour_remap_video_signal_info_present_flag" ); 793 if ( sei.m_colourRemapVideoSignalInfoPresentFlag ) 794 { 795 WRITE_FLAG( sei.m_colourRemapFullRangeFlag, "colour_remap_full_range_flag" ); 796 WRITE_CODE( sei.m_colourRemapPrimaries, 8, "colour_remap_primaries" ); 797 WRITE_CODE( sei.m_colourRemapTransferFunction, 8, "colour_remap_transfer_function" ); 798 WRITE_CODE( sei.m_colourRemapMatrixCoefficients, 8, "colour_remap_matrix_coefficients" ); 799 } 800 WRITE_CODE( sei.m_colourRemapInputBitDepth, 8, "colour_remap_input_bit_depth" ); 801 WRITE_CODE( sei.m_colourRemapBitDepth, 8, "colour_remap_bit_depth" ); 802 for( Int c=0 ; c<3 ; c++ ) 803 { 804 WRITE_CODE( sei.m_preLutNumValMinus1[c], 8, "pre_lut_num_val_minus1[c]" ); 805 if( sei.m_preLutNumValMinus1[c]>0 ) 806 { 807 for( Int i=0 ; i<=sei.m_preLutNumValMinus1[c] ; i++ ) 808 { 809 WRITE_CODE( sei.m_preLut[c][i].codedValue, (( sei.m_colourRemapInputBitDepth + 7 ) >> 3 ) << 3, "pre_lut_coded_value[c][i]" ); 810 WRITE_CODE( sei.m_preLut[c][i].targetValue, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, "pre_lut_target_value[c][i]" ); 811 } 812 } 813 } 814 WRITE_FLAG( sei.m_colourRemapMatrixPresentFlag, "colour_remap_matrix_present_flag" ); 815 if( sei.m_colourRemapMatrixPresentFlag ) 816 { 817 WRITE_CODE( sei.m_log2MatrixDenom, 4, "log2_matrix_denom" ); 818 for( Int c=0 ; c<3 ; c++ ) 819 { 820 for( Int i=0 ; i<3 ; i++ ) 821 { 822 WRITE_SVLC( sei.m_colourRemapCoeffs[c][i], "colour_remap_coeffs[c][i]" ); 823 } 824 } 825 } 826 827 for( Int c=0 ; c<3 ; c++ ) 828 { 829 WRITE_CODE( sei.m_postLutNumValMinus1[c], 8, "m_postLutNumValMinus1[c]" ); 830 if( sei.m_postLutNumValMinus1[c]>0 ) 831 { 832 for( Int i=0 ; i<=sei.m_postLutNumValMinus1[c] ; i++ ) 833 { 834 WRITE_CODE( sei.m_postLut[c][i].codedValue, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, "post_lut_coded_value[c][i]" ); 835 WRITE_CODE( sei.m_postLut[c][i].targetValue, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, "post_lut_target_value[c][i]" ); 836 } 837 } 838 } 839 } 840 } 851 841 852 842 Void SEIWriter::xWriteSEIMasteringDisplayColourVolume(const SEIMasteringDisplayColourVolume& sei) … … 863 853 WRITE_CODE( sei.values.whitePoint[0], 16, "white_point_x" ); 864 854 WRITE_CODE( sei.values.whitePoint[1], 16, "white_point_y" ); 865 855 866 856 WRITE_CODE( sei.values.maxLuminance, 32, "max_display_mastering_luminance" ); 867 857 WRITE_CODE( sei.values.minLuminance, 32, "min_display_mastering_luminance" ); … … 881 871 } 882 872 883 #if NH_MV _LAYERS_NOT_PRESENT_SEI873 #if NH_MV 884 874 Void SEIWriter::xWriteSEILayersNotPresent(const SEILayersNotPresent& sei) 885 875 { … … 890 880 } 891 881 }; 892 #endif893 894 895 882 896 883 Void SEIWriter::xWriteSEIInterLayerConstrainedTileSets( const SEIInterLayerConstrainedTileSets& sei) … … 1068 1055 }; 1069 1056 1057 1070 1058 Void SEIWriter::xWriteSEITemporalMvPredictionConstraints( const SEITemporalMvPredictionConstraints& sei) 1071 1059 { … … 1112 1100 }; 1113 1101 1114 #if SEI_DRI_F01691115 1102 Void SEIWriter::xWriteSEIDepthRepresentationInfo( const SEIDepthRepresentationInfo& sei) 1116 1103 { … … 1239 1226 1240 1227 }; 1241 #endif 1228 1242 1229 Void SEIWriter::xWriteSEIMultiviewSceneInfo( const SEIMultiviewSceneInfo& sei) 1243 1230 { … … 1299 1286 }; 1300 1287 1301 1302 #if NH_MV_SEI1303 1288 Void SEIWriter::xWriteSEIMultiviewViewPosition( const SEIMultiviewViewPosition& sei) 1304 1289 { … … 1309 1294 } 1310 1295 }; 1311 #endif1312 1296 1313 1297 #if NH_3D … … 1434 1418 }; 1435 1419 #endif 1436 1420 #endif 1437 1421 1438 1422 //! \} -
TabularUnified trunk/source/Lib/TLibEncoder/SEIwrite.h ¶
r1356 r1386 53 53 54 54 protected: 55 Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, const TComSPS *sps);56 55 Void xWriteSEIuserDataUnregistered(const SEIuserDataUnregistered &sei); 57 56 Void xWriteSEIActiveParameterSets(const SEIActiveParameterSets& sei); … … 60 59 Void xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, const TComSPS *sps); 61 60 Void xWriteSEIPictureTiming(const SEIPictureTiming& sei, const TComSPS *sps); 62 TComSPS *m_pSPS;63 61 Void xWriteSEIRecoveryPoint(const SEIRecoveryPoint& sei); 64 62 Void xWriteSEIFramePacking(const SEIFramePacking& sei); … … 71 69 Void xWriteSEISOPDescription(const SEISOPDescription& sei); 72 70 Void xWriteSEIScalableNesting(TComBitIf& bs, const SEIScalableNesting& sei, const TComSPS *sps); 73 #if NH_MV74 #if !NH_MV_SEI75 Void xWriteSEISubBitstreamProperty(const SEISubBitstreamProperty &sei);76 #endif77 #endif78 71 Void xWriteSEITempMotionConstrainedTileSets(const SEITempMotionConstrainedTileSets& sei); 79 72 Void xWriteSEITimeCode(const SEITimeCode& sei); 80 Void xWriteSEIChromaSamplingFilterHint(const SEIChromaSamplingFilterHint& sei/*, TComSPS *sps*/); 81 Void writeUserDefinedCoefficients(const SEIChromaSamplingFilterHint& sei); 73 Void xWriteSEIChromaResamplingFilterHint(const SEIChromaResamplingFilterHint& sei); 82 74 Void xWriteSEIKneeFunctionInfo(const SEIKneeFunctionInfo &sei); 75 Void xWriteSEIColourRemappingInfo(const SEIColourRemappingInfo& sei); 83 76 Void xWriteSEIMasteringDisplayColourVolume( const SEIMasteringDisplayColourVolume& sei); 84 77 85 #if NH_MV_SEI 86 #if NH_MV_LAYERS_NOT_PRESENT_SEI 78 #if NH_MV 87 79 Void xWriteSEILayersNotPresent ( const SEILayersNotPresent& sei); 88 #endif89 80 Void xWriteSEIInterLayerConstrainedTileSets ( const SEIInterLayerConstrainedTileSets& sei); 90 81 #if NH_MV_SEI_TBD … … 100 91 #endif 101 92 Void xWriteSEIThreeDimensionalReferenceDisplaysInfo ( const SEIThreeDimensionalReferenceDisplaysInfo& sei); 102 #if SEI_DRI_F0169103 93 Void xWriteSEIDepthRepInfoElement ( double f); 104 94 Void xWriteSEIDepthRepresentationInfo ( const SEIDepthRepresentationInfo& sei); 105 #endif106 95 Void xWriteSEIMultiviewSceneInfo ( const SEIMultiviewSceneInfo& sei); 107 96 Void xWriteSEIMultiviewAcquisitionInfo ( const SEIMultiviewAcquisitionInfo& sei); … … 110 99 Void xWriteSEIAlternativeDepthInfo ( const SEIAlternativeDepthInfo& sei); 111 100 #endif 101 #endif 102 103 Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, const TComSPS *sps); 112 104 Void xWriteByteAlign(); 113 105 }; 114 #endif115 106 116 107 //! \} -
TabularUnified trunk/source/Lib/TLibEncoder/SyntaxElementWriter.cpp ¶
r1356 r1386 44 44 #if ENC_DEC_TRACE 45 45 46 Void SyntaxElementWriter::xWriteCodeTr (UInt value, UInt length, const Char *pSymbolName)46 Void SyntaxElementWriter::xWriteCodeTr (UInt value, UInt length, const TChar *pSymbolName) 47 47 { 48 48 xWriteCode (value,length); 49 49 if( g_HLSTraceEnable ) 50 50 { 51 #if H_MV_ENC_DEC_TRAC51 #if NH_MV_ENC_DEC_TRAC 52 52 if ( !g_disableNumbering ) 53 53 { … … 70 70 } 71 71 72 Void SyntaxElementWriter::xWriteUvlcTr (UInt value, const Char *pSymbolName)72 Void SyntaxElementWriter::xWriteUvlcTr (UInt value, const TChar *pSymbolName) 73 73 { 74 74 xWriteUvlc (value); 75 75 if( g_HLSTraceEnable ) 76 76 { 77 #if H_MV_ENC_DEC_TRAC77 #if NH_MV_ENC_DEC_TRAC 78 78 if ( !g_disableNumbering ) 79 79 { … … 89 89 } 90 90 91 Void SyntaxElementWriter::xWriteSvlcTr (Int value, const Char *pSymbolName)91 Void SyntaxElementWriter::xWriteSvlcTr (Int value, const TChar *pSymbolName) 92 92 { 93 93 xWriteSvlc(value); 94 94 if( g_HLSTraceEnable ) 95 95 { 96 #if H_MV_ENC_DEC_TRAC96 #if NH_MV_ENC_DEC_TRAC 97 97 if ( !g_disableNumbering ) 98 98 { … … 108 108 } 109 109 110 Void SyntaxElementWriter::xWriteFlagTr(UInt value, const Char *pSymbolName)110 Void SyntaxElementWriter::xWriteFlagTr(UInt value, const TChar *pSymbolName) 111 111 { 112 112 xWriteFlag(value); 113 113 if( g_HLSTraceEnable ) 114 114 { 115 #if H_MV_ENC_DEC_TRAC115 #if NH_MV_ENC_DEC_TRAC 116 116 if ( !g_disableNumbering ) 117 117 { … … 127 127 } 128 128 129 #if NH_MV_ENC_DEC_TRAC 129 130 Void SyntaxElementWriter::xWriteStringTr( UChar* value, UInt length, const Char *pSymbolName) 130 131 { … … 136 137 } 137 138 } 138 139 #endif 139 140 #endif 140 141 … … 176 177 } 177 178 179 #if NH_MV_ENC_DEC_TRAC 178 180 Void SyntaxElementWriter::xWriteString( UChar* sCode, UInt uiLength) 179 181 { … … 185 187 m_pcBitIf->write( 0, 8 ); //zero-termination byte 186 188 } 187 189 #endif 188 190 Void SyntaxElementWriter::xWriteRbspTrailingBits() 189 191 { -
TabularUnified trunk/source/Lib/TLibEncoder/SyntaxElementWriter.h ¶
r1356 r1386 56 56 #define WRITE_SVLC( value, name) xWriteSvlcTr ( value, name ) 57 57 #define WRITE_FLAG( value, name) xWriteFlagTr ( value, name ) 58 #if NH_MV 58 59 #define WRITE_STRING( value, length, name) xWriteStringTr( value, length, name ) 60 #endif 59 61 60 62 #else … … 64 66 #define WRITE_SVLC( value, name) xWriteSvlc ( value ) 65 67 #define WRITE_FLAG( value, name) xWriteFlag ( value ) 68 #if NH_MV 66 69 #define WRITE_STRING( value, length, name) xWriteString( value, length ) 67 70 #endif 68 71 #endif 69 72 … … 84 87 Void xWriteSvlc ( Int iCode ); 85 88 Void xWriteFlag ( UInt uiCode ); 89 #if NH_MV 86 90 Void xWriteString ( UChar* sCode, UInt uiLength); 91 #endif 87 92 #if ENC_DEC_TRACE 88 Void xWriteCodeTr ( UInt value, UInt length, const Char *pSymbolName); 89 Void xWriteUvlcTr ( UInt value, const Char *pSymbolName); 90 Void xWriteSvlcTr ( Int value, const Char *pSymbolName); 91 Void xWriteFlagTr ( UInt value, const Char *pSymbolName); 93 Void xWriteCodeTr ( UInt value, UInt length, const TChar *pSymbolName); 94 Void xWriteUvlcTr ( UInt value, const TChar *pSymbolName); 95 Void xWriteSvlcTr ( Int value, const TChar *pSymbolName); 96 Void xWriteFlagTr ( UInt value, const TChar *pSymbolName); 97 #if NH_MV 92 98 Void xWriteStringTr ( UChar* value, UInt length, const Char *pSymbolName); 99 #endif 93 100 #endif 94 101 Void xWriteRbspTrailingBits(); -
TabularUnified trunk/source/Lib/TLibEncoder/TEncAnalyze.h ¶
r1313 r1386 137 137 138 138 139 Void printOut ( Char cDelim, const ChromaFormat chFmt, const Bool printMSEBasedSNR, const Bool printSequenceMSE, const BitDepths &bitDepths )139 Void printOut ( TChar cDelim, const ChromaFormat chFmt, const Bool printMSEBasedSNR, const Bool printSequenceMSE, const BitDepths &bitDepths ) 140 140 { 141 141 Double dFps = m_dFrmRate; //--CFG_KDY -
TabularUnified trunk/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp ¶
r1321 r1386 246 246 if (g_debugCounter >= debugCabacBinTargetLine) 247 247 { 248 Char breakPointThis;248 UChar breakPointThis; 249 249 breakPointThis = 7; 250 250 } -
TabularUnified trunk/source/Lib/TLibEncoder/TEncBinCoderCABACCounter.cpp ¶
r1321 r1386 97 97 if (g_debugCounter >= debugEncoderSearchBinTargetLine) 98 98 { 99 Char breakPointThis;99 UChar breakPointThis; 100 100 breakPointThis = 7; 101 101 } -
TabularUnified trunk/source/Lib/TLibEncoder/TEncCavlc.cpp ¶
r1321 r1386 49 49 #if ENC_DEC_TRACE 50 50 51 #if ! H_MV_ENC_DEC_TRAC51 #if !NH_MV_ENC_DEC_TRAC 52 52 Void xTraceVPSHeader () 53 53 { … … 69 69 fprintf( g_hTrace, "=========== Slice ===========\n"); 70 70 } 71 #endif 72 #endif 71 72 Void xTraceAccessUnitDelimiter () 73 { 74 fprintf( g_hTrace, "=========== Access Unit Delimiter ===========\n"); 75 } 76 77 #endif 78 #endif 79 80 Void AUDWriter::codeAUD(TComBitIf& bs, const Int pictureType) 81 { 82 #if ENC_DEC_TRACE 83 xTraceAccessUnitDelimiter(); 84 #endif 85 86 assert (pictureType < 3); 87 setBitstream(&bs); 88 WRITE_CODE(pictureType, 3, "pic_type"); 89 xWriteRbspTrailingBits(); 90 } 91 73 92 // ==================================================================================================================== 74 93 // Constructor / destructor / create / destroy … … 154 173 { 155 174 #if ENC_DEC_TRACE 156 #if H_MV_ENC_DEC_TRAC175 #if NH_MV_ENC_DEC_TRAC 157 176 tracePSHeader( "PPS", pcPPS->getLayerId() ); 158 177 #else … … 167 186 WRITE_FLAG( pcPPS->getSignHideFlag(), "sign_data_hiding_flag" ); 168 187 WRITE_FLAG( pcPPS->getCabacInitPresentFlag() ? 1 : 0, "cabac_init_present_flag" ); 169 #if PPS_FIX_DEPTH188 #if H_3D_PPS_FIX_DEPTH 170 189 if( pcPPS->getSPS()->getVPS()->getDepthId(pcPPS->getSPS()->getLayerId()) ) 171 190 { … … 178 197 WRITE_UVLC( pcPPS->getNumRefIdxL0DefaultActive()-1, "num_ref_idx_l0_default_active_minus1"); 179 198 WRITE_UVLC( pcPPS->getNumRefIdxL1DefaultActive()-1, "num_ref_idx_l1_default_active_minus1"); 180 #if PPS_FIX_DEPTH199 #if H_3D_PPS_FIX_DEPTH 181 200 } 182 201 #endif … … 238 257 codeScalingList( pcPPS->getScalingList() ); 239 258 } 240 #if PPS_FIX_DEPTH259 #if H_3D_PPS_FIX_DEPTH 241 260 if( pcPPS->getSPS()->getVPS()->getDepthId(pcPPS->getSPS()->getLayerId()) ) 242 261 { … … 266 285 { 267 286 #if ENC_DEC_TRACE || RExt__DECODER_DEBUG_BIT_STATISTICS 268 static const char *syntaxStrings[]={ "pps_range_extension_flag",287 static const TChar *syntaxStrings[]={ "pps_range_extension_flag", 269 288 "pps_multilayer_extension_flag", 270 289 "pps_extension_6bits[0]", … … 330 349 if ( pcPPS->getPpsRangeExtensionsFlag() ) 331 350 { 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 351 const TComPPSRExt &ppsRangeExtension = pcPPS->getPpsRangeExtension(); 352 if (pcPPS->getUseTransformSkip()) 353 { 354 WRITE_UVLC( ppsRangeExtension.getLog2MaxTransformSkipBlockSize()-2, "log2_max_transform_skip_block_size_minus2"); 355 } 356 357 WRITE_FLAG((ppsRangeExtension.getCrossComponentPredictionEnabledFlag() ? 1 : 0), "cross_component_prediction_enabled_flag" ); 358 359 WRITE_FLAG(UInt(ppsRangeExtension.getChromaQpOffsetListEnabledFlag()), "chroma_qp_offset_list_enabled_flag" ); 360 if (ppsRangeExtension.getChromaQpOffsetListEnabledFlag()) 361 { 362 WRITE_UVLC(ppsRangeExtension.getDiffCuChromaQpOffsetDepth(), "diff_cu_chroma_qp_offset_depth"); 363 WRITE_UVLC(ppsRangeExtension.getChromaQpOffsetListLen() - 1, "chroma_qp_offset_list_len_minus1"); 364 /* skip zero index */ 365 for (Int cuChromaQpOffsetIdx = 0; cuChromaQpOffsetIdx < ppsRangeExtension.getChromaQpOffsetListLen(); cuChromaQpOffsetIdx++) 366 { 367 WRITE_SVLC(ppsRangeExtension.getChromaQpOffsetListEntry(cuChromaQpOffsetIdx+1).u.comp.CbOffset, "cb_qp_offset_list[i]"); 368 WRITE_SVLC(ppsRangeExtension.getChromaQpOffsetListEntry(cuChromaQpOffsetIdx+1).u.comp.CrOffset, "cr_qp_offset_list[i]"); 369 } 370 } 371 372 WRITE_UVLC( ppsRangeExtension.getLog2SaoOffsetScale(CHANNEL_TYPE_LUMA), "log2_sao_offset_scale_luma" ); 373 WRITE_UVLC( ppsRangeExtension.getLog2SaoOffsetScale(CHANNEL_TYPE_CHROMA), "log2_sao_offset_scale_chroma" ); 355 374 } 356 375 … … 662 681 663 682 #if ENC_DEC_TRACE 664 #if H_MV_ENC_DEC_TRAC683 #if NH_MV_ENC_DEC_TRAC 665 684 tracePSHeader( "SPS", pcSPS->getLayerId() ); 666 685 #else … … 748 767 WRITE_UVLC( pcSPS->getSpsMaxLatencyIncreasePlus1(i), "sps_max_latency_increase_plus1[i]" ); 749 768 #else 750 WRITE_UVLC( pcSPS->getMaxLatencyIncrease (i),"sps_max_latency_increase_plus1[i]" );769 WRITE_UVLC( pcSPS->getMaxLatencyIncreasePlus1(i), "sps_max_latency_increase_plus1[i]" ); 751 770 #endif 752 771 if (!subLayerOrderingInfoPresentFlag) … … 858 877 { 859 878 #if ENC_DEC_TRACE || RExt__DECODER_DEBUG_BIT_STATISTICS 860 static const char *syntaxStrings[]={ "sps_range_extension_flag",879 static const TChar *syntaxStrings[]={ "sps_range_extension_flag", 861 880 "sps_multilayer_extension_flag", 862 881 "sps_extension_6bits[0]", … … 971 990 for( Int d = 0; d <= 1; d++ ) 972 991 { 973 WRITE_FLAG( sps3dExt->getIv MvPredFlag( d ) ? 1 : 0 , "iv_mv_pred_flag" );974 WRITE_FLAG( sps3dExt->getIvMvScal ingFlag( d ) ? 1 : 0 , "iv_mv_scaling_flag" );992 WRITE_FLAG( sps3dExt->getIvDiMcEnabledFlag( d ) ? 1 : 0 , "iv_di_mc_enabled_flag" ); 993 WRITE_FLAG( sps3dExt->getIvMvScalEnabledFlag( d ) ? 1 : 0 , "iv_mv_scal_enabled_flag" ); 975 994 if( d == 0 ) 976 995 { 977 WRITE_UVLC( sps3dExt->getLog2 SubPbSizeMinus3( d ), "log2_sub_pb_size_minus3" );978 WRITE_FLAG( sps3dExt->getIvResPred Flag( d ) ? 1 : 0 , "iv_res_pred_flag" );979 WRITE_FLAG( sps3dExt->getDepthRef inementFlag( d ) ? 1 : 0 , "depth_refinement_flag" );980 WRITE_FLAG( sps3dExt->getV iewSynthesisPredFlag( d ) ? 1 : 0 , "view_synthesis_pred_flag" );981 WRITE_FLAG( sps3dExt->getD epthBasedBlkPartFlag( d ) ? 1 : 0 , "depth_based_blk_part_flag" );996 WRITE_UVLC( sps3dExt->getLog2IvmcSubPbSizeMinus3( d ), "log2_sub_pb_size_minus3" ); 997 WRITE_FLAG( sps3dExt->getIvResPredEnabledFlag( d ) ? 1 : 0 , "iv_res_pred_enabled_flag" ); 998 WRITE_FLAG( sps3dExt->getDepthRefEnabledFlag( d ) ? 1 : 0 , "depth_ref_enabled_flag" ); 999 WRITE_FLAG( sps3dExt->getVspMcEnabledFlag( d ) ? 1 : 0 , "vsp_mc_enabled_flag" ); 1000 WRITE_FLAG( sps3dExt->getDbbpEnabledFlag( d ) ? 1 : 0 , "dbbp_enabled_flag" ); 982 1001 } 983 1002 else 984 1003 { 985 WRITE_FLAG( sps3dExt->get MpiFlag( d ) ? 1 : 0 , "mpi_flag" );986 WRITE_UVLC( sps3dExt->getLog2 MpiSubPbSizeMinus3( d ), "log2_mpi_sub_pb_size_minus3" );987 WRITE_FLAG( sps3dExt->getIntraContour Flag( d ) ? 1 : 0 , "intra_contour_flag" );988 WRITE_FLAG( sps3dExt->getIntra SdcWedgeFlag( d ) ? 1 : 0 , "intra_sdc_wedge_flag" );989 WRITE_FLAG( sps3dExt->get QtPredFlag( d ) ? 1 : 0 , "qt_pred_flag" );990 WRITE_FLAG( sps3dExt->getInter SdcFlag( d ) ? 1 : 0 , "inter_sdc_flag" );991 WRITE_FLAG( sps3dExt->get DepthIntraSkipFlag( d ) ? 1 : 0 , "intra_skip_flag" );1004 WRITE_FLAG( sps3dExt->getTexMcEnabledFlag( d ) ? 1 : 0 , "tex_mc_enabled_flag" ); 1005 WRITE_UVLC( sps3dExt->getLog2TexmcSubPbSizeMinus3( d ), "log2_texmc_sub_pb_size_minus3" ); 1006 WRITE_FLAG( sps3dExt->getIntraContourEnabledFlag( d ) ? 1 : 0 , "intra_contour_enabled_flag" ); 1007 WRITE_FLAG( sps3dExt->getIntraDcOnlyWedgeEnabledFlag( d ) ? 1 : 0 , "intra_dc_only_wedge_enabled_flag" ); 1008 WRITE_FLAG( sps3dExt->getCqtCuPartPredEnabledFlag( d ) ? 1 : 0 , "cqt_cu_part_pred_enabled_flag" ); 1009 WRITE_FLAG( sps3dExt->getInterDcOnlyEnabledFlag( d ) ? 1 : 0 , "inter_dc_only_enabled_flag" ); 1010 WRITE_FLAG( sps3dExt->getSkipIntraEnabledFlag( d ) ? 1 : 0 , "skip_intra_enabled_flag" ); 992 1011 } 993 1012 } … … 999 1018 { 1000 1019 #if ENC_DEC_TRACE 1001 #if H_MV_ENC_DEC_TRAC1020 #if NH_MV_ENC_DEC_TRAC 1002 1021 tracePSHeader( "VPS", getEncTop()->getLayerId() ); 1003 1022 #else … … 1764 1783 WRITE_FLAG( pcSlice->getNoOutputPriorPicsFlag() ? 1 : 0, "no_output_of_prior_pics_flag" ); 1765 1784 } 1766 #if PPS_FIX_DEPTH1785 #if H_3D_PPS_FIX_DEPTH 1767 1786 if( pcSlice->getIsDepth() ) 1768 1787 { … … 2035 2054 { 2036 2055 Bool overrideFlag = (pcSlice->getNumRefIdx( REF_PIC_LIST_0 )!=pcSlice->getPPS()->getNumRefIdxL0DefaultActive()||(pcSlice->isInterB()&&pcSlice->getNumRefIdx( REF_PIC_LIST_1 )!=pcSlice->getPPS()->getNumRefIdxL1DefaultActive())); 2037 #if PPS_FIX_DEPTH2056 #if H_3D_PPS_FIX_DEPTH 2038 2057 overrideFlag |= (pcSlice->getIsDepth() && !pcSlice->getViewIndex()); 2039 2058 #endif … … 2057 2076 pcSlice->setNumRefIdx(REF_PIC_LIST_1, 0); 2058 2077 } 2059 #if PPS_FIX_DEPTH2078 #if H_3D_PPS_FIX_DEPTH 2060 2079 if( (pcSlice->getPPS()->getListsModificationPresentFlag() || (pcSlice->getIsDepth() && !pcSlice->getViewIndex())) && pcSlice->getNumRpsCurrTempList() > 1) 2061 2080 #else -
TabularUnified trunk/source/Lib/TLibEncoder/TEncCavlc.h ¶
r1321 r1386 58 58 // ==================================================================================================================== 59 59 60 class AUDWriter : public SyntaxElementWriter 61 { 62 public: 63 AUDWriter() {}; 64 virtual ~AUDWriter() {}; 65 66 Void codeAUD(TComBitIf& bs, const Int pictureType); 67 }; 68 60 69 /// CAVLC encoder class 61 70 class TEncCavlc : public SyntaxElementWriter, public TEncEntropyIf -
TabularUnified trunk/source/Lib/TLibEncoder/TEncCfg.h ¶
r1356 r1386 46 46 #include "TLibCommon/TComSlice.h" 47 47 #include <assert.h> 48 #if NH_3D 48 #if NH_3D_VSO 49 49 #include "TAppCommon/TAppComCamPara.h" 50 50 #include "TLibRenderer/TRenModSetupStrParser.h" … … 65 65 Bool m_refPic; 66 66 Int m_numRefPicsActive; 67 Char m_sliceType;67 SChar m_sliceType; 68 68 Int m_numRefPics; 69 69 Int m_referencePics[MAX_NUM_REF_PICS]; … … 137 137 Int m_framesToBeEncoded; 138 138 Double m_adLambdaModifier[ MAX_TLAYER ]; 139 std::vector<Double> m_adIntraLambdaModifier; 140 Double m_dIntraQpFactor; ///< Intra Q Factor. If negative, use a default equation: 0.57*(1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? (GopSize-1)/2 : GopSize-1) )) 139 141 140 142 Bool m_printMSEBasedSequencePSNR; … … 174 176 Int m_aiPad[2]; 175 177 178 Bool m_AccessUnitDelimiter; ///< add Access Unit Delimiter NAL units 176 179 177 180 Int m_iMaxRefPicNum; ///< this is used to mimic the sliding mechanism used by the decoder … … 206 209 //====== Motion search ======== 207 210 Bool m_bDisableIntraPUsInInterSlices; 208 Int m_iFastSearch; // 0:Full search 1:Diamond 2:PMVFAST211 MESearchMethod m_motionEstimationSearchMethod; 209 212 Int m_iSearchRange; // 0:Full frame 210 213 Int m_bipredSearchRange; 211 214 Bool m_bClipForBiPredMeEnabled; 212 215 Bool m_bFastMEAssumingSmootherMVEnabled; 216 Int m_minSearchWindow; 217 Bool m_bRestrictMESampling; 213 218 214 219 #if NH_MV … … 243 248 #endif 244 249 UInt m_rdPenalty; 245 Bool m_bUseFastEnc;250 FastInterSearchMode m_fastInterSearchMode; 246 251 Bool m_bUseEarlyCU; 247 252 Bool m_useFastDecisionForMerge; … … 289 294 std::vector<Int> m_tileRowHeight; 290 295 291 Int m_iWaveFrontSynchro;292 293 Int m_decodedPictureHashSEIEnabled; ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message294 Intm_bufferingPeriodSEIEnabled;295 Intm_pictureTimingSEIEnabled;296 Intm_recoveryPointSEIEnabled;296 Bool m_entropyCodingSyncEnabledFlag; 297 298 HashType m_decodedPictureHashSEIType; 299 Bool m_bufferingPeriodSEIEnabled; 300 Bool m_pictureTimingSEIEnabled; 301 Bool m_recoveryPointSEIEnabled; 297 302 Bool m_toneMappingInfoSEIEnabled; 298 303 Int m_toneMapId; … … 322 327 Int* m_codedPivotValue; 323 328 Int* m_targetPivotValue; 324 Intm_framePackingSEIEnabled;329 Bool m_framePackingSEIEnabled; 325 330 Int m_framePackingSEIType; 326 331 Int m_framePackingSEIId; 327 332 Int m_framePackingSEIQuincunx; 328 333 Int m_framePackingSEIInterpretation; 329 Intm_segmentedRectFramePackingSEIEnabled;334 Bool m_segmentedRectFramePackingSEIEnabled; 330 335 Bool m_segmentedRectFramePackingSEICancel; 331 336 Int m_segmentedRectFramePackingSEIType; 332 337 Bool m_segmentedRectFramePackingSEIPersistence; 333 338 Int m_displayOrientationSEIAngle; 334 Intm_temporalLevel0IndexSEIEnabled;335 Intm_gradualDecodingRefreshInfoEnabled;339 Bool m_temporalLevel0IndexSEIEnabled; 340 Bool m_gradualDecodingRefreshInfoEnabled; 336 341 Int m_noDisplaySEITLayer; 337 Intm_decodingUnitInfoSEIEnabled;338 Intm_SOPDescriptionSEIEnabled;339 Intm_scalableNestingSEIEnabled;342 Bool m_decodingUnitInfoSEIEnabled; 343 Bool m_SOPDescriptionSEIEnabled; 344 Bool m_scalableNestingSEIEnabled; 340 345 Bool m_tmctsSEIEnabled; 341 346 Bool m_timeCodeSEIEnabled; … … 353 358 Int* m_kneeSEIInputKneePoint; 354 359 Int* m_kneeSEIOutputKneePoint; 360 std::string m_colourRemapSEIFileRoot; ///< SEI Colour Remapping File (initialized from external file) 355 361 TComSEIMasteringDisplay m_masteringDisplay; 356 #if NH_MV _SEI362 #if NH_MV 357 363 SEIMessages* m_seiMessages; 358 364 #endif … … 360 366 Bool m_useWeightedPred; //< Use of Weighting Prediction (P_SLICE) 361 367 Bool m_useWeightedBiPred; //< Use of Bi-directional Weighting Prediction (B_SLICE) 368 WeightedPredictionMethod m_weightedPredictionMethod; 362 369 UInt m_log2ParallelMergeLevelMinus2; ///< Parallel merge estimation region 363 370 UInt m_maxNumMergeCand; ///< Maximum number of merge candidates 364 371 ScalingListMode m_useScalingListId; ///< Using quantization matrix i.e. 0=off, 1=default, 2=file. 365 Char* m_scalingListFile;///< quantization matrix file name372 std::string m_scalingListFileName; ///< quantization matrix file name 366 373 Int m_TMVPModeId; 367 374 Bool m_signHideFlag; … … 373 380 Int m_RCInitialQP; 374 381 Bool m_RCForceIntraQP; 382 #if U0132_TARGET_BITS_SATURATION 383 Bool m_RCCpbSaturationEnabled; 384 UInt m_RCCpbSize; 385 Double m_RCInitialCpbFullness; 386 #endif 375 387 376 388 #if KWU_RC_MADPRED_E0227 … … 398 410 Bool m_vuiParametersPresentFlag; ///< enable generation of VUI parameters 399 411 Bool m_aspectRatioInfoPresentFlag; ///< Signals whether aspect_ratio_idc is present 400 Bool m_chroma SamplingFilterHintEnabled;///< Signals whether chroma sampling filter hint data is present401 Int m_chroma SamplingHorFilterIdc;///< Specifies the Index of filter to use402 Int m_chroma SamplingVerFilterIdc;///< Specifies the Index of filter to use412 Bool m_chromaResamplingFilterHintEnabled; ///< Signals whether chroma sampling filter hint data is present 413 Int m_chromaResamplingHorFilterIdc; ///< Specifies the Index of filter to use 414 Int m_chromaResamplingVerFilterIdc; ///< Specifies the Index of filter to use 403 415 Int m_aspectRatioIdc; ///< aspect_ratio_idc 404 416 Int m_sarWidth; ///< horizontal size of the sample aspect ratio … … 438 450 UInt m_summaryVerboseness; ///< Specifies the level of the verboseness of the text output. 439 451 440 #if NH_MV441 #if !NH_MV_SEI442 Bool m_subBistreamPropSEIEnabled;443 Int m_numAdditionalSubStreams;444 std::vector<Int> m_subBitstreamMode;445 std::vector<Int> m_outputLayerSetIdxToVps;446 std::vector<Int> m_highestSublayerId;447 std::vector<Int> m_avgBitRate;448 std::vector<Int> m_maxBitRate;449 #endif450 #endif451 452 452 453 #if NH_MV … … 457 458 #endif 458 459 459 #if NH_3D 460 #if NH_3D_VSO 460 461 Bool m_isDepth; 462 Bool m_isAuxDepth; 461 463 462 464 //====== Camera Parameters ====== 463 465 TAppComCamPara* m_cameraParameters; 464 466 465 #if NH_3D_VSO466 467 //====== View Synthesis Optimization ====== 467 468 TRenModSetupStrParser* m_renderModelParameters; … … 480 481 Double m_dDispCoeff; 481 482 #endif 483 #if NH_3D 482 484 483 485 Bool m_bUseIC; … … 486 488 Bool m_useSDC; 487 489 Bool m_useDLT; 490 #endif 491 #if NH_3D_QTL 488 492 Bool m_bUseQTL; 493 #endif 494 #if NH_3D 489 495 Int m_profileIdc; 490 491 496 #endif 492 497 public: … … 499 504 , m_viewId(-1) 500 505 , m_viewIndex(-1) 506 #if NH_3D_VSO 507 , m_isDepth(false) 508 , m_isAuxDepth(false) 509 , m_bUseVSO(false) 510 #endif 501 511 #if NH_3D 502 , m_isDepth(false)503 #if NH_3D_VSO504 , m_bUseVSO(false)505 #endif506 512 , m_profileIdc( -1 ) 507 513 #endif … … 549 555 Void setViewIndex ( Int viewIndex ) { m_viewIndex = viewIndex; } 550 556 Int getViewIndex () { return m_viewIndex; } 551 #if NH_3D 557 #if NH_3D_VSO 552 558 Void setIsDepth ( Bool isDepth ) { m_isDepth = isDepth; } 553 559 Bool getIsDepth () { return m_isDepth; } 560 Void setIsAuxDepth ( Bool isAuxDepth ) { m_isAuxDepth = isAuxDepth; } 561 Bool getIsAuxDepth () { return m_isAuxDepth; } 562 563 554 564 #endif 555 565 #endif … … 606 616 //====== Motion search ======== 607 617 Void setDisableIntraPUsInInterSlices ( Bool b ) { m_bDisableIntraPUsInInterSlices = b; } 608 Void set FastSearch ( Int i ) { m_iFastSearch = i; }618 Void setMotionEstimationSearchMethod ( MESearchMethod e ) { m_motionEstimationSearchMethod = e; } 609 619 Void setSearchRange ( Int i ) { m_iSearchRange = i; } 610 620 Void setBipredSearchRange ( Int i ) { m_bipredSearchRange = i; } 611 621 Void setClipForBiPredMeEnabled ( Bool b ) { m_bClipForBiPredMeEnabled = b; } 612 622 Void setFastMEAssumingSmootherMVEnabled ( Bool b ) { m_bFastMEAssumingSmootherMVEnabled = b; } 623 Void setMinSearchWindow ( Int i ) { m_minSearchWindow = i; } 624 Void setRestrictMESampling ( Bool b ) { m_bRestrictMESampling = b; } 625 613 626 #if NH_MV 614 627 Void setUseDisparitySearchRangeRestriction ( Bool b ) { m_bUseDisparitySearchRangeRestriction = b; } … … 649 662 Int getSourceHeight () { return m_iSourceHeight; } 650 663 Int getFramesToBeEncoded () { return m_framesToBeEncoded; } 664 665 //====== Lambda Modifiers ======== 651 666 Void setLambdaModifier ( UInt uiIndex, Double dValue ) { m_adLambdaModifier[ uiIndex ] = dValue; } 652 667 Double getLambdaModifier ( UInt uiIndex ) const { return m_adLambdaModifier[ uiIndex ]; } 668 Void setIntraLambdaModifier ( const std::vector<Double> &dValue ) { m_adIntraLambdaModifier = dValue; } 669 const std::vector<Double>& getIntraLambdaModifier() const { return m_adIntraLambdaModifier; } 670 Void setIntraQpFactor ( Double dValue ) { m_dIntraQpFactor = dValue; } 671 Double getIntraQpFactor () const { return m_dIntraQpFactor; } 653 672 654 673 //==== Coding Structure ======== … … 662 681 Int getPad ( Int i ) { assert (i < 2 ); return m_aiPad[i]; } 663 682 683 Bool getAccessUnitDelimiter() const { return m_AccessUnitDelimiter; } 684 Void setAccessUnitDelimiter(Bool val){ m_AccessUnitDelimiter = val; } 685 664 686 //======== Transform ============= 665 687 UInt getQuadtreeTULog2MaxSize () const { return m_uiQuadtreeTULog2MaxSize; } … … 677 699 //==== Motion search ======== 678 700 Bool getDisableIntraPUsInInterSlices () const { return m_bDisableIntraPUsInInterSlices; } 679 Int getFastSearch () const { return m_iFastSearch; }701 MESearchMethod getMotionEstimationSearchMethod ( ) const { return m_motionEstimationSearchMethod; } 680 702 Int getSearchRange () const { return m_iSearchRange; } 681 703 Bool getClipForBiPredMeEnabled () const { return m_bClipForBiPredMeEnabled; } 682 704 Bool getFastMEAssumingSmootherMVEnabled ( ) const { return m_bFastMEAssumingSmootherMVEnabled; } 705 Int getMinSearchWindow () const { return m_minSearchWindow; } 706 Bool getRestrictMESampling () const { return m_bRestrictMESampling; } 707 683 708 #if NH_MV 684 709 Bool getUseDisparitySearchRangeRestriction () { return m_bUseDisparitySearchRangeRestriction; } … … 701 726 Void setUseSelectiveRDOQ ( Bool b ) { m_useSelectiveRDOQ = b; } 702 727 #endif 703 Void setRDpenalty ( UInt b ) { m_rdPenalty = b; }704 Void set UseFastEnc ( Bool b ) { m_bUseFastEnc = b; }728 Void setRDpenalty ( UInt u ) { m_rdPenalty = u; } 729 Void setFastInterSearchMode ( FastInterSearchMode m ) { m_fastInterSearchMode = m; } 705 730 Void setUseEarlyCU ( Bool b ) { m_bUseEarlyCU = b; } 706 731 Void setUseFastDecisionForMerge ( Bool b ) { m_useFastDecisionForMerge = b; } … … 729 754 #endif 730 755 Int getRDpenalty () { return m_rdPenalty; } 731 Bool getUseFastEnc () { return m_bUseFastEnc;}756 FastInterSearchMode getFastInterSearchMode() const{ return m_fastInterSearchMode; } 732 757 Bool getUseEarlyCU () { return m_bUseEarlyCU; } 733 758 Bool getUseFastDecisionForMerge () { return m_useFastDecisionForMerge; } … … 812 837 UInt getRowHeight ( UInt rowIdx ) { return m_tileRowHeight[rowIdx]; } 813 838 Void xCheckGSParameters(); 814 Void set WaveFrontSynchro(Int iWaveFrontSynchro) { m_iWaveFrontSynchro = iWaveFrontSynchro; }815 Int getWaveFrontsynchro() { return m_iWaveFrontSynchro; }816 Void setDecodedPictureHashSEI Enabled(Int b) { m_decodedPictureHashSEIEnabled = b; }817 Int getDecodedPictureHashSEIEnabled() { return m_decodedPictureHashSEIEnabled; }818 Void setBufferingPeriodSEIEnabled( Int b){ m_bufferingPeriodSEIEnabled = b; }819 Int getBufferingPeriodSEIEnabled(){ return m_bufferingPeriodSEIEnabled; }820 Void setPictureTimingSEIEnabled( Int b){ m_pictureTimingSEIEnabled = b; }821 Int getPictureTimingSEIEnabled(){ return m_pictureTimingSEIEnabled; }822 Void setRecoveryPointSEIEnabled( Int b){ m_recoveryPointSEIEnabled = b; }823 Int getRecoveryPointSEIEnabled(){ return m_recoveryPointSEIEnabled; }839 Void setEntropyCodingSyncEnabledFlag(Bool b) { m_entropyCodingSyncEnabledFlag = b; } 840 Bool getEntropyCodingSyncEnabledFlag() const { return m_entropyCodingSyncEnabledFlag; } 841 Void setDecodedPictureHashSEIType(HashType m) { m_decodedPictureHashSEIType = m; } 842 HashType getDecodedPictureHashSEIType() const { return m_decodedPictureHashSEIType; } 843 Void setBufferingPeriodSEIEnabled(Bool b) { m_bufferingPeriodSEIEnabled = b; } 844 Bool getBufferingPeriodSEIEnabled() const { return m_bufferingPeriodSEIEnabled; } 845 Void setPictureTimingSEIEnabled(Bool b) { m_pictureTimingSEIEnabled = b; } 846 Bool getPictureTimingSEIEnabled() const { return m_pictureTimingSEIEnabled; } 847 Void setRecoveryPointSEIEnabled(Bool b) { m_recoveryPointSEIEnabled = b; } 848 Bool getRecoveryPointSEIEnabled() const { return m_recoveryPointSEIEnabled; } 824 849 Void setToneMappingInfoSEIEnabled(Bool b) { m_toneMappingInfoSEIEnabled = b; } 825 850 Bool getToneMappingInfoSEIEnabled() { return m_toneMappingInfoSEIEnabled; } … … 876 901 Void setTMISEIExtendedWhiteLevelLumaCodeValue(Int b) { m_extendedWhiteLevelLumaCodeValue =b; } 877 902 Int getTMISEIExtendedWhiteLevelLumaCodeValue() { return m_extendedWhiteLevelLumaCodeValue; } 878 Void setFramePackingArrangementSEIEnabled( Int b){ m_framePackingSEIEnabled = b; }879 Int getFramePackingArrangementSEIEnabled(){ return m_framePackingSEIEnabled; }903 Void setFramePackingArrangementSEIEnabled(Bool b) { m_framePackingSEIEnabled = b; } 904 Bool getFramePackingArrangementSEIEnabled() const { return m_framePackingSEIEnabled; } 880 905 Void setFramePackingArrangementSEIType(Int b) { m_framePackingSEIType = b; } 881 906 Int getFramePackingArrangementSEIType() { return m_framePackingSEIType; } … … 886 911 Void setFramePackingArrangementSEIInterpretation(Int b) { m_framePackingSEIInterpretation = b; } 887 912 Int getFramePackingArrangementSEIInterpretation() { return m_framePackingSEIInterpretation; } 888 Void setSegmentedRectFramePackingArrangementSEIEnabled( Int b){ m_segmentedRectFramePackingSEIEnabled = b; }889 Int getSegmentedRectFramePackingArrangementSEIEnabled(){ return m_segmentedRectFramePackingSEIEnabled; }913 Void setSegmentedRectFramePackingArrangementSEIEnabled(Bool b) { m_segmentedRectFramePackingSEIEnabled = b; } 914 Bool getSegmentedRectFramePackingArrangementSEIEnabled() const { return m_segmentedRectFramePackingSEIEnabled; } 890 915 Void setSegmentedRectFramePackingArrangementSEICancel(Int b) { m_segmentedRectFramePackingSEICancel = b; } 891 916 Int getSegmentedRectFramePackingArrangementSEICancel() { return m_segmentedRectFramePackingSEICancel; } … … 896 921 Void setDisplayOrientationSEIAngle(Int b) { m_displayOrientationSEIAngle = b; } 897 922 Int getDisplayOrientationSEIAngle() { return m_displayOrientationSEIAngle; } 898 Void setTemporalLevel0IndexSEIEnabled( Int b){ m_temporalLevel0IndexSEIEnabled = b; }899 Int getTemporalLevel0IndexSEIEnabled(){ return m_temporalLevel0IndexSEIEnabled; }900 Void setGradualDecodingRefreshInfoEnabled( Int b){ m_gradualDecodingRefreshInfoEnabled = b; }901 Int getGradualDecodingRefreshInfoEnabled(){ return m_gradualDecodingRefreshInfoEnabled; }923 Void setTemporalLevel0IndexSEIEnabled(Bool b) { m_temporalLevel0IndexSEIEnabled = b; } 924 Bool getTemporalLevel0IndexSEIEnabled() const { return m_temporalLevel0IndexSEIEnabled; } 925 Void setGradualDecodingRefreshInfoEnabled(Bool b) { m_gradualDecodingRefreshInfoEnabled = b; } 926 Bool getGradualDecodingRefreshInfoEnabled() const { return m_gradualDecodingRefreshInfoEnabled; } 902 927 Void setNoDisplaySEITLayer(Int b) { m_noDisplaySEITLayer = b; } 903 928 Int getNoDisplaySEITLayer() { return m_noDisplaySEITLayer; } 904 Void setDecodingUnitInfoSEIEnabled( Int b){ m_decodingUnitInfoSEIEnabled = b; }905 Int getDecodingUnitInfoSEIEnabled(){ return m_decodingUnitInfoSEIEnabled; }906 Void setSOPDescriptionSEIEnabled( Int b){ m_SOPDescriptionSEIEnabled = b; }907 Int getSOPDescriptionSEIEnabled(){ return m_SOPDescriptionSEIEnabled; }908 Void setScalableNestingSEIEnabled( Int b){ m_scalableNestingSEIEnabled = b; }909 Int getScalableNestingSEIEnabled(){ return m_scalableNestingSEIEnabled; }929 Void setDecodingUnitInfoSEIEnabled(Bool b) { m_decodingUnitInfoSEIEnabled = b; } 930 Bool getDecodingUnitInfoSEIEnabled() const { return m_decodingUnitInfoSEIEnabled; } 931 Void setSOPDescriptionSEIEnabled(Bool b) { m_SOPDescriptionSEIEnabled = b; } 932 Bool getSOPDescriptionSEIEnabled() const { return m_SOPDescriptionSEIEnabled; } 933 Void setScalableNestingSEIEnabled(Bool b) { m_scalableNestingSEIEnabled = b; } 934 Bool getScalableNestingSEIEnabled() const { return m_scalableNestingSEIEnabled; } 910 935 Void setTMCTSSEIEnabled(Bool b) { m_tmctsSEIEnabled = b; } 911 936 Bool getTMCTSSEIEnabled() { return m_tmctsSEIEnabled; } … … 939 964 Void setKneeSEIOutputKneePoint(Int *p) { m_kneeSEIOutputKneePoint = p; } 940 965 Int* getKneeSEIOutputKneePoint() { return m_kneeSEIOutputKneePoint; } 966 Void setColourRemapInfoSEIFileRoot( const std::string &s ) { m_colourRemapSEIFileRoot = s; } 967 const std::string &getColourRemapInfoSEIFileRoot() const { return m_colourRemapSEIFileRoot; } 968 941 969 Void setMasteringDisplaySEI(const TComSEIMasteringDisplay &src) { m_masteringDisplay = src; } 942 970 const TComSEIMasteringDisplay &getMasteringDisplaySEI() const { return m_masteringDisplay; } 943 971 #if NH_MV 944 #if NH_MV_SEI945 972 Void setSeiMessages(SEIMessages *p) { m_seiMessages = p; } 946 973 const SEIMessages* getSeiMessages() { return m_seiMessages; } 947 #else 948 Bool getSubBitstreamPropSEIEnabled() { return m_subBistreamPropSEIEnabled;} 949 Void setSubBitstreamPropSEIEnabled(Bool x) { m_subBistreamPropSEIEnabled = x;} 950 951 Int getNumAdditionalSubStreams() { return m_numAdditionalSubStreams;} 952 Void setNumAdditionalSubStreams(Int x) { m_numAdditionalSubStreams = x;} 953 954 std::vector<Int> const &getSubBitstreamMode() { return m_subBitstreamMode;} 955 Int getSubBitstreamMode(Int idx) { return m_subBitstreamMode[idx];} 956 Void setSubBitstreamMode(std::vector<Int> &x) { m_subBitstreamMode = x;} 957 958 std::vector<Int> const &getOutputLayerSetIdxToVps() { return m_outputLayerSetIdxToVps;} 959 Int getOutputLayerSetIdxToVps(Int idx) { return m_outputLayerSetIdxToVps[idx];} 960 Void setOutputLayerSetIdxToVps(std::vector<Int> &x) { m_outputLayerSetIdxToVps = x;} 961 962 std::vector<Int> const &getHighestSublayerId() { return m_highestSublayerId;} 963 Int getHighestSublayerId(Int idx) { return m_highestSublayerId[idx];} 964 Void setHighestSublayerId(std::vector<Int> &x) { m_highestSublayerId = x;} 965 966 std::vector<Int> const &getAvgBitRate() { return m_avgBitRate;} 967 Int getAvgBitRate(Int idx) { return m_avgBitRate[idx];} 968 Void setAvgBitRate(std::vector<Int> &x) { m_avgBitRate = x;} 969 970 std::vector<Int> const &getMaxBitRate() { return m_maxBitRate;} 971 Int getMaxBitRate(Int idx) { return m_maxBitRate[idx];} 972 Void setMaxBitRate(std::vector<Int> &x) { m_maxBitRate = x;} 973 #endif 974 #endif 975 974 #endif 976 975 Void setUseWP ( Bool b ) { m_useWeightedPred = b; } 977 976 Void setWPBiPred ( Bool b ) { m_useWeightedBiPred = b; } … … 984 983 Void setUseScalingListId ( ScalingListMode u ) { m_useScalingListId = u; } 985 984 ScalingListMode getUseScalingListId () { return m_useScalingListId; } 986 Void setScalingListFile ( Char* pch ) { m_scalingListFile = pch;}987 Char* getScalingListFile () { return m_scalingListFile;}985 Void setScalingListFileName ( const std::string &s ) { m_scalingListFileName = s; } 986 const std::string& getScalingListFileName () const { return m_scalingListFileName; } 988 987 Void setTMVPModeId ( Int u ) { m_TMVPModeId = u; } 989 988 Int getTMVPModeId () { return m_TMVPModeId; } 989 WeightedPredictionMethod getWeightedPredictionMethod() const { return m_weightedPredictionMethod; } 990 Void setWeightedPredictionMethod( WeightedPredictionMethod m ) { m_weightedPredictionMethod = m; } 990 991 Void setSignHideFlag( Bool signHideFlag ) { m_signHideFlag = signHideFlag; } 991 992 Bool getSignHideFlag() { return m_signHideFlag; } … … 1004 1005 Bool getForceIntraQP () { return m_RCForceIntraQP; } 1005 1006 Void setForceIntraQP ( Bool b ) { m_RCForceIntraQP = b; } 1007 1008 #if U0132_TARGET_BITS_SATURATION 1009 Bool getCpbSaturationEnabled() { return m_RCCpbSaturationEnabled;} 1010 Void setCpbSaturationEnabled( Bool b ) { m_RCCpbSaturationEnabled = b; } 1011 UInt getCpbSize () { return m_RCCpbSize;} 1012 Void setCpbSize ( UInt ui ) { m_RCCpbSize = ui; } 1013 Double getInitialCpbFullness () { return m_RCInitialCpbFullness; } 1014 Void setInitialCpbFullness (Double f) { m_RCInitialCpbFullness = f; } 1015 #endif 1006 1016 1007 1017 #if KWU_RC_MADPRED_E0227 … … 1132 1142 Bool getLowerBitRateConstraintFlag() const { return m_lowerBitRateConstraintFlag; } 1133 1143 Void setLowerBitRateConstraintFlag(Bool b) { m_lowerBitRateConstraintFlag=b; } 1134 Bool getChromaSamplingFilterHintEnabled() { return m_chromaSamplingFilterHintEnabled;}1135 Void setChromaSamplingFilterHintEnabled(Bool i) { m_chromaSamplingFilterHintEnabled = i;}1136 Int getChromaSamplingHorFilterIdc() { return m_chromaSamplingHorFilterIdc;}1137 Void setChromaSamplingHorFilterIdc(Int i) { m_chromaSamplingHorFilterIdc = i;}1138 Int getChromaSamplingVerFilterIdc() { return m_chromaSamplingVerFilterIdc;}1139 Void setChromaSamplingVerFilterIdc(Int i) { m_chromaSamplingVerFilterIdc = i;}1144 Bool getChromaResamplingFilterHintEnabled() { return m_chromaResamplingFilterHintEnabled;} 1145 Void setChromaResamplingFilterHintEnabled(Bool i) { m_chromaResamplingFilterHintEnabled = i;} 1146 Int getChromaResamplingHorFilterIdc() { return m_chromaResamplingHorFilterIdc;} 1147 Void setChromaResamplingHorFilterIdc(Int i) { m_chromaResamplingHorFilterIdc = i;} 1148 Int getChromaResamplingVerFilterIdc() { return m_chromaResamplingVerFilterIdc;} 1149 Void setChromaResamplingVerFilterIdc(Int i) { m_chromaResamplingVerFilterIdc = i;} 1140 1150 1141 1151 Void setSummaryOutFilename(const std::string &s) { m_summaryOutFilename = s; } … … 1147 1157 UInt getSummaryVerboseness( ) const { return m_summaryVerboseness; } 1148 1158 1149 #if NH_3D 1159 #if NH_3D_VSO 1150 1160 // Only flags that are not in the SPS3dExtension should go here. 1151 1161 /// 3D Tools … … 1153 1163 //==== CAMERA PARAMETERS ========== 1154 1164 Void setCameraParameters ( TAppComCamPara* c) { m_cameraParameters = c; } 1155 1156 #if NH_3D_VSO1157 1165 //==== VSO ========== 1158 1166 Void setRenderModelParameters ( TRenModSetupStrParser* c ) { m_renderModelParameters = c; } … … 1184 1192 Void setDispCoeff ( Double d ) { m_dDispCoeff = d; } 1185 1193 #endif // NH_3D_VSO 1186 1194 #if NH_3D 1187 1195 Bool getUseDMM () { return m_useDMM; } 1188 1196 Void setUseDMM ( Bool b) { m_useDMM = b; } … … 1192 1200 Bool getUseDLT () { return m_useDLT; } 1193 1201 Void setUseDLT ( Bool b) { m_useDLT = b; } 1194 1202 #endif 1203 1204 #if NH_3D_QTL 1195 1205 Void setUseQTL ( Bool b ) { m_bUseQTL = b; } 1196 1206 Bool getUseQTL () { return m_bUseQTL; } 1207 #endif 1208 #if NH_3D 1197 1209 1198 1210 Void setProfileIdc( Int a ) { assert( a == 1 || a == 6 || a == 8 ); m_profileIdc = a; } -
TabularUnified trunk/source/Lib/TLibEncoder/TEncCu.cpp ¶
r1321 r1386 420 420 const UInt fastDeltaQPCuMaxSize = Clip3(sps.getMaxCUHeight()>>sps.getLog2DiffMaxMinCodingBlockSize(), sps.getMaxCUHeight(), 32u); 421 421 422 422 #if NH_3D_QTL 423 423 #if NH_3D_QTLPC 424 424 Bool bLimQtPredFalg = pcPic->getSlice(0)->getQtPredFlag(); 425 #else 426 Bool bLimQtPredFalg = false; 427 #endif 425 428 TComPic *pcTexture = rpcBestCU->getSlice()->getTexturePic(); 426 429 … … 437 440 m_ppcOrigYuv[uiDepth]->copyFromPicYuv( pcPic->getPicYuvOrg(), rpcBestCU->getCtuRsAddr(), rpcBestCU->getZorderIdxInCtu() ); 438 441 439 #if NH_3D_QTL PC442 #if NH_3D_QTL 440 443 Bool bTrySplit = true; 441 444 Bool bTrySplitDQP = true; … … 459 462 const UInt uiWidth = rpcBestCU->getWidth(0); 460 463 461 #if H_MV_ENC_DEC_TRAC464 #if NH_MV_ENC_DEC_TRAC 462 465 #if ENC_DEC_TRACE 463 466 stopAtPos ( rpcBestCU->getSlice()->getPOC(), … … 534 537 } 535 538 536 #if NH_3D_QTL PC539 #if NH_3D_QTL 537 540 bTrySplit = true; 538 541 #endif … … 552 555 553 556 rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode ); 554 #if NH_3D_QTL PC557 #if NH_3D_QTL 555 558 //logic for setting bTrySplit using the partition information that is stored of the texture colocated CU 556 559 #if H_3D_FCO … … 734 737 #endif 735 738 } 736 #if NH_3D_QTL PC739 #if NH_3D_QTL 737 740 if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg )) 738 741 { … … 789 792 { 790 793 if( uiDepth == sps.getLog2DiffMaxMinCodingBlockSize() && doNotBlockPu 791 #if NH_3D_QTL PC794 #if NH_3D_QTL 792 795 && bTrySplit 793 796 #endif … … 809 812 810 813 if(doNotBlockPu 811 #if NH_3D_QTL PC814 #if NH_3D_QTL 812 815 && bTryNx2N 813 816 #endif … … 830 833 } 831 834 if(doNotBlockPu 832 #if NH_3D_QTL PC835 #if NH_3D_QTL 833 836 && bTry2NxN 834 837 #endif … … 871 874 { 872 875 if(doNotBlockPu 873 #if NH_3D_QTL PC876 #if NH_3D_QTL 874 877 && bTry2NxN 875 878 #endif … … 891 894 } 892 895 if(doNotBlockPu 893 #if NH_3D_QTL PC896 #if NH_3D_QTL 894 897 && bTry2NxN 895 898 #endif … … 917 920 { 918 921 if(doNotBlockPu 919 #if NH_3D_QTL PC922 #if NH_3D_QTL 920 923 && bTry2NxN 921 924 #endif … … 939 942 } 940 943 if(doNotBlockPu 941 #if NH_3D_QTL PC944 #if NH_3D_QTL 942 945 && bTry2NxN 943 946 #endif … … 966 969 { 967 970 if(doNotBlockPu 968 #if NH_3D_QTL PC971 #if NH_3D_QTL 969 972 && bTryNx2N 970 973 #endif … … 987 990 } 988 991 if(doNotBlockPu 989 #if NH_3D_QTL PC992 #if NH_3D_QTL 990 993 && bTryNx2N 991 994 #endif … … 1007 1010 { 1008 1011 if(doNotBlockPu 1009 #if NH_3D_QTL PC1012 #if NH_3D_QTL 1010 1013 && bTryNx2N 1011 1014 #endif … … 1027 1030 } 1028 1031 if(doNotBlockPu 1029 #if NH_3D_QTL PC1032 #if NH_3D_QTL 1030 1033 && bTryNx2N 1031 1034 #endif … … 1048 1051 1049 1052 #else 1050 #if NH_3D_QTL PC1053 #if NH_3D_QTL 1051 1054 if (bTry2NxN) 1052 1055 { … … 1063 1066 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth); 1064 1067 #endif 1065 #if NH_3D_QTL PC1068 #if NH_3D_QTL 1066 1069 } 1067 1070 if (bTryNx2N) … … 1078 1081 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth); 1079 1082 #endif 1080 #if NH_3D_QTL PC1083 #if NH_3D_QTL 1081 1084 } 1082 1085 #endif … … 1134 1137 if( uiDepth == sps.getLog2DiffMaxMinCodingBlockSize() ) 1135 1138 { 1136 #if NH_3D_QTL PC//Try IntraNxN1139 #if NH_3D_QTL //Try IntraNxN 1137 1140 if(bTrySplit) 1138 1141 { … … 1150 1153 rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode ); 1151 1154 } 1152 #if NH_3D_QTL PC1155 #if NH_3D_QTL 1153 1156 } 1154 1157 #endif … … 1252 1255 const Bool bSubBranch = bBoundary || !( m_pcEncCfg->getUseEarlyCU() && rpcBestCU->getTotalCost()!=MAX_DOUBLE && rpcBestCU->isSkipped(0) ); 1253 1256 #endif 1254 #if NH_3D_QTL PC1257 #if NH_3D_QTL 1255 1258 if( bSubBranch && uiDepth < sps.getLog2DiffMaxMinCodingBlockSize() && (!getFastDeltaQp() || uiWidth > fastDeltaQPCuMaxSize || bBoundary) && bTrySplitDQP ) 1256 1259 #else … … 1516 1519 const UInt uiBPelY = uiTPelY + (maxCUHeight>>uiDepth) - 1; 1517 1520 1518 #if H_MV_ENC_DEC_TRAC1521 #if NH_MV_ENC_DEC_TRAC 1519 1522 DTRACE_CU_S("=========== coding_quadtree ===========\n") 1520 1523 DTRACE_CU("x0", uiLPelX) … … 1558 1561 } 1559 1562 1560 #if H_MV_ENC_DEC_TRAC1563 #if NH_MV_ENC_DEC_TRAC 1561 1564 DTRACE_CU_S("=========== coding_unit ===========\n") 1562 1565 #endif … … 1585 1588 if( pcCU->isSkipped( uiAbsPartIdx ) ) 1586 1589 { 1587 #if H_MV_ENC_DEC_TRAC1590 #if NH_MV_ENC_DEC_TRAC 1588 1591 DTRACE_PU_S("=========== prediction_unit ===========\n") 1589 1592 DTRACE_PU("x0", uiLPelX) … … 2216 2219 *earlyDetectionSkipMode = true; 2217 2220 } 2218 else if(m_pcEncCfg->get FastSearch() !=SELECTIVE)2221 else if(m_pcEncCfg->getMotionEstimationSearchMethod() != MESEARCH_SELECTIVE) 2219 2222 { 2220 2223 Int absoulte_MV=0; … … 2305 2308 for( Int nARPW = 0; nARPW <= nARPWMax; nARPW++ ) 2306 2309 { 2307 #if DEBUG_STRING && H_MV_ENC_DEC_TRAC2310 #if DEBUG_STRING && NH_MV_ENC_DEC_TRAC 2308 2311 sTest.clear(); 2309 2312 #endif … … 2741 2744 m_pcPredSearch ->estIntraPredDIS ( rpcTempCU, m_ppcOrigYuv[uiDepth], m_ppcPredYuvTemp[uiDepth], m_ppcResiYuvTemp[uiDepth], m_ppcRecoYuvTemp[uiDepth], uiPreCalcDistC, false ); 2742 2745 2743 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC2746 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 2744 2747 Int oldTraceCopyBack = g_traceCopyBack; 2745 2748 g_traceCopyBack = false; 2746 2749 #endif 2747 2750 m_ppcRecoYuvTemp[uiDepth]->copyToPicComponent(COMPONENT_Y, rpcTempCU->getPic()->getPicYuvRec(), rpcTempCU->getCtuRsAddr(), rpcTempCU->getZorderIdxInCtu() ); 2748 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC2751 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 2749 2752 g_traceCopyBack = oldTraceCopyBack; 2750 2753 #endif … … 3077 3080 m_ppcRecoYuvBest[uiSrcDepth]->copyToPicYuv( rpcPic->getPicYuvRec (), uiCUAddr, uiAbsPartIdx, uiDepth - uiSrcDepth, uiPartIdx); 3078 3081 3079 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC3082 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 3080 3083 Bool oldtraceCopyBack = g_traceCopyBack; 3081 3084 g_traceCopyBack = false; … … 3083 3086 m_ppcPredYuvBest[uiSrcDepth]->copyToPicYuv( rpcPic->getPicYuvPred (), uiCUAddr, uiAbsPartIdx, uiDepth - uiSrcDepth, uiPartIdx); 3084 3087 3085 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC3088 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 3086 3089 g_traceCopyBack = oldtraceCopyBack; 3087 3090 #endif -
TabularUnified trunk/source/Lib/TLibEncoder/TEncEntropy.cpp ¶
r1321 r1386 281 281 const UInt uiTrIdx = rTu.GetTransformDepthRel(); 282 282 const UInt uiDepth = rTu.GetTransformDepthTotal(); 283 #if H_MV_ENC_DEC_TRAC283 #if NH_MV_ENC_DEC_TRAC 284 284 #if ENC_DEC_TRACE 285 285 UInt uiLPelX = pcCU->getCUPelX() + g_auiRasterToPelX[ g_auiZscanToRaster[uiAbsPartIdx] ]; … … 388 388 else 389 389 { 390 #if ! H_MV_ENC_DEC_TRAC390 #if !NH_MV_ENC_DEC_TRAC 391 391 { 392 392 DTRACE_CABAC_VL( g_nSymbolCounter++ ); … … 557 557 for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset ) 558 558 { 559 #if H_MV_ENC_DEC_TRAC559 #if NH_MV_ENC_DEC_TRAC 560 560 DTRACE_PU_S("=========== prediction_unit ===========\n") 561 561 //Todo: … … 795 795 Void TEncEntropy::encodeCoeffNxN( TComTU &rTu, TCoeff* pcCoef, const ComponentID compID) 796 796 { 797 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC797 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 798 798 Bool oldTraceFracBits = g_traceEncFracBits; 799 799 g_traceEncFracBits = false; … … 827 827 } 828 828 } 829 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC829 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 830 830 g_traceEncFracBits = oldTraceFracBits; 831 831 #endif -
TabularUnified trunk/source/Lib/TLibEncoder/TEncEntropy.h ¶
r1321 r1386 139 139 Void setBitstream ( TComBitIf* p ) { m_pcEntropyCoderIf->setBitstream(p); } 140 140 Void resetBits () { m_pcEntropyCoderIf->resetBits(); } 141 #if NH_MV 141 142 UInt getNumberOfWrittenBits () { 142 #if NH_MV143 143 D_PRINT_INDENT(g_encNumberOfWrittenBits, "NumBits: " + n2s( m_pcEntropyCoderIf->getNumberOfWrittenBits() )) 144 #endif145 144 return m_pcEntropyCoderIf->getNumberOfWrittenBits(); } 145 #else 146 UInt getNumberOfWrittenBits () { return m_pcEntropyCoderIf->getNumberOfWrittenBits(); } 147 #endif 146 148 Void resetEntropy (const TComSlice *pSlice) { m_pcEntropyCoderIf->resetEntropy(pSlice); } 147 149 SliceType determineCabacInitIdx (const TComSlice *pSlice) { return m_pcEntropyCoderIf->determineCabacInitIdx(pSlice); } -
TabularUnified trunk/source/Lib/TLibEncoder/TEncGOP.cpp ¶
r1356 r1386 219 219 } 220 220 221 Void TEncGOP::xWriteAccessUnitDelimiter (AccessUnit &accessUnit, TComSlice *slice) 222 { 223 AUDWriter audWriter; 224 OutputNALUnit nalu(NAL_UNIT_ACCESS_UNIT_DELIMITER); 225 226 Int picType = slice->isIntra() ? 0 : (slice->isInterP() ? 1 : 2); 227 228 audWriter.codeAUD(nalu.m_Bitstream, picType); 229 accessUnit.push_front(new NALUnitEBSP(nalu)); 230 } 231 221 232 // write SEI list into one NAL unit and add it to the Access unit at auPos 222 233 Void TEncGOP::xWriteSEI (NalUnitType naluType, SEIMessages& seiMessages, AccessUnit &accessUnit, AccessUnit::iterator &auPos, Int temporalId, const TComSPS *sps) … … 329 340 xClearSEIs(currentMessages, !testWrite); 330 341 331 #if NH_MV _LAYERS_NOT_PRESENT_SEI342 #if NH_MV 332 343 // Layers not present SEI message 333 344 currentMessages = extractSeisByType(localMessages, SEI::LAYERS_NOT_PRESENT); … … 485 496 } 486 497 487 #if NH_MV 488 #if !NH_MV_SEI 489 if( m_pcCfg->getSubBitstreamPropSEIEnabled() && ( getLayerId() == 0 ) ) 490 { 491 SEISubBitstreamProperty *sei = new SEISubBitstreamProperty; 492 m_seiEncoder.initSEISubBitstreamProperty( sei, sps ); 493 seiMessages.push_back(sei); 494 } 495 #endif 496 #endif 498 if(m_pcCfg->getChromaResamplingFilterHintEnabled()) 499 { 500 SEIChromaResamplingFilterHint *seiChromaResamplingFilterHint = new SEIChromaResamplingFilterHint; 501 m_seiEncoder.initSEIChromaResamplingFilterHint(seiChromaResamplingFilterHint, m_pcCfg->getChromaResamplingHorFilterIdc(), m_pcCfg->getChromaResamplingVerFilterIdc()); 502 seiMessages.push_back(seiChromaResamplingFilterHint); 503 } 497 504 } 498 505 … … 545 552 } 546 553 547 if(slice->getSPS()->getVuiParametersPresentFlag() && m_pcCfg->getChromaSamplingFilterHintEnabled() && ( slice->getSliceType() == I_SLICE ))548 {549 SEIChromaSamplingFilterHint *seiChromaSamplingFilterHint = new SEIChromaSamplingFilterHint;550 m_seiEncoder.initSEIChromaSamplingFilterHint(seiChromaSamplingFilterHint, m_pcCfg->getChromaSamplingHorFilterIdc(), m_pcCfg->getChromaSamplingVerFilterIdc());551 seiMessages.push_back(seiChromaSamplingFilterHint);552 }553 554 554 if( m_pcEncTop->getNoDisplaySEITLayer() && ( slice->getTLayer() >= m_pcEncTop->getNoDisplaySEITLayer() ) ) 555 555 { … … 557 557 seiNoDisplay->m_noDisplay = true; 558 558 seiMessages.push_back(seiNoDisplay); 559 } 560 561 // insert one Colour Remapping Info SEI for the picture (if the file exists) 562 if (!m_pcCfg->getColourRemapInfoSEIFileRoot().empty()) 563 { 564 SEIColourRemappingInfo *seiColourRemappingInfo = new SEIColourRemappingInfo(); 565 const Bool success = m_seiEncoder.initSEIColourRemappingInfo(seiColourRemappingInfo, slice->getPOC() ); 566 567 if(success) 568 { 569 seiMessages.push_back(seiColourRemappingInfo); 570 } 571 else 572 { 573 delete seiColourRemappingInfo; 574 } 559 575 } 560 576 } … … 577 593 Void TEncGOP::xCreatePictureTimingSEI (Int IRAPGOPid, SEIMessages& seiMessages, SEIMessages& nestedSeiMessages, SEIMessages& duInfoSeiMessages, TComSlice *slice, Bool isField, std::deque<DUData> &duData) 578 594 { 579 Int picSptDpbOutputDuDelay = 0;580 #if !NH_MV581 SEIPictureTiming *pictureTimingSEI = new SEIPictureTiming();582 #endif583 595 584 596 const TComVUI *vui = slice->getSPS()->getVuiParameters(); … … 590 602 ( hrd->getNalHrdParametersPresentFlag() || hrd->getVclHrdParametersPresentFlag() ) ) 591 603 { 592 #if NH_MV 593 // Preliminary fix to avoid memory leak. 604 Int picSptDpbOutputDuDelay = 0; 594 605 SEIPictureTiming *pictureTimingSEI = new SEIPictureTiming(); 595 #endif596 606 597 607 // DU parameters … … 712 722 } 713 723 } 724 725 if( !m_pcCfg->getPictureTimingSEIEnabled() && pictureTimingSEI ) 726 { 727 delete pictureTimingSEI; 728 } 714 729 } 715 730 } … … 745 760 746 761 // The last DU may have a trailing SEI 747 if (m_pcCfg->getDecodedPictureHashSEI Enabled())762 if (m_pcCfg->getDecodedPictureHashSEIType()!=HASHTYPE_NONE) 748 763 { 749 764 duData.back().accumBitsDU += ( 20 << 3 ); // probably around 20 bytes - should be further adjusted, e.g. by type … … 867 882 if (cabacZeroWordPaddingEnabled) 868 883 { 869 std::vector< Char> zeroBytesPadding(numberOfAdditionalCabacZeroBytes,Char(0));884 std::vector<UChar> zeroBytesPadding(numberOfAdditionalCabacZeroBytes, UChar(0)); 870 885 for(std::size_t i=0; i<numberOfAdditionalCabacZeroWords; i++) 871 886 { 872 887 zeroBytesPadding[i*3+2]=3; // 00 00 03 873 888 } 874 nalUnitData.write( &(zeroBytesPadding[0]), numberOfAdditionalCabacZeroBytes);889 nalUnitData.write(reinterpret_cast<const TChar*>(&(zeroBytesPadding[0])), numberOfAdditionalCabacZeroBytes); 875 890 printf("Adding %d bytes of padding\n", UInt(numberOfAdditionalCabacZeroWords*3)); 876 891 } … … 1058 1073 { 1059 1074 return 1; 1075 } 1076 } 1077 1078 1079 static Void 1080 printHash(const HashType hashType, const std::string &digestStr) 1081 { 1082 const TChar *decodedPictureHashModeName; 1083 switch (hashType) 1084 { 1085 case HASHTYPE_MD5: 1086 decodedPictureHashModeName = "MD5"; 1087 break; 1088 case HASHTYPE_CRC: 1089 decodedPictureHashModeName = "CRC"; 1090 break; 1091 case HASHTYPE_CHECKSUM: 1092 decodedPictureHashModeName = "Checksum"; 1093 break; 1094 default: 1095 decodedPictureHashModeName = NULL; 1096 break; 1097 } 1098 if (decodedPictureHashModeName != NULL) 1099 { 1100 if (digestStr.empty()) 1101 { 1102 printf(" [%s:%s]", decodedPictureHashModeName, "?"); 1103 } 1104 else 1105 { 1106 printf(" [%s:%s]", decodedPictureHashModeName, digestStr.c_str()); 1107 } 1060 1108 } 1061 1109 } … … 1374 1422 Int numDirectRefLayers = vps ->getNumDirectRefLayers( getLayerId() ); 1375 1423 #endif 1424 #if NH_3D_QTL 1425 pcSlice->setIvPicLists( m_ivPicLists ); 1426 #endif 1376 1427 #if NH_3D 1377 pcSlice->setIvPicLists( m_ivPicLists ); 1428 1378 1429 1379 1430 Int gopNum = (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid; … … 1594 1645 pcRdCost->setVideoRecPicYuv( m_pcEncTop->getIvPicLists()->getPicYuv( pcSlice->getViewIndex(), false, pcSlice->getPOC(), flagRec ) ); 1595 1646 pcRdCost->setDepthPicYuv ( m_pcEncTop->getIvPicLists()->getPicYuv( pcSlice->getViewIndex(), true, pcSlice->getPOC(), false ) ); 1596 #else 1597 pcRdCost->setVideoRecPicYuv( m_pcEncTop->getIvPicLists()->getPicYuv( pcSlice->getViewIndex(), false , pcSlice->getPOC(), true ) ); 1598 pcRdCost->setDepthPicYuv ( m_pcEncTop->getIvPicLists()->getPicYuv( pcSlice->getViewIndex(), true , pcSlice->getPOC(), false ) ); 1599 #endif 1600 1647 #else 1648 Int curAuxId = pcSlice->getVPS()->getAuxId( getLayerId() ); 1649 Int curDepthFlag = pcSlice->getIsDepth(); 1650 assert( curAuxId == 2 || curDepthFlag ); 1651 pcRdCost->setVideoRecPicYuv( m_pcEncTop->getIvPicLists()->getPicYuv( pcSlice->getViewIndex(), false , 0 , pcSlice->getPOC(), true ) ); 1652 pcRdCost->setDepthPicYuv ( m_pcEncTop->getIvPicLists()->getPicYuv( pcSlice->getViewIndex(), curDepthFlag, curAuxId, pcSlice->getPOC(), false ) ); 1653 #endif 1601 1654 // LGE_WVSO_A0119 1602 1655 Bool bUseWVSO = m_pcEncTop->getUseWVSO(); … … 1605 1658 } 1606 1659 #endif 1607 1608 /////////////////////////////////////////////////////////////////////////////////////////////////// Compress a slice 1609 // Slice compression 1610 if (m_pcCfg->getUseASR()) 1660 // set adaptive search range for non-intra-slices 1661 if (m_pcCfg->getUseASR() && pcSlice->getSliceType()!=I_SLICE) 1611 1662 { 1612 1663 m_pcSliceEncoder->setSearchRange(pcSlice); … … 1654 1705 } 1655 1706 m_pcRateCtrl->initRCPic( frameLevel ); 1707 estimatedBits = m_pcRateCtrl->getRCPic()->getTargetBits(); 1656 1708 1657 1709 #if KWU_RC_MADPRED_E0227 … … 1662 1714 #endif 1663 1715 1664 estimatedBits = m_pcRateCtrl->getRCPic()->getTargetBits(); 1716 #if U0132_TARGET_BITS_SATURATION 1717 if (m_pcRateCtrl->getCpbSaturationEnabled() && frameLevel != 0) 1718 { 1719 Int estimatedCpbFullness = m_pcRateCtrl->getCpbState() + m_pcRateCtrl->getBufferingRate(); 1720 1721 // prevent overflow 1722 if (estimatedCpbFullness - estimatedBits > (Int)(m_pcRateCtrl->getCpbSize()*0.9f)) 1723 { 1724 estimatedBits = estimatedCpbFullness - (Int)(m_pcRateCtrl->getCpbSize()*0.9f); 1725 } 1726 1727 estimatedCpbFullness -= m_pcRateCtrl->getBufferingRate(); 1728 // prevent underflow 1729 if (estimatedCpbFullness - estimatedBits < (Int)(m_pcRateCtrl->getCpbSize()*0.1f)) 1730 { 1731 estimatedBits = max(200, estimatedCpbFullness - (Int)(m_pcRateCtrl->getCpbSize()*0.1f)); 1732 } 1733 1734 m_pcRateCtrl->getRCPic()->setTargetBits(estimatedBits); 1735 } 1736 #endif 1665 1737 1666 1738 Int sliceQP = m_pcCfg->getInitialQP(); … … 1683 1755 Int bits = m_pcRateCtrl->getRCSeq()->getLeftAverageBits(); 1684 1756 bits = m_pcRateCtrl->getRCPic()->getRefineBitsForIntra( bits ); 1757 1758 #if U0132_TARGET_BITS_SATURATION 1759 if (m_pcRateCtrl->getCpbSaturationEnabled() ) 1760 { 1761 Int estimatedCpbFullness = m_pcRateCtrl->getCpbState() + m_pcRateCtrl->getBufferingRate(); 1762 1763 // prevent overflow 1764 if (estimatedCpbFullness - bits > (Int)(m_pcRateCtrl->getCpbSize()*0.9f)) 1765 { 1766 bits = estimatedCpbFullness - (Int)(m_pcRateCtrl->getCpbSize()*0.9f); 1767 } 1768 1769 estimatedCpbFullness -= m_pcRateCtrl->getBufferingRate(); 1770 // prevent underflow 1771 if (estimatedCpbFullness - bits < (Int)(m_pcRateCtrl->getCpbSize()*0.1f)) 1772 { 1773 bits = estimatedCpbFullness - (Int)(m_pcRateCtrl->getCpbSize()*0.1f); 1774 } 1775 } 1776 #endif 1777 1685 1778 if ( bits < 200 ) 1686 1779 { … … 1820 1913 // write various parameter sets 1821 1914 actualTotalBits += xWriteParameterSets(accessUnit, pcSlice); 1822 #if PPS_FIX_DEPTH1915 #if H_3D_PPS_FIX_DEPTH 1823 1916 if(!pcSlice->getIsDepth() || !pcSlice->getViewIndex() ) 1824 1917 { 1825 1918 #endif 1826 #if PPS_FIX_DEPTH1919 #if H_3D_PPS_FIX_DEPTH 1827 1920 } 1828 1921 #endif … … 1834 1927 1835 1928 m_bSeqFirst = false; 1929 } 1930 if (m_pcCfg->getAccessUnitDelimiter()) 1931 { 1932 xWriteAccessUnitDelimiter(accessUnit, pcSlice); 1836 1933 } 1837 1934 … … 1841 1938 xCreatePerPictureSEIMessages(iGOPid, leadingSeiMessages, nestedSeiMessages, pcSlice); 1842 1939 1843 #if NH_MV _SEI1940 #if NH_MV 1844 1941 m_seiEncoder.createAnnexFGISeiMessages( leadingSeiMessages, pcSlice ); 1845 1942 #endif … … 2002 2099 2003 2100 std::string digestStr; 2004 if (m_pcCfg->getDecodedPictureHashSEI Enabled())2101 if (m_pcCfg->getDecodedPictureHashSEIType()!=HASHTYPE_NONE) 2005 2102 { 2006 2103 SEIDecodedPictureHash *decodedPictureHashSei = new SEIDecodedPictureHash(); … … 2014 2111 xCalculateAddPSNRs( isField, isTff, iGOPid, pcPic, accessUnit, rcListPic, dEncTime, snr_conversion, printFrameMSE ); 2015 2112 2016 if (!digestStr.empty()) 2017 { 2018 if(m_pcCfg->getDecodedPictureHashSEIEnabled() == 1) 2019 { 2020 printf(" [MD5:%s]", digestStr.c_str()); 2021 } 2022 else if(m_pcCfg->getDecodedPictureHashSEIEnabled() == 2) 2023 { 2024 printf(" [CRC:%s]", digestStr.c_str()); 2025 } 2026 else if(m_pcCfg->getDecodedPictureHashSEIEnabled() == 3) 2027 { 2028 printf(" [Checksum:%s]", digestStr.c_str()); 2029 } 2030 } 2113 printHash(m_pcCfg->getDecodedPictureHashSEIType(), digestStr); 2031 2114 2032 2115 if ( m_pcCfg->getUseRateCtrl() ) … … 2051 2134 m_pcRateCtrl->getRCGOP()->updateAfterPicture( estimatedBits ); 2052 2135 } 2136 #if U0132_TARGET_BITS_SATURATION 2137 if (m_pcRateCtrl->getCpbSaturationEnabled()) 2138 { 2139 m_pcRateCtrl->updateCpbState(actualTotalBits); 2140 printf(" [CPB %6d bits]", m_pcRateCtrl->getCpbState()); 2141 } 2142 #endif 2053 2143 } 2054 2144 … … 2352 2442 if (conversion!=IPCOLOURSPACE_UNCHANGED) 2353 2443 { 2354 cscd.create (pcPicD->getWidth(COMPONENT_Y), pcPicD->getHeight(COMPONENT_Y), pcPicD->getChromaFormat(), pcPicD->getWidth(COMPONENT_Y), pcPicD->getHeight(COMPONENT_Y), 0, false);2444 cscd.createWithoutCUInfo(pcPicD->getWidth(COMPONENT_Y), pcPicD->getHeight(COMPONENT_Y), pcPicD->getChromaFormat() ); 2355 2445 TVideoIOYuv::ColourSpaceConvert(*pcPicD, cscd, conversion, false); 2356 2446 } … … 2452 2542 } 2453 2543 2454 Char c = (pcSlice->isIntra() ? 'I' : pcSlice->isInterP() ? 'P' : 'B');2544 TChar c = (pcSlice->isIntra() ? 'I' : pcSlice->isInterP() ? 'P' : 'B'); 2455 2545 if (!pcSlice->isReferenced()) 2456 2546 { … … 2506 2596 printf(" [ET %5.0f ]", dEncTime ); 2507 2597 2598 // printf(" [WP %d]", pcSlice->getUseWeightedPrediction()); 2599 2508 2600 for (Int iRefList = 0; iRefList < 2; iRefList++) 2509 2601 { … … 2555 2647 { 2556 2648 TComPicYuv &reconField=*(apcPicRecFields[fieldNum]); 2557 cscd[fieldNum].create (reconField.getWidth(COMPONENT_Y), reconField.getHeight(COMPONENT_Y), reconField.getChromaFormat(), reconField.getWidth(COMPONENT_Y), reconField.getHeight(COMPONENT_Y), 0, false);2649 cscd[fieldNum].createWithoutCUInfo(reconField.getWidth(COMPONENT_Y), reconField.getHeight(COMPONENT_Y), reconField.getChromaFormat() ); 2558 2650 TVideoIOYuv::ColourSpaceConvert(reconField, cscd[fieldNum], conversion, false); 2559 2651 apcPicRecFields[fieldNum]=cscd+fieldNum; -
TabularUnified trunk/source/Lib/TLibEncoder/TEncGOP.h ¶
r1313 r1386 220 220 Double xCalculateRVM(); 221 221 222 Void xWriteAccessUnitDelimiter (AccessUnit &accessUnit, TComSlice *slice); 223 222 224 Void xCreateIRAPLeadingSEIMessages (SEIMessages& seiMessages, const TComSPS *sps, const TComPPS *pps); 223 225 Void xCreatePerPictureSEIMessages (Int picInGOP, SEIMessages& seiMessages, SEIMessages& nestedSeiMessages, TComSlice *slice); -
TabularUnified trunk/source/Lib/TLibEncoder/TEncPreanalyzer.cpp ¶
r1313 r1386 87 87 UInt64 uiSum[4] = {0, 0, 0, 0}; 88 88 UInt64 uiSumSq[4] = {0, 0, 0, 0}; 89 UInt uiNumPixInAQPart = 0;90 89 UInt by = 0; 91 90 for ( ; by < uiCurrAQPartHeight>>1; by++ ) 92 91 { 93 92 UInt bx = 0; 94 for ( ; bx < uiCurrAQPartWidth>>1; bx++ , uiNumPixInAQPart++)93 for ( ; bx < uiCurrAQPartWidth>>1; bx++ ) 95 94 { 96 95 uiSum [0] += pBlkY[bx]; 97 96 uiSumSq[0] += pBlkY[bx] * pBlkY[bx]; 98 97 } 99 for ( ; bx < uiCurrAQPartWidth; bx++ , uiNumPixInAQPart++)98 for ( ; bx < uiCurrAQPartWidth; bx++ ) 100 99 { 101 100 uiSum [1] += pBlkY[bx]; … … 107 106 { 108 107 UInt bx = 0; 109 for ( ; bx < uiCurrAQPartWidth>>1; bx++ , uiNumPixInAQPart++)108 for ( ; bx < uiCurrAQPartWidth>>1; bx++ ) 110 109 { 111 110 uiSum [2] += pBlkY[bx]; 112 111 uiSumSq[2] += pBlkY[bx] * pBlkY[bx]; 113 112 } 114 for ( ; bx < uiCurrAQPartWidth; bx++ , uiNumPixInAQPart++)113 for ( ; bx < uiCurrAQPartWidth; bx++ ) 115 114 { 116 115 uiSum [3] += pBlkY[bx]; … … 120 119 } 121 120 121 assert ((uiCurrAQPartWidth&1)==0); 122 assert ((uiCurrAQPartHeight&1)==0); 123 const UInt pixelWidthOfQuadrants = uiCurrAQPartWidth >>1; 124 const UInt pixelHeightOfQuadrants = uiCurrAQPartHeight>>1; 125 const UInt numPixInAQPart = pixelWidthOfQuadrants * pixelHeightOfQuadrants; 126 122 127 Double dMinVar = DBL_MAX; 128 if (numPixInAQPart!=0) 129 { 123 130 for ( Int i=0; i<4; i++) 124 131 { 125 const Double dAverage = Double(uiSum[i]) / uiNumPixInAQPart;126 const Double dVariance = Double(uiSumSq[i]) / uiNumPixInAQPart - dAverage * dAverage;132 const Double dAverage = Double(uiSum[i]) / numPixInAQPart; 133 const Double dVariance = Double(uiSumSq[i]) / numPixInAQPart - dAverage * dAverage; 127 134 dMinVar = min(dMinVar, dVariance); 135 } 136 } 137 else 138 { 139 dMinVar = 0.0; 128 140 } 129 141 const Double dActivity = 1.0 + dMinVar; -
TabularUnified trunk/source/Lib/TLibEncoder/TEncRateCtrl.cpp ¶
r1313 r1386 1639 1639 m_encRCSeq->initLCUPara(); 1640 1640 } 1641 #if U0132_TARGET_BITS_SATURATION 1642 m_CpbSaturationEnabled = false; 1643 m_cpbSize = targetBitrate; 1644 m_cpbState = (UInt)(m_cpbSize*0.5f); 1645 m_bufferingRate = (Int)(targetBitrate / frameRate); 1646 #endif 1641 1647 1642 1648 #if KWU_RC_MADPRED_E0227 … … 1664 1670 } 1665 1671 1672 #if U0132_TARGET_BITS_SATURATION 1673 Int TEncRateCtrl::updateCpbState(Int actualBits) 1674 { 1675 Int cpbState = 1; 1676 1677 m_cpbState -= actualBits; 1678 if (m_cpbState < 0) 1679 { 1680 cpbState = -1; 1681 } 1682 1683 m_cpbState += m_bufferingRate; 1684 if (m_cpbState > m_cpbSize) 1685 { 1686 cpbState = 0; 1687 } 1688 1689 return cpbState; 1690 } 1691 1692 Void TEncRateCtrl::initHrdParam(const TComHRD* pcHrd, Int iFrameRate, Double fInitialCpbFullness) 1693 { 1694 m_CpbSaturationEnabled = true; 1695 m_cpbSize = (pcHrd->getCpbSizeValueMinus1(0, 0, 0) + 1) << (4 + pcHrd->getCpbSizeScale()); 1696 m_cpbState = (UInt)(m_cpbSize*fInitialCpbFullness); 1697 m_bufferingRate = (UInt)(((pcHrd->getBitRateValueMinus1(0, 0, 0) + 1) << (6 + pcHrd->getBitRateScale())) / iFrameRate); 1698 printf("\nHRD - [Initial CPB state %6d] [CPB Size %6d] [Buffering Rate %6d]\n", m_cpbState, m_cpbSize, m_bufferingRate); 1699 } 1700 #endif 1701 1666 1702 Void TEncRateCtrl::destroyRCGOP() 1667 1703 { -
TabularUnified trunk/source/Lib/TLibEncoder/TEncRateCtrl.h ¶
r1313 r1386 285 285 TRCLCU& getLCU( Int LCUIdx ) { return m_LCUs[LCUIdx]; } 286 286 Int getPicActualHeaderBits() { return m_picActualHeaderBits; } 287 #if U0132_TARGET_BITS_SATURATION 288 Void setBitLeft(Int bits) { m_bitsLeft = bits; } 289 #endif 287 290 Void setTargetBits( Int bits ) { m_targetBits = bits; m_bitsLeft = bits;} 288 291 Void setTotalIntraCost(Double cost) { m_totalCostIntra = cost; } … … 369 372 Void setLayerID(Int layerid) { m_LayerID = layerid; } 370 373 #endif 374 #if U0132_TARGET_BITS_SATURATION 375 Bool getCpbSaturationEnabled() { return m_CpbSaturationEnabled; } 376 UInt getCpbState() { return m_cpbState; } 377 UInt getCpbSize() { return m_cpbSize; } 378 UInt getBufferingRate() { return m_bufferingRate; } 379 Int updateCpbState(Int actualBits); 380 Void initHrdParam(const TComHRD* pcHrd, Int iFrameRate, Double fInitialCpbFullness); 381 #endif 382 371 383 private: 372 384 TEncRCSeq* m_encRCSeq; … … 375 387 list<TEncRCPic*> m_listRCPictures; 376 388 Int m_RCQP; 389 #if U0132_TARGET_BITS_SATURATION 390 Bool m_CpbSaturationEnabled; // Enable target bits saturation to avoid CPB overflow and underflow 391 Int m_cpbState; // CPB State 392 UInt m_cpbSize; // CPB size 393 UInt m_bufferingRate; // Buffering rate 394 #endif 395 377 396 #if KWU_RC_MADPRED_E0227 378 397 Int m_LayerID; -
TabularUnified trunk/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp ¶
r1321 r1386 908 908 m_signLineBuf1 = NULL; 909 909 } 910 m_signLineBuf1 = new Char[m_lineBufWidth+1];910 m_signLineBuf1 = new SChar[m_lineBufWidth+1]; 911 911 912 912 if (m_signLineBuf2) … … 915 915 m_signLineBuf2 = NULL; 916 916 } 917 m_signLineBuf2 = new Char[m_lineBufWidth+1];917 m_signLineBuf2 = new SChar[m_lineBufWidth+1]; 918 918 } 919 919 920 920 Int x,y, startX, startY, endX, endY, edgeType, firstLineStartX, firstLineEndX; 921 Char signLeft, signRight, signDown;921 SChar signLeft, signRight, signDown; 922 922 Int64 *diff, *count; 923 923 Pel *srcLine, *orgLine; … … 949 949 for (y=0; y<endY; y++) 950 950 { 951 signLeft = ( Char)sgn(srcLine[startX] - srcLine[startX-1]);951 signLeft = (SChar)sgn(srcLine[startX] - srcLine[startX-1]); 952 952 for (x=startX; x<endX; x++) 953 953 { 954 signRight = ( Char)sgn(srcLine[x] - srcLine[x+1]);954 signRight = (SChar)sgn(srcLine[x] - srcLine[x+1]); 955 955 edgeType = signRight + signLeft; 956 956 signLeft = -signRight; … … 971 971 for(y=0; y<skipLinesB[typeIdx]; y++) 972 972 { 973 signLeft = ( Char)sgn(srcLine[startX] - srcLine[startX-1]);973 signLeft = (SChar)sgn(srcLine[startX] - srcLine[startX-1]); 974 974 for (x=startX; x<endX; x++) 975 975 { 976 signRight = ( Char)sgn(srcLine[x] - srcLine[x+1]);976 signRight = (SChar)sgn(srcLine[x] - srcLine[x+1]); 977 977 edgeType = signRight + signLeft; 978 978 signLeft = -signRight; … … 992 992 diff +=2; 993 993 count+=2; 994 Char *signUpLine = m_signLineBuf1;994 SChar *signUpLine = m_signLineBuf1; 995 995 996 996 startX = (!isCalculatePreDeblockSamples) ? 0 … … 1011 1011 for (x=startX; x<endX; x++) 1012 1012 { 1013 signUpLine[x] = ( Char)sgn(srcLine[x] - srcLineAbove[x]);1013 signUpLine[x] = (SChar)sgn(srcLine[x] - srcLineAbove[x]); 1014 1014 } 1015 1015 … … 1021 1021 for (x=startX; x<endX; x++) 1022 1022 { 1023 signDown = ( Char)sgn(srcLine[x] - srcLineBelow[x]);1023 signDown = (SChar)sgn(srcLine[x] - srcLineBelow[x]); 1024 1024 edgeType = signDown + signUpLine[x]; 1025 1025 signUpLine[x]= -signDown; … … 1061 1061 diff +=2; 1062 1062 count+=2; 1063 Char *signUpLine, *signDownLine, *signTmpLine;1063 SChar *signUpLine, *signDownLine, *signTmpLine; 1064 1064 1065 1065 signUpLine = m_signLineBuf1; … … 1079 1079 for (x=startX; x<endX+1; x++) 1080 1080 { 1081 signUpLine[x] = ( Char)sgn(srcLineBelow[x] - srcLine[x-1]);1081 signUpLine[x] = (SChar)sgn(srcLineBelow[x] - srcLine[x-1]); 1082 1082 } 1083 1083 … … 1103 1103 for (x=startX; x<endX; x++) 1104 1104 { 1105 signDown = ( Char)sgn(srcLine[x] - srcLineBelow[x+1]);1105 signDown = (SChar)sgn(srcLine[x] - srcLineBelow[x+1]); 1106 1106 edgeType = signDown + signUpLine[x]; 1107 1107 diff [edgeType] += (orgLine[x] - srcLine[x]); … … 1110 1110 signDownLine[x+1] = -signDown; 1111 1111 } 1112 signDownLine[startX] = ( Char)sgn(srcLineBelow[startX] - srcLine[startX-1]);1112 signDownLine[startX] = (SChar)sgn(srcLineBelow[startX] - srcLine[startX-1]); 1113 1113 1114 1114 signTmpLine = signUpLine; … … 1148 1148 diff +=2; 1149 1149 count+=2; 1150 Char *signUpLine = m_signLineBuf1+1;1150 SChar *signUpLine = m_signLineBuf1+1; 1151 1151 1152 1152 startX = (!isCalculatePreDeblockSamples) ? (isLeftAvail ? 0 : 1) … … 1162 1162 for (x=startX-1; x<endX; x++) 1163 1163 { 1164 signUpLine[x] = ( Char)sgn(srcLineBelow[x] - srcLine[x+1]);1164 signUpLine[x] = (SChar)sgn(srcLineBelow[x] - srcLine[x+1]); 1165 1165 } 1166 1166 … … 1191 1191 for(x=startX; x<endX; x++) 1192 1192 { 1193 signDown = ( Char)sgn(srcLine[x] - srcLineBelow[x-1]);1193 signDown = (SChar)sgn(srcLine[x] - srcLineBelow[x-1]); 1194 1194 edgeType = signDown + signUpLine[x]; 1195 1195 … … 1199 1199 signUpLine[x-1] = -signDown; 1200 1200 } 1201 signUpLine[endX-1] = ( Char)sgn(srcLineBelow[endX-1] - srcLine[endX]);1201 signUpLine[endX-1] = (SChar)sgn(srcLineBelow[endX-1] - srcLine[endX]); 1202 1202 srcLine += srcStride; 1203 1203 orgLine += orgStride; -
TabularUnified trunk/source/Lib/TLibEncoder/TEncSbac.cpp ¶
r1313 r1386 550 550 551 551 xWriteUnaryMaxSymbol(iSymbol, m_cMVPIdxSCModel.get(0), 1, iNum-1); 552 #if H_MV_ENC_DEC_TRAC552 #if NH_MV_ENC_DEC_TRAC 553 553 #if ENC_DEC_TRACE 554 554 if ( eRefList == REF_PIC_LIST_0 ) … … 606 606 { 607 607 m_pcBinIf->encodeBin( eSize == SIZE_2Nx2N? 1 : 0, m_cCUPartSizeSCModel.get( 0, 0, 0 ) ); 608 #if H_MV_ENC_DEC_TRAC608 #if NH_MV_ENC_DEC_TRAC 609 609 DTRACE_CU("part_mode", eSize == SIZE_2Nx2N? 1 : 0) 610 610 #endif … … 613 613 return; 614 614 } 615 #if H_MV_ENC_DEC_TRAC615 #if NH_MV_ENC_DEC_TRAC 616 616 DTRACE_CU("part_mode", eSize ) 617 617 #endif … … 781 781 // get context function is here 782 782 m_pcBinIf->encodeBin( pcCU->isIntra( uiAbsPartIdx ) ? 1 : 0, m_cCUPredModeSCModel.get( 0, 0, 0 ) ); 783 #if H_MV_ENC_DEC_TRAC783 #if NH_MV_ENC_DEC_TRAC 784 784 DTRACE_CU("pred_mode_flag", pcCU->isIntra( uiAbsPartIdx ) ? 1 : 0); 785 785 #endif … … 791 791 UInt uiSymbol = pcCU->getCUTransquantBypass(uiAbsPartIdx); 792 792 m_pcBinIf->encodeBin( uiSymbol, m_CUTransquantBypassFlagSCModel.get( 0, 0, 0 ) ); 793 #if H_MV_ENC_DEC_TRAC793 #if NH_MV_ENC_DEC_TRAC 794 794 DTRACE_CU("cu_transquant_bypass_flag", uiSymbol); 795 795 #endif … … 808 808 UInt uiCtxSkip = pcCU->getCtxSkipFlag( uiAbsPartIdx ) ; 809 809 m_pcBinIf->encodeBin( uiSymbol, m_cCUSkipFlagSCModel.get( 0, 0, uiCtxSkip ) ); 810 #if ! H_MV_ENC_DEC_TRAC810 #if !NH_MV_ENC_DEC_TRAC 811 811 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 812 812 DTRACE_CABAC_T( "\tSkipFlag" ); … … 831 831 m_pcBinIf->encodeBin( uiSymbol, *m_cCUMergeFlagExtSCModel.get( 0 ) ); 832 832 833 #if H_MV_ENC_DEC_TRAC833 #if NH_MV_ENC_DEC_TRAC 834 834 DTRACE_PU("merge_flag", uiSymbol); 835 835 #else … … 872 872 } 873 873 } 874 #if H_MV_ENC_DEC_TRAC874 #if NH_MV_ENC_DEC_TRAC 875 875 DTRACE_PU("merge_idx", uiUnaryIdx); 876 876 #endif 877 877 } 878 #if ! H_MV_ENC_DEC_TRAC878 #if !NH_MV_ENC_DEC_TRAC 879 879 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 880 880 DTRACE_CABAC_T( "\tparseMergeIndex()" ); … … 899 899 m_pcBinIf->encodeBin( ( iW == iMaxW ) ? 1 : 0, m_cCUPUARPWSCModel.get( 0, 0, 2 ) ); 900 900 } 901 #if H_MV_ENC_DEC_TRAC901 #if NH_MV_ENC_DEC_TRAC 902 902 DTRACE_CU("iv_res_pred_weight_idx", iW); 903 903 #endif … … 916 916 UInt uiSymbol = pcCU->getICFlag( uiAbsPartIdx ) ? 1 : 0; 917 917 m_pcBinIf->encodeBin( uiSymbol, m_cCUICFlagSCModel.get( 0, 0, 0 ) ); 918 #if ! H_MV_ENC_DEC_TRAC918 #if !NH_MV_ENC_DEC_TRAC 919 919 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 920 920 DTRACE_CABAC_T( "\tICFlag" ); … … 971 971 972 972 m_pcBinIf->encodeBin( uiCurrSplitFlag, m_cCUSplitFlagSCModel.get( 0, 0, uiCtx ) ); 973 #if ! H_MV_ENC_DEC_TRAC973 #if !NH_MV_ENC_DEC_TRAC 974 974 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 975 975 DTRACE_CABAC_T( "\tSplitFlag\n" ) … … 983 983 { 984 984 m_pcBinIf->encodeBin( uiSymbol, m_cCUTransSubdivFlagSCModel.get( 0, 0, uiCtx ) ); 985 #if ! H_MV_ENC_DEC_TRAC985 #if !NH_MV_ENC_DEC_TRAC 986 986 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 987 987 DTRACE_CABAC_T( "\tparseTransformSubdivFlag()" ) … … 1027 1027 } 1028 1028 m_pcBinIf->encodeBin((predIdx[j] != -1)? 1 : 0, m_cCUIntraPredSCModel.get( 0, 0, 0 ) ); 1029 #if H_MV_ENC_DEC_TRAC1029 #if NH_MV_ENC_DEC_TRAC 1030 1030 DTRACE_CU("prev_intra_luma_pred_flag", (predIdx[j] != -1)? 1 : 0); 1031 1031 #endif … … 1048 1048 m_pcBinIf->encodeBinEP( predIdx[j]-1 ); 1049 1049 } 1050 #if H_MV_ENC_DEC_TRAC1050 #if NH_MV_ENC_DEC_TRAC 1051 1051 DTRACE_CU("mpm_idx", predIdx[j] ); 1052 1052 #endif … … 1071 1071 } 1072 1072 m_pcBinIf->encodeBinsEP( dir[j], 5 ); 1073 #if H_MV_ENC_DEC_TRAC1073 #if NH_MV_ENC_DEC_TRAC 1074 1074 DTRACE_CU("rem_intra_luma_pred_mode", dir[j] ); 1075 1075 #endif … … 1089 1089 { 1090 1090 m_pcBinIf->encodeBin( 0, m_cCUChromaPredSCModel.get( 0, 0, 0 ) ); 1091 #if H_MV_ENC_DEC_TRAC1091 #if NH_MV_ENC_DEC_TRAC 1092 1092 DTRACE_CU("intra_chroma_pred_mode", 0 ); 1093 1093 #endif … … 1110 1110 1111 1111 m_pcBinIf->encodeBinsEP( uiIntraDirChroma, 2 ); 1112 #if H_MV_ENC_DEC_TRAC1112 #if NH_MV_ENC_DEC_TRAC 1113 1113 DTRACE_CU("intra_chroma_pred_mode", uiIntraDirChroma ); 1114 1114 #endif … … 1134 1134 m_pcBinIf->encodeBin( uiInterDir, *( pCtx + 4 ) ); 1135 1135 } 1136 #if H_MV_ENC_DEC_TRAC1136 #if NH_MV_ENC_DEC_TRAC 1137 1137 DTRACE_PU("inter_pred_idc", uiInterDir ); 1138 1138 #endif … … 1169 1169 } 1170 1170 } 1171 #if H_MV_ENC_DEC_TRAC1171 #if NH_MV_ENC_DEC_TRAC 1172 1172 #if ENC_DEC_TRACE 1173 1173 iRefFrame = pcCU->getCUMvField( eRefList )->getRefIdx( uiAbsPartIdx ); … … 1366 1366 1367 1367 m_pcBinIf->encodeBin(uiCbf, m_cCUQtCbfSCModel.get(0, contextSet, uiCtx)); 1368 #if ! H_MV_ENC_DEC_TRAC1368 #if !NH_MV_ENC_DEC_TRAC 1369 1369 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1370 1370 DTRACE_CABAC_T( "\tparseQtCbf()" ) … … 1400 1400 const UInt uiCbf = pcCU->getCbf( absPartIdx, compID, lowestTUDepth ); 1401 1401 m_pcBinIf->encodeBin( uiCbf , m_cCUQtCbfSCModel.get( 0, contextSet, uiCtx ) ); 1402 #if ! H_MV_ENC_DEC_TRAC1402 #if !NH_MV_ENC_DEC_TRAC 1403 1403 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1404 1404 DTRACE_CABAC_T( "\tparseQtCbf()" ) … … 1448 1448 UInt useTransformSkip = pcCU->getTransformSkip( uiAbsPartIdx,component); 1449 1449 m_pcBinIf->encodeBin( useTransformSkip, m_cTransformSkipSCModel.get( 0, toChannelType(component), 0 ) ); 1450 #if ! H_MV_ENC_DEC_TRAC1450 #if !NH_MV_ENC_DEC_TRAC 1451 1451 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1452 1452 DTRACE_CABAC_T("\tparseTransformSkip()"); … … 1476 1476 1477 1477 m_pcBinIf->encodeBinTrm (uiIPCM); 1478 #if H_MV_ENC_DEC_TRAC1478 #if NH_MV_ENC_DEC_TRAC 1479 1479 DTRACE_CU("pcm_flag", uiIPCM) 1480 1480 #endif … … 1512 1512 UInt uiCtx = 0; 1513 1513 m_pcBinIf->encodeBin( uiCbf , m_cCUQtRootCbfSCModel.get( 0, 0, uiCtx ) ); 1514 #if ! H_MV_ENC_DEC_TRAC1514 #if !NH_MV_ENC_DEC_TRAC 1515 1515 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1516 1516 DTRACE_CABAC_T( "\tparseQtRootCbf()" ) … … 1629 1629 const UInt uiHeight=tuRect.height; 1630 1630 const TComSPS &sps=*(pcCU->getSlice()->getSPS()); 1631 #if ! H_MV_ENC_DEC_TRAC1631 #if !NH_MV_ENC_DEC_TRAC 1632 1632 1633 1633 DTRACE_CABAC_VL( g_nSymbolCounter++ ) … … 2526 2526 Void TEncSbac::xCodeDeltaDC( Pel valDeltaDC, UInt uiNumSeg ) 2527 2527 { 2528 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC2528 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 2529 2529 DTRACE_CU("delta_dc", valDeltaDC); 2530 2530 #endif … … 2618 2618 { 2619 2619 UInt uiSymbol = pcCU->getSDCFlag( uiAbsPartIdx ) ? 1 : 0; 2620 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC2620 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 2621 2621 DTRACE_CU("dc_only_flag", uiSymbol) 2622 2622 #endif -
TabularUnified trunk/source/Lib/TLibEncoder/TEncSearch.cpp ¶
r1321 r1386 74 74 }; 75 75 76 static const UInt s_auiDFilter[9] =77 {78 0, 1, 0,79 2, 3, 2,80 0, 1, 081 };82 83 76 static Void offsetSubTUCBFs(TComTU &rTu, const ComponentID compID) 84 77 { … … 120 113 , m_iSearchRange (0) 121 114 , m_bipredSearchRange (0) 122 , m_ iFastSearch (0)115 , m_motionEstimationSearchMethod (MESEARCH_FULL) 123 116 , m_pppcRDSbacCoder (NULL) 124 117 , m_pcRDGoOnSbacCoder (NULL) 125 118 , m_pTempPel (NULL) 126 , m_puiDFilter (NULL)127 119 , m_isInitialized (false) 128 120 { … … 130 122 { 131 123 m_ppcQTTempCoeff[ch] = NULL; 132 m_pcQTTempCoeff[ch] = NULL;133 124 #if ADAPTIVE_QP_SELECTION 134 125 m_ppcQTTempArlCoeff[ch] = NULL; 135 m_pcQTTempArlCoeff[ch] = NULL;136 126 #endif 137 127 m_puhQTTempCbf[ch] = NULL; … … 181 171 } 182 172 delete[] m_ppcQTTempCoeff[ch]; 183 delete[] m_pcQTTempCoeff[ch];184 173 delete[] m_puhQTTempCbf[ch]; 185 174 #if ADAPTIVE_QP_SELECTION 186 175 delete[] m_ppcQTTempArlCoeff[ch]; 187 delete[] m_pcQTTempArlCoeff[ch];188 176 #endif 189 177 } … … 229 217 Int iSearchRange, 230 218 Int bipredSearchRange, 231 Int iFastSearch,219 MESearchMethod motionEstimationSearchMethod, 232 220 const UInt maxCUWidth, 233 221 const UInt maxCUHeight, … … 244 232 m_iSearchRange = iSearchRange; 245 233 m_bipredSearchRange = bipredSearchRange; 246 m_ iFastSearch = iFastSearch;234 m_motionEstimationSearchMethod = motionEstimationSearchMethod; 247 235 m_pcEntropyCoder = pcEntropyCoder; 248 236 m_pcRdCost = pcRdCost; … … 258 246 } 259 247 } 260 261 m_puiDFilter = s_auiDFilter + 4;262 248 263 249 // initialize motion cost … … 289 275 const UInt csy=::getComponentScaleY(ComponentID(ch), cform); 290 276 m_ppcQTTempCoeff[ch] = new TCoeff* [uiNumLayersToAllocate]; 291 m_pcQTTempCoeff[ch] = new TCoeff [(maxCUWidth*maxCUHeight)>>(csx+csy) ];292 277 #if ADAPTIVE_QP_SELECTION 293 278 m_ppcQTTempArlCoeff[ch] = new TCoeff*[uiNumLayersToAllocate]; 294 m_pcQTTempArlCoeff[ch] = new TCoeff [(maxCUWidth*maxCUHeight)>>(csx+csy) ];295 279 #endif 296 280 m_puhQTTempCbf[ch] = new UChar [uiNumPartitions]; … … 304 288 } 305 289 306 m_phQTTempCrossComponentPredictionAlpha[ch] = new Char [uiNumPartitions];290 m_phQTTempCrossComponentPredictionAlpha[ch] = new SChar [uiNumPartitions]; 307 291 m_pSharedPredTransformSkip[ch] = new Pel [MAX_CU_SIZE*MAX_CU_SIZE]; 308 292 m_pcQTTempTUCoeff[ch] = new TCoeff[MAX_CU_SIZE*MAX_CU_SIZE]; … … 323 307 } 324 308 325 #define TZ_SEARCH_CONFIGURATION \ 326 const Int iRaster = 5; /* TZ soll von aussen ?ergeben werden */ \ 327 const Bool bTestOtherPredictedMV = 0; \ 328 const Bool bTestZeroVector = 1; \ 329 const Bool bTestZeroVectorStart = 0; \ 330 const Bool bTestZeroVectorStop = 0; \ 331 const Bool bFirstSearchDiamond = 1; /* 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch */ \ 332 const Bool bFirstSearchStop = m_pcEncCfg->getFastMEAssumingSmootherMVEnabled(); \ 333 const UInt uiFirstSearchRounds = 3; /* first search stop X rounds after best match (must be >=1) */ \ 334 const Bool bEnableRasterSearch = 1; \ 335 const Bool bAlwaysRasterSearch = 0; /* ===== 1: BETTER but factor 2 slower ===== */ \ 336 const Bool bRasterRefinementEnable = 0; /* enable either raster refinement or star refinement */ \ 337 const Bool bRasterRefinementDiamond = 0; /* 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch */ \ 338 const Bool bStarRefinementEnable = 1; /* enable either star refinement or raster refinement */ \ 339 const Bool bStarRefinementDiamond = 1; /* 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch */ \ 340 const Bool bStarRefinementStop = 0; \ 341 const UInt uiStarRefinementRounds = 2; /* star refinement stop X rounds after best match (must be >=1) */ \ 342 343 344 #define SEL_SEARCH_CONFIGURATION \ 345 const Bool bTestOtherPredictedMV = 1; \ 346 const Bool bTestZeroVector = 1; \ 347 const Bool bEnableRasterSearch = 1; \ 348 const Bool bAlwaysRasterSearch = 0; /* ===== 1: BETTER but factor 15x slower ===== */ \ 349 const Bool bStarRefinementEnable = 1; /* enable either star refinement or raster refinement */ \ 350 const Bool bStarRefinementDiamond = 1; /* 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch */ \ 351 const Bool bStarRefinementStop = 0; \ 352 const UInt uiStarRefinementRounds = 2; /* star refinement stop X rounds after best match (must be >=1) */ \ 353 const UInt uiSearchRange = m_iSearchRange; \ 354 const Int uiSearchRangeInitial = m_iSearchRange >> 2; \ 355 const Int uiSearchStep = 4; \ 356 const Int iMVDistThresh = 8; \ 357 358 359 360 __inline Void TEncSearch::xTZSearchHelp( TComPattern* pcPatternKey, IntTZSearchStruct& rcStruct, const Int iSearchX, const Int iSearchY, const UChar ucPointNr, const UInt uiDistance ) 309 310 311 312 __inline Void TEncSearch::xTZSearchHelp( const TComPattern* const pcPatternKey, IntTZSearchStruct& rcStruct, const Int iSearchX, const Int iSearchY, const UChar ucPointNr, const UInt uiDistance ) 361 313 { 362 314 Distortion uiSad = 0; 363 315 364 Pel* piRefSrch; 365 366 piRefSrch = rcStruct.piRefY + iSearchY * rcStruct.iYStride + iSearchX; 316 const Pel* const piRefSrch = rcStruct.piRefY + iSearchY * rcStruct.iYStride + iSearchX; 317 367 318 #if NH_3D_IC 368 319 m_cDistParam.bUseIC = pcPatternKey->getICFlag(); … … 374 325 m_pcRdCost->setDistParam( pcPatternKey, piRefSrch, rcStruct.iYStride, m_cDistParam ); 375 326 376 if(m_pcEncCfg->getFastSearch() != SELECTIVE)377 {378 // fast encoder decision: use subsampled SAD when rows > 8 for integer ME379 if ( m_pcEncCfg->getUseFastEnc() )380 {381 if ( m_cDistParam.iRows > 8 )382 {383 m_cDistParam.iSubShift = 1;384 }385 }386 }387 388 327 setDistParamComp(COMPONENT_Y); 389 328 390 329 // distortion 391 330 m_cDistParam.bitDepth = pcPatternKey->getBitDepthY(); 392 if(m_pcEncCfg->getFastSearch() == SELECTIVE) 331 m_cDistParam.m_maximumDistortionForEarlyExit = rcStruct.uiBestSad; 332 333 if((m_pcEncCfg->getRestrictMESampling() == false) && m_pcEncCfg->getMotionEstimationSearchMethod() == MESEARCH_SELECTIVE) 393 334 { 394 335 Int isubShift = 0; 395 336 // motion cost 396 Distortion uiBitCost = m_pcRdCost->getCost( iSearchX, iSearchY ); 397 337 Distortion uiBitCost = m_pcRdCost->getCostOfVectorWithPredictor( iSearchX, iSearchY ); 338 339 // Skip search if bit cost is already larger than best SAD 340 if (uiBitCost < rcStruct.uiBestSad) 341 { 398 342 if ( m_cDistParam.iRows > 32 ) 399 343 { … … 443 387 rcStruct.uiBestRound = 0; 444 388 rcStruct.ucPointNr = ucPointNr; 389 m_cDistParam.m_maximumDistortionForEarlyExit = uiSad; 390 } 445 391 } 446 392 } … … 449 395 else 450 396 { 397 // fast encoder decision: use subsampled SAD when rows > 8 for integer ME 398 if ( m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE1 || m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE3 ) 399 { 400 if ( m_cDistParam.iRows > 8 ) 401 { 402 m_cDistParam.iSubShift = 1; 403 } 404 } 405 451 406 uiSad = m_cDistParam.DistFunc( &m_cDistParam ); 452 407 408 // only add motion cost if uiSad is smaller than best. Otherwise pointless 409 // to add motion cost. 410 if( uiSad < rcStruct.uiBestSad ) 411 { 453 412 // motion cost 454 uiSad += m_pcRdCost->getCost( iSearchX, iSearchY );413 uiSad += m_pcRdCost->getCostOfVectorWithPredictor( iSearchX, iSearchY ); 455 414 456 415 if( uiSad < rcStruct.uiBestSad ) … … 462 421 rcStruct.uiBestRound = 0; 463 422 rcStruct.ucPointNr = ucPointNr; 423 m_cDistParam.m_maximumDistortionForEarlyExit = uiSad; 424 } 464 425 } 465 426 } … … 469 430 470 431 471 __inline Void TEncSearch::xTZ2PointSearch( TComPattern* pcPatternKey, IntTZSearchStruct& rcStruct, TComMv* pcMvSrchRngLT, TComMv*pcMvSrchRngRB )432 __inline Void TEncSearch::xTZ2PointSearch( const TComPattern* const pcPatternKey, IntTZSearchStruct& rcStruct, const TComMv* const pcMvSrchRngLT, const TComMv* const pcMvSrchRngRB ) 472 433 { 473 434 Int iSrchRngHorLeft = pcMvSrchRngLT->getHor(); … … 602 563 603 564 604 __inline Void TEncSearch::xTZ8PointSquareSearch( TComPattern* pcPatternKey, IntTZSearchStruct& rcStruct, TComMv* pcMvSrchRngLT, TComMv*pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist )565 __inline Void TEncSearch::xTZ8PointSquareSearch( const TComPattern* const pcPatternKey, IntTZSearchStruct& rcStruct, const TComMv* const pcMvSrchRngLT, const TComMv* const pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist ) 605 566 { 606 Int iSrchRngHorLeft = pcMvSrchRngLT->getHor();607 Int iSrchRngHorRight = pcMvSrchRngRB->getHor();608 Int iSrchRngVerTop = pcMvSrchRngLT->getVer();609 Int iSrchRngVerBottom = pcMvSrchRngRB->getVer();567 const Int iSrchRngHorLeft = pcMvSrchRngLT->getHor(); 568 const Int iSrchRngHorRight = pcMvSrchRngRB->getHor(); 569 const Int iSrchRngVerTop = pcMvSrchRngLT->getVer(); 570 const Int iSrchRngVerBottom = pcMvSrchRngRB->getVer(); 610 571 611 572 // 8 point search, // 1 2 3 … … 660 621 661 622 662 __inline Void TEncSearch::xTZ8PointDiamondSearch( TComPattern* pcPatternKey, IntTZSearchStruct& rcStruct, TComMv* pcMvSrchRngLT, TComMv* pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist ) 623 __inline Void TEncSearch::xTZ8PointDiamondSearch( const TComPattern*const pcPatternKey, 624 IntTZSearchStruct& rcStruct, 625 const TComMv*const pcMvSrchRngLT, 626 const TComMv*const pcMvSrchRngRB, 627 const Int iStartX, 628 const Int iStartY, 629 const Int iDist, 630 const Bool bCheckCornersAtDist1 ) 663 631 { 664 Int iSrchRngHorLeft = pcMvSrchRngLT->getHor();665 Int iSrchRngHorRight = pcMvSrchRngRB->getHor();666 Int iSrchRngVerTop = pcMvSrchRngLT->getVer();667 Int iSrchRngVerBottom = pcMvSrchRngRB->getVer();632 const Int iSrchRngHorLeft = pcMvSrchRngLT->getHor(); 633 const Int iSrchRngHorRight = pcMvSrchRngRB->getHor(); 634 const Int iSrchRngVerTop = pcMvSrchRngLT->getVer(); 635 const Int iSrchRngVerBottom = pcMvSrchRngRB->getVer(); 668 636 669 637 // 8 point search, // 1 2 3 … … 677 645 rcStruct.uiBestRound += 1; 678 646 679 if ( iDist == 1 ) // iDist == 1647 if ( iDist == 1 ) 680 648 { 681 649 if ( iTop >= iSrchRngVerTop ) // check top 682 650 { 651 if (bCheckCornersAtDist1) 652 { 653 if ( iLeft >= iSrchRngHorLeft) // check top-left 654 { 655 xTZSearchHelp( pcPatternKey, rcStruct, iLeft, iTop, 1, iDist ); 656 } 657 xTZSearchHelp( pcPatternKey, rcStruct, iStartX, iTop, 2, iDist ); 658 if ( iRight <= iSrchRngHorRight ) // check middle right 659 { 660 xTZSearchHelp( pcPatternKey, rcStruct, iRight, iTop, 3, iDist ); 661 } 662 } 663 else 664 { 683 665 xTZSearchHelp( pcPatternKey, rcStruct, iStartX, iTop, 2, iDist ); 684 666 } 667 } 685 668 if ( iLeft >= iSrchRngHorLeft ) // check middle left 686 669 { … … 693 676 if ( iBottom <= iSrchRngVerBottom ) // check bottom 694 677 { 678 if (bCheckCornersAtDist1) 679 { 680 if ( iLeft >= iSrchRngHorLeft) // check top-left 681 { 682 xTZSearchHelp( pcPatternKey, rcStruct, iLeft, iBottom, 6, iDist ); 683 } 684 xTZSearchHelp( pcPatternKey, rcStruct, iStartX, iBottom, 7, iDist ); 685 if ( iRight <= iSrchRngHorRight ) // check middle right 686 { 687 xTZSearchHelp( pcPatternKey, rcStruct, iRight, iBottom, 8, iDist ); 688 } 689 } 690 else 691 { 695 692 xTZSearchHelp( pcPatternKey, rcStruct, iStartX, iBottom, 7, iDist ); 696 693 } 697 694 } 698 else // if (iDist != 1) 695 } 696 else 699 697 { 700 698 if ( iDist <= 8 ) … … 770 768 for ( Int index = 1; index < 4; index++ ) 771 769 { 772 Int iPosYT = iTop + ((iDist>>2) * index);773 Int iPosYB = iBottom - ((iDist>>2) * index);774 Int iPosXL = iStartX - ((iDist>>2) * index);775 Int iPosXR = iStartX + ((iDist>>2) * index);770 const Int iPosYT = iTop + ((iDist>>2) * index); 771 const Int iPosYB = iBottom - ((iDist>>2) * index); 772 const Int iPosXL = iStartX - ((iDist>>2) * index); 773 const Int iPosXR = iStartX + ((iDist>>2) * index); 776 774 xTZSearchHelp( pcPatternKey, rcStruct, iPosXL, iPosYT, 0, iDist ); 777 775 xTZSearchHelp( pcPatternKey, rcStruct, iPosXR, iPosYT, 0, iDist ); … … 800 798 for ( Int index = 1; index < 4; index++ ) 801 799 { 802 Int iPosYT = iTop + ((iDist>>2) * index);803 Int iPosYB = iBottom - ((iDist>>2) * index);804 Int iPosXL = iStartX - ((iDist>>2) * index);805 Int iPosXR = iStartX + ((iDist>>2) * index);800 const Int iPosYT = iTop + ((iDist>>2) * index); 801 const Int iPosYB = iBottom - ((iDist>>2) * index); 802 const Int iPosXL = iStartX - ((iDist>>2) * index); 803 const Int iPosXR = iStartX + ((iDist>>2) * index); 806 804 807 805 if ( iPosYT >= iSrchRngVerTop ) // check top … … 833 831 } 834 832 835 836 837 838 839 //<--840 841 833 Distortion TEncSearch::xPatternRefinement( TComPattern* pcPatternKey, 842 834 TComMv baseRefMv, … … 886 878 m_cDistParam.bitDepth = pcPatternKey->getBitDepthY(); 887 879 uiDist = m_cDistParam.DistFunc( &m_cDistParam ); 888 uiDist += m_pcRdCost->getCost ( cMvTest.getHor(), cMvTest.getVer() );880 uiDist += m_pcRdCost->getCostOfVectorWithPredictor( cMvTest.getHor(), cMvTest.getVer() ); 889 881 890 882 if ( uiDist < uiDistBest ) … … 892 884 uiDistBest = uiDist; 893 885 uiDirecBest = i; 886 m_cDistParam.m_maximumDistortionForEarlyExit = uiDist; 894 887 } 895 888 } … … 2410 2403 } 2411 2404 2412 Char2405 SChar 2413 2406 TEncSearch::xCalcCrossComponentPredictionAlpha( TComTU &rTu, 2414 2407 const ComponentID compID, … … 2427 2420 const Int diffBitDepth = pCU->getSlice()->getSPS()->getDifferentialLumaChromaBitDepth(); 2428 2421 2429 Char alpha = 0;2422 SChar alpha = 0; 2430 2423 Int SSxy = 0; 2431 2424 Int SSxx = 0; … … 2447 2440 { 2448 2441 Double dAlpha = SSxy / Double( SSxx ); 2449 alpha = Char(Clip3<Int>(-16, 16, (Int)(dAlpha * 16)));2450 2451 static const Char alphaQuant[17] = {0, 1, 1, 2, 2, 2, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8};2442 alpha = SChar(Clip3<Int>(-16, 16, (Int)(dAlpha * 16))); 2443 2444 static const SChar alphaQuant[17] = {0, 1, 1, 2, 2, 2, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8}; 2452 2445 2453 2446 alpha = (alpha < 0) ? -alphaQuant[Int(-alpha)] : alphaQuant[Int(alpha)]; … … 2540 2533 Double singleCostTmp = 0; 2541 2534 UInt singleCbfCTmp = 0; 2542 CharbestCrossCPredictionAlpha = 0;2535 SChar bestCrossCPredictionAlpha = 0; 2543 2536 Int bestTransformSkipMode = 0; 2544 2537 … … 3689 3682 ::memcpy( m_puhQTTempCbf[compID], pcCU->getCbf( compID )+uiPartOffset, uiQPartNum * sizeof( UChar ) ); 3690 3683 ::memcpy( m_puhQTTempTransformSkipFlag[compID], pcCU->getTransformSkip( compID )+uiPartOffset, uiQPartNum * sizeof( UChar ) ); 3691 ::memcpy( m_phQTTempCrossComponentPredictionAlpha[compID], pcCU->getCrossComponentPredictionAlpha(compID)+uiPartOffset, uiQPartNum * sizeof( Char ) );3684 ::memcpy( m_phQTTempCrossComponentPredictionAlpha[compID], pcCU->getCrossComponentPredictionAlpha(compID)+uiPartOffset, uiQPartNum * sizeof( SChar ) ); 3692 3685 } 3693 3686 } … … 3702 3695 ::memcpy( pcCU->getCbf( compID )+uiPartOffset, m_puhQTTempCbf[compID], uiQPartNum * sizeof( UChar ) ); 3703 3696 ::memcpy( pcCU->getTransformSkip( compID )+uiPartOffset, m_puhQTTempTransformSkipFlag[compID], uiQPartNum * sizeof( UChar ) ); 3704 ::memcpy( pcCU->getCrossComponentPredictionAlpha(compID)+uiPartOffset, m_phQTTempCrossComponentPredictionAlpha[compID], uiQPartNum * sizeof( Char ) );3697 ::memcpy( pcCU->getCrossComponentPredictionAlpha(compID)+uiPartOffset, m_phQTTempCrossComponentPredictionAlpha[compID], uiQPartNum * sizeof( SChar ) ); 3705 3698 } 3706 3699 } … … 3812 3805 { 3813 3806 UInt uiDepth = pcCU->getDepth(0); 3814 const UIntuiDistortion = 0;3807 const Distortion uiDistortion = 0; 3815 3808 UInt uiBits; 3816 3809 … … 4325 4318 /*correct the bit-rate part of the current ref*/ 4326 4319 m_pcRdCost->setPredictor ( cMvPred[iRefList][iRefIdxTemp] ); 4327 uiBitsTemp += m_pcRdCost->getBits ( cMvTemp[1][iRefIdxTemp].getHor(), cMvTemp[1][iRefIdxTemp].getVer() );4320 uiBitsTemp += m_pcRdCost->getBitsOfVectorWithPredictor( cMvTemp[1][iRefIdxTemp].getHor(), cMvTemp[1][iRefIdxTemp].getVer() ); 4328 4321 /*calculate the correct cost*/ 4329 4322 uiCostTemp += m_pcRdCost->getCost( uiBitsTemp ); … … 4374 4367 } 4375 4368 4376 // Bi- directional prediction4369 // Bi-predictive Motion estimation 4377 4370 if ( (pcCU->getSlice()->isInterB()) && (pcCU->isBipredRestriction(iPartIdx) == false) ) 4378 4371 { … … 4429 4422 4430 4423 // fast encoder setting: only one iteration 4431 if ( m_pcEncCfg->get UseFastEnc() || pcCU->getSlice()->getMvdL1ZeroFlag())4424 if ( m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE1 || m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE2 || pcCU->getSlice()->getMvdL1ZeroFlag() ) 4432 4425 { 4433 4426 iNumIter = 1; … … 4438 4431 Int iRefList = iIter % 2; 4439 4432 4440 if ( m_pcEncCfg->get UseFastEnc())4433 if ( m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE1 || m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE2 ) 4441 4434 { 4442 4435 if( uiCost[0] <= uiCost[1] ) … … 4629 4622 TComMvField cMEMvField[2]; 4630 4623 4631 m_pcRdCost-> getMotionCost( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) );4624 m_pcRdCost->selectMotionLambda( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) ); 4632 4625 4633 4626 #if AMP_MRG … … 4652 4645 // save ME result. 4653 4646 uiMEInterDir = pcCU->getInterDir( uiPartAddr ); 4654 pcCU->getMvField( pcCU, uiPartAddr, REF_PIC_LIST_0, cMEMvField[0] );4655 pcCU->getMvField( pcCU, uiPartAddr, REF_PIC_LIST_1, cMEMvField[1] );4647 TComDataCU::getMvField( pcCU, uiPartAddr, REF_PIC_LIST_0, cMEMvField[0] ); 4648 TComDataCU::getMvField( pcCU, uiPartAddr, REF_PIC_LIST_1, cMEMvField[1] ); 4656 4649 4657 4650 // find Merge result … … 5040 5033 } 5041 5034 5042 m_pcRdCost-> getMotionCost( true, 0, pcCU->getCUTransquantBypass(0) );5035 m_pcRdCost->selectMotionLambda( true, 0, pcCU->getCUTransquantBypass(0) ); 5043 5036 m_pcRdCost->setCostScale ( 0 ); 5044 5037 … … 5046 5039 5047 5040 m_pcRdCost->setPredictor( rcMvPred ); 5048 Int iOrgMvBits = m_pcRdCost->getBits (cMv.getHor(), cMv.getVer());5041 Int iOrgMvBits = m_pcRdCost->getBitsOfVectorWithPredictor(cMv.getHor(), cMv.getVer()); 5049 5042 iOrgMvBits += m_auiMVPIdxCost[riMVPIdx][AMVP_MAX_NUM_CANDS]; 5050 5043 Int iBestMvBits = iOrgMvBits; … … 5059 5052 m_pcRdCost->setPredictor( pcAMVPInfo->m_acMvCand[iMVPIdx] ); 5060 5053 5061 Int iMvBits = m_pcRdCost->getBits (cMv.getHor(), cMv.getVer());5054 Int iMvBits = m_pcRdCost->getBitsOfVectorWithPredictor(cMv.getHor(), cMv.getVer()); 5062 5055 iMvBits += m_auiMVPIdxCost[iMVPIdx][AMVP_MAX_NUM_CANDS]; 5063 5056 … … 5134 5127 5135 5128 uiCost = m_pcRdCost->getDistPart( pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA), pcTemplateCand->getAddr(COMPONENT_Y, uiPartAddr), pcTemplateCand->getStride(COMPONENT_Y), pcOrgYuv->getAddr(COMPONENT_Y, uiPartAddr), pcOrgYuv->getStride(COMPONENT_Y), iSizeX, iSizeY, COMPONENT_Y, DF_SAD ); 5136 uiCost = (UInt) m_pcRdCost->calcRdCost( m_auiMVPIdxCost[iMVPIdx][iMVPNum], uiCost, false,DF_SAD );5129 uiCost = (UInt) m_pcRdCost->calcRdCost( m_auiMVPIdxCost[iMVPIdx][iMVPNum], uiCost, DF_SAD ); 5137 5130 return uiCost; 5138 5131 } … … 5176 5169 #endif 5177 5170 5178 if ( bBi ) 5171 if ( bBi ) // Bipredictive ME 5179 5172 { 5180 5173 TComYuv* pcYuvOther = &m_acYuvPred[1-(Int)eRefPicList]; … … 5187 5180 fWeight = 0.5; 5188 5181 } 5182 m_cDistParam.bIsBiPred = bBi; 5189 5183 5190 5184 // Search key pattern initialization … … 5212 5206 } 5213 5207 5214 m_pcRdCost-> getMotionCost( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) );5208 m_pcRdCost->selectMotionLambda( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) ); 5215 5209 5216 5210 m_pcRdCost->setPredictor ( *pcMvPred ); … … 5231 5225 setWpScalingDistParam( pcCU, iRefIdxPred, eRefPicList ); 5232 5226 // Do integer search 5233 if ( !m_iFastSearch|| bBi )5227 if ( (m_motionEstimationSearchMethod==MESEARCH_FULL) || bBi ) 5234 5228 { 5235 5229 xPatternSearch ( pcPatternKey, piRefY, iRefStride, &cMvSrchRngLT, &cMvSrchRngRB, rcMv, ruiCost ); … … 5250 5244 } 5251 5245 5252 m_pcRdCost-> getMotionCost( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) );5246 m_pcRdCost->selectMotionLambda( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) ); 5253 5247 #if NH_3D_INTEGER_MV_DEPTH 5254 5248 if( ! pcCU->getSlice()->getIsDepth() ) … … 5268 5262 #endif 5269 5263 5270 UInt uiMvBits = m_pcRdCost->getBits ( rcMv.getHor(), rcMv.getVer() );5264 UInt uiMvBits = m_pcRdCost->getBitsOfVectorWithPredictor( rcMv.getHor(), rcMv.getVer() ); 5271 5265 #if NH_3D_INTEGER_MV_DEPTH 5272 5266 if( pcCU->getSlice()->getIsDepth() ) … … 5285 5279 5286 5280 5287 Void TEncSearch::xSetSearchRange ( TComDataCU* pcCU, TComMv& cMvPred, Int iSrchRng, TComMv& rcMvSrchRngLT, TComMv& rcMvSrchRngRB ) 5281 Void TEncSearch::xSetSearchRange ( const TComDataCU* const pcCU, const TComMv& cMvPred, const Int iSrchRng, 5282 TComMv& rcMvSrchRngLT, TComMv& rcMvSrchRngRB ) 5288 5283 { 5289 5284 Int iMvShift = 2; … … 5317 5312 pcCU->clipMv ( rcMvSrchRngRB ); 5318 5313 5314 #if ME_ENABLE_ROUNDING_OF_MVS 5315 rcMvSrchRngLT.divideByPowerOf2(iMvShift); 5316 rcMvSrchRngRB.divideByPowerOf2(iMvShift); 5317 #else 5319 5318 rcMvSrchRngLT >>= iMvShift; 5320 5319 rcMvSrchRngRB >>= iMvShift; 5320 #endif 5321 5321 } 5322 5322 5323 5323 5324 5325 5326 Void TEncSearch::xPatternSearch( TComPattern* pcPatternKey, Pel* piRefY, Int iRefStride, TComMv* pcMvSrchRngLT, TComMv* pcMvSrchRngRB, TComMv& rcMv, Distortion& ruiSAD ) 5324 Void TEncSearch::xPatternSearch( const TComPattern* const pcPatternKey, 5325 const Pel* piRefY, 5326 const Int iRefStride, 5327 const TComMv* const pcMvSrchRngLT, 5328 const TComMv* const pcMvSrchRngRB, 5329 TComMv& rcMv, 5330 Distortion& ruiSAD ) 5327 5331 { 5328 5332 Int iSrchRngHorLeft = pcMvSrchRngLT->getHor(); … … 5336 5340 Int iBestY = 0; 5337 5341 5338 Pel* piRefSrch;5339 5340 5342 //-- jclee for using the SAD function pointer 5341 5343 m_pcRdCost->setDistParam( pcPatternKey, piRefY, iRefStride, m_cDistParam ); 5342 5344 5343 5345 // fast encoder decision: use subsampled SAD for integer ME 5344 if ( m_pcEncCfg->get UseFastEnc())5346 if ( m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE1 || m_pcEncCfg->getFastInterSearchMode()==FASTINTERSEARCH_MODE3 ) 5345 5347 { 5346 5348 if ( m_cDistParam.iRows > 8 ) … … 5356 5358 { 5357 5359 // find min. distortion position 5358 piRefSrch = piRefY + x; 5359 m_cDistParam.pCur = piRefSrch; 5360 m_cDistParam.pCur = piRefY + x; 5360 5361 5361 5362 setDistParamComp(COMPONENT_Y); … … 5373 5374 5374 5375 // motion cost 5375 uiSad += m_pcRdCost->getCost ( x, y );5376 uiSad += m_pcRdCost->getCostOfVectorWithPredictor( x, y ); 5376 5377 5377 5378 if ( uiSad < uiSadBest ) … … 5380 5381 iBestX = x; 5381 5382 iBestY = y; 5383 m_cDistParam.m_maximumDistortionForEarlyExit = uiSad; 5382 5384 } 5383 5385 } … … 5387 5389 rcMv.set( iBestX, iBestY ); 5388 5390 5389 ruiSAD = uiSadBest - m_pcRdCost->getCost ( iBestX, iBestY );5391 ruiSAD = uiSadBest - m_pcRdCost->getCostOfVectorWithPredictor( iBestX, iBestY ); 5390 5392 return; 5391 5393 } … … 5393 5395 5394 5396 5395 Void TEncSearch::xPatternSearchFast( TComDataCU*pcCU,5396 TComPattern*pcPatternKey,5397 Pel*piRefY,5398 IntiRefStride,5399 TComMv*pcMvSrchRngLT,5400 TComMv*pcMvSrchRngRB,5397 Void TEncSearch::xPatternSearchFast( const TComDataCU* const pcCU, 5398 const TComPattern* const pcPatternKey, 5399 const Pel* const piRefY, 5400 const Int iRefStride, 5401 const TComMv* const pcMvSrchRngLT, 5402 const TComMv* const pcMvSrchRngRB, 5401 5403 TComMv &rcMv, 5402 5404 Distortion &ruiSAD, 5403 const TComMv* pIntegerMv2Nx2NPred )5405 const TComMv* const pIntegerMv2Nx2NPred ) 5404 5406 { 5405 5407 assert (MD_LEFT < NUM_MV_PREDICTORS); … … 5410 5412 pcCU->getMvPredAboveRight ( m_acMvPredictors[MD_ABOVE_RIGHT] ); 5411 5413 5412 switch ( m_ iFastSearch)5413 { 5414 case 1:5415 xTZSearch( pcCU, pcPatternKey, piRefY, iRefStride, pcMvSrchRngLT, pcMvSrchRngRB, rcMv, ruiSAD, pIntegerMv2Nx2NPred );5414 switch ( m_motionEstimationSearchMethod ) 5415 { 5416 case MESEARCH_DIAMOND: 5417 xTZSearch( pcCU, pcPatternKey, piRefY, iRefStride, pcMvSrchRngLT, pcMvSrchRngRB, rcMv, ruiSAD, pIntegerMv2Nx2NPred, false ); 5416 5418 break; 5417 5419 5418 case 2:5420 case MESEARCH_SELECTIVE: 5419 5421 xTZSearchSelective( pcCU, pcPatternKey, piRefY, iRefStride, pcMvSrchRngLT, pcMvSrchRngRB, rcMv, ruiSAD, pIntegerMv2Nx2NPred ); 5420 5422 break; 5423 5424 case MESEARCH_DIAMOND_ENHANCED: 5425 xTZSearch( pcCU, pcPatternKey, piRefY, iRefStride, pcMvSrchRngLT, pcMvSrchRngRB, rcMv, ruiSAD, pIntegerMv2Nx2NPred, true ); 5426 break; 5427 5428 case MESEARCH_FULL: // shouldn't get here. 5421 5429 default: 5422 5430 break; … … 5427 5435 5428 5436 5429 Void TEncSearch::xTZSearch( TComDataCU*pcCU,5430 TComPattern*pcPatternKey,5431 Pel*piRefY,5432 IntiRefStride,5433 TComMv*pcMvSrchRngLT,5434 TComMv*pcMvSrchRngRB,5437 Void TEncSearch::xTZSearch( const TComDataCU* const pcCU, 5438 const TComPattern* const pcPatternKey, 5439 const Pel* const piRefY, 5440 const Int iRefStride, 5441 const TComMv* const pcMvSrchRngLT, 5442 const TComMv* const pcMvSrchRngRB, 5435 5443 TComMv &rcMv, 5436 5444 Distortion &ruiSAD, 5437 const TComMv* pIntegerMv2Nx2NPred ) 5445 const TComMv* const pIntegerMv2Nx2NPred, 5446 const Bool bExtendedSettings) 5438 5447 { 5439 Int iSrchRngHorLeft = pcMvSrchRngLT->getHor(); 5440 Int iSrchRngHorRight = pcMvSrchRngRB->getHor(); 5441 Int iSrchRngVerTop = pcMvSrchRngLT->getVer(); 5442 Int iSrchRngVerBottom = pcMvSrchRngRB->getVer(); 5443 5444 TZ_SEARCH_CONFIGURATION 5448 const Bool bUseAdaptiveRaster = bExtendedSettings; 5449 const Int iRaster = 5; 5450 const Bool bTestOtherPredictedMV = bExtendedSettings; 5451 const Bool bTestZeroVector = true; 5452 const Bool bTestZeroVectorStart = bExtendedSettings; 5453 const Bool bTestZeroVectorStop = false; 5454 const Bool bFirstSearchDiamond = true; // 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch 5455 const Bool bFirstCornersForDiamondDist1 = bExtendedSettings; 5456 const Bool bFirstSearchStop = m_pcEncCfg->getFastMEAssumingSmootherMVEnabled(); 5457 const UInt uiFirstSearchRounds = 3; // first search stop X rounds after best match (must be >=1) 5458 const Bool bEnableRasterSearch = true; 5459 const Bool bAlwaysRasterSearch = bExtendedSettings; // true: BETTER but factor 2 slower 5460 const Bool bRasterRefinementEnable = false; // enable either raster refinement or star refinement 5461 const Bool bRasterRefinementDiamond = false; // 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch 5462 const Bool bRasterRefinementCornersForDiamondDist1 = bExtendedSettings; 5463 const Bool bStarRefinementEnable = true; // enable either star refinement or raster refinement 5464 const Bool bStarRefinementDiamond = true; // 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch 5465 const Bool bStarRefinementCornersForDiamondDist1 = bExtendedSettings; 5466 const Bool bStarRefinementStop = false; 5467 const UInt uiStarRefinementRounds = 2; // star refinement stop X rounds after best match (must be >=1) 5468 const Bool bNewZeroNeighbourhoodTest = bExtendedSettings; 5445 5469 5446 5470 UInt uiSearchRange = m_iSearchRange; … … 5449 5473 if( ! pcCU->getSlice()->getIsDepth() ) 5450 5474 #endif 5475 #if ME_ENABLE_ROUNDING_OF_MVS 5476 rcMv.divideByPowerOf2(2); 5477 #else 5451 5478 rcMv >>= 2; 5479 #endif 5480 5452 5481 // init TZSearchStruct 5453 5482 IntTZSearchStruct cStruct; … … 5470 5499 { 5471 5500 #endif 5472 cMv >>= 2; 5501 #if ME_ENABLE_ROUNDING_OF_MVS 5502 cMv.divideByPowerOf2(2); 5503 #else 5504 cMv >>= 2; 5505 #endif 5506 5473 5507 #if NH_3D_INTEGER_MV_DEPTH 5474 5508 } 5475 5509 #endif 5476 5510 if (cMv != rcMv && (cMv.getHor() != cStruct.iBestX && cMv.getVer() != cStruct.iBestY)) 5511 { 5512 // only test cMV if not obviously previously tested. 5477 5513 xTZSearchHelp( pcPatternKey, cStruct, cMv.getHor(), cMv.getVer(), 0, 0 ); 5478 5514 } 5515 } 5479 5516 } 5480 5517 … … 5482 5519 if ( bTestZeroVector ) 5483 5520 { 5521 if ((rcMv.getHor() != 0 || rcMv.getVer() != 0) && 5522 (0 != cStruct.iBestX || 0 != cStruct.iBestY)) 5523 { 5524 // only test 0-vector if not obviously previously tested. 5484 5525 xTZSearchHelp( pcPatternKey, cStruct, 0, 0, 0, 0 ); 5485 5526 } 5527 } 5528 5529 Int iSrchRngHorLeft = pcMvSrchRngLT->getHor(); 5530 Int iSrchRngHorRight = pcMvSrchRngRB->getHor(); 5531 Int iSrchRngVerTop = pcMvSrchRngLT->getVer(); 5532 Int iSrchRngVerBottom = pcMvSrchRngRB->getVer(); 5486 5533 5487 5534 if (pIntegerMv2Nx2NPred != 0) … … 5490 5537 integerMv2Nx2NPred <<= 2; 5491 5538 pcCU->clipMv( integerMv2Nx2NPred ); 5539 #if ME_ENABLE_ROUNDING_OF_MVS 5540 integerMv2Nx2NPred.divideByPowerOf2(2); 5541 #else 5492 5542 integerMv2Nx2NPred >>= 2; 5543 #endif 5544 if ((rcMv != integerMv2Nx2NPred) && 5545 (integerMv2Nx2NPred.getHor() != cStruct.iBestX || integerMv2Nx2NPred.getVer() != cStruct.iBestY)) 5546 { 5547 // only test integerMv2Nx2NPred if not obviously previously tested. 5493 5548 xTZSearchHelp(pcPatternKey, cStruct, integerMv2Nx2NPred.getHor(), integerMv2Nx2NPred.getVer(), 0, 0); 5549 } 5494 5550 5495 5551 // reset search range … … 5511 5567 Int iStartY = cStruct.iBestY; 5512 5568 5513 // first search 5569 const Bool bBestCandidateZero = (cStruct.iBestX == 0) && (cStruct.iBestY == 0); 5570 5571 // first search around best position up to now. 5572 // The following works as a "subsampled/log" window search around the best candidate 5514 5573 for ( iDist = 1; iDist <= (Int)uiSearchRange; iDist*=2 ) 5515 5574 { 5516 5575 if ( bFirstSearchDiamond == 1 ) 5517 5576 { 5518 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist );5577 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist, bFirstCornersForDiamondDist1 ); 5519 5578 } 5520 5579 else … … 5529 5588 } 5530 5589 5590 if (!bNewZeroNeighbourhoodTest) 5591 { 5531 5592 // test whether zero Mv is a better start point than Median predictor 5532 5593 if ( bTestZeroVectorStart && ((cStruct.iBestX != 0) || (cStruct.iBestY != 0)) ) … … 5538 5599 for ( iDist = 1; iDist <= (Int)uiSearchRange; iDist*=2 ) 5539 5600 { 5540 xTZ8PointDiamondSearch( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, 0, 0, iDist);5601 xTZ8PointDiamondSearch( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, 0, 0, iDist, false ); 5541 5602 if ( bTestZeroVectorStop && (cStruct.uiBestRound > 0) ) // stop criterion 5603 { 5604 break; 5605 } 5606 } 5607 } 5608 } 5609 } 5610 else 5611 { 5612 // Test also zero neighbourhood but with half the range 5613 // It was reported that the original (above) search scheme using bTestZeroVectorStart did not 5614 // make sense since one would have already checked the zero candidate earlier 5615 // and thus the conditions for that test would have not been satisfied 5616 if (bTestZeroVectorStart == true && bBestCandidateZero != true) 5617 { 5618 for ( iDist = 1; iDist <= ((Int)uiSearchRange >> 1); iDist*=2 ) 5619 { 5620 xTZ8PointDiamondSearch( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, 0, 0, iDist, false ); 5621 if ( bTestZeroVectorStop && (cStruct.uiBestRound > 2) ) // stop criterion 5542 5622 { 5543 5623 break; … … 5555 5635 5556 5636 // raster search if distance is too big 5637 if (bUseAdaptiveRaster) 5638 { 5639 int iWindowSize = iRaster; 5640 Int iSrchRngRasterLeft = iSrchRngHorLeft; 5641 Int iSrchRngRasterRight = iSrchRngHorRight; 5642 Int iSrchRngRasterTop = iSrchRngVerTop; 5643 Int iSrchRngRasterBottom = iSrchRngVerBottom; 5644 5645 if (!(bEnableRasterSearch && ( ((Int)(cStruct.uiBestDistance) > iRaster)))) 5646 { 5647 iWindowSize ++; 5648 iSrchRngRasterLeft /= 2; 5649 iSrchRngRasterRight /= 2; 5650 iSrchRngRasterTop /= 2; 5651 iSrchRngRasterBottom /= 2; 5652 } 5653 cStruct.uiBestDistance = iWindowSize; 5654 for ( iStartY = iSrchRngRasterTop; iStartY <= iSrchRngRasterBottom; iStartY += iWindowSize ) 5655 { 5656 for ( iStartX = iSrchRngRasterLeft; iStartX <= iSrchRngRasterRight; iStartX += iWindowSize ) 5657 { 5658 xTZSearchHelp( pcPatternKey, cStruct, iStartX, iStartY, 0, iWindowSize ); 5659 } 5660 } 5661 } 5662 else 5663 { 5557 5664 if ( bEnableRasterSearch && ( ((Int)(cStruct.uiBestDistance) > iRaster) || bAlwaysRasterSearch ) ) 5558 5665 { … … 5565 5672 } 5566 5673 } 5674 } 5567 5675 } 5568 5676 … … 5579 5687 if ( bRasterRefinementDiamond == 1 ) 5580 5688 { 5581 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist );5689 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist, bRasterRefinementCornersForDiamondDist1 ); 5582 5690 } 5583 5691 else … … 5599 5707 } 5600 5708 5601 // star trefinement5709 // star refinement 5602 5710 if ( bStarRefinementEnable && cStruct.uiBestDistance > 0 ) 5603 5711 { … … 5612 5720 if ( bStarRefinementDiamond == 1 ) 5613 5721 { 5614 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist );5722 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist, bStarRefinementCornersForDiamondDist1 ); 5615 5723 } 5616 5724 else … … 5638 5746 // write out best match 5639 5747 rcMv.set( cStruct.iBestX, cStruct.iBestY ); 5640 ruiSAD = cStruct.uiBestSad - m_pcRdCost->getCost ( cStruct.iBestX, cStruct.iBestY );5748 ruiSAD = cStruct.uiBestSad - m_pcRdCost->getCostOfVectorWithPredictor( cStruct.iBestX, cStruct.iBestY ); 5641 5749 } 5642 5750 5643 5751 5644 Void TEncSearch::xTZSearchSelective( TComDataCU*pcCU,5645 TComPattern*pcPatternKey,5646 Pel*piRefY,5647 IntiRefStride,5648 TComMv*pcMvSrchRngLT,5649 TComMv*pcMvSrchRngRB,5752 Void TEncSearch::xTZSearchSelective( const TComDataCU* const pcCU, 5753 const TComPattern* const pcPatternKey, 5754 const Pel* const piRefY, 5755 const Int iRefStride, 5756 const TComMv* const pcMvSrchRngLT, 5757 const TComMv* const pcMvSrchRngRB, 5650 5758 TComMv &rcMv, 5651 5759 Distortion &ruiSAD, 5652 const TComMv* pIntegerMv2Nx2NPred )5760 const TComMv* const pIntegerMv2Nx2NPred ) 5653 5761 { 5654 SEL_SEARCH_CONFIGURATION 5762 const Bool bTestOtherPredictedMV = true; 5763 const Bool bTestZeroVector = true; 5764 const Bool bEnableRasterSearch = true; 5765 const Bool bAlwaysRasterSearch = false; // 1: BETTER but factor 15x slower 5766 const Bool bStarRefinementEnable = true; // enable either star refinement or raster refinement 5767 const Bool bStarRefinementDiamond = true; // 1 = xTZ8PointDiamondSearch 0 = xTZ8PointSquareSearch 5768 const Bool bStarRefinementStop = false; 5769 const UInt uiStarRefinementRounds = 2; // star refinement stop X rounds after best match (must be >=1) 5770 const UInt uiSearchRange = m_iSearchRange; 5771 const Int uiSearchRangeInitial = m_iSearchRange >> 2; 5772 const Int uiSearchStep = 4; 5773 const Int iMVDistThresh = 8; 5655 5774 5656 5775 Int iSrchRngHorLeft = pcMvSrchRngLT->getHor(); … … 5669 5788 5670 5789 pcCU->clipMv( rcMv ); 5790 #if ME_ENABLE_ROUNDING_OF_MVS 5791 rcMv.divideByPowerOf2(2); 5792 #else 5671 5793 rcMv >>= 2; 5794 #endif 5672 5795 // init TZSearchStruct 5673 5796 IntTZSearchStruct cStruct; … … 5689 5812 TComMv cMv = m_acMvPredictors[index]; 5690 5813 pcCU->clipMv( cMv ); 5814 #if ME_ENABLE_ROUNDING_OF_MVS 5815 cMv.divideByPowerOf2(2); 5816 #else 5691 5817 cMv >>= 2; 5818 #endif 5692 5819 xTZSearchHelp( pcPatternKey, cStruct, cMv.getHor(), cMv.getVer(), 0, 0 ); 5693 5820 } … … 5705 5832 integerMv2Nx2NPred <<= 2; 5706 5833 pcCU->clipMv( integerMv2Nx2NPred ); 5834 #if ME_ENABLE_ROUNDING_OF_MVS 5835 integerMv2Nx2NPred.divideByPowerOf2(2); 5836 #else 5707 5837 integerMv2Nx2NPred >>= 2; 5838 #endif 5708 5839 xTZSearchHelp(pcPatternKey, cStruct, integerMv2Nx2NPred.getHor(), integerMv2Nx2NPred.getVer(), 0, 0); 5709 5840 … … 5734 5865 { 5735 5866 xTZSearchHelp( pcPatternKey, cStruct, iStartX, iStartY, 0, 0 ); 5736 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, 1 );5737 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, 2 );5867 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, 1, false ); 5868 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, 2, false ); 5738 5869 } 5739 5870 } … … 5766 5897 if ( bStarRefinementDiamond == 1 ) 5767 5898 { 5768 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist );5899 xTZ8PointDiamondSearch ( pcPatternKey, cStruct, pcMvSrchRngLT, pcMvSrchRngRB, iStartX, iStartY, iDist, false ); 5769 5900 } 5770 5901 else … … 5792 5923 // write out best match 5793 5924 rcMv.set( cStruct.iBestX, cStruct.iBestY ); 5794 ruiSAD = cStruct.uiBestSad - m_pcRdCost->getCost ( cStruct.iBestX, cStruct.iBestY );5925 ruiSAD = cStruct.uiBestSad - m_pcRdCost->getCostOfVectorWithPredictor( cStruct.iBestX, cStruct.iBestY ); 5795 5926 5796 5927 } … … 5968 6099 } 5969 6100 5970 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC6101 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 5971 6102 Bool oldTraceRDCost = g_traceRDCost; 5972 6103 g_traceRDCost = false; … … 5981 6112 xEstimateInterResidualQT( pcYuvResi, pcYuvOrg, pcYuvPred, nonZeroCost, nonZeroBits, nonZeroDistortion, &zeroDistortion, tuLevel0 DEBUG_STRING_PASS_INTO(sDebug) ); 5982 6113 5983 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC6114 #if ENC_DEC_TRACE && NH_MV_ENC_DEC_TRAC 5984 6115 g_traceRDCost = oldTraceRDCost; 5985 6116 g_traceEncFracBits = oldTraceFracBits; … … 6027 6158 const ComponentID component = ComponentID(comp); 6028 6159 ::memset( pcCU->getCbf( component ) , 0, uiQPartNum * sizeof(UChar) ); 6029 ::memset( pcCU->getCrossComponentPredictionAlpha(component), 0, ( uiQPartNum * sizeof( Char) ) );6160 ::memset( pcCU->getCrossComponentPredictionAlpha(component), 0, ( uiQPartNum * sizeof(SChar) ) ); 6030 6161 } 6031 6162 static const UInt useTS[MAX_NUM_COMPONENT]={0,0,0}; … … 6315 6446 // Stores the best explicit RDPCM mode for a TU encoded without split 6316 6447 UInt bestExplicitRdpcmModeUnSplit[MAX_NUM_COMPONENT][2/*0 = top (or whole TU for non-4:2:2) sub-TU, 1 = bottom sub-TU*/] = {{3,3}, {3,3}, {3,3}}; 6317 CharbestCrossCPredictionAlpha [MAX_NUM_COMPONENT][2/*0 = top (or whole TU for non-4:2:2) sub-TU, 1 = bottom sub-TU*/] = {{0,0},{0,0},{0,0}};6448 SChar bestCrossCPredictionAlpha [MAX_NUM_COMPONENT][2/*0 = top (or whole TU for non-4:2:2) sub-TU, 1 = bottom sub-TU*/] = {{0,0},{0,0},{0,0}}; 6318 6449 6319 6450 m_pcRDGoOnSbacCoder->store( m_pppcRDSbacCoder[ uiDepth ][ CI_QT_TRAFO_ROOT ] ); … … 6386 6517 && (pcCU->getCbf(subTUAbsPartIdx, COMPONENT_Y, uiTrMode) != 0); 6387 6518 6388 Char preCalcAlpha = 0;6519 SChar preCalcAlpha = 0; 6389 6520 const Pel *pLumaResi = m_pcQTTempTComYuv[uiQTTempAccessLayer].getAddrPix( COMPONENT_Y, rTu.getRect( COMPONENT_Y ).x0, rTu.getRect( COMPONENT_Y ).y0 ); 6390 6521 … … 6578 6709 } 6579 6710 6580 6581 6711 DEBUG_STRING_NEW(sSingleStringTest) 6582 6712 #if NH_MV … … 6588 6718 D_PRINT_INC_INDENT(g_traceModeCheck, "NonZero"); 6589 6719 #endif 6590 6591 6720 if (isFirstMode) 6592 6721 { -
TabularUnified trunk/source/Lib/TLibEncoder/TEncSearch.h ¶
r1321 r1386 68 68 private: 69 69 TCoeff** m_ppcQTTempCoeff[MAX_NUM_COMPONENT /* 0->Y, 1->Cb, 2->Cr*/]; 70 TCoeff* m_pcQTTempCoeff[MAX_NUM_COMPONENT];71 70 #if ADAPTIVE_QP_SELECTION 72 71 TCoeff** m_ppcQTTempArlCoeff[MAX_NUM_COMPONENT]; 73 TCoeff* m_pcQTTempArlCoeff[MAX_NUM_COMPONENT];74 72 #endif 75 73 UChar* m_puhQTTempTrIdx; … … 79 77 TComYuv m_tmpYuvPred; // To be used in xGetInterPredictionError() to avoid constant memory allocation/deallocation 80 78 81 Char*m_phQTTempCrossComponentPredictionAlpha[MAX_NUM_COMPONENT];79 SChar* m_phQTTempCrossComponentPredictionAlpha[MAX_NUM_COMPONENT]; 82 80 Pel* m_pSharedPredTransformSkip[MAX_NUM_COMPONENT]; 83 81 TCoeff* m_pcQTTempTUCoeff[MAX_NUM_COMPONENT]; … … 100 98 Int m_iSearchRange; 101 99 Int m_bipredSearchRange; // Search range for bi-prediction 102 Int m_iFastSearch;100 MESearchMethod m_motionEstimationSearchMethod; 103 101 #if NH_MV 104 102 Bool m_vertRestriction; 105 103 #endif 106 104 Int m_aaiAdaptSR[MAX_NUM_REF_LIST_ADAPT_SR][MAX_IDX_ADAPT_SR]; 107 TComMv m_cSrchRngLT;108 TComMv m_cSrchRngRB;109 105 TComMv m_acMvPredictors[NUM_MV_PREDICTORS]; // Left, Above, AboveRight. enum MVP_DIR first NUM_MV_PREDICTORS entries are suitable for accessing. 110 106 … … 116 112 // Misc. 117 113 Pel* m_pTempPel; 118 const UInt* m_puiDFilter;119 114 120 115 #if NH_3D_VSO // M17 … … 136 131 Int iSearchRange, 137 132 Int bipredSearchRange, 138 Int iFastSearch,133 MESearchMethod motionEstimationSearchMethod, 139 134 const UInt maxCUWidth, 140 135 const UInt maxCUHeight, … … 157 152 typedef struct 158 153 { 159 Pel*piRefY;154 const Pel* piRefY; 160 155 Int iYStride; 161 156 Int iBestX; … … 168 163 169 164 // sub-functions for ME 170 __inline Void xTZSearchHelp ( TComPattern*pcPatternKey, IntTZSearchStruct& rcStruct, const Int iSearchX, const Int iSearchY, const UChar ucPointNr, const UInt uiDistance );171 __inline Void xTZ2PointSearch ( TComPattern* pcPatternKey, IntTZSearchStruct& rcStrukt, TComMv* pcMvSrchRngLT, TComMv*pcMvSrchRngRB );172 __inline Void xTZ8PointSquareSearch ( TComPattern* pcPatternKey, IntTZSearchStruct& rcStrukt, TComMv* pcMvSrchRngLT, TComMv*pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist );173 __inline Void xTZ8PointDiamondSearch( TComPattern* pcPatternKey, IntTZSearchStruct& rcStrukt, TComMv* pcMvSrchRngLT, TComMv* pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist);165 __inline Void xTZSearchHelp ( const TComPattern* const pcPatternKey, IntTZSearchStruct& rcStruct, const Int iSearchX, const Int iSearchY, const UChar ucPointNr, const UInt uiDistance ); 166 __inline Void xTZ2PointSearch ( const TComPattern* const pcPatternKey, IntTZSearchStruct& rcStruct, const TComMv* const pcMvSrchRngLT, const TComMv* const pcMvSrchRngRB ); 167 __inline Void xTZ8PointSquareSearch ( const TComPattern* const pcPatternKey, IntTZSearchStruct& rcStruct, const TComMv* const pcMvSrchRngLT, const TComMv* const pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist ); 168 __inline Void xTZ8PointDiamondSearch( const TComPattern* const pcPatternKey, IntTZSearchStruct& rcStruct, const TComMv* const pcMvSrchRngLT, const TComMv* const pcMvSrchRngRB, const Int iStartX, const Int iStartY, const Int iDist, const Bool bCheckCornersAtDist1 ); 174 169 175 170 Void xGetInterPredictionError( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPartIdx, Distortion& ruiSAD, Bool Hadamard ); … … 322 317 const Int strideBest ); 323 318 324 Char xCalcCrossComponentPredictionAlpha( TComTU &rTu,319 SChar xCalcCrossComponentPredictionAlpha ( TComTU &rTu, 325 320 const ComponentID compID, 326 321 const Pel* piResiL, … … 446 441 Bool bBi = false ); 447 442 448 Void xTZSearch ( TComDataCU*pcCU,449 TComPattern*pcPatternKey,450 Pel*piRefY,451 IntiRefStride,452 TComMv*pcMvSrchRngLT,453 TComMv*pcMvSrchRngRB,443 Void xTZSearch ( const TComDataCU* const pcCU, 444 const TComPattern* const pcPatternKey, 445 const Pel* const piRefY, 446 const Int iRefStride, 447 const TComMv* const pcMvSrchRngLT, 448 const TComMv* const pcMvSrchRngRB, 454 449 TComMv& rcMv, 455 450 Distortion& ruiSAD, 456 const TComMv *pIntegerMv2Nx2NPred 451 const TComMv* const pIntegerMv2Nx2NPred, 452 const Bool bExtendedSettings 457 453 ); 458 454 459 Void xTZSearchSelective ( TComDataCU*pcCU,460 TComPattern*pcPatternKey,461 Pel*piRefY,462 IntiRefStride,463 TComMv*pcMvSrchRngLT,464 TComMv*pcMvSrchRngRB,455 Void xTZSearchSelective ( const TComDataCU* const pcCU, 456 const TComPattern* const pcPatternKey, 457 const Pel* const piRefY, 458 const Int iRefStride, 459 const TComMv* const pcMvSrchRngLT, 460 const TComMv* const pcMvSrchRngRB, 465 461 TComMv& rcMv, 466 462 Distortion& ruiSAD, 467 const TComMv *pIntegerMv2Nx2NPred463 const TComMv* const pIntegerMv2Nx2NPred 468 464 ); 469 465 470 Void xSetSearchRange ( TComDataCU*pcCU,471 TComMv& cMvPred,472 Int iSrchRng,466 Void xSetSearchRange ( const TComDataCU* const pcCU, 467 const TComMv& cMvPred, 468 const Int iSrchRng, 473 469 TComMv& rcMvSrchRngLT, 474 470 TComMv& rcMvSrchRngRB ); 475 471 476 Void xPatternSearchFast ( TComDataCU*pcCU,477 TComPattern*pcPatternKey,478 Pel*piRefY,479 IntiRefStride,480 TComMv*pcMvSrchRngLT,481 TComMv*pcMvSrchRngRB,472 Void xPatternSearchFast ( const TComDataCU* const pcCU, 473 const TComPattern* const pcPatternKey, 474 const Pel* const piRefY, 475 const Int iRefStride, 476 const TComMv* const pcMvSrchRngLT, 477 const TComMv* const pcMvSrchRngRB, 482 478 TComMv& rcMv, 483 479 Distortion& ruiSAD, 484 const TComMv* pIntegerMv2Nx2NPred480 const TComMv* const pIntegerMv2Nx2NPred 485 481 ); 486 482 487 Void xPatternSearch ( TComPattern*pcPatternKey,488 Pel*piRefY,489 IntiRefStride,490 TComMv*pcMvSrchRngLT,491 TComMv*pcMvSrchRngRB,483 Void xPatternSearch ( const TComPattern* const pcPatternKey, 484 const Pel* piRefY, 485 const Int iRefStride, 486 const TComMv* const pcMvSrchRngLT, 487 const TComMv* const pcMvSrchRngRB, 492 488 TComMv& rcMv, 493 489 Distortion& ruiSAD ); -
TabularUnified trunk/source/Lib/TLibEncoder/TEncSlice.cpp ¶
r1313 r1386 203 203 Void TEncSlice::initEncSlice( TComPic* pcPic, Int pocLast, Int pocCurr, Int iGOPid, TComSlice*& rpcSlice, TComVPS* pVPS, Int layerId, bool isField ) 204 204 #else 205 Void TEncSlice::initEncSlice( TComPic* pcPic, Int pocLast, Int pocCurr, Int iGOPid, TComSlice*& rpcSlice,Bool isField )205 Void TEncSlice::initEncSlice( TComPic* pcPic, const Int pocLast, const Int pocCurr, const Int iGOPid, TComSlice*& rpcSlice, const Bool isField ) 206 206 #endif 207 207 { … … 318 318 else 319 319 { 320 #if NH_MV 320 321 #if 0 // Check this! NH_MV 321 322 rpcSlice->setTemporalLayerNonReferenceFlag(!m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_refPic); 323 #else 324 rpcSlice->setTemporalLayerNonReferenceFlag(!m_pcCfg->getGOPEntry(iGOPid).m_refPic); 325 #endif 322 326 #else 323 327 rpcSlice->setTemporalLayerNonReferenceFlag(!m_pcCfg->getGOPEntry(iGOPid).m_refPic); … … 372 376 Int NumberBFrames = ( m_pcCfg->getGOPSize() - 1 ); 373 377 Int SHIFT_QP = 12; 374 375 Double dLambda_scale = 1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? NumberBFrames/2 : NumberBFrames) );376 378 377 379 #if FULL_NBIT … … 397 399 #endif 398 400 { 399 dQPFactor=0.57*dLambda_scale; 401 if (m_pcCfg->getIntraQpFactor()>=0.0 && m_pcCfg->getGOPEntry(iGOPid).m_sliceType != I_SLICE) 402 { 403 dQPFactor=m_pcCfg->getIntraQpFactor(); 404 } 405 else 406 { 407 Double dLambda_scale = 1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? NumberBFrames/2 : NumberBFrames) ); 408 409 dQPFactor=0.57*dLambda_scale; 410 } 400 411 } 401 412 dLambda = dQPFactor*pow( 2.0, qp_temp/3.0 ); … … 428 439 iQP = m_piRdPicQp [0]; 429 440 430 if( rpcSlice->getSliceType( ) != I_SLICE ) 431 { 441 432 442 #if NH_MV 433 dLambda *= m_pcCfg->getLambdaModifier( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_temporalId ); 434 #else 435 dLambda *= m_pcCfg->getLambdaModifier( m_pcCfg->getGOPEntry(iGOPid).m_temporalId ); 436 #endif 437 } 438 443 const Int temporalId=m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_temporalId; 444 #else 445 const Int temporalId=m_pcCfg->getGOPEntry(iGOPid).m_temporalId; 446 #endif 447 const std::vector<Double> &intraLambdaModifiers=m_pcCfg->getIntraLambdaModifier(); 448 449 Double lambdaModifier; 450 if( rpcSlice->getSliceType( ) != I_SLICE || intraLambdaModifiers.empty()) 451 { 452 lambdaModifier = m_pcCfg->getLambdaModifier( temporalId ); 453 } 454 else 455 { 456 lambdaModifier = intraLambdaModifiers[ (temporalId < intraLambdaModifiers.size()) ? temporalId : (intraLambdaModifiers.size()-1) ]; 457 } 458 459 dLambda *= lambdaModifier; 439 460 setUpLambda(rpcSlice, dLambda, iQP); 440 461 441 462 #if NH_3D_VSO 442 m_pcRdCost->setUseLambdaScaleVSO ( (m_pcCfg->getUseVSO() || m_pcCfg->getForceLambdaScaleVSO()) && m_pcCfg->getIsDepth() );463 m_pcRdCost->setUseLambdaScaleVSO ( (m_pcCfg->getUseVSO() || m_pcCfg->getForceLambdaScaleVSO()) && ( m_pcCfg->getIsDepth() | m_pcCfg->getIsAuxDepth() ) ); 443 464 m_pcRdCost->setLambdaVSO ( dLambda * m_pcCfg->getLambdaScaleVSO() ); 444 465 … … 449 470 450 471 // LGE_WVSO_A0119 451 if( m_pcCfg->getUseWVSO() && m_pcCfg->getIsDepth() )472 if( m_pcCfg->getUseWVSO() && ( m_pcCfg->getIsDepth() || m_pcCfg->getIsAuxDepth() ) ) 452 473 { 453 474 m_pcRdCost->setDWeight ( m_pcCfg->getDWeight() ); … … 547 568 rpcSlice->setDepth ( depth ); 548 569 549 #if NH_MV 550 pcPic->setTLayer( m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_temporalId ); 551 #else 552 pcPic->setTLayer( m_pcCfg->getGOPEntry(iGOPid).m_temporalId ); 553 #endif 570 pcPic->setTLayer( temporalId ); 554 571 if(eSliceType==I_SLICE) 555 572 { … … 589 606 // ==================================================================================================================== 590 607 608 //! set adaptive search range based on poc difference 591 609 Void TEncSlice::setSearchRange( TComSlice* pcSlice ) 592 610 { … … 598 616 Int iNumPredDir = pcSlice->isInterP() ? 1 : 2; 599 617 600 for (Int iDir = 0; iDir <= iNumPredDir; iDir++) 601 { 602 //RefPicList e = (RefPicList)iDir; 618 for (Int iDir = 0; iDir < iNumPredDir; iDir++) 619 { 603 620 RefPicList e = ( iDir ? REF_PIC_LIST_1 : REF_PIC_LIST_0 ); 604 621 for (Int iRefIdx = 0; iRefIdx < pcSlice->getNumRefIdx(e); iRefIdx++) 605 622 { 606 623 iRefPOC = pcSlice->getRefPic(e, iRefIdx)->getPOC(); 607 Int iNewSR = Clip3(8, iMaxSR, (iMaxSR*ADAPT_SR_SCALE*abs(iCurrPOC - iRefPOC)+iOffset)/iGOPSize);608 m_pcPredSearch->setAdaptiveSearchRange(iDir, iRefIdx, iNewSR);624 Int newSearchRange = Clip3(m_pcCfg->getMinSearchWindow(), iMaxSR, (iMaxSR*ADAPT_SR_SCALE*abs(iCurrPOC - iRefPOC)+iOffset)/iGOPSize); 625 m_pcPredSearch->setAdaptiveSearchRange(iDir, iRefIdx, newSearchRange); 609 626 } 610 627 } … … 696 713 697 714 // compute RD cost and choose the best 698 Double dPicRdCost = m_pcRdCost->calcRdCost64( m_uiPicTotalBits, uiPicDist, true, DF_SSE_FRAME); // NOTE: Is the 'true' parameter really necessary? 715 #if NH_3D_VSO 716 Double dPicRdCost = m_pcRdCost->calcRdCost( (Double)m_uiPicTotalBits, uiPicDist, DF_SSE_FRAME); 717 #else 718 Double dPicRdCost = m_pcRdCost->calcRdCost( (Double)m_uiPicTotalBits, (Double)uiPicDist, DF_SSE_FRAME); 719 #endif 699 720 #if H_3D 700 721 // Above calculation need to be fixed for VSO, including frameLambda value. … … 805 826 } 806 827 807 xEstimateWPParamSlice( pcSlice );828 xEstimateWPParamSlice( pcSlice, m_pcCfg->getWeightedPredictionMethod() ); 808 829 pcSlice->initWpScaling(pcSlice->getSPS()); 809 830 … … 849 870 { 850 871 // This will only occur if dependent slice-segments (m_entropyCodingSyncContextState=true) are being used. 851 if( pCurrentTile->getTileWidthInCtus() >= 2 || !m_pcCfg->get WaveFrontsynchro() )872 if( pCurrentTile->getTileWidthInCtus() >= 2 || !m_pcCfg->getEntropyCodingSyncEnabledFlag() ) 852 873 { 853 874 m_pppcRDSbacCoder[0][CI_CURR_BEST]->loadContexts( &m_lastSliceSegmentEndContextState ); … … 878 899 iLastPosY = iCurPosY; 879 900 TEncTop* pcEncTop = (TEncTop*) m_pcCfg; // Fix this later. 880 pcEncTop->setupRenModel( pcSlice->getPOC() , pcSlice->getViewIndex(), pcSlice->getIsDepth() ? 1 : 0, iCurPosY, pcSlice->getSPS()->getMaxCUHeight() );901 pcEncTop->setupRenModel( pcSlice->getPOC() , pcSlice->getViewIndex(), pcSlice->getIsDepth() || pcSlice->getVPS()->getAuxId( pcSlice->getLayerId() ) ? 1 : 0, iCurPosY, pcSlice->getSPS()->getMaxCUHeight() ); 881 902 } 882 903 } … … 892 913 m_pppcRDSbacCoder[0][CI_CURR_BEST]->resetEntropy(pcSlice); 893 914 } 894 else if ( ctuXPosInCtus == tileXPosInCtus && m_pcCfg->get WaveFrontsynchro())915 else if ( ctuXPosInCtus == tileXPosInCtus && m_pcCfg->getEntropyCodingSyncEnabledFlag()) 895 916 { 896 917 // reset and then update contexts to the state at the end of the top-right CTU (if within current slice and tile). … … 1031 1052 1032 1053 // Store probabilities of second CTU in line into buffer - used only if wavefront-parallel-processing is enabled. 1033 if ( ctuXPosInCtus == tileXPosInCtus+1 && m_pcCfg->get WaveFrontsynchro())1054 if ( ctuXPosInCtus == tileXPosInCtus+1 && m_pcCfg->getEntropyCodingSyncEnabledFlag()) 1034 1055 { 1035 1056 m_entropyCodingSyncContextState.loadContexts(m_pppcRDSbacCoder[0][CI_CURR_BEST]); … … 1123 1144 g_bJustDoIt = g_bEncDecTraceEnable; 1124 1145 #endif 1125 #if H_MV_ENC_DEC_TRAC1146 #if NH_MV_ENC_DEC_TRAC 1126 1147 #if ENC_DEC_TRACE 1127 1148 incSymbolCounter(); … … 1133 1154 DTRACE_CABAC_T( "\tPOC: " ); 1134 1155 DTRACE_CABAC_V( pcPic->getPOC() ); 1135 #if H_MV_ENC_DEC_TRAC1156 #if NH_MV_ENC_DEC_TRAC 1136 1157 DTRACE_CABAC_T( " Layer: " ); 1137 1158 DTRACE_CABAC_V( pcPic->getLayerId() ); -
TabularUnified trunk/source/Lib/TLibEncoder/TEncSlice.h ¶
r1313 r1386 120 120 Int iGOPid, TComSlice*& rpcSlice, TComVPS* pVPS, Int layerId, bool isField ); 121 121 #else 122 Void initEncSlice ( TComPic* pcPic, Int pocLast, Int pocCurr,123 Int iGOPid, TComSlice*& rpcSlice,Bool isField );122 Void initEncSlice ( TComPic* pcPic, const Int pocLast, const Int pocCurr, 123 const Int iGOPid, TComSlice*& rpcSlice, const Bool isField ); 124 124 #endif 125 125 Void resetQP ( TComPic* pic, Int sliceQP, Double lambda ); -
TabularUnified trunk/source/Lib/TLibEncoder/TEncTop.cpp ¶
r1321 r1386 44 44 #endif 45 45 #if NH_MV 46 #include "../../App/TAppEncoder/TAppEncTop.h"46 //#include "../../App/TAppEncoder/TAppEncTop.h" 47 47 #endif 48 48 … … 216 216 xInitVPS(); 217 217 218 #if U0132_TARGET_BITS_SATURATION 219 if (m_RCCpbSaturationEnabled) 220 { 221 m_cRateCtrl.initHrdParam(m_cSPS.getVuiParameters()->getHrdParameters(), m_iFrameRate, m_RCInitialCpbFullness); 222 } 223 #endif 218 224 m_cRdCost.setCostMode(m_costMode); 219 225 … … 264 270 265 271 // initialize encoder search class 266 m_cSearch.init( this, &m_cTrQuant, m_iSearchRange, m_bipredSearchRange, m_ iFastSearch, m_maxCUWidth, m_maxCUHeight, m_maxTotalCUDepth, &m_cEntropyCoder, &m_cRdCost, getRDSbacCoder(), getRDGoOnSbacCoder() );272 m_cSearch.init( this, &m_cTrQuant, m_iSearchRange, m_bipredSearchRange, m_motionEstimationSearchMethod, m_maxCUWidth, m_maxCUHeight, m_maxTotalCUDepth, &m_cEntropyCoder, &m_cRdCost, getRDSbacCoder(), getRDGoOnSbacCoder() ); 267 273 268 274 m_iMaxRefPicNum = 0; … … 299 305 { 300 306 m_cSPS.getScalingList().setDefaultScalingList (); 301 if(m_cSPS.getScalingList().xParseScalingList(getScalingListFile ()))307 if(m_cSPS.getScalingList().xParseScalingList(getScalingListFileName())) 302 308 { 303 309 Bool bParsedScalingList=false; // Use of boolean so that assertion outputs useful string … … 842 848 m_cSPS.setUsedByCurrPicLtSPSFlag(k, 0); 843 849 } 850 851 #if U0132_TARGET_BITS_SATURATION 852 if( getPictureTimingSEIEnabled() || getDecodingUnitInfoSEIEnabled() || getCpbSaturationEnabled() ) 853 #else 844 854 if( getPictureTimingSEIEnabled() || getDecodingUnitInfoSEIEnabled() ) 855 #endif 845 856 { 846 857 xInitHrdParameters(); … … 866 877 m_cSPS.setSpsRangeExtensionsFlag( m_cSPS.getSpsRangeExtension().settingsDifferFromDefaults() ); 867 878 #endif 868 869 } 870 879 } 880 #if U0132_TARGET_BITS_SATURATION 881 // calculate scale value of bitrate and initial delay 882 Int calcScale(Int x) 883 { 884 UInt iMask = 0xffffffff; 885 Int ScaleValue = 32; 886 887 while ((x&iMask) != 0) 888 { 889 ScaleValue--; 890 iMask = (iMask >> 1); 891 } 892 893 return ScaleValue; 894 } 895 #endif 871 896 Void TEncTop::xInitHrdParameters() 872 897 { … … 874 899 Int bitRate = getTargetBitrate(); 875 900 Bool isRandomAccess = getIntraPeriod() > 0; 876 901 # if U0132_TARGET_BITS_SATURATION 902 Int cpbSize = getCpbSize(); 903 904 if( !getVuiParametersPresentFlag() && !getCpbSaturationEnabled() ) 905 #else 877 906 if( !getVuiParametersPresentFlag() ) 907 #endif 878 908 { 879 909 return; … … 925 955 } 926 956 957 #if U0132_TARGET_BITS_SATURATION 958 if (calcScale(bitRate) <= 6) 959 { 960 hrd->setBitRateScale(0); 961 } 962 else 963 { 964 hrd->setBitRateScale(calcScale(bitRate) - 6); 965 } 966 967 if (calcScale(cpbSize) <= 4) 968 { 969 hrd->setCpbSizeScale(0); 970 } 971 else 972 { 973 hrd->setCpbSizeScale(calcScale(cpbSize) - 4); 974 } 975 #else 927 976 hrd->setBitRateScale( 4 ); // in units of 2^( 6 + 4 ) = 1,024 bps 928 977 hrd->setCpbSizeScale( 6 ); // in units of 2^( 4 + 6 ) = 1,024 bit 978 #endif 979 929 980 hrd->setDuCpbSizeScale( 6 ); // in units of 2^( 4 + 6 ) = 1,024 bit 930 981 … … 958 1009 bitrateValue = bitRate / (1 << (6 + hrd->getBitRateScale()) ); // bitRate is in bits, so it needs to be scaled down 959 1010 // CpbSize[ i ] = ( cpb_size_value_minus1[ i ] + 1 ) * 2^( 4 + cpb_size_scale ) 1011 #if U0132_TARGET_BITS_SATURATION 1012 cpbSizeValue = cpbSize / (1 << (4 + hrd->getCpbSizeScale()) ); // using bitRate results in 1 second CPB size 1013 #else 960 1014 cpbSizeValue = bitRate / (1 << (4 + hrd->getCpbSizeScale()) ); // using bitRate results in 1 second CPB size 1015 #endif 1016 961 1017 962 1018 // DU CPB size could be smaller (i.e. bitrateValue / number of DUs), but we don't know … … 1066 1122 m_cPPS.setQpOffset(COMPONENT_Cr, m_chromaCrQpOffset ); 1067 1123 1068 m_cPPS.setEntropyCodingSyncEnabledFlag( m_ iWaveFrontSynchro > 0);1124 m_cPPS.setEntropyCodingSyncEnabledFlag( m_entropyCodingSyncEnabledFlag ); 1069 1125 m_cPPS.setTilesEnabledFlag( (m_iNumColumnsMinus1 > 0 || m_iNumRowsMinus1 > 0) ); 1070 1126 m_cPPS.setUseWP( m_useWeightedPred ); … … 1509 1565 Int iBaseViewIdx = m_cameraParameters->getBaseSortedId2Id()[ iBaseViewSIdx ]; 1510 1566 1511 TComPicYuv* pcPicYuvVideoRec = m_ivPicLists->getPicYuv( iBaseViewIdx, false, iPoc, true ); 1512 TComPicYuv* pcPicYuvDepthRec = m_ivPicLists->getPicYuv( iBaseViewIdx, true , iPoc, true ); 1513 TComPicYuv* pcPicYuvVideoOrg = m_ivPicLists->getPicYuv( iBaseViewIdx, false, iPoc, false ); 1514 TComPicYuv* pcPicYuvDepthOrg = m_ivPicLists->getPicYuv( iBaseViewIdx, true , iPoc, false ); 1567 Int auxId = getVPS()->getAuxId ( getLayerId() ); 1568 Bool depthFlag = ( getVPS()->getDepthId( getLayerId() ) == 1 ); 1569 1570 if( auxId == 0 && !depthFlag ) 1571 { 1572 // Defaults for texture layers 1573 #if NH_3D 1574 depthFlag = true; 1575 auxId = 0; 1576 #else 1577 depthFlag = false; 1578 auxId = 2; 1579 #endif 1580 } 1581 1582 TComPicYuv* pcPicYuvVideoRec = m_ivPicLists->getPicYuv( iBaseViewIdx, false , 0 , iPoc, true ); 1583 TComPicYuv* pcPicYuvDepthRec = m_ivPicLists->getPicYuv( iBaseViewIdx, depthFlag, auxId, iPoc, true ); 1584 TComPicYuv* pcPicYuvVideoOrg = m_ivPicLists->getPicYuv( iBaseViewIdx, false, 0 , iPoc, false ); 1585 TComPicYuv* pcPicYuvDepthOrg = m_ivPicLists->getPicYuv( iBaseViewIdx, depthFlag, auxId, iPoc, false ); 1515 1586 1516 1587 TComPicYuv* pcPicYuvVideoRef = ( iVideoDistMode == 2 ) ? pcPicYuvVideoOrg : NULL; … … 1577 1648 if ( iOrgRefBaseViewSIdx != -1 ) 1578 1649 { 1579 pcPicYuvOrgRef = m_ivPicLists->getPicYuv( m_cameraParameters->getBaseSortedId2Id()[ iOrgRefBaseViewSIdx ] , false, iPoc, false );1650 pcPicYuvOrgRef = m_ivPicLists->getPicYuv( m_cameraParameters->getBaseSortedId2Id()[ iOrgRefBaseViewSIdx ] , false, 0, iPoc, false ); 1580 1651 AOF ( pcPicYuvOrgRef ); 1581 1652 } -
TabularUnified trunk/source/Lib/TLibEncoder/WeightPredAnalysis.cpp ¶
r1313 r1386 41 41 #include "../TLibCommon/TComPicYuv.h" 42 42 #include "WeightPredAnalysis.h" 43 44 #define ABS(a) ((a) < 0 ? - (a) : (a)) 45 #define DTHRESH (0.99) 43 #include <limits> 44 45 static const Double WEIGHT_PRED_SAD_RELATIVE_TO_NON_WEIGHT_PRED_SAD=0.99; // NOTE: U0040 used 0.95 46 47 //! calculate SAD values for both WP version and non-WP version. 48 static 49 Int64 xCalcSADvalueWP(const Int bitDepth, 50 const Pel *pOrgPel, 51 const Pel *pRefPel, 52 const Int width, 53 const Int height, 54 const Int orgStride, 55 const Int refStride, 56 const Int log2Denom, 57 const Int weight, 58 const Int offset, 59 const Bool useHighPrecision); 60 61 //! calculate SAD values for both WP version and non-WP version. 62 static 63 Int64 xCalcSADvalueWPOptionalClip(const Int bitDepth, 64 const Pel *pOrgPel, 65 const Pel *pRefPel, 66 const Int width, 67 const Int height, 68 const Int orgStride, 69 const Int refStride, 70 const Int log2Denom, 71 const Int weight, 72 const Int offset, 73 const Bool useHighPrecision, 74 const Bool clipped); 75 76 // ----------------------------------------------------------------------------- 77 // Helper functions 78 79 80 //! calculate Histogram for array of pixels 81 static 82 Void xCalcHistogram(const Pel *pPel, 83 std::vector<Int> &histogram, 84 const Int width, 85 const Int height, 86 const Int stride, 87 const Int maxPel) 88 { 89 histogram.clear(); 90 histogram.resize(maxPel); 91 for( Int y = 0; y < height; y++ ) 92 { 93 for( Int x = 0; x < width; x++ ) 94 { 95 const Pel v=pPel[x]; 96 histogram[v<0?0:(v>=maxPel)?maxPel-1:v]++; 97 } 98 pPel += stride; 99 } 100 } 101 102 static 103 Distortion xCalcHistDistortion (const std::vector<Int> &histogram0, 104 const std::vector<Int> &histogram1) 105 { 106 Distortion distortion = 0; 107 assert(histogram0.size()==histogram1.size()); 108 const Int numElements=Int(histogram0.size()); 109 110 // Scan histograms to compute histogram distortion 111 for (Int i = 0; i <= numElements; i++) 112 { 113 distortion += (Distortion)(abs(histogram0[i] - histogram1[i])); 114 } 115 116 return distortion; 117 } 118 119 static 120 void xScaleHistogram(const std::vector<Int> &histogramInput, 121 std::vector<Int> &histogramOutput, // cannot be the same as the input 122 const Int bitDepth, 123 const Int log2Denom, 124 const Int weight, 125 const Int offset, 126 const Bool bHighPrecision) 127 { 128 assert(&histogramInput != &histogramOutput); 129 const Int numElements=Int(histogramInput.size()); 130 histogramOutput.clear(); 131 histogramOutput.resize(numElements); 132 133 const Int64 iRealLog2Denom = bHighPrecision ? 0 : (bitDepth - 8); 134 const Int64 iRealOffset = ((Int64)offset)<<iRealLog2Denom; 135 136 const Int divOffset = log2Denom == 0 ? 0 : 1 << (log2Denom - 1); 137 // Scan histogram and apply illumination parameters appropriately 138 // Then compute updated histogram. 139 // Note that this technique only works with single list weights/offsets. 140 141 for (Int i = 0; i < numElements; i++) 142 { 143 const Int j = Clip3(0, numElements - 1, (Int)(((weight * i + divOffset) >> log2Denom) + iRealOffset)); 144 histogramOutput[j] += histogramInput[i]; 145 } 146 } 147 148 static 149 Distortion xSearchHistogram(const std::vector<Int> &histogramSource, 150 const std::vector<Int> &histogramRef, 151 std::vector<Int> &outputHistogram, 152 const Int bitDepth, 153 const Int log2Denom, 154 Int &weightToUpdate, 155 Int &offsetToUpdate, 156 const Bool bHighPrecision, 157 const ComponentID compID) 158 { 159 const Int initialWeight = weightToUpdate; 160 const Int initialOffset = offsetToUpdate; 161 const Int weightRange = 10; 162 const Int offsetRange = 10; 163 const Int maxOffset = 1 << ((bHighPrecision == true) ? (bitDepth - 1) : 7); 164 const Int range = bHighPrecision ? (1<<bitDepth) / 2 : 128; 165 const Int defaultWeight = (1<<log2Denom); 166 const Int minSearchWeight = std::max<Int>(initialWeight - weightRange, defaultWeight - range); 167 const Int maxSearchWeight = std::min<Int>(initialWeight + weightRange+1, defaultWeight + range); 168 169 Distortion minDistortion = std::numeric_limits<Distortion>::max(); 170 Int bestWeight = initialWeight; 171 Int bestOffset = initialOffset; 172 173 for (Int searchWeight = minSearchWeight; searchWeight < maxSearchWeight; searchWeight++) 174 { 175 if (compID == COMPONENT_Y) 176 { 177 for (Int searchOffset = std::max<Int>(initialOffset - offsetRange, -maxOffset); 178 searchOffset <= initialOffset + offsetRange && searchOffset<=(maxOffset-1); 179 searchOffset++) 180 { 181 xScaleHistogram(histogramRef, outputHistogram, bitDepth, log2Denom, searchWeight, searchOffset, bHighPrecision); 182 const Distortion distortion = xCalcHistDistortion(histogramSource, outputHistogram); 183 184 if (distortion < minDistortion) 185 { 186 minDistortion = distortion; 187 bestWeight = searchWeight; 188 bestOffset = searchOffset; 189 } 190 } 191 } 192 else 193 { 194 const Int pred = ( maxOffset - ( ( maxOffset*searchWeight)>>(log2Denom) ) ); 195 196 for (Int searchOffset = initialOffset - offsetRange; searchOffset <= initialOffset + offsetRange; searchOffset++) 197 { 198 const Int deltaOffset = Clip3( -4*maxOffset, 4*maxOffset-1, (searchOffset - pred) ); // signed 10bit (if !bHighPrecision) 199 const Int clippedOffset = Clip3( -1*maxOffset, 1*maxOffset-1, (deltaOffset + pred) ); // signed 8bit (if !bHighPrecision) 200 xScaleHistogram(histogramRef, outputHistogram, bitDepth, log2Denom, searchWeight, clippedOffset, bHighPrecision); 201 const Distortion distortion = xCalcHistDistortion(histogramSource, outputHistogram); 202 203 if (distortion < minDistortion) 204 { 205 minDistortion = distortion; 206 bestWeight = searchWeight; 207 bestOffset = clippedOffset; 208 } 209 } 210 } 211 } 212 213 weightToUpdate = bestWeight; 214 offsetToUpdate = bestOffset; 215 216 // regenerate best histogram 217 xScaleHistogram(histogramRef, outputHistogram, bitDepth, log2Denom, bestWeight, bestOffset, bHighPrecision); 218 219 return minDistortion; 220 } 221 222 223 // ----------------------------------------------------------------------------- 224 // Member functions 46 225 47 226 WeightPredAnalysis::WeightPredAnalysis() … … 49 228 for ( UInt lst =0 ; lst<NUM_REF_PIC_LIST_01 ; lst++ ) 50 229 { 51 for ( Int iRefIdx=0 ; iRefIdx<MAX_NUM_REF ; iRefIdx++ )230 for ( Int refIdx=0 ; refIdx<MAX_NUM_REF ; refIdx++ ) 52 231 { 53 232 for ( Int comp=0 ; comp<MAX_NUM_COMPONENT ;comp++ ) 54 233 { 55 WPScalingParam *pwp = &(m_wp[lst][ iRefIdx][comp]);234 WPScalingParam *pwp = &(m_wp[lst][refIdx][comp]); 56 235 pwp->bPresentFlag = false; 57 236 pwp->uiLog2WeightDenom = 0; … … 78 257 // calculate DC/AC value for channel 79 258 80 const Int iStride = pPic->getStride(compID);81 const Int iWidth = pPic->getWidth(compID);82 const Int iHeight = pPic->getHeight(compID);83 84 const Int iSample = iWidth*iHeight;85 86 Int64 iOrgDC = 0;259 const Int stride = pPic->getStride(compID); 260 const Int width = pPic->getWidth(compID); 261 const Int height = pPic->getHeight(compID); 262 263 const Int sample = width*height; 264 265 Int64 orgDC = 0; 87 266 { 88 267 const Pel *pPel = pPic->getAddr(compID); 89 268 90 for(Int y = 0; y < iHeight; y++, pPel+=iStride )91 { 92 for(Int x = 0; x < iWidth; x++ )93 { 94 iOrgDC += (Int)( pPel[x] );95 } 96 } 97 } 98 99 const Int64 iOrgNormDC = ((iOrgDC+(iSample>>1)) / iSample);100 101 Int64 iOrgAC = 0;269 for(Int y = 0; y < height; y++, pPel+=stride ) 270 { 271 for(Int x = 0; x < width; x++ ) 272 { 273 orgDC += (Int)( pPel[x] ); 274 } 275 } 276 } 277 278 const Int64 orgNormDC = ((orgDC+(sample>>1)) / sample); 279 280 Int64 orgAC = 0; 102 281 { 103 282 const Pel *pPel = pPic->getAddr(compID); 104 283 105 for(Int y = 0; y < iHeight; y++, pPel += iStride )106 { 107 for(Int x = 0; x < iWidth; x++ )108 { 109 iOrgAC += abs( (Int)pPel[x] - (Int)iOrgNormDC );284 for(Int y = 0; y < height; y++, pPel += stride ) 285 { 286 for(Int x = 0; x < width; x++ ) 287 { 288 orgAC += abs( (Int)pPel[x] - (Int)orgNormDC ); 110 289 } 111 290 } … … 113 292 114 293 const Int fixedBitShift = (slice->getSPS()->getSpsRangeExtension().getHighPrecisionOffsetsEnabledFlag())?RExt__PREDICTION_WEIGHTING_ANALYSIS_DC_PRECISION:0; 115 weightACDCParam[compID].iDC = ((( iOrgDC<<fixedBitShift)+(iSample>>1)) / iSample);116 weightACDCParam[compID].iAC = iOrgAC;294 weightACDCParam[compID].iDC = (((orgDC<<fixedBitShift)+(sample>>1)) / sample); 295 weightACDCParam[compID].iAC = orgAC; 117 296 } 118 297 … … 126 305 const TComPicYuv *pPic = slice->getPic()->getPicYuvOrg(); 127 306 128 Int iPresentCnt = 0;307 Int presentCnt = 0; 129 308 for ( UInt lst=0 ; lst<NUM_REF_PIC_LIST_01 ; lst++ ) 130 309 { 131 for ( Int iRefIdx=0 ; iRefIdx<MAX_NUM_REF ; iRefIdx++ )310 for ( Int refIdx=0 ; refIdx<MAX_NUM_REF ; refIdx++ ) 132 311 { 133 312 for(Int componentIndex = 0; componentIndex < pPic->getNumberValidComponents(); componentIndex++) 134 313 { 135 WPScalingParam *pwp = &(m_wp[lst][ iRefIdx][componentIndex]);136 iPresentCnt += (Int)pwp->bPresentFlag;137 } 138 } 139 } 140 141 if( iPresentCnt==0)314 WPScalingParam *pwp = &(m_wp[lst][refIdx][componentIndex]); 315 presentCnt += (Int)pwp->bPresentFlag; 316 } 317 } 318 } 319 320 if(presentCnt==0) 142 321 { 143 322 slice->setTestWeightPred(false); … … 146 325 for ( UInt lst=0 ; lst<NUM_REF_PIC_LIST_01 ; lst++ ) 147 326 { 148 for ( Int iRefIdx=0 ; iRefIdx<MAX_NUM_REF ; iRefIdx++ )327 for ( Int refIdx=0 ; refIdx<MAX_NUM_REF ; refIdx++ ) 149 328 { 150 329 for(Int componentIndex = 0; componentIndex < pPic->getNumberValidComponents(); componentIndex++) 151 330 { 152 WPScalingParam *pwp = &(m_wp[lst][ iRefIdx][componentIndex]);331 WPScalingParam *pwp = &(m_wp[lst][refIdx][componentIndex]); 153 332 154 333 pwp->bPresentFlag = false; … … 163 342 else 164 343 { 165 slice->setTestWeightPred (slice->getPPS()->getUseWP());344 slice->setTestWeightPred (slice->getPPS()->getUseWP()); 166 345 slice->setTestWeightBiPred(slice->getPPS()->getWPBiPred()); 167 346 } … … 170 349 171 350 //! estimate wp tables for explicit wp 172 Void WeightPredAnalysis::xEstimateWPParamSlice(TComSlice *const slice )351 Void WeightPredAnalysis::xEstimateWPParamSlice(TComSlice *const slice, const WeightedPredictionMethod method) 173 352 { 174 353 Int iDenom = 6; … … 191 370 // selecting whether WP is used, or not (fast search) 192 371 // NOTE: This is not operating on a slice, but the entire picture. 193 xSelectWP(slice, iDenom); 372 switch (method) 373 { 374 case WP_PER_PICTURE_WITH_SIMPLE_DC_COMBINED_COMPONENT: 375 xSelectWP(slice, iDenom); 376 break; 377 case WP_PER_PICTURE_WITH_SIMPLE_DC_PER_COMPONENT: 378 xSelectWPHistExtClip(slice, iDenom, false, false, false); 379 break; 380 case WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT: 381 xSelectWPHistExtClip(slice, iDenom, false, false, true); 382 break; 383 case WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT_AND_CLIPPING: 384 xSelectWPHistExtClip(slice, iDenom, false, true, true); 385 break; 386 case WP_PER_PICTURE_WITH_HISTOGRAM_AND_PER_COMPONENT_AND_CLIPPING_AND_EXTENSION: 387 xSelectWPHistExtClip(slice, iDenom, true, true, true); 388 break; 389 default: 390 assert(0); 391 exit(1); 392 } 194 393 195 394 slice->setWpScaling( m_wp ); … … 251 450 // Weighting factor limitation 252 451 const Int defaultWeight = (1<<log2Denom); 253 const Int deltaWeight = ( defaultWeight - weight);452 const Int deltaWeight = (weight - defaultWeight); 254 453 255 454 if(deltaWeight >= range || deltaWeight < -range) … … 269 468 270 469 470 /** select whether weighted pred enables or not. 471 * \param TComSlice *slice 472 * \param log2Denom 473 * \returns Bool 474 */ 475 Bool WeightPredAnalysis::xSelectWPHistExtClip(TComSlice *const slice, const Int log2Denom, const Bool bDoEnhancement, const Bool bClipInitialSADWP, const Bool bUseHistogram) 476 { 477 const TComPicYuv *const pPic = slice->getPic()->getPicYuvOrg(); 478 const Int defaultWeight = 1<<log2Denom; 479 const Int numPredDir = slice->isInterP() ? 1 : 2; 480 const Bool useHighPrecision = slice->getSPS()->getSpsRangeExtension().getHighPrecisionOffsetsEnabledFlag(); 481 482 assert (numPredDir <= Int(NUM_REF_PIC_LIST_01)); 483 484 for ( Int refList = 0; refList < numPredDir; refList++ ) 485 { 486 const RefPicList eRefPicList = ( refList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 ); 487 488 for ( Int refIdxTemp = 0; refIdxTemp < slice->getNumRefIdx(eRefPicList); refIdxTemp++ ) 489 { 490 Bool useChromaWeight = false; 491 492 for(Int comp=0; comp<pPic->getNumberValidComponents(); comp++) 493 { 494 const ComponentID compID = ComponentID(comp); 495 const Pel *pOrg = pPic->getAddr(compID); 496 const Pel *pRef = slice->getRefPic(eRefPicList, refIdxTemp)->getPicYuvRec()->getAddr(compID); 497 const Int orgStride = pPic->getStride(compID); 498 const Int refStride = slice->getRefPic(eRefPicList, refIdxTemp)->getPicYuvRec()->getStride(compID); 499 const Int width = pPic->getWidth(compID); 500 const Int height = pPic->getHeight(compID); 501 const Int bitDepth = slice->getSPS()->getBitDepth(toChannelType(compID)); 502 WPScalingParam &wp = m_wp[refList][refIdxTemp][compID]; 503 Int weight = wp.iWeight; 504 Int offset = wp.iOffset; 505 Int weightDef = defaultWeight; 506 Int offsetDef = 0; 507 508 // calculate SAD costs with/without wp for luma 509 const Int64 SADnoWP = xCalcSADvalueWPOptionalClip(bitDepth, pOrg, pRef, width, height, orgStride, refStride, log2Denom, defaultWeight, 0, useHighPrecision, bClipInitialSADWP); 510 if (SADnoWP > 0) 511 { 512 const Int64 SADWP = xCalcSADvalueWPOptionalClip(bitDepth, pOrg, pRef, width, height, orgStride, refStride, log2Denom, weight, offset, useHighPrecision, bClipInitialSADWP); 513 const Double dRatioSAD = (Double)SADWP / (Double)SADnoWP; 514 Double dRatioSr0SAD = std::numeric_limits<Double>::max(); 515 Double dRatioSrSAD = std::numeric_limits<Double>::max(); 516 517 if (bUseHistogram) 518 { 519 std::vector<Int> histogramOrg;// = pPic->getHistogram(compID); 520 std::vector<Int> histogramRef;// = slice->getRefPic(eRefPicList, refIdxTemp)->getPicYuvRec()->getHistogram(compID); 521 std::vector<Int> searchedHistogram; 522 523 // Compute histograms 524 xCalcHistogram(pOrg, histogramOrg, width, height, orgStride, 1 << bitDepth); 525 xCalcHistogram(pRef, histogramRef, width, height, refStride, 1 << bitDepth); 526 527 // Do a histogram search around DC WP parameters; resulting distortion and 'searchedHistogram' is discarded 528 xSearchHistogram(histogramOrg, histogramRef, searchedHistogram, bitDepth, log2Denom, weight, offset, useHighPrecision, compID); 529 // calculate updated WP SAD 530 const Int64 SADSrWP = xCalcSADvalueWP(bitDepth, pOrg, pRef, width, height, orgStride, refStride, log2Denom, weight, offset, useHighPrecision); 531 dRatioSrSAD = (Double)SADSrWP / (Double)SADnoWP; 532 533 if (bDoEnhancement) 534 { 535 // Do the same around the default ones; resulting distortion and 'searchedHistogram' is discarded 536 xSearchHistogram(histogramOrg, histogramRef, searchedHistogram, bitDepth, log2Denom, weightDef, offsetDef, useHighPrecision, compID); 537 // calculate updated WP SAD 538 const Int64 SADSr0WP = xCalcSADvalueWP(bitDepth, pOrg, pRef, width, height, orgStride, refStride, log2Denom, weightDef, offsetDef, useHighPrecision); 539 dRatioSr0SAD = (Double)SADSr0WP / (Double)SADnoWP; 540 } 541 } 542 543 if(min(dRatioSr0SAD, min(dRatioSAD, dRatioSrSAD)) >= WEIGHT_PRED_SAD_RELATIVE_TO_NON_WEIGHT_PRED_SAD) 544 { 545 wp.bPresentFlag = false; 546 wp.iOffset = 0; 547 wp.iWeight = defaultWeight; 548 wp.uiLog2WeightDenom = log2Denom; 549 } 550 else 551 { 552 if (compID != COMPONENT_Y) 553 { 554 useChromaWeight = true; 555 } 556 557 if (dRatioSr0SAD < dRatioSrSAD && dRatioSr0SAD < dRatioSAD) 558 { 559 wp.bPresentFlag = true; 560 wp.iOffset = offsetDef; 561 wp.iWeight = weightDef; 562 wp.uiLog2WeightDenom = log2Denom; 563 } 564 else if (dRatioSrSAD < dRatioSAD) 565 { 566 wp.bPresentFlag = true; 567 wp.iOffset = offset; 568 wp.iWeight = weight; 569 wp.uiLog2WeightDenom = log2Denom; 570 } 571 } 572 } 573 else // (SADnoWP <= 0) 574 { 575 wp.bPresentFlag = false; 576 wp.iOffset = 0; 577 wp.iWeight = defaultWeight; 578 wp.uiLog2WeightDenom = log2Denom; 579 } 580 } 581 582 for(Int comp=1; comp<pPic->getNumberValidComponents(); comp++) 583 { 584 m_wp[refList][refIdxTemp][comp].bPresentFlag = useChromaWeight; 585 } 586 } 587 } 588 589 return true; 590 } 591 271 592 //! select whether weighted pred enables or not. 272 593 Bool WeightPredAnalysis::xSelectWP(TComSlice *const slice, const Int log2Denom) 273 594 { 274 595 TComPicYuv *const pPic = slice->getPic()->getPicYuvOrg(); 275 const Int iDefaultWeight = ((Int)1<<log2Denom);276 const Int iNumPredDir= slice->isInterP() ? 1 : 2;596 const Int defaultWeight = 1<<log2Denom; 597 const Int numPredDir = slice->isInterP() ? 1 : 2; 277 598 const Bool useHighPrecisionPredictionWeighting = slice->getSPS()->getSpsRangeExtension().getHighPrecisionOffsetsEnabledFlag(); 278 599 279 assert ( iNumPredDir <= Int(NUM_REF_PIC_LIST_01));280 281 for ( Int iRefList = 0; iRefList < iNumPredDir; iRefList++ )282 { 283 const RefPicList eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 );284 285 for ( Int iRefIdxTemp = 0; iRefIdxTemp < slice->getNumRefIdx(eRefPicList); iRefIdxTemp++ )286 { 287 Int64 iSADWP = 0, iSADnoWP = 0;600 assert (numPredDir <= Int(NUM_REF_PIC_LIST_01)); 601 602 for ( Int refList = 0; refList < numPredDir; refList++ ) 603 { 604 const RefPicList eRefPicList = ( refList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 ); 605 606 for ( Int refIdxTemp = 0; refIdxTemp < slice->getNumRefIdx(eRefPicList); refIdxTemp++ ) 607 { 608 Int64 SADWP = 0, SADnoWP = 0; 288 609 289 610 for(Int comp=0; comp<pPic->getNumberValidComponents(); comp++) … … 291 612 const ComponentID compID = ComponentID(comp); 292 613 Pel *pOrg = pPic->getAddr(compID); 293 Pel *pRef = slice->getRefPic(eRefPicList, iRefIdxTemp)->getPicYuvRec()->getAddr(compID);294 const Int iOrgStride = pPic->getStride(compID);295 const Int iRefStride = slice->getRefPic(eRefPicList, iRefIdxTemp)->getPicYuvRec()->getStride(compID);296 const Int iWidth = pPic->getWidth(compID);297 const Int iHeight = pPic->getHeight(compID);614 Pel *pRef = slice->getRefPic(eRefPicList, refIdxTemp)->getPicYuvRec()->getAddr(compID); 615 const Int orgStride = pPic->getStride(compID); 616 const Int refStride = slice->getRefPic(eRefPicList, refIdxTemp)->getPicYuvRec()->getStride(compID); 617 const Int width = pPic->getWidth(compID); 618 const Int height = pPic->getHeight(compID); 298 619 const Int bitDepth = slice->getSPS()->getBitDepth(toChannelType(compID)); 299 620 300 621 // calculate SAD costs with/without wp for luma 301 iSADWP += xCalcSADvalueWP(bitDepth, pOrg, pRef, iWidth, iHeight, iOrgStride, iRefStride, log2Denom, m_wp[iRefList][iRefIdxTemp][compID].iWeight, m_wp[iRefList][iRefIdxTemp][compID].iOffset, useHighPrecisionPredictionWeighting);302 iSADnoWP += xCalcSADvalueWP(bitDepth, pOrg, pRef, iWidth, iHeight, iOrgStride, iRefStride, log2Denom, iDefaultWeight, 0, useHighPrecisionPredictionWeighting);303 } 304 305 const Double dRatio = ((Double)iSADWP / (Double)iSADnoWP);306 if(dRatio >= (Double)DTHRESH)622 SADWP += xCalcSADvalueWP(bitDepth, pOrg, pRef, width, height, orgStride, refStride, log2Denom, m_wp[refList][refIdxTemp][compID].iWeight, m_wp[refList][refIdxTemp][compID].iOffset, useHighPrecisionPredictionWeighting); 623 SADnoWP += xCalcSADvalueWP(bitDepth, pOrg, pRef, width, height, orgStride, refStride, log2Denom, defaultWeight, 0, useHighPrecisionPredictionWeighting); 624 } 625 626 const Double dRatio = SADnoWP > 0 ? (((Double)SADWP / (Double)SADnoWP)) : std::numeric_limits<Double>::max(); 627 if(dRatio >= WEIGHT_PRED_SAD_RELATIVE_TO_NON_WEIGHT_PRED_SAD) 307 628 { 308 629 for(Int comp=0; comp<pPic->getNumberValidComponents(); comp++) 309 630 { 310 m_wp[iRefList][iRefIdxTemp][comp].bPresentFlag = false; 311 m_wp[iRefList][iRefIdxTemp][comp].iOffset = 0; 312 m_wp[iRefList][iRefIdxTemp][comp].iWeight = iDefaultWeight; 313 m_wp[iRefList][iRefIdxTemp][comp].uiLog2WeightDenom = log2Denom; 631 WPScalingParam &wp=m_wp[refList][refIdxTemp][comp]; 632 wp.bPresentFlag = false; 633 wp.iOffset = 0; 634 wp.iWeight = defaultWeight; 635 wp.uiLog2WeightDenom = log2Denom; 314 636 } 315 637 } … … 320 642 } 321 643 322 323 //! calculate SAD values for both WP version and non-WP version. 324 Int64 WeightPredAnalysis::xCalcSADvalueWP(const Int bitDepth, 325 const Pel *pOrgPel, 326 const Pel *pRefPel, 327 const Int iWidth, 328 const Int iHeight, 329 const Int iOrgStride, 330 const Int iRefStride, 331 const Int iLog2Denom, 332 const Int iWeight, 333 const Int iOffset, 334 const Bool useHighPrecisionPredictionWeighting) 335 { 336 const Int64 iSize = iWidth*iHeight; 337 const Int64 iRealLog2Denom = useHighPrecisionPredictionWeighting ? iLog2Denom : (iLog2Denom + (bitDepth - 8)); 338 339 Int64 iSAD = 0; 340 for( Int y = 0; y < iHeight; y++ ) 341 { 342 for( Int x = 0; x < iWidth; x++ ) 343 { 344 iSAD += ABS(( ((Int64)pOrgPel[x]<<(Int64)iLog2Denom) - ( (Int64)pRefPel[x] * (Int64)iWeight + ((Int64)iOffset<<iRealLog2Denom) ) ) ); 345 } 346 pOrgPel += iOrgStride; 347 pRefPel += iRefStride; 348 } 349 350 return (iSAD/iSize); 351 } 644 // Alternatively, a SSE-based measure could be used instead. 645 // The respective function has been removed as it currently redundant. 646 static 647 Int64 xCalcSADvalueWP(const Int bitDepth, 648 const Pel *pOrgPel, 649 const Pel *pRefPel, 650 const Int width, 651 const Int height, 652 const Int orgStride, 653 const Int refStride, 654 const Int log2Denom, 655 const Int weight, 656 const Int offset, 657 const Bool useHighPrecision) 658 { 659 //const Int64 iSize = iWidth*iHeight; 660 const Int64 realLog2Denom = useHighPrecision ? log2Denom : (log2Denom + (bitDepth - 8)); 661 const Int64 realOffset = ((Int64)offset)<<realLog2Denom; 662 663 Int64 SAD = 0; 664 for( Int y = 0; y < height; y++ ) 665 { 666 for( Int x = 0; x < width; x++ ) 667 { 668 SAD += abs(( ((Int64)pOrgPel[x] << (Int64) log2Denom) - ( (Int64) pRefPel[x] * (Int64) weight + (realOffset) ) ) ); 669 } 670 pOrgPel += orgStride; 671 pRefPel += refStride; 672 } 673 674 //return (iSAD/iSize); 675 return SAD; 676 } 677 678 static 679 Int64 xCalcSADvalueWPOptionalClip(const Int bitDepth, 680 const Pel *pOrgPel, 681 const Pel *pRefPel, 682 const Int width, 683 const Int height, 684 const Int orgStride, 685 const Int refStride, 686 const Int log2Denom, 687 const Int weight, 688 const Int offset, 689 const Bool useHighPrecision, 690 const Bool clipped) 691 { 692 Int64 SAD = 0; 693 if (clipped) 694 { 695 const Int64 realLog2Denom = useHighPrecision ? 0 : (bitDepth - 8); 696 const Int64 realOffset = (Int64)offset<<realLog2Denom; 697 const Int64 roundOffset = (log2Denom == 0) ? 0 : 1 << (log2Denom - 1); 698 const Int64 minValue = 0; 699 const Int64 maxValue = (1 << bitDepth) - 1; 700 701 for( Int y = 0; y < height; y++ ) 702 { 703 for( Int x = 0; x < width; x++ ) 704 { 705 Int64 scaledValue = Clip3(minValue, maxValue, ((((Int64) pRefPel[x] * (Int64) weight + roundOffset) ) >> (Int64) log2Denom) + realOffset); 706 SAD += abs((Int64)pOrgPel[x] - scaledValue); 707 } 708 pOrgPel += orgStride; 709 pRefPel += refStride; 710 } 711 } 712 else 713 { 714 //const Int64 iSize = iWidth*iHeight; 715 const Int64 realLog2Denom = useHighPrecision ? log2Denom : (log2Denom + (bitDepth - 8)); 716 const Int64 realOffset = ((Int64)offset)<<realLog2Denom; 717 718 for( Int y = 0; y < height; y++ ) 719 { 720 for( Int x = 0; x < width; x++ ) 721 { 722 SAD += abs(( ((Int64)pOrgPel[x] << (Int64) log2Denom) - ( (Int64) pRefPel[x] * (Int64) weight + (realOffset) ) ) ); 723 } 724 pOrgPel += orgStride; 725 pRefPel += refStride; 726 } 727 } 728 return SAD; 729 } -
TabularUnified trunk/source/Lib/TLibEncoder/WeightPredAnalysis.h ¶
r1313 r1386 52 52 53 53 Bool xSelectWP (TComSlice *const slice, const Int log2Denom); 54 Bool xSelectWPHistExtClip (TComSlice *const slice, const Int log2Denom, const Bool bDoEnhancement, const Bool bClipInitialSADWP, const Bool bUseHistogram); 54 55 Bool xUpdatingWPParameters(TComSlice *const slice, const Int log2Denom); 55 56 Int64 xCalcSADvalueWP (const Int bitDepth,57 const Pel *pOrgPel,58 const Pel *pRefPel,59 const Int iWidth,60 const Int iHeight,61 const Int iOrgStride,62 const Int iRefStride,63 const Int iLog2Denom,64 const Int iWeight,65 const Int iOffset,66 const Bool useHighPrecisionPredictionWeighting);67 56 68 57 public: … … 72 61 // WP analysis : 73 62 Void xCalcACDCParamSlice (TComSlice *const slice); 74 Void xEstimateWPParamSlice(TComSlice *const slice );63 Void xEstimateWPParamSlice(TComSlice *const slice, const WeightedPredictionMethod method); 75 64 Void xCheckWPEnable (TComSlice *const slice); 76 65 }; -
TabularUnified trunk/source/Lib/TLibRenderer/TRenFilter.cpp ¶
r1313 r1386 36 36 #include "TRenFilter.h" 37 37 #include "TRenInterpFilter.h" 38 #if NH_3D 38 #if NH_3D_VSO 39 39 40 40 ///// COMMON ///// -
TabularUnified trunk/source/Lib/TLibRenderer/TRenFilter.h ¶
r1313 r1386 39 39 #include "TRenImage.h" 40 40 #include "TRenInterpFilter.h" 41 #if NH_3D 41 #if NH_3D_VSO 42 42 43 43 typedef Int (TRenInterpFilter<REN_BIT_DEPTH>::*FpChromaIntFilt) ( Pel*, Int ); -
TabularUnified trunk/source/Lib/TLibRenderer/TRenImage.cpp ¶
r1313 r1386 37 37 #include "TRenFilter.h" 38 38 #include "assert.h" 39 #if NH_3D 39 #if NH_3D_VSO 40 40 41 41 -
TabularUnified trunk/source/Lib/TLibRenderer/TRenImage.h ¶
r1313 r1386 39 39 #include "../TLibCommon/TComPicYuv.h" 40 40 #include "TRenImagePlane.h" 41 #if NH_3D 41 #if NH_3D_VSO 42 42 43 43 -
TabularUnified trunk/source/Lib/TLibRenderer/TRenImagePlane.cpp ¶
r1313 r1386 36 36 #include "TRenFilter.h" 37 37 #include <string.h> 38 #if NH_3D 38 #if NH_3D_VSO 39 39 40 40 /////// TRenImagePlane /////// -
TabularUnified trunk/source/Lib/TLibRenderer/TRenImagePlane.h ¶
r1313 r1386 39 39 #include "../TLibCommon/TComPicYuv.h" 40 40 41 #if NH_3D 41 #if NH_3D_VSO 42 42 #define PelImagePlane TRenImagePlane<Pel> 43 43 #define DoubleImagePlane TRenImagePlane<Double> -
TabularUnified trunk/source/Lib/TLibRenderer/TRenInterpFilter.cpp ¶
r1313 r1386 39 39 40 40 #include "TRenInterpFilter.h" 41 #if NH_3D 41 #if NH_3D_VSO 42 42 43 43 // ==================================================================================================================== -
TabularUnified trunk/source/Lib/TLibRenderer/TRenInterpFilter.h ¶
r1313 r1386 44 44 #include "TLibCommon/CommonDef.h" 45 45 #include "assert.h" 46 #if NH_3D 46 #if NH_3D_VSO 47 47 48 48 // ==================================================================================================================== -
TabularUnified trunk/source/Lib/TLibRenderer/TRenModSetupStrParser.cpp ¶
r1313 r1386 37 37 #include "TRenModSetupStrParser.h" 38 38 39 #if NH_3D 39 #if NH_3D_VSO 40 40 Int 41 41 TRenModSetupStrParser::getNumOfModels() … … 153 153 154 154 Void 155 TRenModSetupStrParser::setString( Int iNumOfBaseViews, Char* pchSetStr )155 TRenModSetupStrParser::setString( Int iNumOfBaseViews, TChar* pchSetStr ) 156 156 { 157 157 for (Int iContent = 0; iContent < 2; iContent++) … … 178 178 TRenModSetupStrParser::xParseString() 179 179 { 180 Char cChar;180 TChar cChar; 181 181 xGetNextChar(cChar); 182 182 while( cChar != '\0' ) … … 220 220 m_bCurrentViewSet = false; 221 221 222 Char cChar;222 TChar cChar; 223 223 xGetNextCharGoOn( cChar ); 224 224 xError( cChar != '[' ); … … 249 249 250 250 Void 251 TRenModSetupStrParser::xReadViews( Char cType )252 { 253 Char cChar;251 TRenModSetupStrParser::xReadViews( TChar cType ) 252 { 253 TChar cChar; 254 254 xGetNextCharGoOn( cChar ); 255 255 xError( cChar != '(' ); … … 272 272 273 273 Void 274 TRenModSetupStrParser::xReadViewInfo( Char cType )274 TRenModSetupStrParser::xReadViewInfo( TChar cType ) 275 275 { 276 276 std::vector<Int> aiViewNums; … … 280 280 { 281 281 case 'B': 282 Char cVideoType;283 Char cDepthType;282 TChar cVideoType; 283 TChar cDepthType; 284 284 285 285 xGetNextCharGoOn ( cVideoType ); … … 317 317 case 'L': 318 318 case 'R': 319 Char cRefType;319 TChar cRefType; 320 320 xGetNextCharGoOn ( cRefType ); 321 321 xGetViewNumberRange( aiViewNums ); … … 328 328 329 329 Void 330 TRenModSetupStrParser::xAddBaseView( Int iViewIdx, Char cVideoType,Char cDepthType )330 TRenModSetupStrParser::xAddBaseView( Int iViewIdx, TChar cVideoType, TChar cDepthType ) 331 331 { 332 332 AOF( m_bCurrentViewSet ); … … 334 334 if ( cDepthType == 'x' ) cDepthType = 'o'; 335 335 if ( cVideoType == 'x' ) cVideoType = 'o'; 336 337 338 336 339 337 xError( cDepthType != 'o' && cDepthType != 'c' && cVideoType != 'r' ); 340 338 xError( cVideoType != 'o' && cVideoType != 'c' && cVideoType != 'r' ); … … 346 344 347 345 Void 348 TRenModSetupStrParser::xAddSynthView( Int iViewNum, Char cType,Char cRefType )346 TRenModSetupStrParser::xAddSynthView( Int iViewNum, TChar cType, TChar cRefType ) 349 347 { 350 348 AOF( m_bCurrentViewSet ); … … 399 397 size_t iStartPos; 400 398 size_t iEndPos; 401 Char cChar;399 TChar cChar; 402 400 xGetNextCharGoOn(cChar ); 403 401 if (cChar == '{') … … 424 422 425 423 size_t iNumElem = iEndPos - iStartPos + 1; 426 Char* pcTempBuffer = newChar[ iNumElem + 1];424 TChar* pcTempBuffer = new TChar[ iNumElem + 1]; 427 425 strncpy( pcTempBuffer, m_pchSetStr + iStartPos, iNumElem ); 428 426 pcTempBuffer[iNumElem] = '\0'; … … 433 431 434 432 Void 435 TRenModSetupStrParser::xGetNextCharGoOn( Char& rcNextChar )433 TRenModSetupStrParser::xGetNextCharGoOn( TChar& rcNextChar ) 436 434 { 437 435 while ( m_pchSetStr[m_iPosInStr] == ' ' || m_pchSetStr[m_iPosInStr] == ',' ) … … 445 443 446 444 Void 447 TRenModSetupStrParser::xGetNextChar( Char& rcNextChar )445 TRenModSetupStrParser::xGetNextChar( TChar& rcNextChar ) 448 446 { 449 447 size_t iPos = m_iPosInStr; -
TabularUnified trunk/source/Lib/TLibRenderer/TRenModSetupStrParser.h ¶
r1356 r1386 39 39 #include "../TLibCommon/TypeDef.h" 40 40 #include "../TAppCommon/TAppComCamPara.h" 41 #if NH_3D 41 #if NH_3D_VSO 42 42 43 43 … … 92 92 TRenModSetupStrParser(); 93 93 94 Void setString( Int iNumOfBaseViews, Char* pchSetStr );94 Void setString( Int iNumOfBaseViews, TChar* pchSetStr ); 95 95 96 96 private: … … 112 112 Int m_iNumberOfModels; 113 113 114 Char* m_pchSetStr;114 TChar* m_pchSetStr; 115 115 size_t m_iPosInStr; 116 116 … … 118 118 Void xParseString(); 119 119 Void xParseSourceView(); 120 Void xReadViews ( Char cType );121 Void xReadViewInfo ( Char cType );122 Void xAddBaseView ( Int iViewIdx, Char cVideoType,Char cDepthType );123 Void xAddSynthView ( Int iViewNum, Char cType,Char cRefType );120 Void xReadViews ( TChar cType ); 121 Void xReadViewInfo ( TChar cType ); 122 Void xAddBaseView ( Int iViewIdx, TChar cVideoType, TChar cDepthType ); 123 Void xAddSynthView ( Int iViewNum, TChar cType, TChar cRefType ); 124 124 Void xError ( Bool bIsError ); 125 125 Void xGetViewNumberRange( std::vector<Int>& raiViewNumbers ); 126 Void xGetNextCharGoOn ( Char& rcNextChar );127 Void xGetNextChar ( Char& rcNextChar );126 Void xGetNextCharGoOn ( TChar& rcNextChar ); 127 Void xGetNextChar ( TChar& rcNextChar ); 128 128 }; 129 129 -
TabularUnified trunk/source/Lib/TLibRenderer/TRenTop.cpp ¶
r1313 r1386 40 40 #include <math.h> 41 41 #include "../TLibCommon/CommonDef.h" 42 #if NH_3D 42 #if NH_3D_VSO 43 43 44 44 -
TabularUnified trunk/source/Lib/TLibRenderer/TRenTop.h ¶
r1313 r1386 39 39 #include "../TLibCommon/TComPicYuv.h" 40 40 41 #if NH_3D 41 #if NH_3D_VSO 42 42 #include <list> 43 43 #include <vector> -
TabularUnified trunk/source/Lib/TLibVideoIO/TVideoIOYuv.cpp ¶
r1313 r1386 95 95 } 96 96 97 static Void 98 copyPlane(const TComPicYuv &src, const ComponentID srcPlane, TComPicYuv &dest, const ComponentID destPlane); 97 99 98 100 // ==================================================================================================================== … … 116 118 * \param internalBitDepth bit-depth array to scale image data to/from when reading/writing. 117 119 */ 118 Void TVideoIOYuv::open( Char* pchFile, Bool bWriteMode, const Int fileBitDepth[MAX_NUM_CHANNEL_TYPE], const Int MSBExtendedBitDepth[MAX_NUM_CHANNEL_TYPE], const Int internalBitDepth[MAX_NUM_CHANNEL_TYPE] )120 Void TVideoIOYuv::open( const std::string &fileName, Bool bWriteMode, const Int fileBitDepth[MAX_NUM_CHANNEL_TYPE], const Int MSBExtendedBitDepth[MAX_NUM_CHANNEL_TYPE], const Int internalBitDepth[MAX_NUM_CHANNEL_TYPE] ) 119 121 { 120 122 //NOTE: files cannot have bit depth greater than 16 … … 141 143 if ( bWriteMode ) 142 144 { 143 m_cHandle.open( pchFile, ios::binary | ios::out );145 m_cHandle.open( fileName.c_str(), ios::binary | ios::out ); 144 146 145 147 if( m_cHandle.fail() ) … … 151 153 else 152 154 { 153 m_cHandle.open( pchFile, ios::binary | ios::in );155 m_cHandle.open( fileName.c_str(), ios::binary | ios::in ); 154 156 155 157 if( m_cHandle.fail() ) … … 217 219 218 220 /* fall back to consuming the input */ 219 Char buf[512];221 TChar buf[512]; 220 222 const streamoff offset_mod_bufsize = offset % sizeof(buf); 221 223 for (streamoff i = 0; i < offset - offset_mod_bufsize; i += sizeof(buf)) … … 274 276 const UInt stride_file = (width444 * (is16bit ? 2 : 1)) >> csx_file; 275 277 276 UChar *buf = new UChar[stride_file]; 278 std::vector<UChar> bufVec(stride_file); 279 UChar *buf=&(bufVec[0]); 277 280 278 281 if (compID!=COMPONENT_Y && (fileFormat==CHROMA_400 || destFormat==CHROMA_400)) … … 297 300 if (fd.eof() || fd.fail() ) 298 301 { 299 delete[] buf;300 302 return false; 301 303 } … … 311 313 { 312 314 // read a new line 313 fd.read(reinterpret_cast< Char*>(buf), stride_file);315 fd.read(reinterpret_cast<TChar*>(buf), stride_file); 314 316 if (fd.eof() || fd.fail() ) 315 317 { 316 delete[] buf;317 318 return false; 318 319 } … … 381 382 } 382 383 } 383 delete[] buf;384 384 return true; 385 385 } … … 419 419 const UInt height_file = height444>>csy_file; 420 420 421 UChar *buf = new UChar[stride_file]; 421 std::vector<UChar> bufVec(stride_file); 422 UChar *buf=&(bufVec[0]); 422 423 423 424 if (compID!=COMPONENT_Y && (fileFormat==CHROMA_400 || srcFormat==CHROMA_400)) … … 447 448 } 448 449 449 fd.write(reinterpret_cast< Char*>(buf), stride_file);450 fd.write(reinterpret_cast<const TChar*>(buf), stride_file); 450 451 if (fd.eof() || fd.fail() ) 451 452 { 452 delete[] buf;453 453 return false; 454 454 } … … 506 506 } 507 507 508 fd.write(reinterpret_cast< Char*>(buf), stride_file);508 fd.write(reinterpret_cast<const TChar*>(buf), stride_file); 509 509 if (fd.eof() || fd.fail() ) 510 510 { 511 delete[] buf;512 511 return false; 513 512 } … … 521 520 } 522 521 } 523 delete[] buf;524 522 return true; 525 523 } … … 544 542 const UInt height_file = height444>>csy_file; 545 543 546 UChar *buf = new UChar[stride_file * 2]; 544 std::vector<UChar> bufVec(stride_file * 2); 545 UChar *buf=&(bufVec[0]); 547 546 548 547 if (compID!=COMPONENT_Y && (fileFormat==CHROMA_400 || srcFormat==CHROMA_400)) … … 577 576 } 578 577 579 fd.write(reinterpret_cast< Char*>(buf), (stride_file * 2));578 fd.write(reinterpret_cast<const TChar*>(buf), (stride_file * 2)); 580 579 if (fd.eof() || fd.fail() ) 581 580 { 582 delete[] buf;583 581 return false; 584 582 } … … 642 640 } 643 641 644 fd.write(reinterpret_cast< Char*>(buf), (stride_file * 2));642 fd.write(reinterpret_cast<const TChar*>(buf), (stride_file * 2)); 645 643 if (fd.eof() || fd.fail() ) 646 644 { 647 delete[] buf;648 645 return false; 649 646 } … … 658 655 } 659 656 } 660 delete[] buf;661 657 return true; 662 658 } … … 760 756 if (ipCSC!=IPCOLOURSPACE_UNCHANGED) 761 757 { 762 cPicYuvCSCd.create (pPicYuvUser->getWidth(COMPONENT_Y), pPicYuvUser->getHeight(COMPONENT_Y), pPicYuvUser->getChromaFormat(), pPicYuvUser->getWidth(COMPONENT_Y), pPicYuvUser->getHeight(COMPONENT_Y), 0, false);758 cPicYuvCSCd.createWithoutCUInfo(pPicYuvUser->getWidth(COMPONENT_Y), pPicYuvUser->getHeight(COMPONENT_Y), pPicYuvUser->getChromaFormat() ); 763 759 ColourSpaceConvert(*pPicYuvUser, cPicYuvCSCd, ipCSC, false); 764 760 } … … 766 762 767 763 // compute actual YUV frame size excluding padding size 768 const Int iStride444 = pPicYuv->getStride(COMPONENT_Y);769 const UInt width444 = pPicYuv->getWidth(COMPONENT_Y) - confLeft - confRight;770 const UInt height444 = pPicYuv->getHeight(COMPONENT_Y) - confTop - confBottom;771 764 Bool is16bit = false; 772 765 Bool nonZeroBitDepthShift=false; 773 774 if ((width444 == 0) || (height444 == 0))775 {776 printf ("\nWarning: writing %d x %d luma sample output picture!", width444, height444);777 }778 766 779 767 for(UInt ch=0; ch<MAX_NUM_CHANNEL_TYPE; ch++) … … 799 787 { 800 788 dstPicYuv = new TComPicYuv; 801 dstPicYuv->create( pPicYuv->getWidth(COMPONENT_Y), pPicYuv->getHeight(COMPONENT_Y), pPicYuv->getChromaFormat(), pPicYuv->getWidth(COMPONENT_Y), pPicYuv->getHeight(COMPONENT_Y), 0, false ); 802 pPicYuv->copyToPic(dstPicYuv); 789 dstPicYuv->createWithoutCUInfo( pPicYuv->getWidth(COMPONENT_Y), pPicYuv->getHeight(COMPONENT_Y), pPicYuv->getChromaFormat() ); 803 790 804 791 for(UInt comp=0; comp<dstPicYuv->getNumberValidComponents(); comp++) … … 810 797 const Pel maxval = b709Compliance? ((0xff << (m_MSBExtendedBitDepth[ch] - 8)) -1) : (1 << m_MSBExtendedBitDepth[ch]) - 1; 811 798 799 copyPlane(*pPicYuv, compID, *dstPicYuv, compID); 812 800 scalePlane(dstPicYuv->getAddr(compID), dstPicYuv->getStride(compID), dstPicYuv->getWidth(compID), dstPicYuv->getHeight(compID), -m_bitdepthShift[ch], minval, maxval); 813 801 } … … 817 805 dstPicYuv = pPicYuv; 818 806 } 807 808 const Int stride444 = dstPicYuv->getStride(COMPONENT_Y); 809 const UInt width444 = dstPicYuv->getWidth(COMPONENT_Y) - confLeft - confRight; 810 const UInt height444 = dstPicYuv->getHeight(COMPONENT_Y) - confTop - confBottom; 811 812 if ((width444 == 0) || (height444 == 0)) 813 { 814 printf ("\nWarning: writing %d x %d luma sample output picture!", width444, height444); 815 } 816 819 817 #if NH_3D 820 818 for(UInt comp=0; retval && comp< ::getNumberValidComponents(format); comp++) … … 825 823 const ComponentID compID = ComponentID(comp); 826 824 const ChannelType ch=toChannelType(compID); 827 const UInt csx = pPicYuv->getComponentScaleX(compID);828 const UInt csy = pPicYuv->getComponentScaleY(compID);829 const Int planeOffset = (confLeft>>csx) + (confTop>>csy) * pPicYuv->getStride(compID);830 if (! writePlane(m_cHandle, dstPicYuv->getAddr(compID) + planeOffset, is16bit, iStride444, width444, height444, compID, dstPicYuv->getChromaFormat(), format, m_fileBitdepth[ch]))825 const UInt csx = dstPicYuv->getComponentScaleX(compID); 826 const UInt csy = dstPicYuv->getComponentScaleY(compID); 827 const Int planeOffset = (confLeft>>csx) + (confTop>>csy) * dstPicYuv->getStride(compID); 828 if (! writePlane(m_cHandle, dstPicYuv->getAddr(compID) + planeOffset, is16bit, stride444, width444, height444, compID, dstPicYuv->getChromaFormat(), format, m_fileBitdepth[ch])) 831 829 { 832 830 retval=false; … … 852 850 if (ipCSC!=IPCOLOURSPACE_UNCHANGED) 853 851 { 854 cPicYuvTopCSCd .create (pPicYuvUserTop ->getWidth(COMPONENT_Y), pPicYuvUserTop ->getHeight(COMPONENT_Y), pPicYuvUserTop ->getChromaFormat(), pPicYuvUserTop ->getWidth(COMPONENT_Y), pPicYuvUserTop ->getHeight(COMPONENT_Y), 0, false);855 cPicYuvBottomCSCd.create (pPicYuvUserBottom->getWidth(COMPONENT_Y), pPicYuvUserBottom->getHeight(COMPONENT_Y), pPicYuvUserBottom->getChromaFormat(), pPicYuvUserBottom->getWidth(COMPONENT_Y), pPicYuvUserBottom->getHeight(COMPONENT_Y), 0, false);852 cPicYuvTopCSCd .createWithoutCUInfo(pPicYuvUserTop ->getWidth(COMPONENT_Y), pPicYuvUserTop ->getHeight(COMPONENT_Y), pPicYuvUserTop ->getChromaFormat() ); 853 cPicYuvBottomCSCd.createWithoutCUInfo(pPicYuvUserBottom->getWidth(COMPONENT_Y), pPicYuvUserBottom->getHeight(COMPONENT_Y), pPicYuvUserBottom->getChromaFormat() ); 856 854 ColourSpaceConvert(*pPicYuvUserTop, cPicYuvTopCSCd, ipCSC, false); 857 855 ColourSpaceConvert(*pPicYuvUserBottom, cPicYuvBottomCSCd, ipCSC, false); … … 892 890 { 893 891 dstPicYuv = new TComPicYuv; 894 dstPicYuv->create( pPicYuv->getWidth(COMPONENT_Y), pPicYuv->getHeight(COMPONENT_Y), pPicYuv->getChromaFormat(), pPicYuv->getWidth(COMPONENT_Y), pPicYuv->getHeight(COMPONENT_Y), 0, false ); 895 pPicYuv->copyToPic(dstPicYuv); 892 dstPicYuv->createWithoutCUInfo( pPicYuv->getWidth(COMPONENT_Y), pPicYuv->getHeight(COMPONENT_Y), pPicYuv->getChromaFormat() ); 896 893 897 894 for(UInt comp=0; comp<dstPicYuv->getNumberValidComponents(); comp++) … … 903 900 const Pel maxval = b709Compliance? ((0xff << (m_MSBExtendedBitDepth[ch] - 8)) -1) : (1 << m_MSBExtendedBitDepth[ch]) - 1; 904 901 902 copyPlane(*pPicYuv, compID, *dstPicYuv, compID); 905 903 scalePlane(dstPicYuv->getAddr(compID), dstPicYuv->getStride(compID), dstPicYuv->getWidth(compID), dstPicYuv->getHeight(compID), -m_bitdepthShift[ch], minval, maxval); 906 904 } … … 916 914 assert(dstPicYuvTop->getNumberValidComponents() == dstPicYuvBottom->getNumberValidComponents()); 917 915 assert(dstPicYuvTop->getChromaFormat() == dstPicYuvBottom->getChromaFormat() ); 918 assert(dstPicYuvTop->getWidth(COMPONENT_Y) == dstPicYuvBottom->getWidth(COMPONENT_Y) );919 assert(dstPicYuvTop->getHeight(COMPONENT_Y) == dstPicYuvBottom->getHeight(COMPONENT_Y) );920 assert(dstPicYuvTop->getStride(COMPONENT_Y) == dstPicYuvBottom->getStride(COMPONENT_Y) );921 916 922 917 for(UInt comp=0; retval && comp<dstPicYuvTop->getNumberValidComponents(); comp++) … … 925 920 const ChannelType ch=toChannelType(compID); 926 921 922 assert(dstPicYuvTop->getWidth (compID) == dstPicYuvBottom->getWidth (compID)); 923 assert(dstPicYuvTop->getHeight (compID) == dstPicYuvBottom->getHeight (compID)); 927 924 assert(dstPicYuvTop->getComponentScaleX(compID) == dstPicYuvBottom->getComponentScaleX(compID)); 928 925 assert(dstPicYuvTop->getComponentScaleY(compID) == dstPicYuvBottom->getComponentScaleY(compID)); -
TabularUnified trunk/source/Lib/TLibVideoIO/TVideoIOYuv.h ¶
r1313 r1386 64 64 virtual ~TVideoIOYuv() {} 65 65 66 Void open ( Char* pchFile, Bool bWriteMode, const Int fileBitDepth[MAX_NUM_CHANNEL_TYPE], const Int MSBExtendedBitDepth[MAX_NUM_CHANNEL_TYPE], const Int internalBitDepth[MAX_NUM_CHANNEL_TYPE] ); ///< open or create file66 Void open ( const std::string &fileName, Bool bWriteMode, const Int fileBitDepth[MAX_NUM_CHANNEL_TYPE], const Int MSBExtendedBitDepth[MAX_NUM_CHANNEL_TYPE], const Int internalBitDepth[MAX_NUM_CHANNEL_TYPE] ); ///< open or create file 67 67 Void close (); ///< close file 68 68
Note: See TracChangeset for help on using the changeset viewer.