Changeset 5 in 3DVCSoftware for trunk/source/App/TAppEncoder
- Timestamp:
- 12 Dec 2011, 18:35:44 (13 years ago)
- Location:
- trunk/source/App/TAppEncoder
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/App/TAppEncoder/TAppEncCfg.cpp
r2 r5 1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2011, ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 1 34 2 35 … … 39 72 { 40 73 m_aidQP = NULL; 41 //GTVSO74 #if HHI_VSO 42 75 m_aaiERViewRefLutInd.resize( MAX_INPUT_VIEW_NUM ); 43 //GT VSO end 76 #endif 44 77 } 45 78 … … 89 122 free (m_pchBaseViewCameraNumbers); 90 123 124 #if HHI_VSO 91 125 if ( m_pchVSOConfig != NULL) 92 126 free ( m_pchVSOConfig ); 127 #endif 93 128 94 129 } … … 172 207 173 208 /* Coding structure paramters */ 174 ("Code cPictureStoreSize,cpss", m_uiCodedPictureStoreSize, 16u, "Size of coded picture Buffer")209 ("CodedPictureStoreSize,cpss", m_uiCodedPictureStoreSize, 16u, "Size of coded picture Buffer") 175 210 #if DCM_DECODING_REFRESH 176 211 ("DecodingRefreshType,-dr",m_iDecodingRefreshType, 0, "intra refresh, (0:none 1:CDR 2:IDR)") … … 178 213 ("GOPSize,g", m_iGOPSize, 1, "GOP size of temporal structure") 179 214 ("RateGOPSize,-rg",m_iRateGOPSize, -1, "GOP size of hierarchical QP assignment (-1: implies inherit GOPSize value)") 180 #if ! SB_NO_LowDelayCoding215 #if !HHI_NO_LowDelayCoding 181 216 ("LowDelayCoding", m_bUseLDC, false, "low-delay mode") 182 217 #endif … … 221 256 ("LoopFilterBetaOffset", m_iLoopFilterBetaOffset, 0 ) 222 257 223 //GT campara 258 /* Camera Paremetes */ 224 259 ("CameraParameterFile,cpf", m_pchCameraParameterFile, (Char *) 0, "Camera Parameter File Name") 225 260 ("BaseViewCameraNumbers" , m_pchBaseViewCameraNumbers, (Char *) 0, "Numbers of base views") 226 //GT campara end 261 227 262 228 263 /* View Synthesis Optimization */ 229 //GT VSO 264 265 #if HHI_VSO 230 266 ("VSOConfig", m_pchVSOConfig , (Char *) 0 , "VSO configuration") 231 267 ("VSO", m_bUseVSO , false , "Use VSO" ) 232 268 // GT: For development, will be removed later 233 269 ("VSOMode", m_uiVSOMode , (UInt) 4 , "VSO Mode") 234 ("LambdaScaleVSO", m_dLambdaScaleVSO , (Double) 0. 6, "Lambda Scaling for VSO")270 ("LambdaScaleVSO", m_dLambdaScaleVSO , (Double) 0.5 , "Lambda Scaling for VSO") 235 271 ("ForceLambdaScaleVSO", m_bForceLambdaScaleVSO , false , "Force using Lambda Scale VSO also in non-VSO-Mode") 236 #if RDO_DIST_INT272 #if HHI_VSO_DIST_INT 237 273 ("AllowNegDist", m_bAllowNegDist , true , "Allow negative Distortion in VSO") 238 274 #endif … … 242 278 ("VSERViewReferences_%d,evr_%d" , m_aaiERViewRefInd , vector<Int>() , MAX_INPUT_VIEW_NUM, "Numbers of external virtual reference views to be used for this view") 243 279 ("VSBaseViewReferences_%d,bvr_%d", m_aaiBaseViewRefInd , vector<Int>() , MAX_INPUT_VIEW_NUM, "Numbers of external virtual reference views to be used for this view") 244 //GT VSO end 280 #endif 245 281 246 282 /* Coding tools */ … … 281 317 ("FEN", m_bUseFastEnc, false, "fast encoder setting") 282 318 283 #if HHI_DMM_INTRA 284 ("DMM", m_bUseDepthModelModes, false, "add depth modes intra") 285 #endif 319 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 320 ("DMM", m_bUseDMM, false, "add depth modes intra") 321 #endif 322 #if HHI_MPI 286 323 ("MVI", m_bUseMVI, false, "use motion vector inheritance for depth map coding") 324 #endif 287 325 288 326 /* Multiview tools */ 327 #if DEPTH_MAP_GENERATION 289 328 ("PredDepthMapGen", m_uiPredDepthMapGeneration, (UInt)0, "generation of prediction depth maps for motion data prediction" ) 329 #endif 330 #if HHI_INTER_VIEW_MOTION_PRED 290 331 ("MultiviewMvPred", m_uiMultiviewMvPredMode, (UInt)0, "usage of predicted depth maps" ) 291 332 ("MultiviewMvRegMode", m_uiMultiviewMvRegMode, (UInt)0, "regularization mode for multiview motion vectors" ) 292 333 ("MultiviewMvRegLambdaScale", m_dMultiviewMvRegLambdaScale, (Double)0, "lambda scale for multiview motion vector regularization" ) 334 #endif 335 #if HHI_INTER_VIEW_RESIDUAL_PRED 293 336 ("MultiviewResPred", m_uiMultiviewResPredMode, (UInt)0, "usage of inter-view residual prediction" ) 294 295 ("OmitUnusedBlocks", m_bOmitUnusedBlocks, false, "omit blocks not used for rendering") 337 #endif 296 338 297 339 ("QpChangeFrame", m_iQpChangeFrame, PicOrderCnt(0), "start frame for QP change") 298 340 ("QpChangeOffsetVideo", m_iQpChangeOffsetVideo, 0, "QP change offset for video") 299 341 ("QpChangeOffsetDepth", m_iQpChangeOffsetDepth, 0, "QP change offset for depth") 300 #if SB_INTERVIEW_SKIP342 #if HHI_INTERVIEW_SKIP 301 343 ("InterViewSkip", m_uiInterViewSkip, (UInt)0, "usage of interview skip" ) 302 #if SB_INTERVIEW_SKIP_LAMBDA_SCALE344 #if HHI_INTERVIEW_SKIP_LAMBDA_SCALE 303 345 ("InterViewSkipLambdaScale", m_dInterViewSkipLambdaScale, (Double)8, "lambda scale for interview skip" ) 304 346 #endif … … 387 429 //GT QP Depth end 388 430 389 //GTVSO431 #if HHI_VSO 390 432 m_bUseVSO = m_bUseVSO && m_bUsingDepthMaps && (m_uiVSOMode != 0); 391 //GT VSO end 433 #endif 392 434 393 435 xCleanUpVectors(); 394 436 437 #if HHI_VSO 395 438 if ( m_abUseALF .size() < 2) 396 439 m_abUseALF .push_back( m_bUseVSO ? false : m_abUseALF[0] ); 397 440 398 441 if ( m_abUseRDOQ.size() < 2) 399 m_abUseRDOQ.push_back( m_bUseVSO ? false : m_abUseRDOQ[0] );442 m_abUseRDOQ.push_back( m_bUseVSO ? true : m_abUseRDOQ[0] ); 400 443 401 444 if ( m_abLoopFilterDisable.size() < 2) … … 404 447 if (m_abUseSAO.size() < 2) 405 448 m_abUseSAO.push_back ( m_bUseVSO ? false : m_abUseSAO[0] ); 406 407 //GT VSO 449 #else 450 if ( m_abUseALF .size() < 2) 451 m_abUseALF .push_back( m_abUseALF[0] ); 452 453 if ( m_abUseRDOQ.size() < 2) 454 m_abUseRDOQ.push_back( m_abUseRDOQ[0] ); 455 456 if ( m_abLoopFilterDisable.size() < 2) 457 m_abLoopFilterDisable.push_back( m_abLoopFilterDisable[0] ); 458 459 if (m_abUseSAO.size() < 2) 460 m_abUseSAO.push_back ( m_abUseSAO[0] ); 461 #endif 462 463 #if HHI_VSO 408 464 if ( m_bUseVSO ) 409 465 { … … 423 479 } 424 480 } 425 //GT VSO end 481 #endif 426 482 427 483 // set global variables … … 429 485 430 486 // read and check camera parameters 487 #if HHI_VSO 431 488 if ( m_bUseVSO && m_uiVSOMode == 4) 432 489 { … … 468 525 NULL, 469 526 LOG2_DISP_PREC_LUT ); 470 471 } 527 } 528 #else 529 m_cCameraData .init ( (UInt)m_iNumberOfViews, 530 m_uiInputBitDepth, 531 (UInt)m_iCodedCamParPrecision, 532 m_FrameSkip, 533 (UInt)m_iFrameToBeEncoded, 534 m_pchCameraParameterFile, 535 m_pchBaseViewCameraNumbers, 536 NULL, 537 NULL, 538 LOG2_DISP_PREC_LUT ); 539 #endif 540 541 472 542 // check validity of input parameters 473 543 xCheckParameter(); … … 558 628 559 629 xConfirmPara ( m_iCodedCamParPrecision < 0 || m_iCodedCamParPrecision > 5, "CodedCamParsPrecision must be in range of 0..5" ); 630 #if DEPTH_MAP_GENERATION 560 631 xConfirmPara ( m_uiPredDepthMapGeneration > 3, "PredDepthMapGen must be less than or equal to 3" ); 561 632 xConfirmPara ( m_uiPredDepthMapGeneration >= 2 && !m_bUsingDepthMaps, "PredDepthMapGen >= 2 requires CodeDepthMaps = 1" ); 633 #endif 634 #if HHI_INTER_VIEW_MOTION_PRED 562 635 xConfirmPara ( m_uiMultiviewMvPredMode > 7, "MultiviewMvPred must be less than or equal to 7" ); 563 636 xConfirmPara ( m_uiMultiviewMvPredMode > 0 && m_uiPredDepthMapGeneration == 0 , "MultiviewMvPred > 0 requires PredDepthMapGen > 0" ); … … 568 641 xConfirmPara ( Int( m_pchDepthInputFileList.size() ) < m_iNumberOfViews, "MultiviewMvRegMode > 0 requires the presence of input depth maps" ); 569 642 } 643 #endif 644 #if HHI_INTER_VIEW_RESIDUAL_PRED 570 645 xConfirmPara ( m_uiMultiviewResPredMode > 1, "MultiviewResPred must be less than or equal to 1" ); 571 646 xConfirmPara ( m_uiMultiviewResPredMode > 0 && m_uiPredDepthMapGeneration == 0 , "MultiviewResPred > 0 requires PredDepthMapGen > 0" ); 572 573 #if SB_INTERVIEW_SKIP 647 #endif 648 649 #if HHI_INTERVIEW_SKIP 574 650 xConfirmPara ( m_uiInterViewSkip > 1, "RenderingSkipMode > 1 not supported" ); 575 651 xConfirmPara ( m_uiInterViewSkip > 0 && !m_bUsingDepthMaps, "RenderingSkipMode > 0 requires CodeDepthMaps = 1" ); 576 xConfirmPara ( m_uiInterViewSkip > 0 && !m_bOmitUnusedBlocks, "RenderingSkipMode > 0 requires OmitUnusedBlocks = 1" );577 652 #endif 578 653 if( m_bUsingDepthMaps ) … … 581 656 xConfirmPara ( Int( m_pchDepthReconFileList.size() ) < m_iNumberOfViews, "Number of DepthReconFiles must be greater than or equal to NumberOfViews" ); 582 657 583 //GTVSO658 #if HHI_VSO 584 659 if( m_bUseVSO ) 585 660 { … … 592 667 xConfirmPara( Int( m_pchERRefFileList .size() ) < m_iNumberOfExternalRefs, "Number of ERRefFileFiles must be greater than or equal to NumberOfExternalRefs" ); 593 668 } 594 //GT VSO end 669 #endif 595 670 } 596 671 597 672 #if DCM_COMB_LIST 598 #if ! SB_NO_LowDelayCoding673 #if !HHI_NO_LowDelayCoding 599 674 xConfirmPara( m_bUseLComb==false && m_bUseLDC==false, "LComb can only be 0 if LowDelayCoding is 1" ); 600 675 #else … … 659 734 xCleanUpVector( m_pchDepthReconFileList, (char*)0 ); 660 735 661 //GTVSO736 #if HHI_VSO 662 737 if ( m_bUseVSO) 663 738 { 664 739 xCleanUpVector( m_pchERRefFileList, (char*)0 ); 665 740 } 666 //GT VSO end 741 #endif 667 742 } 668 743 … … 784 859 printf("Coded Camera Param. Precision: %d\n", m_iCodedCamParPrecision); 785 860 786 //GTVSO861 #if HHI_VSO 787 862 printf("Force use of Lambda Scale : %d\n", m_bForceLambdaScaleVSO ); 788 863 … … 792 867 printf("VSO Mode : %d\n", m_uiVSOMode ); 793 868 printf("VSO Config : %s\n", m_pchVSOConfig ); 794 #if RDO_DIST_INT869 #if HHI_VSO_DIST_INT 795 870 printf("VSO Negative Distortion : %d\n", m_bAllowNegDist ? 1 : 0); 796 871 #endif 797 872 } 798 //GT VSO end 799 800 printf("Omit unused blocks : %d\n", (m_bOmitUnusedBlocks )?(1):(0)); 873 #endif 874 801 875 802 876 printf("\n"); … … 849 923 printf("SAO:%d ", (m_abUseSAO [1] ? 1 : 0)); 850 924 printf("RDQ:%d ", (m_abUseRDOQ[1] ? 1 : 0)); 925 #if HHI_VSO 851 926 printf("VSO:%d ", m_bUseVSO ); 852 #if HHI_DMM_INTRA 853 printf("DMM:%d ", m_bUseDepthModelModes ); 854 #endif 927 #endif 928 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 929 printf("DMM:%d ", m_bUseDMM ); 930 #endif 931 #if HHI_MPI 855 932 printf("MVI:%d ", m_bUseMVI ? 1 : 0 ); 933 #endif 856 934 printf("\n"); 857 935 -
trunk/source/App/TAppEncoder/TAppEncCfg.h
r2 r5 1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2011, ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 1 34 2 35 … … 35 68 36 69 std::vector<char*> m_pchERRefFileList; ///< virtual external reference view files names 37 70 38 71 // source specification 39 72 Int m_iFrameRate; ///< source frame-rates (Hz) … … 44 77 Bool m_bUsePAD; ///< flag for using source padding 45 78 Int m_aiPad[2]; ///< number of padded pixels for width and height 46 79 47 80 Int m_iNumberOfViews; ///< number Views to Encode 48 81 Bool m_bUsingDepthMaps ; … … 56 89 Int m_iGOPSize; ///< GOP size of hierarchical structure 57 90 Int m_iRateGOPSize; ///< GOP size for QP variance 58 #if ! SB_NO_LowDelayCoding91 #if !HHI_NO_LowDelayCoding 59 92 Bool m_bUseLDC; ///< flag for using low-delay coding mode 60 93 #endif … … 63 96 Bool m_bLCMod; ///< flag for specifying whether the combined reference list for uni-prediction in B-slices is uploaded explicitly 64 97 #endif 65 // SB66 98 std::string m_cInputFormatString ; // GOP string 67 99 // coding quality 68 //GT QP Depth 100 69 101 std::vector<Double> m_adQP; ///< QP value of key-picture (floating point) [0] video, [1] depth 70 102 std::vector<Int> m_aiQP; ///< QP value of key-picture (integer) 71 //GT QP Depth end 103 72 104 Int m_aiTLayerQPOffset[MAX_TLAYER]; ///< QP offset corresponding to temporal layer depth 73 105 char* m_pchdQPFile; ///< QP offset for each slice (initialized from external file) … … 75 107 Int m_iMaxDeltaQP; ///< max. |delta QP| 76 108 UInt m_uiDeltaQpRD; ///< dQP range for multi-pass slice QP optimization 77 109 78 110 // coding unit (CU) definition 79 111 UInt m_uiMaxCUWidth; ///< max. CU width in pixel 80 112 UInt m_uiMaxCUHeight; ///< max. CU height in pixel 81 113 UInt m_uiMaxCUDepth; ///< max. CU depth 82 114 83 115 // transfom unit (TU) definition 84 116 UInt m_uiQuadtreeTULog2MaxSize; 85 117 UInt m_uiQuadtreeTULog2MinSize; 86 118 87 119 UInt m_uiQuadtreeTUMaxDepthInter; 88 120 UInt m_uiQuadtreeTUMaxDepthIntra; 89 121 90 122 // coding tools (bit-depth) 91 123 UInt m_uiInputBitDepth; ///< bit-depth of input file … … 95 127 #endif 96 128 UInt m_uiInternalBitDepth; ///< Internal bit-depth (BitDepth+BitIncrement) 97 129 98 130 #if MTK_SAO 99 vector<Bool> m_abUseSAO; 131 vector<Bool> m_abUseSAO; 100 132 #endif 101 133 … … 105 137 Int m_iALFEncodePassReduction; ///< ALF encoding pass, 0 = original 16-pass, 1 = 1-pass, 2 = 2-pass 106 138 #endif 107 139 108 140 vector<Bool> m_abLoopFilterDisable; ///< flag for using deblocking filter filter [0] - video, [1] - depth 109 141 Int m_iLoopFilterAlphaC0Offset; ///< alpha offset for deblocking filter 110 142 Int m_iLoopFilterBetaOffset; ///< beta offset for deblocking filter 111 143 112 144 // coding tools (entropy coder) 113 145 Int m_iSymbolMode; ///< entropy coder mode, 0 = VLC, 1 = CABAC 114 146 115 147 // coding tools (inter - merge motion partitions) 116 148 Bool m_bUseMRG; ///< SOPH: flag for using motion partition Merge Mode 117 118 #if LM_CHROMA 149 150 #if LM_CHROMA 119 151 Bool m_bUseLMChroma; ///< JL: Chroma intra prediction based on luma signal 120 152 #endif … … 123 155 Bool m_bUseRMP; 124 156 #endif 125 157 126 158 // coding tools (encoder-only parameters) 127 159 Bool m_bUseSBACRD; ///< flag for using RD optimization based on SBAC … … 134 166 Bool m_bUseFastEnc; ///< flag for using fast encoder setting 135 167 168 #if DEPTH_MAP_GENERATION 136 169 UInt m_uiPredDepthMapGeneration; ///< using of (virtual) depth maps for texture coding 170 #endif 171 #if HHI_INTER_VIEW_MOTION_PRED 137 172 UInt m_uiMultiviewMvPredMode; ///< usage of predictors for multi-view mv prediction 138 173 UInt m_uiMultiviewMvRegMode; ///< regularization for multiview motion vectors 139 174 Double m_dMultiviewMvRegLambdaScale; ///< lambda scale for multiview motion vectors regularization 175 #endif 176 #if HHI_INTER_VIEW_RESIDUAL_PRED 140 177 UInt m_uiMultiviewResPredMode; ///< using multiview residual prediction 141 142 #if SB_INTERVIEW_SKIP 178 #endif 179 180 #if HHI_INTERVIEW_SKIP 143 181 UInt m_uiInterViewSkip; ///< usage of interview skip mode ( do not transmit residual) 144 #if SB_INTERVIEW_SKIP_LAMBDA_SCALE182 #if HHI_INTERVIEW_SKIP_LAMBDA_SCALE 145 183 Double m_dInterViewSkipLambdaScale; ///< lambda scale for interview skip 146 184 #endif 147 185 #endif 148 //GT campara 186 149 187 // camera parameter 150 188 Char* m_pchCameraParameterFile; ///< camera parameter file 151 189 Char* m_pchBaseViewCameraNumbers; 152 TAppComCamPara m_cCameraData; 153 //GT campara end 190 TAppComCamPara m_cCameraData; 191 154 192 Int m_iCodedCamParPrecision; ///< precision for coding of camera parameters 155 193 194 #if HHI_INTERVIEW_SKIP 156 195 TRenTop m_cUsedPelsRenderer; ///< renderer for used pels map 157 158 //GT VSO 159 Char* m_pchVSOConfig; 160 Bool m_bUseVSO; ///< flag for using View Synthesis Optimization 161 162 //// Used for development by GT, might be removed later 196 #endif 197 198 #if HHI_VSO 199 Char* m_pchVSOConfig; 200 Bool m_bUseVSO; ///< flag for using View Synthesis Optimization 201 202 //// Used for development by GT, might be removed later 163 203 Double m_dLambdaScaleVSO; ///< Scaling factor for Lambda in VSO mode 164 204 Bool m_bForceLambdaScaleVSO; ///< Use Lambda Scale for depth even if VSO is turned off 165 #if RDO_DIST_INT166 Bool m_bAllowNegDist; ///< Allow negative distortion in VSO 167 #endif 168 UInt m_uiVSOMode; ///< Number of VSO Mode, 1 = , 2 = simple, org vs. ren, 3 = simple, ren vs. ren, 4 = full 205 #if HHI_VSO_DIST_INT 206 Bool m_bAllowNegDist; ///< Allow negative distortion in VSO 207 #endif 208 UInt m_uiVSOMode; ///< Number of VSO Mode, 1 = , 2 = simple, org vs. ren, 3 = simple, ren vs. ren, 4 = full 169 209 Int m_iNumberOfExternalRefs; ///< number Virtual External Reference Views 170 210 std::vector< std::vector<Int> > m_aaiBaseViewRefInd; ///< View numbers of Base View References 171 211 std::vector< std::vector<Int> > m_aaiERViewRefInd; ///< View numbers of External ViewReferences 172 212 std::vector< std::vector<Int> > m_aaiERViewRefLutInd; ///< Indices of LUTs used for External View References 173 174 //GT VSO end 175 213 #endif 214 176 215 Int m_iSliceMode; ///< 0: Disable all Recon slice limits, 1 : Maximum number of largest coding units per slice, 2: Maximum number of bytes in a slice 177 216 Int m_iSliceArgument; ///< If m_iSliceMode==1, m_iSliceArgument=max. # of largest coding units. If m_iSliceMode==2, m_iSliceArgument=max. # of bytes. … … 188 227 Bool m_bUseConstrainedIntraPred; ///< flag for using constrained intra prediction 189 228 #endif 190 #if HHI_DMM_INTRA 191 Bool m_bUseDepthModelModes; 192 #endif 229 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 230 Bool m_bUseDMM; 231 #endif 232 #if HHI_MPI 193 233 Bool m_bUseMVI; ///< flag for using Motion Vector Inheritance for depth map coding 194 Bool m_bOmitUnusedBlocks; ///< flag for not coding blocks not used for rendering 234 #endif 195 235 196 236 PicOrderCnt m_iQpChangeFrame; … … 211 251 Void xPrintParameter (); ///< print configuration values 212 252 Void xPrintUsage (); ///< print usage 213 253 214 254 Void xCleanUpVectors (); ///< clean up vector sizes 215 255 Void xInitCameraPars (); ///< init camera parameters … … 221 261 222 262 // util 223 Void xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend, Char* & rpchOutputFileName); 263 Void xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend, Char* & rpchOutputFileName); 224 264 Bool xConfirmParameter(Bool bflag, const char* message); 225 265 … … 227 267 template <class T> Void xCleanUpVector( std::vector<T>& rcVec, const T& rcInvalid ); 228 268 269 #if HHI_VSO 229 270 // Ren Model String 230 TRenModSetupStrParser m_cRenModStrParser; 271 TRenModSetupStrParser m_cRenModStrParser; 272 #endif 231 273 public: 232 274 233 275 TAppEncCfg(); 234 276 virtual ~TAppEncCfg(); 235 277 236 278 public: 237 279 Void create (); ///< create option handling class 238 280 Void destroy (); ///< destroy option handling class 239 281 Bool parseCfg ( Int argc, Char* argv[] ); ///< parse configuration file to fill member variables 240 282 241 283 };// END CLASS DEFINITION TAppEncCfg 242 284 -
trunk/source/App/TAppEncoder/TAppEncTop.cpp
r2 r5 1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2011, ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 1 34 2 35 … … 18 51 TAppEncTop::TAppEncTop() 19 52 { 20 //GTVSO53 #if HHI_VSO 21 54 m_iLastFramePutInERViewBuffer = -1; 22 //GT VSO end 55 #endif 23 56 } 24 57 … … 55 88 m_acTEncTopList[iViewIdx]->setRateGOPSize ( m_iRateGOPSize ); 56 89 57 // // SB58 90 m_acTEncTopList[iViewIdx]->setSeqStructure ( m_cInputFormatString ); 59 91 … … 79 111 m_acTEncTopList[iViewIdx]->setMaxDeltaQP ( m_iMaxDeltaQP ); 80 112 113 #if HHI_VSO 81 114 //====== VSO ========= 82 //GT VSO83 115 m_acTEncTopList[iViewIdx]->setForceLambdaScaleVSO ( false ); 84 116 m_acTEncTopList[iViewIdx]->setLambdaScaleVSO ( 1 ); 85 117 m_acTEncTopList[iViewIdx]->setVSOMode ( 0 ); 86 //GT VSO end 118 #endif 87 119 88 120 //====== Tool list ======== … … 109 141 m_acTEncTopList[iViewIdx]->setUseFastEnc ( m_bUseFastEnc ); 110 142 111 //GTVSO143 #if HHI_VSO 112 144 m_acTEncTopList[iViewIdx]->setUseVSO ( false ); //GT: might be enabled later for VSO Mode 4 113 //GT VSO end 145 #endif 114 146 115 147 m_acTEncTopList[iViewIdx]->setViewId ( (UInt)iViewIdx ); … … 120 152 m_acTEncTopList[iViewIdx]->setCodedScale ( m_cCameraData.getCodedScale () ); 121 153 m_acTEncTopList[iViewIdx]->setCodedOffset ( m_cCameraData.getCodedOffset () ); 154 #if DEPTH_MAP_GENERATION 122 155 m_acTEncTopList[iViewIdx]->setPredDepthMapGeneration ( m_uiPredDepthMapGeneration ); 156 m_acTEncTopList[iViewIdx]->setPdmPrecision ( (UInt)m_cCameraData.getPdmPrecision () ); 157 m_acTEncTopList[iViewIdx]->setPdmScaleNomDelta ( m_cCameraData.getPdmScaleNomDelta () ); 158 m_acTEncTopList[iViewIdx]->setPdmOffset ( m_cCameraData.getPdmOffset () ); 159 #endif 160 #if HHI_INTER_VIEW_MOTION_PRED 123 161 m_acTEncTopList[iViewIdx]->setMultiviewMvPredMode ( m_uiMultiviewMvPredMode ); 124 162 m_acTEncTopList[iViewIdx]->setMultiviewMvRegMode ( iViewIdx ? m_uiMultiviewMvRegMode : 0 ); 125 163 m_acTEncTopList[iViewIdx]->setMultiviewMvRegLambdaScale ( iViewIdx ? m_dMultiviewMvRegLambdaScale : 0.0 ); 126 m_acTEncTopList[iViewIdx]->setPdmPrecision ( (UInt)m_cCameraData.getPdmPrecision () ); 127 m_acTEncTopList[iViewIdx]->setPdmScaleNomDelta ( m_cCameraData.getPdmScaleNomDelta () ); 128 m_acTEncTopList[iViewIdx]->setPdmOffset ( m_cCameraData.getPdmOffset () ); 164 #endif 165 #if HHI_INTER_VIEW_RESIDUAL_PRED 129 166 m_acTEncTopList[iViewIdx]->setMultiviewResPredMode ( m_uiMultiviewResPredMode ); 130 131 #if SB_INTERVIEW_SKIP 167 #endif 168 169 170 #if HHI_INTERVIEW_SKIP 132 171 m_acTEncTopList[iViewIdx]->setInterViewSkip ( iViewIdx ? m_uiInterViewSkip : 0 ); 133 #if SB_INTERVIEW_SKIP_LAMBDA_SCALE134 m_acTEncTopList[iViewIdx]->setInterViewSkipLambdaScale ( iViewIdx ? m_dInterViewSkipLambdaScale : 1 );172 #if HHI_INTERVIEW_SKIP_LAMBDA_SCALE 173 m_acTEncTopList[iViewIdx]->setInterViewSkipLambdaScale ( iViewIdx ? (Int)m_dInterViewSkipLambdaScale : 1 ); 135 174 #endif 136 175 #endif … … 147 186 m_acTEncTopList[iViewIdx]->setUseRoundingControlBipred(m_useRoundingControlBipred); 148 187 #endif 149 #if HHI_DMM_ INTRA150 m_acTEncTopList[iViewIdx]->setUseD epthModelModes( false );188 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 189 m_acTEncTopList[iViewIdx]->setUseDMM( false ); 151 190 #endif 152 191 #if CONSTRAINED_INTRA_PRED … … 175 214 m_acTEncTopList[iViewIdx]->setUseSAO ( m_abUseSAO[0] ); 176 215 #endif 216 #if HHI_MPI 177 217 m_acTEncTopList[iViewIdx]->setUseMVI( false ); 218 #endif 178 219 179 220 m_acTEncTopList[iViewIdx]->setPictureDigestEnabled(m_pictureDigestEnabled); 180 m_acTEncTopList[iViewIdx]->setOmitUnusedBlocks ( m_bOmitUnusedBlocks && (iViewIdx != 0) );181 182 221 m_acTEncTopList[iViewIdx]->setQpChangeFrame( m_iQpChangeFrame ); 183 222 m_acTEncTopList[iViewIdx]->setQpChangeOffsetVideo( m_iQpChangeOffsetVideo ); … … 187 226 { 188 227 189 //GTVSO228 #if HHI_VSO 190 229 for (Int iViewIdx=0; iViewIdx<m_iNumberOfExternalRefs; iViewIdx++) 191 230 { 192 231 m_acTVideoIOYuvERFileList.push_back(new TVideoIOYuv); 193 232 } 194 //GT VSO end 233 #endif 195 234 196 235 for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++) … … 219 258 m_acTEncDepthTopList[iViewIdx]->setRateGOPSize ( m_iRateGOPSize ); 220 259 221 // // SB222 260 m_acTEncDepthTopList[iViewIdx]->setSeqStructure ( m_cInputFormatString ); 223 261 … … 266 304 m_acTEncDepthTopList[iViewIdx]->setUseFastEnc ( m_bUseFastEnc ); 267 305 268 //GTVSO306 #if HHI_VSO 269 307 m_acTEncDepthTopList[iViewIdx]->setUseVSO ( m_bUseVSO ); //GT: might be enabled/disabled later for VSO Mode 4 270 308 m_acTEncDepthTopList[iViewIdx]->setForceLambdaScaleVSO ( m_bForceLambdaScaleVSO ); 271 309 m_acTEncDepthTopList[iViewIdx]->setLambdaScaleVSO ( m_dLambdaScaleVSO ); 272 #if RDO_DIST_INT310 #if HHI_VSO_DIST_INT 273 311 m_acTEncDepthTopList[iViewIdx]->setAllowNegDist ( m_bAllowNegDist ); 274 312 #endif 275 313 m_acTEncDepthTopList[iViewIdx]->setVSOMode ( m_uiVSOMode ); 276 //GT VSO end 314 #endif 277 315 278 316 m_acTEncDepthTopList[iViewIdx]->setViewId ( (UInt)iViewIdx ); … … 283 321 m_acTEncDepthTopList[iViewIdx]->setCodedScale ( 0 ); 284 322 m_acTEncDepthTopList[iViewIdx]->setCodedOffset ( 0 ); 323 #if DEPTH_MAP_GENERATION 285 324 m_acTEncDepthTopList[iViewIdx]->setPredDepthMapGeneration ( 0 ); 325 #endif 326 #if HHI_INTER_VIEW_MOTION_PRED 286 327 m_acTEncDepthTopList[iViewIdx]->setMultiviewMvPredMode ( 0 ); 287 328 m_acTEncDepthTopList[iViewIdx]->setMultiviewMvRegMode ( 0 ); 288 329 m_acTEncDepthTopList[iViewIdx]->setMultiviewMvRegLambdaScale ( 0.0 ); 330 #endif 331 #if HHI_INTER_VIEW_RESIDUAL_PRED 289 332 m_acTEncDepthTopList[iViewIdx]->setMultiviewResPredMode ( 0 ); 290 291 #if SB_INTERVIEW_SKIP 333 #endif 334 335 #if HHI_INTERVIEW_SKIP 292 336 m_acTEncDepthTopList[iViewIdx]->setInterViewSkip ( 0 ); 293 #if SB_INTERVIEW_SKIP_LAMBDA_SCALE337 #if HHI_INTERVIEW_SKIP_LAMBDA_SCALE 294 338 m_acTEncDepthTopList[iViewIdx]->setInterViewSkipLambdaScale ( 1 ); 295 339 #endif … … 307 351 m_acTEncDepthTopList[iViewIdx]->setUseRoundingControlBipred(m_useRoundingControlBipred); 308 352 #endif 309 #if HHI_DMM_ INTRA310 m_acTEncDepthTopList[iViewIdx]->setUseD epthModelModes( m_bUseDepthModelModes);353 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 354 m_acTEncDepthTopList[iViewIdx]->setUseDMM( m_bUseDMM ); 311 355 #endif 312 356 #if CONSTRAINED_INTRA_PRED … … 335 379 m_acTEncDepthTopList[iViewIdx]->setUseSAO ( m_abUseSAO[1] ); 336 380 #endif 381 #if HHI_MPI 337 382 m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI ); 383 #endif 338 384 339 385 m_acTEncDepthTopList[iViewIdx]->setPictureDigestEnabled(m_pictureDigestEnabled); 340 m_acTEncDepthTopList[iViewIdx]->setOmitUnusedBlocks ( m_bOmitUnusedBlocks && (iViewIdx != 0) );341 386 342 387 m_acTEncDepthTopList[iViewIdx]->setQpChangeFrame( m_iQpChangeFrame ); … … 345 390 } 346 391 } 392 #if HHI_INTER_VIEW_MOTION_PRED 347 393 else if( m_uiMultiviewMvRegMode ) 348 394 { … … 352 398 } 353 399 } 354 355 //GT VSO 400 #endif 401 402 #if HHI_VSO 356 403 if ( m_bUseVSO ) 357 404 { 358 405 if ( m_uiVSOMode == 4 ) 359 { 360 #if GERHARD_RM_DEBUG_MM 361 m_cMMCheckModel .create( m_cRenModStrParser.getNumOfBaseViews(), m_cRenModStrParser.getNumOfModels(), m_iSourceWidth, m_iSourceHeight, LOG2_DISP_PREC_LUT, 0 ); 362 #endif 406 { 363 407 m_cRendererModel.create( m_cRenModStrParser.getNumOfBaseViews(), m_cRenModStrParser.getNumOfModels(), m_iSourceWidth, m_iSourceHeight, LOG2_DISP_PREC_LUT, 0 ); 364 408 … … 367 411 for (Int iContent = 0; iContent < 2; iContent++ ) 368 412 { 369 Int iNumOfModels = m_cRenModStrParser.getNumOfModelsForView(iViewNum, iContent); 370 Bool bUseVSO = (iNumOfModels != 0); 371 372 TEncTop* pcEncTop = ( iContent == 0 ) ? m_acTEncTopList[iViewNum] : m_acTEncDepthTopList[iViewNum]; 373 pcEncTop->setUseVSO( bUseVSO ); 374 pcEncTop->getRdCost()->setRenModel( bUseVSO ? &m_cRendererModel : NULL ); 375 413 Int iNumOfModels = m_cRenModStrParser.getNumOfModelsForView(iViewNum, iContent); 414 Bool bUseVSO = (iNumOfModels != 0); 415 416 TEncTop* pcEncTop = ( iContent == 0 ) ? m_acTEncTopList[iViewNum] : m_acTEncDepthTopList[iViewNum]; 417 pcEncTop->setUseVSO( bUseVSO ); 418 pcEncTop->getRdCost()->setRenModel( bUseVSO ? &m_cRendererModel : NULL ); 419 376 420 for (Int iCurModel = 0; iCurModel < iNumOfModels; iCurModel++ ) 377 421 { 378 Int iModelNum; Int iLeftViewNum; Int iRightViewNum; Int iDump; Int iOrgRefNum; Int iBlendMode; 379 380 m_cRenModStrParser.getSingleModelData ( iViewNum, iContent, iCurModel, iModelNum, iBlendMode, iLeftViewNum, iRightViewNum, iOrgRefNum, iDump ) ; 381 m_cRendererModel .createSingleModel ( iViewNum, iContent, iModelNum, iLeftViewNum, iRightViewNum, (iOrgRefNum != -1), iBlendMode ); 382 #if GERHARD_RM_DEBUG_MM 383 m_cMMCheckModel .createSingleModel ( iViewNum, iContent, iModelNum, iLeftViewNum, iRightViewNum, (iOrgRefNum != -1), iBlendMode ); 384 #endif 422 Int iModelNum; Int iLeftViewNum; Int iRightViewNum; Int iDump; Int iOrgRefNum; Int iBlendMode; 423 424 m_cRenModStrParser.getSingleModelData ( iViewNum, iContent, iCurModel, iModelNum, iBlendMode, iLeftViewNum, iRightViewNum, iOrgRefNum, iDump ) ; 425 m_cRendererModel .createSingleModel ( iViewNum, iContent, iModelNum, iLeftViewNum, iRightViewNum, (iOrgRefNum != -1), iBlendMode ); 385 426 } 386 427 } … … 391 432 m_cRendererTop.init(m_iSourceWidth, m_iSourceHeight,true,0,0,true, 0,0,0,0,0,0,0,1,0,0 ); //GT: simplest configuration 392 433 } 393 394 } 395 //GT VSO end 396 m_cUsedPelsRenderer.init(m_iSourceWidth, m_iSourceHeight, true, 0, LOG2_DISP_PREC_LUT, true, 0, 0, 0, 0, 0, 6, 4, 1, 0, 6 ); 434 } 435 #endif 436 437 #if HHI_INTERVIEW_SKIP 438 m_cUsedPelsRenderer.init(m_iSourceWidth, m_iSourceHeight, true, 0, LOG2_DISP_PREC_LUT, true, 0, 0, 0, 0, 0, 6, 4, 1, 0, 6 ); 439 #endif 397 440 } 398 441 … … 421 464 m_acTEncDepthTopList[iViewIdx]->create(); 422 465 } 466 #if HHI_INTER_VIEW_MOTION_PRED 423 467 else if( m_uiMultiviewMvRegMode ) 424 468 { … … 426 470 m_acTVideoIOYuvDepthInputFileList[iViewIdx]->skipFrames(m_FrameSkip, m_iSourceWidth, m_iSourceHeight); 427 471 } 428 } 429 430 //GT VSO 472 #endif 473 } 474 475 #if HHI_VSO 431 476 for(Int iViewIdx=0; iViewIdx < m_iNumberOfExternalRefs; iViewIdx++) 432 477 { 433 478 m_acTVideoIOYuvERFileList[iViewIdx]->open( m_pchERRefFileList[iViewIdx], false, m_uiInputBitDepth, m_uiInternalBitDepth ); // read mode 434 479 } 435 //GT VSO end 480 #endif 436 481 } 437 482 … … 441 486 m_cTVideoIOBitsFile.closeBits(); 442 487 443 //GTVSO488 #if HHI_VSO 444 489 for ( Int iViewIdx = 0; iViewIdx < m_iNumberOfExternalRefs; iViewIdx++ ) 445 490 { … … 448 493 m_acTVideoIOYuvERFileList[iViewIdx] = 0; 449 494 }; 450 //GT VSO end 495 #endif 451 496 452 497 for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++) … … 563 608 pcDepthPicYuvOrg->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth ); 564 609 } 610 #if HHI_INTER_VIEW_MOTION_PRED 565 611 if( m_uiMultiviewMvRegMode ) 566 612 { 567 613 pcPdmDepthOrg->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth ); 568 614 } 615 #endif 569 616 570 617 TComBitstream* pcBitstream = new TComBitstream; … … 589 636 bAllEos = bAllEos|bEos[iViewIdx] ; 590 637 638 #if HHI_INTER_VIEW_MOTION_PRED 591 639 if( m_uiMultiviewMvRegMode && iViewIdx ) 592 640 { 593 641 m_acTVideoIOYuvDepthInputFileList[iViewIdx]->read( pcPdmDepthOrg, m_aiPad, m_bUsingDepthMaps ); 594 642 } 643 #endif 595 644 596 645 // increase number of received frames … … 598 647 } 599 648 649 #if HHI_INTER_VIEW_MOTION_PRED 600 650 m_acTEncTopList[iViewIdx]->receivePic( bEos[iViewIdx], pcPicYuvOrg, m_cListPicYuvRecList[iViewIdx]->back(), ( m_uiMultiviewMvRegMode && iViewIdx ? pcPdmDepthOrg : 0 ) ); 651 #else 652 m_acTEncTopList[iViewIdx]->receivePic( bEos[iViewIdx], pcPicYuvOrg, m_cListPicYuvRecList[iViewIdx]->back(), 0 ); 653 #endif 601 654 602 655 if( m_bUsingDepthMaps ) … … 628 681 } 629 682 630 //GT VSO 683 #if HHI_VSO 631 684 if ( m_bUseVSO && ( m_uiVSOMode != 4) ) 632 685 { … … 634 687 xStoreVSORefPicsInBuffer(); //GT; 635 688 } 636 //GT VSO end 689 #endif 637 690 638 691 //GT: Encode … … 688 741 689 742 #if AMVP_BUFFERCOMPRESS 690 // compress motion for entire access 743 // compress motion for entire access 691 744 if( bCurrPocCoded ) 692 745 { … … 729 782 pcDepthPicYuvOrg = NULL ; 730 783 731 // SB valgrid732 784 pcBitstream->destroy(); 733 785 delete pcBitstream; … … 751 803 if ( pcPdmDepthOrg ) 752 804 { 753 pcPdmDepthOrg->destroy(); 754 delete pcPdmDepthOrg; 755 pcPdmDepthOrg = NULL; 805 pcPdmDepthOrg->destroy(); 806 delete pcPdmDepthOrg; 807 pcPdmDepthOrg = NULL; 756 808 } 757 809 … … 847 899 // Delete ERFiles 848 900 849 //GTVSO901 #if HHI_VSO 850 902 std::map< Int,vector<TComPicYuv*> >::iterator iterMapPicExtRefView = m_cMapPicExtRefView.begin(); 851 903 while ( iterMapPicExtRefView != m_cMapPicExtRefView.end() ) … … 861 913 iterMapPicExtRefView++; 862 914 } 863 //GT VSO end 915 #endif 864 916 } 865 917 … … 920 972 TComPicYuv* TAppEncTop::xGetPicYuvFromView( Int iViewIdx, Int iPoc, Bool bDepth, Bool bRecon ) 921 973 { 922 TComPic* pcPic = xGetPicFromView( iViewIdx, iPoc, bDepth); 923 TComPicYuv* pcPicYuv = NULL; 974 TComPic* pcPic = xGetPicFromView( iViewIdx, iPoc, bDepth); 975 TComPicYuv* pcPicYuv = NULL; 924 976 925 977 if (pcPic != NULL) … … 929 981 if ( pcPic->getReconMark() ) 930 982 { 931 pcPicYuv = pcPic->getPicYuvRec(); 983 pcPicYuv = pcPic->getPicYuvRec(); 932 984 } 933 985 } 934 986 else 935 987 { 936 pcPicYuv = pcPic->getPicYuvOrg(); 937 } 988 pcPicYuv = pcPic->getPicYuvOrg(); 989 } 938 990 }; 939 991 940 return pcPicYuv; 941 }; 942 992 return pcPicYuv; 993 }; 994 995 #if HHI_VSO 943 996 Void TAppEncTop::xSetBasePicYuv( Int iViewIdx, Int iPoc, TComMVDRefData* pcRefInfo, InterViewReference eView, bool bDepth ) 944 997 { … … 975 1028 } 976 1029 977 //GT campara 1030 978 1031 xSetBaseLUT (iViewIdx, iViewIdx-1 , pcMVDRefData, PREVVIEW ); 979 1032 xSetBaseLUT (iViewIdx, iViewIdx+1 , pcMVDRefData, NEXTVIEW ); 980 //GT campara end 981 982 //GT VSO 1033 1034 983 1035 if ( m_bUseVSO && m_uiVSOMode != 4) 984 1036 { … … 987 1039 pcMVDRefData->setRefViewInd (m_aaiBaseViewRefInd[iViewIdx], m_aaiERViewRefInd[iViewIdx], m_aaiERViewRefLutInd[iViewIdx]); 988 1040 } 989 //GT VSO end990 991 1041 }; 992 1042 993 //GT campara 1043 994 1044 Void TAppEncTop::xSetBaseLUT( Int iViewIdxSource, Int iViewIdxTarget, TComMVDRefData* pcRefInfo, InterViewReference eView ) 995 1045 { … … 999 1049 pcRefInfo->setShiftLUTsBaseView(eView, m_cCameraData.getBaseViewShiftLUTD()[iViewIdxSource][iViewIdxTarget],m_cCameraData.getBaseViewShiftLUTI()[iViewIdxSource][iViewIdxTarget] ); 1000 1050 }; 1001 //GT campara end 1002 1003 1004 //GT VSO 1051 1005 1052 Void TAppEncTop::xSetERPicYuvs( Int iViewIdx, Int iPoc, TComMVDRefData* pcReferenceInfo ) 1006 1053 { … … 1014 1061 pcReferenceInfo->setPicYuvERViews( cMapIt->second ); 1015 1062 } 1016 1017 1018 1063 1019 1064 Void TAppEncTop::xStoreVSORefPicsInBuffer() … … 1130 1175 } 1131 1176 } 1132 // GT VSO end 1133 1177 #endif 1178 1179 #if HHI_INTERVIEW_SKIP 1134 1180 Void TAppEncTop::getUsedPelsMap( Int iViewIdx, Int iPoc, TComPicYuv* pcPicYuvUsedSplsMap ) 1135 1181 { 1136 AOT( iViewIdx <= 0); 1137 AOT( iViewIdx >= m_iNumberOfViews ); 1138 AOF( m_ bOmitUnusedBlocks);1139 AOF( m_cCameraData.getCurFrameId() == iPoc ); 1140 1141 Int iViewSIdx = m_cCameraData.getBaseId2SortedId()[iViewIdx]; 1142 Int iFirstViewSIdx = m_cCameraData.getBaseId2SortedId()[0]; 1182 AOT( iViewIdx <= 0); 1183 AOT( iViewIdx >= m_iNumberOfViews ); 1184 AOF( m_uiInterViewSkip != 0 ); 1185 AOF( m_cCameraData.getCurFrameId() == iPoc ); 1186 1187 Int iViewSIdx = m_cCameraData.getBaseId2SortedId()[iViewIdx]; 1188 Int iFirstViewSIdx = m_cCameraData.getBaseId2SortedId()[0]; 1143 1189 1144 1190 AOT( iViewSIdx == iFirstViewSIdx ); 1145 1191 1146 Bool bFirstIsLeft = (iFirstViewSIdx < iViewSIdx); 1192 Bool bFirstIsLeft = (iFirstViewSIdx < iViewSIdx); 1147 1193 1148 1194 m_cUsedPelsRenderer.setShiftLUTs( … … 1154 1200 m_cCameraData.getBaseViewShiftLUTI()[0][iViewIdx], 1155 1201 -1 1156 ); 1157 1202 ); 1203 1158 1204 1159 1205 TComPicYuv* pcPicYuvDepth = xGetPicYuvFromView(0, iPoc, true, true ); 1160 AOF( pcPicYuvDepth); 1161 1162 m_cUsedPelsRenderer.getUsedSamplesMap( pcPicYuvDepth, pcPicYuvUsedSplsMap, bFirstIsLeft ); 1163 1164 } 1165 1206 AOF( pcPicYuvDepth); 1207 1208 m_cUsedPelsRenderer.getUsedSamplesMap( pcPicYuvDepth, pcPicYuvUsedSplsMap, bFirstIsLeft ); 1209 1210 } 1211 #endif 1212 1213 #if HHI_VSO 1166 1214 Void TAppEncTop::setupRenModel( Int iPoc, Int iEncViewIdx, Int iEncContent ) 1167 1215 { 1168 Int iEncViewSIdx = m_cCameraData.getBaseId2SortedId()[ iEncViewIdx ]; 1216 Int iEncViewSIdx = m_cCameraData.getBaseId2SortedId()[ iEncViewIdx ]; 1169 1217 1170 1218 // setup base views 1171 Int iNumOfBV = m_cRenModStrParser.getNumOfBaseViewsForView( iEncViewSIdx, iEncContent ); 1219 Int iNumOfBV = m_cRenModStrParser.getNumOfBaseViewsForView( iEncViewSIdx, iEncContent ); 1172 1220 1173 1221 for (Int iCurView = 0; iCurView < iNumOfBV; iCurView++ ) 1174 { 1175 Int iBaseViewSIdx; 1176 Int iVideoDistMode; 1177 Int iDepthDistMode; 1178 1179 m_cRenModStrParser.getBaseViewData( iEncViewSIdx, iEncContent, iCurView, iBaseViewSIdx, iVideoDistMode, iDepthDistMode ); 1180 1181 AOT( iVideoDistMode < 0 || iVideoDistMode > 2 ); 1182 1183 Int iBaseViewIdx = m_cCameraData.getBaseSortedId2Id()[ iBaseViewSIdx ]; 1184 1185 TComPicYuv* pcPicYuvVideoRec = xGetPicYuvFromView( iBaseViewIdx, iPoc, false, true ); 1186 TComPicYuv* pcPicYuvDepthRec = xGetPicYuvFromView( iBaseViewIdx, iPoc, true , true ); 1187 TComPicYuv* pcPicYuvVideoOrg = xGetPicYuvFromView( iBaseViewIdx, iPoc, false, false ); 1188 TComPicYuv* pcPicYuvDepthOrg = xGetPicYuvFromView( iBaseViewIdx, iPoc, true , false ); 1189 1190 TComPicYuv* pcPicYuvVideoRef = ( iVideoDistMode == 2 ) ? pcPicYuvVideoOrg : NULL; 1191 TComPicYuv* pcPicYuvDepthRef = ( iDepthDistMode == 2 ) ? pcPicYuvDepthOrg : NULL; 1192 1193 TComPicYuv* pcPicYuvVideoTest = ( iVideoDistMode == 0 ) ? pcPicYuvVideoOrg : pcPicYuvVideoRec; 1194 TComPicYuv* pcPicYuvDepthTest = ( iDepthDistMode == 0 ) ? pcPicYuvDepthOrg : pcPicYuvDepthRec; 1195 1196 AOT( (iVideoDistMode == 2) != (pcPicYuvVideoRef != NULL) ); 1197 AOT( (iDepthDistMode == 2) != (pcPicYuvDepthRef != NULL) ); 1198 AOT( pcPicYuvDepthTest == NULL ); 1199 AOT( pcPicYuvVideoTest == NULL ); 1200 1201 m_cRendererModel.setBaseView( iBaseViewSIdx, pcPicYuvVideoTest, pcPicYuvDepthTest, pcPicYuvVideoRef, pcPicYuvDepthRef ); 1202 #if GERHARD_RM_DEBUG_MM 1203 m_cMMCheckModel .setBaseView( iBaseViewSIdx, pcPicYuvVideoTest, pcPicYuvDepthTest, pcPicYuvVideoRef, pcPicYuvDepthRef ); 1204 #endif 1205 } 1206 1207 m_cRendererModel.setErrorMode( iEncViewSIdx, iEncContent, 0 ); 1208 #if GERHARD_RM_DEBUG_MM 1209 m_cMMCheckModel .setErrorMode( iEncViewSIdx, iEncContent, 0 ); 1210 #endif 1211 1222 { 1223 Int iBaseViewSIdx; 1224 Int iVideoDistMode; 1225 Int iDepthDistMode; 1226 1227 m_cRenModStrParser.getBaseViewData( iEncViewSIdx, iEncContent, iCurView, iBaseViewSIdx, iVideoDistMode, iDepthDistMode ); 1228 1229 AOT( iVideoDistMode < 0 || iVideoDistMode > 2 ); 1230 1231 Int iBaseViewIdx = m_cCameraData.getBaseSortedId2Id()[ iBaseViewSIdx ]; 1232 1233 TComPicYuv* pcPicYuvVideoRec = xGetPicYuvFromView( iBaseViewIdx, iPoc, false, true ); 1234 TComPicYuv* pcPicYuvDepthRec = xGetPicYuvFromView( iBaseViewIdx, iPoc, true , true ); 1235 TComPicYuv* pcPicYuvVideoOrg = xGetPicYuvFromView( iBaseViewIdx, iPoc, false, false ); 1236 TComPicYuv* pcPicYuvDepthOrg = xGetPicYuvFromView( iBaseViewIdx, iPoc, true , false ); 1237 1238 TComPicYuv* pcPicYuvVideoRef = ( iVideoDistMode == 2 ) ? pcPicYuvVideoOrg : NULL; 1239 TComPicYuv* pcPicYuvDepthRef = ( iDepthDistMode == 2 ) ? pcPicYuvDepthOrg : NULL; 1240 1241 TComPicYuv* pcPicYuvVideoTest = ( iVideoDistMode == 0 ) ? pcPicYuvVideoOrg : pcPicYuvVideoRec; 1242 TComPicYuv* pcPicYuvDepthTest = ( iDepthDistMode == 0 ) ? pcPicYuvDepthOrg : pcPicYuvDepthRec; 1243 1244 AOT( (iVideoDistMode == 2) != (pcPicYuvVideoRef != NULL) ); 1245 AOT( (iDepthDistMode == 2) != (pcPicYuvDepthRef != NULL) ); 1246 AOT( pcPicYuvDepthTest == NULL ); 1247 AOT( pcPicYuvVideoTest == NULL ); 1248 1249 m_cRendererModel.setBaseView( iBaseViewSIdx, pcPicYuvVideoTest, pcPicYuvDepthTest, pcPicYuvVideoRef, pcPicYuvDepthRef ); 1250 } 1251 1252 m_cRendererModel.setErrorMode( iEncViewSIdx, iEncContent, 0 ); 1212 1253 // setup virtual views 1213 Int iNumOfSV = m_cRenModStrParser.getNumOfModelsForView( iEncViewSIdx, iEncContent ); 1254 Int iNumOfSV = m_cRenModStrParser.getNumOfModelsForView( iEncViewSIdx, iEncContent ); 1214 1255 for (Int iCurView = 0; iCurView < iNumOfSV; iCurView++ ) 1215 { 1216 Int iOrgRefBaseViewSIdx; 1217 Int iLeftBaseViewSIdx; 1218 Int iRightBaseViewSIdx; 1219 Int iSynthViewRelNum; 1220 Int iModelNum; 1221 Int iBlendMode; 1222 m_cRenModStrParser.getSingleModelData(iEncViewSIdx, iEncContent, iCurView, iModelNum, iBlendMode,iLeftBaseViewSIdx, iRightBaseViewSIdx, iOrgRefBaseViewSIdx, iSynthViewRelNum ); 1223 1224 Int iLeftBaseViewIdx = -1; 1225 Int iRightBaseViewIdx = -1; 1226 1227 TComPicYuv* pcPicYuvOrgRef = NULL; 1228 Int** ppiShiftLUTLeft = NULL; 1229 Int** ppiShiftLUTRight = NULL; 1230 Int** ppiBaseShiftLUTLeft = NULL; 1231 Int** ppiBaseShiftLUTRight = NULL; 1232 1233 1234 Int iDistToLeft = -1; 1235 1236 Int iSynthViewIdx = m_cCameraData.synthRelNum2Idx( iSynthViewRelNum ); 1256 { 1257 Int iOrgRefBaseViewSIdx; 1258 Int iLeftBaseViewSIdx; 1259 Int iRightBaseViewSIdx; 1260 Int iSynthViewRelNum; 1261 Int iModelNum; 1262 Int iBlendMode; 1263 m_cRenModStrParser.getSingleModelData(iEncViewSIdx, iEncContent, iCurView, iModelNum, iBlendMode,iLeftBaseViewSIdx, iRightBaseViewSIdx, iOrgRefBaseViewSIdx, iSynthViewRelNum ); 1264 1265 Int iLeftBaseViewIdx = -1; 1266 Int iRightBaseViewIdx = -1; 1267 1268 TComPicYuv* pcPicYuvOrgRef = NULL; 1269 Int** ppiShiftLUTLeft = NULL; 1270 Int** ppiShiftLUTRight = NULL; 1271 Int** ppiBaseShiftLUTLeft = NULL; 1272 Int** ppiBaseShiftLUTRight = NULL; 1273 1274 1275 Int iDistToLeft = -1; 1276 1277 Int iSynthViewIdx = m_cCameraData.synthRelNum2Idx( iSynthViewRelNum ); 1237 1278 1238 1279 if ( iLeftBaseViewSIdx != -1 ) 1239 1280 { 1240 iLeftBaseViewIdx = m_cCameraData.getBaseSortedId2Id() [ iLeftBaseViewSIdx ]; 1281 iLeftBaseViewIdx = m_cCameraData.getBaseSortedId2Id() [ iLeftBaseViewSIdx ]; 1241 1282 ppiShiftLUTLeft = m_cCameraData.getSynthViewShiftLUTI()[ iLeftBaseViewIdx ][ iSynthViewIdx ]; 1242 1283 } … … 1244 1285 if ( iRightBaseViewSIdx != -1 ) 1245 1286 { 1246 iRightBaseViewIdx = m_cCameraData.getBaseSortedId2Id() [iRightBaseViewSIdx ]; 1287 iRightBaseViewIdx = m_cCameraData.getBaseSortedId2Id() [iRightBaseViewSIdx ]; 1247 1288 ppiShiftLUTRight = m_cCameraData.getSynthViewShiftLUTI()[ iRightBaseViewIdx ][ iSynthViewIdx ]; 1248 1289 } 1249 1290 1250 1291 if ( iRightBaseViewSIdx != -1 && iLeftBaseViewSIdx != -1 ) 1251 { 1252 iDistToLeft = m_cCameraData.getRelDistLeft( iSynthViewIdx , iLeftBaseViewIdx, iRightBaseViewIdx); 1292 { 1293 iDistToLeft = m_cCameraData.getRelDistLeft( iSynthViewIdx , iLeftBaseViewIdx, iRightBaseViewIdx); 1253 1294 ppiBaseShiftLUTLeft = m_cCameraData.getBaseViewShiftLUTI() [ iLeftBaseViewIdx ][ iRightBaseViewIdx ]; 1254 1295 ppiBaseShiftLUTRight = m_cCameraData.getBaseViewShiftLUTI() [ iRightBaseViewIdx ][ iLeftBaseViewIdx ]; … … 1258 1299 if ( iOrgRefBaseViewSIdx != -1 ) 1259 1300 { 1260 pcPicYuvOrgRef = xGetPicYuvFromView( m_cCameraData.getBaseSortedId2Id()[ iOrgRefBaseViewSIdx ] , iPoc, false, false ); 1261 AOF ( pcPicYuvOrgRef ); 1262 } 1263 1264 m_cRendererModel.setSingleModel( iModelNum, ppiShiftLUTLeft, ppiBaseShiftLUTLeft, ppiShiftLUTRight, ppiBaseShiftLUTRight, iDistToLeft, pcPicYuvOrgRef ); 1265 #if GERHARD_RM_DEBUG_MM 1266 m_cMMCheckModel .setSingleModel( iModelNum, ppiShiftLUTLeft, ppiBaseShiftLUTLeft, ppiShiftLUTRight, ppiBaseShiftLUTRight, iDistToLeft, pcPicYuvOrgRef ); 1267 #endif 1268 } 1269 } 1270 1271 // GT VSO end 1301 pcPicYuvOrgRef = xGetPicYuvFromView( m_cCameraData.getBaseSortedId2Id()[ iOrgRefBaseViewSIdx ] , iPoc, false, false ); 1302 AOF ( pcPicYuvOrgRef ); 1303 } 1304 1305 m_cRendererModel.setSingleModel( iModelNum, ppiShiftLUTLeft, ppiBaseShiftLUTLeft, ppiShiftLUTRight, ppiBaseShiftLUTRight, iDistToLeft, pcPicYuvOrgRef ); 1306 } 1307 } 1308 #endif 1309 -
trunk/source/App/TAppEncoder/TAppEncTop.h
r2 r5 1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2011, ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 1 34 2 35 … … 49 82 std::vector<Int> m_iDepthFrameRcvdVector; ///< number of received frames 50 83 84 #if DEPTH_MAP_GENERATION 51 85 TComSPSAccess m_cSPSAccess; 52 86 TComAUPicAccess m_cAUPicAccess; 87 #endif 53 88 89 #if HHI_VSO 54 90 TRenTop m_cRendererTop; 55 #if GERHARD_RM_DEBUG_MM 56 TRenModel m_cMMCheckModel; 91 TRenModel m_cRendererModel; 57 92 #endif 58 TRenModel m_cRendererModel;59 93 60 94 protected: … … 84 118 85 119 // Ref Data 120 #if HHI_VSO 86 121 Void xSetBaseLUT ( Int iViewIdxSource, Int iViewIdxTarget, TComMVDRefData* pcRefInfo, InterViewReference eView ); 87 122 Void xSetBasePicYuv( Int iViewIdx, Int iPoc, TComMVDRefData* pcRefInfo, InterViewReference eView, bool bDepth ); ///< store pics from buffers in pcRefInfo 88 123 #endif 89 124 90 125 public: … … 93 128 94 129 Void encode (); ///< main encoding function 130 #if HHI_VSO 95 131 Void setupRenModel ( Int iPoc, Int iEncViewIdx, Int iEncContent ); 96 132 Void setMVDPic ( Int iViewIdx, Int iPoc, TComMVDRefData* pcReferenceInfo ); // set MultiView References 133 #endif 97 134 Void getUsedPelsMap ( Int iViewIdx, Int iPoc, TComPicYuv* pcPicYuvUsedPelsMap ); 98 135 std::vector<TComPic*> getSpatialRefPics( Int iViewIdx, Int iPoc, Bool bIsDepthCoder ); // only for mvc functionality yet 99 136 TComPic* getPicFromView ( Int iViewIdx, Int iPoc, Bool bDepth ) { return xGetPicFromView( iViewIdx, iPoc, bDepth ); } 100 137 101 #if GERHARD_RM_DEBUG_MM102 TRenModel* get MMCheckModel() { return &m_cMMCheckModel ; };138 #if HHI_VSO 139 TRenModel* getRenModel () { return &m_cRendererModel ; }; 103 140 #endif 104 TRenModel* getRenModel () { return &m_cRendererModel ; };105 141 142 #if DEPTH_MAP_GENERATION 106 143 TComSPSAccess* getSPSAccess () { return &m_cSPSAccess; } 107 144 TComAUPicAccess* getAUPicAccess() { return &m_cAUPicAccess; } 145 #endif 108 146 109 //GTVSO147 #if HHI_VSO 110 148 private: 111 149 std::vector<TVideoIOYuv*> m_acTVideoIOYuvERFileList; … … 115 153 Void xSetERPicYuvs( Int iViewIdx, Int iPoc, TComMVDRefData* pcReferenceInfo ); ///< store pic from buffer in pcReferenceInfo 116 154 Void xStoreVSORefPicsInBuffer(); ///< read in External Ref pic from file and store in buffer 117 //GT VSO end 118 155 #endif 119 156 120 157 };// END CLASS DEFINITION TAppEncTop -
trunk/source/App/TAppEncoder/encmain.cpp
r2 r5 1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2011, ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 1 34 2 35
Note: See TracChangeset for help on using the changeset viewer.