source: 3DVCSoftware/branches/HTM-4.1-dev2-LG/source/App/TAppEncoder/TAppEncTop.cpp @ 161

Last change on this file since 161 was 156, checked in by lg, 12 years ago

minor fix:

  1. indentation correction,
  2. remove outcommented source lines
  • Property svn:eol-style set to native
File size: 59.0 KB
RevLine 
[5]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
[56]4 * granted under this license. 
[5]5 *
[56]6 * Copyright (c) 2010-2012, ITU/ISO/IEC
[5]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.
[56]17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
[5]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 */
[2]33
34/** \file     TAppEncTop.cpp
35    \brief    Encoder application class
36*/
37
38#include <list>
[56]39#include <fstream>
40#include <stdlib.h>
[2]41#include <stdio.h>
42#include <fcntl.h>
43#include <assert.h>
44
45#include "TAppEncTop.h"
[56]46#include "TLibEncoder/AnnexBwrite.h"
[2]47
[56]48using namespace std;
49
50//! \ingroup TAppEncoder
51//! \{
52
[2]53// ====================================================================================================================
54// Constructor / destructor / initialization / destroy
55// ====================================================================================================================
56
57TAppEncTop::TAppEncTop()
58{
[56]59  m_totalBytes = 0;
60  m_essentialBytes = 0;
[2]61}
62
63TAppEncTop::~TAppEncTop()
64{
65}
66
67Void TAppEncTop::xInitLibCfg()
68{
[77]69#if VIDYO_VPS_INTEGRATION
70  UInt layerId = 0;
71  // TODO: fix the assumption here that the temporal structures are all equal across all layers???
72  m_cVPS.setMaxTLayers( m_maxTempLayer[0] );
73  m_cVPS.setMaxLayers( m_iNumberOfViews * (m_bUsingDepthMaps ? 2:1) );
74  for(Int i = 0; i < MAX_TLAYER; i++)
75  {
76    m_cVPS.setNumReorderPics( m_numReorderPics[0][i], i );
77    m_cVPS.setMaxDecPicBuffering( m_maxDecPicBuffering[0][i], i );
78  }
79#endif
80 
[2]81  for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
82  {
[56]83    m_frameRcvd.push_back(0);
84    m_acTEncTopList.push_back(new TEncTop); 
[2]85    m_acTVideoIOYuvInputFileList.push_back(new TVideoIOYuv);
[56]86    m_acTVideoIOYuvReconFileList.push_back(new TVideoIOYuv);
87    m_picYuvRec.push_back(new TComList<TComPicYuv*>) ;
[2]88
89    m_acTEncTopList[iViewIdx]->setFrameRate                    ( m_iFrameRate );
90    m_acTEncTopList[iViewIdx]->setFrameSkip                    ( m_FrameSkip );
91    m_acTEncTopList[iViewIdx]->setSourceWidth                  ( m_iSourceWidth );
92    m_acTEncTopList[iViewIdx]->setSourceHeight                 ( m_iSourceHeight );
[56]93#if PIC_CROPPING
94    m_acTEncTopList[iViewIdx]->setCroppingMode                 ( m_croppingMode );
95    m_acTEncTopList[iViewIdx]->setCropLeft                     ( m_cropLeft );
96    m_acTEncTopList[iViewIdx]->setCropRight                    ( m_cropRight );
97    m_acTEncTopList[iViewIdx]->setCropTop                      ( m_cropTop );
98    m_acTEncTopList[iViewIdx]->setCropBottom                   ( m_cropBottom );
99#endif
[2]100    m_acTEncTopList[iViewIdx]->setFrameToBeEncoded             ( m_iFrameToBeEncoded );
[56]101    m_acTEncTopList[iViewIdx]->setViewId                       ( iViewIdx );
102    m_acTEncTopList[iViewIdx]->setIsDepth                      ( false );
103    m_acTEncTopList[iViewIdx]->setViewOrderIdx                 ( m_cCameraData.getViewOrderIndex()[ iViewIdx ] );
[77]104#if VIDYO_VPS_INTEGRATION
105    layerId = iViewIdx * (m_bUsingDepthMaps ? 2:1);
106    m_acTEncTopList[iViewIdx]->setLayerId                      ( layerId );
107    m_cVPS.setDepthFlag                                        ( false, layerId );
108    m_cVPS.setViewId                                           ( iViewIdx, layerId );
109    m_cVPS.setViewOrderIdx                                     ( m_cCameraData.getViewOrderIndex()[ iViewIdx ], layerId );
110    // TODO: set correct dependentFlag and dependentLayer
111    m_cVPS.setDependentFlag                                    ( iViewIdx ? true:false, layerId );
112    m_cVPS.setDependentLayer                                   ( layerId - (m_bUsingDepthMaps ? 2:1), layerId );
113#endif
114   
[56]115    m_acTEncTopList[iViewIdx]->setCamParPrecision              ( m_cCameraData.getCamParsCodedPrecision  () );
116    m_acTEncTopList[iViewIdx]->setCamParInSliceHeader          ( m_cCameraData.getVaryingCameraParameters() );
117    m_acTEncTopList[iViewIdx]->setCodedScale                   ( m_cCameraData.getCodedScale             () );
118    m_acTEncTopList[iViewIdx]->setCodedOffset                  ( m_cCameraData.getCodedOffset            () );
[2]119
120  //====== Coding Structure ========
[56]121    m_acTEncTopList[iViewIdx]->setIntraPeriod                  ( m_iIntraPeriod );
[2]122    m_acTEncTopList[iViewIdx]->setDecodingRefreshType          ( m_iDecodingRefreshType );
[56]123    m_acTEncTopList[iViewIdx]->setGOPSize                      ( m_iGOPSize );
124    m_acTEncTopList[iViewIdx]->setGopList                      ( m_GOPListsMvc[iViewIdx] );
125    m_acTEncTopList[iViewIdx]->setExtraRPSs                    ( m_extraRPSs[iViewIdx] );
126#if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER
127    for(Int i = 0; i < MAX_TLAYER; i++)
128    {
129      m_acTEncTopList[iViewIdx]->setNumReorderPics             ( m_numReorderPics[iViewIdx][i], i );
130      m_acTEncTopList[iViewIdx]->setMaxDecPicBuffering         ( m_maxDecPicBuffering[iViewIdx][i], i );
131    }
132#else
133    m_acTEncTopList[iViewIdx]->setNumReorderFrames             ( m_numReorderFrames );
134    m_acTEncTopList[iViewIdx]->setMaxNumberOfReferencePictures ( m_maxNumberOfReferencePictures );
[2]135#endif
[56]136    for( UInt uiLoop = 0; uiLoop < MAX_TLAYER; ++uiLoop )
137    {
138      m_acTEncTopList[iViewIdx]->setLambdaModifier( uiLoop, m_adLambdaModifier[ uiLoop ] );
139    }
[2]140    m_acTEncTopList[iViewIdx]->setQP                           ( m_aiQP[0] );
[56]141 
[2]142    m_acTEncTopList[iViewIdx]->setTemporalLayerQPOffset        ( m_aiTLayerQPOffset );
143    m_acTEncTopList[iViewIdx]->setPad                          ( m_aiPad );
[56]144   
145#if H0566_TLA
146    m_acTEncTopList[iViewIdx]->setMaxTempLayer                 ( m_maxTempLayer[iViewIdx] );
147#else
148    m_acTEncTopList[iViewIdx]->setTLayering                    ( m_bTLayering );
149    m_acTEncTopList[iViewIdx]->setTLayerSwitchingFlag          ( m_abTLayerSwitchingFlag );
150#endif
[2]151
[56]152    m_acTEncTopList[iViewIdx]->setDisInter4x4                  ( m_bDisInter4x4);
153 
154    m_acTEncTopList[iViewIdx]->setUseNSQT( m_enableNSQT );
155    m_acTEncTopList[iViewIdx]->setUseAMP( m_enableAMP );
156 
157  //===== Slice ========
158 
159  //====== Loop/Deblock Filter ========
160    m_acTEncTopList[iViewIdx]->setLoopFilterDisable            ( m_abLoopFilterDisable[0]       );
161    m_acTEncTopList[iViewIdx]->setLoopFilterOffsetInAPS        ( m_loopFilterOffsetInAPS );
162    m_acTEncTopList[iViewIdx]->setLoopFilterBetaOffset         ( m_loopFilterBetaOffsetDiv2  );
163    m_acTEncTopList[iViewIdx]->setLoopFilterTcOffset           ( m_loopFilterTcOffsetDiv2    );
164#if DBL_CONTROL
165    m_acTEncTopList[iViewIdx]->setDeblockingFilterControlPresent( m_DeblockingFilterControlPresent);
166#endif
[2]167
[56]168  //====== Motion search ========
[2]169    m_acTEncTopList[iViewIdx]->setFastSearch                   ( m_iFastSearch  );
170    m_acTEncTopList[iViewIdx]->setSearchRange                  ( m_iSearchRange );
171    m_acTEncTopList[iViewIdx]->setBipredSearchRange            ( m_bipredSearchRange );
[56]172
173  //====== Quality control ========
[2]174    m_acTEncTopList[iViewIdx]->setMaxDeltaQP                   ( m_iMaxDeltaQP  );
[56]175    m_acTEncTopList[iViewIdx]->setMaxCuDQPDepth                ( m_iMaxCuDQPDepth  );
[2]176
[56]177    m_acTEncTopList[iViewIdx]->setChromaQpOffset               ( m_iChromaQpOffset     );
178    m_acTEncTopList[iViewIdx]->setChromaQpOffset2nd            ( m_iChromaQpOffset2nd  );
179
180#if ADAPTIVE_QP_SELECTION
181    m_acTEncTopList[iViewIdx]->setUseAdaptQpSelect             ( m_bUseAdaptQpSelect   );
182#endif
183
184#if LOSSLESS_CODING
185    Int lowestQP;
186#if H0736_AVC_STYLE_QP_RANGE
187    lowestQP =  - ( (Int)(6*(g_uiBitDepth + g_uiBitIncrement - 8)) );
188#else
189    lowestQP = 0;
190#endif
191    if ((m_iMaxDeltaQP == 0 ) && (m_aiQP[0] == lowestQP) && (m_useLossless == true))
192    {
193      m_bUseAdaptiveQP = false;
194    }
195#endif
196
197    m_acTEncTopList[iViewIdx]->setUseAdaptiveQP                ( m_bUseAdaptiveQP  );
198    m_acTEncTopList[iViewIdx]->setQPAdaptationRange            ( m_iQPAdaptationRange );
199 
[5]200#if HHI_VSO
[2]201    //====== VSO =========
202    m_acTEncTopList[iViewIdx]->setForceLambdaScaleVSO          ( false );
203    m_acTEncTopList[iViewIdx]->setLambdaScaleVSO               ( 1     );
204    m_acTEncTopList[iViewIdx]->setVSOMode                      ( 0     );
[100]205    m_acTEncTopList[iViewIdx]->setUseVSO                       ( false ); 
206#if SAIT_VSO_EST_A0033
207    m_acTEncTopList[iViewIdx]->setUseEstimatedVSD              ( false );
[5]208#endif
[115]209#if LGE_WVSO_A0119
[120]210    m_acTEncTopList[iViewIdx]->setUseWVSO                      ( false ); 
[100]211#endif
[115]212#endif
[2]213
[56]214#if DEPTH_MAP_GENERATION
215    m_acTEncTopList[iViewIdx]->setPredDepthMapGeneration       ( m_uiPredDepthMapGeneration );
216    m_acTEncTopList[iViewIdx]->setPdmPrecision                 ( (UInt)m_cCameraData.getPdmPrecision     () );
217    m_acTEncTopList[iViewIdx]->setPdmScaleNomDelta             (       m_cCameraData.getPdmScaleNomDelta () );
218    m_acTEncTopList[iViewIdx]->setPdmOffset                    (       m_cCameraData.getPdmOffset        () );
219#endif
220#if HHI_INTER_VIEW_MOTION_PRED
221    m_acTEncTopList[iViewIdx]->setMultiviewMvPredMode          ( m_uiMultiviewMvPredMode );
222    m_acTEncTopList[iViewIdx]->setMultiviewMvRegMode           ( iViewIdx ? m_uiMultiviewMvRegMode       : 0   );
223    m_acTEncTopList[iViewIdx]->setMultiviewMvRegLambdaScale    ( iViewIdx ? m_dMultiviewMvRegLambdaScale : 0.0 );
224#endif
225#if HHI_INTER_VIEW_RESIDUAL_PRED
226    m_acTEncTopList[iViewIdx]->setMultiviewResPredMode         ( m_uiMultiviewResPredMode );
227#endif
228
229  //====== Tool list ========
[2]230    m_acTEncTopList[iViewIdx]->setUseSBACRD                    ( m_bUseSBACRD   );
231    m_acTEncTopList[iViewIdx]->setDeltaQpRD                    ( m_uiDeltaQpRD  );
232    m_acTEncTopList[iViewIdx]->setUseASR                       ( m_bUseASR      );
233    m_acTEncTopList[iViewIdx]->setUseHADME                     ( m_bUseHADME    );
234    m_acTEncTopList[iViewIdx]->setUseALF                       ( m_abUseALF[0]  );
235    m_acTEncTopList[iViewIdx]->setALFEncodePassReduction       ( m_iALFEncodePassReduction );
[56]236#if LOSSLESS_CODING
237    m_acTEncTopList[iViewIdx]->setUseLossless                  ( m_useLossless );
[2]238#endif
[56]239    m_acTEncTopList[iViewIdx]->setALFMaxNumberFilters          ( m_iALFMaxNumberFilters ) ;
240
[2]241    m_acTEncTopList[iViewIdx]->setUseLComb                     ( m_bUseLComb    );
242    m_acTEncTopList[iViewIdx]->setLCMod                        ( m_bLCMod         );
243    m_acTEncTopList[iViewIdx]->setdQPs                         ( m_aidQP        );
244    m_acTEncTopList[iViewIdx]->setUseRDOQ                      ( m_abUseRDOQ[0] );
[56]245#if !PIC_CROPPING
[2]246    m_acTEncTopList[iViewIdx]->setUsePAD                       ( m_bUsePAD      );
[56]247#endif
[2]248    m_acTEncTopList[iViewIdx]->setQuadtreeTULog2MaxSize        ( m_uiQuadtreeTULog2MaxSize );
249    m_acTEncTopList[iViewIdx]->setQuadtreeTULog2MinSize        ( m_uiQuadtreeTULog2MinSize );
250    m_acTEncTopList[iViewIdx]->setQuadtreeTUMaxDepthInter      ( m_uiQuadtreeTUMaxDepthInter );
251    m_acTEncTopList[iViewIdx]->setQuadtreeTUMaxDepthIntra      ( m_uiQuadtreeTUMaxDepthIntra );
252    m_acTEncTopList[iViewIdx]->setUseFastEnc                   ( m_bUseFastEnc  );
[56]253    m_acTEncTopList[iViewIdx]->setUseEarlyCU                   ( m_bUseEarlyCU  ); 
254#if FAST_DECISION_FOR_MRG_RD_COST
255    m_acTEncTopList[iViewIdx]->setUseFastDecisionForMerge      ( m_useFastDecisionForMerge  );
[5]256#endif
[56]257    m_acTEncTopList[iViewIdx]->setUseCbfFastMode               ( m_bUseCbfFastMode  );
258#if HHI_INTERVIEW_SKIP
259    m_acTEncTopList[iViewIdx]->setInterViewSkip            ( iViewIdx>0 ? m_bInterViewSkip : false );
260#if HHI_INTERVIEW_SKIP_LAMBDA_SCALE
261    m_acTEncTopList[iViewIdx]->setInterViewSkipLambdaScale ( iViewIdx>0 ? (UInt)m_dInterViewSkipLambdaScale : 1 );
[42]262#endif
[5]263#endif
[56]264    m_acTEncTopList[iViewIdx]->setUseLMChroma                  ( m_bUseLMChroma );
265    m_acTEncTopList[iViewIdx]->setUseConstrainedIntraPred      ( m_bUseConstrainedIntraPred );
266    m_acTEncTopList[iViewIdx]->setPCMLog2MinSize               ( m_uiPCMLog2MinSize);
267    m_acTEncTopList[iViewIdx]->setUsePCM                       ( m_usePCM );
268    m_acTEncTopList[iViewIdx]->setPCMLog2MaxSize               ( m_pcmLog2MaxSize);
[2]269
[56]270  //====== Weighted Prediction ========
271    m_acTEncTopList[iViewIdx]->setUseWP                        ( m_bUseWeightPred      );
272    m_acTEncTopList[iViewIdx]->setWPBiPredIdc                  ( m_uiBiPredIdc         );
273  //====== Slice ========
274    m_acTEncTopList[iViewIdx]->setSliceMode                    ( m_iSliceMode                );
275    m_acTEncTopList[iViewIdx]->setSliceArgument                ( m_iSliceArgument            );
[5]276
[56]277  //====== Entropy Slice ========
278    m_acTEncTopList[iViewIdx]->setEntropySliceMode             ( m_iEntropySliceMode         );
279    m_acTEncTopList[iViewIdx]->setEntropySliceArgument         ( m_iEntropySliceArgument     );
280    int iNumPartInCU = 1<<(m_uiMaxCUDepth<<1);
281    if(m_iEntropySliceMode==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE)
282    {
283      m_acTEncTopList[iViewIdx]->setEntropySliceArgument ( m_iEntropySliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) );
284    }
285    if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE)
286    {
287      m_acTEncTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) );
288    }
289#if FIXED_NUMBER_OF_TILES_SLICE_MODE
290    if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE)
291    {
292      m_acTEncTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument );
293    }
[2]294#endif
[56]295    m_acTEncTopList[iViewIdx]->setSliceGranularity        ( m_iSliceGranularity         );
296    if(m_iSliceMode == 0 )
297    {
298      m_bLFCrossSliceBoundaryFlag = true;
299    }
300    m_acTEncTopList[iViewIdx]->setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag );
301    m_acTEncTopList[iViewIdx]->setUseSAO               ( m_abUseSAO[0]     );
[152]302#if LGE_ILLUCOMP_B0045
[156]303    m_acTEncTopList[iViewIdx]->setUseIC                ( m_bUseIC          );
[152]304#endif
[56]305#if SAO_UNIT_INTERLEAVING
306    m_acTEncTopList[iViewIdx]->setMaxNumOffsetsPerPic (m_maxNumOffsetsPerPic);
307    m_acTEncTopList[iViewIdx]->setSaoInterleavingFlag (m_saoInterleavingFlag);
[2]308#endif
[56]309    m_acTEncTopList[iViewIdx]->setPCMInputBitDepthFlag  ( m_bPCMInputBitDepthFlag); 
310    m_acTEncTopList[iViewIdx]->setPCMFilterDisableFlag  ( m_bPCMFilterDisableFlag); 
[2]311
[56]312    m_acTEncTopList[iViewIdx]->setPictureDigestEnabled(m_pictureDigestEnabled);
[2]313
[56]314    m_acTEncTopList[iViewIdx]->setColumnRowInfoPresent       ( m_iColumnRowInfoPresent );
315    m_acTEncTopList[iViewIdx]->setUniformSpacingIdr          ( m_iUniformSpacingIdr );
316#if !REMOVE_TILE_DEPENDENCE
317    m_acTEncTopList[iViewIdx]->setTileBoundaryIndependenceIdr( m_iTileBoundaryIndependenceIdr );
[2]318#endif
[56]319    m_acTEncTopList[iViewIdx]->setNumColumnsMinus1           ( m_iNumColumnsMinus1 );
320    m_acTEncTopList[iViewIdx]->setNumRowsMinus1              ( m_iNumRowsMinus1 );
321    if(m_iUniformSpacingIdr==0)
322    {
323      m_acTEncTopList[iViewIdx]->setColumnWidth              ( m_pchColumnWidth );
324      m_acTEncTopList[iViewIdx]->setRowHeight                ( m_pchRowHeight );
325    }
326    m_acTEncTopList[iViewIdx]->xCheckGSParameters();
327    m_acTEncTopList[iViewIdx]->setTileLocationInSliceHeaderFlag ( m_iTileLocationInSliceHeaderFlag );
328    m_acTEncTopList[iViewIdx]->setTileMarkerFlag              ( m_iTileMarkerFlag );
329    m_acTEncTopList[iViewIdx]->setMaxTileMarkerEntryPoints    ( m_iMaxTileMarkerEntryPoints );
330 
331    Int uiTilesCount          = (m_iNumRowsMinus1+1) * (m_iNumColumnsMinus1+1);
332    m_dMaxTileMarkerOffset    = ((Double)uiTilesCount) / m_iMaxTileMarkerEntryPoints;
333    m_acTEncTopList[iViewIdx]->setMaxTileMarkerOffset         ( m_dMaxTileMarkerOffset );
334    m_acTEncTopList[iViewIdx]->setTileBehaviorControlPresentFlag( m_iTileBehaviorControlPresentFlag );
335#if !REMOVE_TILE_DEPENDENCE
336    if(m_iTileBoundaryIndependenceIdr == 0 || uiTilesCount == 1)
337#else
338    if(uiTilesCount == 1)
[2]339#endif
[56]340    {
341      m_bLFCrossTileBoundaryFlag = true; 
342    }
343    m_acTEncTopList[iViewIdx]->setLFCrossTileBoundaryFlag( m_bLFCrossTileBoundaryFlag );
344    m_acTEncTopList[iViewIdx]->setWaveFrontSynchro           ( m_iWaveFrontSynchro );
345    m_acTEncTopList[iViewIdx]->setWaveFrontFlush             ( m_iWaveFrontFlush );
346    m_acTEncTopList[iViewIdx]->setWaveFrontSubstreams        ( m_iWaveFrontSubstreams );
347    m_acTEncTopList[iViewIdx]->setEnableTMVP ( m_enableTMVP );
348    m_acTEncTopList[iViewIdx]->setUseScalingListId           ( m_useScalingListId  );
349    m_acTEncTopList[iViewIdx]->setScalingListFile            ( m_scalingListFile   );
350#if MULTIBITS_DATA_HIDING
351    m_acTEncTopList[iViewIdx]->setSignHideFlag(m_signHideFlag);
352    m_acTEncTopList[iViewIdx]->setTSIG(m_signHidingThreshold);
[2]353#endif
354
[56]355#if LCU_SYNTAX_ALF
356    if(uiTilesCount > 1)
[2]357    {
[56]358      m_bALFParamInSlice = false;
359      m_bALFPicBasedEncode = true;
[2]360    }
[56]361    m_acTEncTopList[iViewIdx]->setALFParamInSlice              ( m_bALFParamInSlice);
362    m_acTEncTopList[iViewIdx]->setALFPicBasedEncode            ( m_bALFPicBasedEncode);
[2]363#endif
[56]364
365    //====== Depth tools ========
366#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
367    m_acTEncTopList[iViewIdx]->setUseDMM                     ( false );
[2]368#endif
[116]369#if OL_DEPTHLIMIT_A0044
370    m_acTEncTopList[iViewIdx]->setUseDPL                     ( false );
[115]371#endif
[5]372#if HHI_MPI
[2]373    m_acTEncTopList[iViewIdx]->setUseMVI( false );
[5]374#endif
[2]375  }
376  if( m_bUsingDepthMaps )
377  {
378    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
379    {
[56]380      m_depthFrameRcvd.push_back(0);
381      m_acTEncDepthTopList.push_back(new TEncTop); 
[2]382      m_acTVideoIOYuvDepthInputFileList.push_back(new TVideoIOYuv);
[56]383      m_acTVideoIOYuvDepthReconFileList.push_back(new TVideoIOYuv);
384      m_picYuvDepthRec.push_back(new TComList<TComPicYuv*>) ;
[2]385
386      m_acTEncDepthTopList[iViewIdx]->setFrameRate                    ( m_iFrameRate );
387      m_acTEncDepthTopList[iViewIdx]->setFrameSkip                    ( m_FrameSkip );
388      m_acTEncDepthTopList[iViewIdx]->setSourceWidth                  ( m_iSourceWidth );
389      m_acTEncDepthTopList[iViewIdx]->setSourceHeight                 ( m_iSourceHeight );
[56]390#if PIC_CROPPING
391      m_acTEncDepthTopList[iViewIdx]->setCroppingMode                 ( m_croppingMode );
392      m_acTEncDepthTopList[iViewIdx]->setCropLeft                     ( m_cropLeft );
393      m_acTEncDepthTopList[iViewIdx]->setCropRight                    ( m_cropRight );
394      m_acTEncDepthTopList[iViewIdx]->setCropTop                      ( m_cropTop );
395      m_acTEncDepthTopList[iViewIdx]->setCropBottom                   ( m_cropBottom );
396#endif
[2]397      m_acTEncDepthTopList[iViewIdx]->setFrameToBeEncoded             ( m_iFrameToBeEncoded );
[56]398      m_acTEncDepthTopList[iViewIdx]->setViewId                       ( iViewIdx );
399      m_acTEncDepthTopList[iViewIdx]->setIsDepth                      ( true );
400      m_acTEncDepthTopList[iViewIdx]->setViewOrderIdx                 ( m_cCameraData.getViewOrderIndex()[ iViewIdx ] );
[77]401#if VIDYO_VPS_INTEGRATION
402      layerId = iViewIdx * 2 + 1;
403      m_acTEncDepthTopList[iViewIdx]->setLayerId                      ( layerId );
404      m_cVPS.setDepthFlag                                             ( true, layerId );
405      m_cVPS.setViewId                                                ( iViewIdx, layerId );
406      m_cVPS.setViewOrderIdx                                          ( m_cCameraData.getViewOrderIndex()[ iViewIdx ], layerId );
407      m_cVPS.setDependentFlag                                         ( true, layerId );
408      m_cVPS.setDependentLayer                                        ( layerId-1, layerId);
409#endif
[56]410      m_acTEncDepthTopList[iViewIdx]->setCamParPrecision              ( 0 );
411      m_acTEncDepthTopList[iViewIdx]->setCamParInSliceHeader          ( false );
412      m_acTEncDepthTopList[iViewIdx]->setCodedScale                   ( 0 );
413      m_acTEncDepthTopList[iViewIdx]->setCodedOffset                  ( 0 );
[2]414
415      //====== Coding Structure ========
[56]416      m_acTEncDepthTopList[iViewIdx]->setIntraPeriod                  ( m_iIntraPeriod );
[2]417      m_acTEncDepthTopList[iViewIdx]->setDecodingRefreshType          ( m_iDecodingRefreshType );
[56]418      m_acTEncDepthTopList[iViewIdx]->setGOPSize                      ( m_iGOPSize );
419      m_acTEncDepthTopList[iViewIdx]->setGopList                      ( m_GOPListsMvc[iViewIdx] );
420      m_acTEncDepthTopList[iViewIdx]->setExtraRPSs                    ( m_extraRPSs[iViewIdx] );
421#if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER
422      for(Int i = 0; i < MAX_TLAYER; i++)
423      {
424        m_acTEncDepthTopList[iViewIdx]->setNumReorderPics             ( m_numReorderPics[iViewIdx][i], i );
425        m_acTEncDepthTopList[iViewIdx]->setMaxDecPicBuffering         ( m_maxDecPicBuffering[iViewIdx][i], i );
426      }
427#else
428      m_acTEncDepthTopList[iViewIdx]->setNumReorderFrames             ( m_numReorderFrames );
429      m_acTEncDepthTopList[iViewIdx]->setMaxNumberOfReferencePictures ( m_maxNumberOfReferencePictures );
[2]430#endif
[56]431      for( UInt uiLoop = 0; uiLoop < MAX_TLAYER; ++uiLoop )
432      {
433        m_acTEncDepthTopList[iViewIdx]->setLambdaModifier( uiLoop, m_adLambdaModifier[ uiLoop ] );
434      }
[2]435      m_acTEncDepthTopList[iViewIdx]->setQP                           ( m_aiQP[1] );
436
437      m_acTEncDepthTopList[iViewIdx]->setTemporalLayerQPOffset        ( m_aiTLayerQPOffset );
438      m_acTEncDepthTopList[iViewIdx]->setPad                          ( m_aiPad );
439
[56]440#if H0566_TLA
441      m_acTEncDepthTopList[iViewIdx]->setMaxTempLayer                 ( m_maxTempLayer[iViewIdx] );
442#else
443      m_acTEncDepthTopList[iViewIdx]->setTLayering                    ( m_bTLayering );
444      m_acTEncDepthTopList[iViewIdx]->setTLayerSwitchingFlag          ( m_abTLayerSwitchingFlag );
445#endif
446
447      m_acTEncDepthTopList[iViewIdx]->setDisInter4x4                  ( m_bDisInter4x4);
448
449      m_acTEncDepthTopList[iViewIdx]->setUseNSQT( m_enableNSQT );
450      m_acTEncDepthTopList[iViewIdx]->setUseAMP( m_enableAMP );
451
[2]452      //===== Slice ========
453
454      //====== Loop/Deblock Filter ========
455      m_acTEncDepthTopList[iViewIdx]->setLoopFilterDisable            ( m_abLoopFilterDisable[1]   );
[56]456      m_acTEncDepthTopList[iViewIdx]->setLoopFilterOffsetInAPS        ( m_loopFilterOffsetInAPS );
457      m_acTEncDepthTopList[iViewIdx]->setLoopFilterBetaOffset         ( m_loopFilterBetaOffsetDiv2  );
458      m_acTEncDepthTopList[iViewIdx]->setLoopFilterTcOffset           ( m_loopFilterTcOffsetDiv2    );
459#if DBL_CONTROL
460      m_acTEncDepthTopList[iViewIdx]->setDeblockingFilterControlPresent( m_DeblockingFilterControlPresent);
461#endif
[2]462
463      //====== Motion search ========
464      m_acTEncDepthTopList[iViewIdx]->setFastSearch                   ( m_iFastSearch  );
465      m_acTEncDepthTopList[iViewIdx]->setSearchRange                  ( m_iSearchRange );
466      m_acTEncDepthTopList[iViewIdx]->setBipredSearchRange            ( m_bipredSearchRange );
[56]467
468      //====== Quality control ========
[2]469      m_acTEncDepthTopList[iViewIdx]->setMaxDeltaQP                   ( m_iMaxDeltaQP  );
[56]470      m_acTEncDepthTopList[iViewIdx]->setMaxCuDQPDepth                ( m_iMaxCuDQPDepth  );
[2]471
[56]472      m_acTEncDepthTopList[iViewIdx]->setChromaQpOffset               ( m_iChromaQpOffset     );
473      m_acTEncDepthTopList[iViewIdx]->setChromaQpOffset2nd            ( m_iChromaQpOffset2nd  );
474
475#if ADAPTIVE_QP_SELECTION
476      m_acTEncDepthTopList[iViewIdx]->setUseAdaptQpSelect             ( m_bUseAdaptQpSelect   );
477#endif
478
479      m_acTEncDepthTopList[iViewIdx]->setUseAdaptiveQP                ( m_bUseAdaptiveQP  );
480      m_acTEncDepthTopList[iViewIdx]->setQPAdaptationRange            ( m_iQPAdaptationRange );
481
[2]482      //====== Tool list ========
483      m_acTEncDepthTopList[iViewIdx]->setUseSBACRD                    ( m_bUseSBACRD   );
484      m_acTEncDepthTopList[iViewIdx]->setDeltaQpRD                    ( m_uiDeltaQpRD  );
485      m_acTEncDepthTopList[iViewIdx]->setUseASR                       ( m_bUseASR      );
486      m_acTEncDepthTopList[iViewIdx]->setUseHADME                     ( m_bUseHADME    );
487      m_acTEncDepthTopList[iViewIdx]->setUseALF                       ( m_abUseALF[1]  );
488      m_acTEncDepthTopList[iViewIdx]->setALFEncodePassReduction       ( m_iALFEncodePassReduction );
[56]489#if LOSSLESS_CODING
490      m_acTEncDepthTopList[iViewIdx]->setUseLossless                  ( m_useLossless );
[2]491#endif
[56]492      m_acTEncDepthTopList[iViewIdx]->setALFMaxNumberFilters          ( m_iALFMaxNumberFilters ) ;
493
[2]494      m_acTEncDepthTopList[iViewIdx]->setUseLComb                     ( m_bUseLComb    );
[56]495      m_acTEncDepthTopList[iViewIdx]->setLCMod                        ( m_bLCMod       );
496      m_acTEncDepthTopList[iViewIdx]->setdQPs                         ( m_aidQPdepth   );
[2]497      m_acTEncDepthTopList[iViewIdx]->setUseRDOQ                      ( m_abUseRDOQ[1] );
[56]498#if !PIC_CROPPING
[2]499      m_acTEncDepthTopList[iViewIdx]->setUsePAD                       ( m_bUsePAD      );
[56]500#endif
[2]501      m_acTEncDepthTopList[iViewIdx]->setQuadtreeTULog2MaxSize        ( m_uiQuadtreeTULog2MaxSize );
502      m_acTEncDepthTopList[iViewIdx]->setQuadtreeTULog2MinSize        ( m_uiQuadtreeTULog2MinSize );
503      m_acTEncDepthTopList[iViewIdx]->setQuadtreeTUMaxDepthInter      ( m_uiQuadtreeTUMaxDepthInter );
504      m_acTEncDepthTopList[iViewIdx]->setQuadtreeTUMaxDepthIntra      ( m_uiQuadtreeTUMaxDepthIntra );
505      m_acTEncDepthTopList[iViewIdx]->setUseFastEnc                   ( m_bUseFastEnc  );
[56]506      m_acTEncDepthTopList[iViewIdx]->setUseEarlyCU                   ( m_bUseEarlyCU  ); 
507#if FAST_DECISION_FOR_MRG_RD_COST
508      m_acTEncDepthTopList[iViewIdx]->setUseFastDecisionForMerge      ( m_useFastDecisionForMerge  );
509#endif
510      m_acTEncDepthTopList[iViewIdx]->setUseCbfFastMode               ( m_bUseCbfFastMode  );
511#if HHI_INTERVIEW_SKIP
512      m_acTEncDepthTopList[iViewIdx]->setInterViewSkip            ( 0 );
513#if HHI_INTERVIEW_SKIP_LAMBDA_SCALE
514      m_acTEncDepthTopList[iViewIdx]->setInterViewSkipLambdaScale ( 1 );
515#endif
516#endif
517      m_acTEncDepthTopList[iViewIdx]->setUseLMChroma                  ( m_bUseLMChroma );
518      m_acTEncDepthTopList[iViewIdx]->setUseConstrainedIntraPred      ( m_bUseConstrainedIntraPred );
519      m_acTEncDepthTopList[iViewIdx]->setPCMLog2MinSize               ( m_uiPCMLog2MinSize);
520      m_acTEncDepthTopList[iViewIdx]->setUsePCM                       ( m_usePCM );
521      m_acTEncDepthTopList[iViewIdx]->setPCMLog2MaxSize               ( m_pcmLog2MaxSize);
522      //====== VSO ========
[5]523#if HHI_VSO
[2]524      m_acTEncDepthTopList[iViewIdx]->setUseVSO                       ( m_bUseVSO      ); //GT: might be enabled/disabled later for VSO Mode 4
525      m_acTEncDepthTopList[iViewIdx]->setForceLambdaScaleVSO          ( m_bForceLambdaScaleVSO );
526      m_acTEncDepthTopList[iViewIdx]->setLambdaScaleVSO               ( m_dLambdaScaleVSO );
[5]527#if HHI_VSO_DIST_INT
[2]528      m_acTEncDepthTopList[iViewIdx]->setAllowNegDist                 ( m_bAllowNegDist );
529#endif
530      m_acTEncDepthTopList[iViewIdx]->setVSOMode                      ( m_uiVSOMode );
[100]531
532#if SAIT_VSO_EST_A0033
533      m_acTEncDepthTopList[iViewIdx]->setUseEstimatedVSD              ( m_bUseEstimatedVSD );
[5]534#endif
[115]535#if LGE_WVSO_A0119
[120]536      m_acTEncDepthTopList[iViewIdx]->setUseWVSO                      ( m_bUseWVSO         );
[100]537#endif
[115]538#endif
[2]539
[5]540#if DEPTH_MAP_GENERATION
[2]541      m_acTEncDepthTopList[iViewIdx]->setPredDepthMapGeneration       ( 0 );
[5]542#endif
543#if HHI_INTER_VIEW_MOTION_PRED
[2]544      m_acTEncDepthTopList[iViewIdx]->setMultiviewMvPredMode          ( 0 );
545      m_acTEncDepthTopList[iViewIdx]->setMultiviewMvRegMode           ( 0 );
546      m_acTEncDepthTopList[iViewIdx]->setMultiviewMvRegLambdaScale    ( 0.0 );
[5]547#endif
548#if HHI_INTER_VIEW_RESIDUAL_PRED
[2]549      m_acTEncDepthTopList[iViewIdx]->setMultiviewResPredMode         ( 0 );
[5]550#endif
[2]551
[56]552      //====== Weighted Prediction ========
553      m_acTEncDepthTopList[iViewIdx]->setUseWP                        ( m_bUseWeightPred      );
554      m_acTEncDepthTopList[iViewIdx]->setWPBiPredIdc                  ( m_uiBiPredIdc         );
555      //====== Slice ========
556      m_acTEncDepthTopList[iViewIdx]->setSliceMode                    ( m_iSliceMode                );
557      m_acTEncDepthTopList[iViewIdx]->setSliceArgument                ( m_iSliceArgument            );
558
559      //====== Entropy Slice ========
560      m_acTEncDepthTopList[iViewIdx]->setEntropySliceMode             ( m_iEntropySliceMode         );
561      m_acTEncDepthTopList[iViewIdx]->setEntropySliceArgument         ( m_iEntropySliceArgument     );
562      int iNumPartInCU = 1<<(m_uiMaxCUDepth<<1);
563      if(m_iEntropySliceMode==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE)
564      {
565        m_acTEncDepthTopList[iViewIdx]->setEntropySliceArgument ( m_iEntropySliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) );
566      }
567      if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE)
568      {
569        m_acTEncDepthTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) );
570      }
571#if FIXED_NUMBER_OF_TILES_SLICE_MODE
572      if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE)
573      {
574        m_acTEncDepthTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument );
575      }
[2]576#endif
[56]577      m_acTEncDepthTopList[iViewIdx]->setSliceGranularity        ( m_iSliceGranularity         );
578      if(m_iSliceMode == 0 )
579      {
580        m_bLFCrossSliceBoundaryFlag = true;
581      }
582      m_acTEncDepthTopList[iViewIdx]->setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag );
583      m_acTEncDepthTopList[iViewIdx]->setUseSAO               ( m_abUseSAO[1]     );
[152]584#if LGE_ILLUCOMP_B0045
[156]585      m_acTEncDepthTopList[iViewIdx]->setUseIC                ( false     );
[152]586#endif
[56]587#if SAO_UNIT_INTERLEAVING
588      m_acTEncDepthTopList[iViewIdx]->setMaxNumOffsetsPerPic (m_maxNumOffsetsPerPic);
589      m_acTEncDepthTopList[iViewIdx]->setSaoInterleavingFlag (m_saoInterleavingFlag);
[2]590#endif
[56]591      m_acTEncDepthTopList[iViewIdx]->setPCMInputBitDepthFlag  ( m_bPCMInputBitDepthFlag); 
592      m_acTEncDepthTopList[iViewIdx]->setPCMFilterDisableFlag  ( m_bPCMFilterDisableFlag); 
[2]593
[56]594      m_acTEncDepthTopList[iViewIdx]->setPictureDigestEnabled(m_pictureDigestEnabled);
595
596      m_acTEncDepthTopList[iViewIdx]->setColumnRowInfoPresent       ( m_iColumnRowInfoPresent );
597      m_acTEncDepthTopList[iViewIdx]->setUniformSpacingIdr          ( m_iUniformSpacingIdr );
598#if !REMOVE_TILE_DEPENDENCE
599      m_acTEncDepthTopList[iViewIdx]->setTileBoundaryIndependenceIdr( m_iTileBoundaryIndependenceIdr );
[2]600#endif
[56]601      m_acTEncDepthTopList[iViewIdx]->setNumColumnsMinus1           ( m_iNumColumnsMinus1 );
602      m_acTEncDepthTopList[iViewIdx]->setNumRowsMinus1              ( m_iNumRowsMinus1 );
603      if(m_iUniformSpacingIdr==0)
604      {
605        m_acTEncDepthTopList[iViewIdx]->setColumnWidth              ( m_pchColumnWidth );
606        m_acTEncDepthTopList[iViewIdx]->setRowHeight                ( m_pchRowHeight );
607      }
608      m_acTEncDepthTopList[iViewIdx]->xCheckGSParameters();
609      m_acTEncDepthTopList[iViewIdx]->setTileLocationInSliceHeaderFlag ( m_iTileLocationInSliceHeaderFlag );
610      m_acTEncDepthTopList[iViewIdx]->setTileMarkerFlag              ( m_iTileMarkerFlag );
611      m_acTEncDepthTopList[iViewIdx]->setMaxTileMarkerEntryPoints    ( m_iMaxTileMarkerEntryPoints );
[2]612
[56]613      Int uiTilesCount          = (m_iNumRowsMinus1+1) * (m_iNumColumnsMinus1+1);
614      m_dMaxTileMarkerOffset    = ((Double)uiTilesCount) / m_iMaxTileMarkerEntryPoints;
615      m_acTEncDepthTopList[iViewIdx]->setMaxTileMarkerOffset         ( m_dMaxTileMarkerOffset );
616      m_acTEncDepthTopList[iViewIdx]->setTileBehaviorControlPresentFlag( m_iTileBehaviorControlPresentFlag );
617#if !REMOVE_TILE_DEPENDENCE
618      if(m_iTileBoundaryIndependenceIdr == 0 || uiTilesCount == 1)
619#else
620      if(uiTilesCount == 1)
[2]621#endif
[56]622      {
623        m_bLFCrossTileBoundaryFlag = true; 
624      }
625      m_acTEncDepthTopList[iViewIdx]->setLFCrossTileBoundaryFlag( m_bLFCrossTileBoundaryFlag );
626      m_acTEncDepthTopList[iViewIdx]->setWaveFrontSynchro           ( m_iWaveFrontSynchro );
627      m_acTEncDepthTopList[iViewIdx]->setWaveFrontFlush             ( m_iWaveFrontFlush );
628      m_acTEncDepthTopList[iViewIdx]->setWaveFrontSubstreams        ( m_iWaveFrontSubstreams );
629      m_acTEncDepthTopList[iViewIdx]->setEnableTMVP ( m_enableTMVP );
630      m_acTEncDepthTopList[iViewIdx]->setUseScalingListId           ( m_useScalingListId  );
631      m_acTEncDepthTopList[iViewIdx]->setScalingListFile            ( m_scalingListFile   );
632#if MULTIBITS_DATA_HIDING
633      m_acTEncDepthTopList[iViewIdx]->setSignHideFlag(m_signHideFlag);
634      m_acTEncDepthTopList[iViewIdx]->setTSIG(m_signHidingThreshold);
[2]635#endif
636
[56]637#if LCU_SYNTAX_ALF
638      if(uiTilesCount > 1)
[2]639      {
[56]640        m_bALFParamInSlice = false;
641        m_bALFPicBasedEncode = true;
[2]642      }
[56]643      m_acTEncDepthTopList[iViewIdx]->setALFParamInSlice              ( m_bALFParamInSlice);
644      m_acTEncDepthTopList[iViewIdx]->setALFPicBasedEncode            ( m_bALFPicBasedEncode);
[2]645#endif
[56]646
647  //====== Depth tools ========
648#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
649    m_acTEncDepthTopList[iViewIdx]->setUseDMM                     ( m_bUseDMM );
[2]650#endif
[116]651#if OL_DEPTHLIMIT_A0044
652    m_acTEncDepthTopList[iViewIdx]->setUseDPL                      (m_bDepthPartitionLimiting);
[115]653#endif
[5]654#if HHI_MPI
[56]655     m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI );
[5]656#endif
[2]657    }
658  }
[56]659
[5]660#if HHI_INTER_VIEW_MOTION_PRED
[2]661  else if( m_uiMultiviewMvRegMode )
662  {
663    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
664    {
665      m_acTVideoIOYuvDepthInputFileList.push_back( new TVideoIOYuv );
666    }
667  }
[5]668#endif
[2]669
[5]670#if HHI_VSO
[2]671  if ( m_bUseVSO )
672  {
673    if ( m_uiVSOMode == 4 )
[5]674    {
[101]675#if HHI_VSO_SPEEDUP_A0033
[100]676#if LGE_VSO_EARLY_SKIP_A0093
677      m_cRendererModel.create( m_cRenModStrParser.getNumOfBaseViews(), m_cRenModStrParser.getNumOfModels(), m_iSourceWidth, g_uiMaxCUHeight , LOG2_DISP_PREC_LUT, 0, m_bVSOEarlySkip );
678#else
679      m_cRendererModel.create( m_cRenModStrParser.getNumOfBaseViews(), m_cRenModStrParser.getNumOfModels(), m_iSourceWidth, g_uiMaxCUHeight , LOG2_DISP_PREC_LUT, 0 );
680#endif
681#else
[2]682      m_cRendererModel.create( m_cRenModStrParser.getNumOfBaseViews(), m_cRenModStrParser.getNumOfModels(), m_iSourceWidth, m_iSourceHeight, LOG2_DISP_PREC_LUT, 0 );
[100]683#endif
[2]684
685      for ( Int iViewNum = 0; iViewNum < m_iNumberOfViews; iViewNum++ )
686      {
687        for (Int iContent = 0; iContent < 2; iContent++ )
688        {
[5]689          Int iNumOfModels   = m_cRenModStrParser.getNumOfModelsForView(iViewNum, iContent);
690          Bool bUseVSO = (iNumOfModels != 0);
[2]691
[5]692          TEncTop* pcEncTop = ( iContent == 0 ) ? m_acTEncTopList[iViewNum] : m_acTEncDepthTopList[iViewNum];
693          pcEncTop->setUseVSO( bUseVSO );
694          pcEncTop->getRdCost()->setRenModel( bUseVSO ? &m_cRendererModel : NULL );
695
[2]696          for (Int iCurModel = 0; iCurModel < iNumOfModels; iCurModel++ )
697          {
[5]698            Int iModelNum; Int iLeftViewNum; Int iRightViewNum; Int iDump; Int iOrgRefNum; Int iBlendMode;
[2]699
[5]700            m_cRenModStrParser.getSingleModelData  ( iViewNum, iContent, iCurModel, iModelNum, iBlendMode, iLeftViewNum, iRightViewNum, iOrgRefNum, iDump ) ;
701            m_cRendererModel  .createSingleModel   ( iViewNum, iContent, iModelNum, iLeftViewNum, iRightViewNum, (iOrgRefNum != -1), iBlendMode );
[2]702          }
703        }
704      }
705    }
706    else
707    {
[56]708      AOT(true);
[2]709    }
[115]710#if LGE_WVSO_A0119
711    for ( Int iViewNum = 0; iViewNum < m_iNumberOfViews; iViewNum++ )
712    {
713      for (Int iContent = 0; iContent < 2; iContent++ )
714      {
715        TEncTop* pcEncTop = ( iContent == 0 ) ? m_acTEncTopList[iViewNum] : m_acTEncDepthTopList[iViewNum]; 
[120]716        pcEncTop->setUseWVSO  ( m_bUseWVSO );
[115]717        pcEncTop->setVSOWeight( m_iVSOWeight );
718        pcEncTop->setVSDWeight( m_iVSDWeight );
[120]719        pcEncTop->setDWeight  ( m_iDWeight );
[115]720      }
721    }
722#endif
[5]723  }
724#endif
[2]725
[5]726#if HHI_INTERVIEW_SKIP
727  m_cUsedPelsRenderer.init(m_iSourceWidth, m_iSourceHeight, true, 0, LOG2_DISP_PREC_LUT, true, 0, 0, 0, 0, 0, 6, 4, 1, 0, 6 );
728#endif
[56]729
[2]730}
731
732Void TAppEncTop::xCreateLib()
733{
734  for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
735  {
736    m_acTVideoIOYuvInputFileList[iViewIdx]->open( m_pchInputFileList[iViewIdx],     false, m_uiInputBitDepth, m_uiInternalBitDepth );  // read  mode
[56]737    m_acTVideoIOYuvInputFileList[iViewIdx]->skipFrames(m_FrameSkip, m_iSourceWidth - m_aiPad[0], m_iSourceHeight - m_aiPad[1]);
[2]738
[56]739    if (m_pchReconFileList[iViewIdx])
740      m_acTVideoIOYuvReconFileList[iViewIdx]->open(m_pchReconFileList[iViewIdx], true, m_uiOutputBitDepth, m_uiInternalBitDepth);  // write mode
[2]741    m_acTEncTopList[iViewIdx]->create();
742    if( m_bUsingDepthMaps )
743    {
744      m_acTVideoIOYuvDepthInputFileList[iViewIdx]->open( m_pchDepthInputFileList[iViewIdx],     false, m_uiInputBitDepth, m_uiInternalBitDepth );  // read  mode
[56]745      m_acTVideoIOYuvDepthInputFileList[iViewIdx]->skipFrames(m_FrameSkip, m_iSourceWidth - m_aiPad[0], m_iSourceHeight - m_aiPad[1]);
[2]746
[56]747      if (m_pchDepthReconFileList[iViewIdx])
748        m_acTVideoIOYuvDepthReconFileList[iViewIdx]->open(m_pchDepthReconFileList[iViewIdx], true, m_uiOutputBitDepth, m_uiInternalBitDepth);  // write mode
[2]749      m_acTEncDepthTopList[iViewIdx]->create();
750    }
[5]751#if HHI_INTER_VIEW_MOTION_PRED
[2]752    else if( m_uiMultiviewMvRegMode )
753    {
754      m_acTVideoIOYuvDepthInputFileList[iViewIdx]->open( m_pchDepthInputFileList[iViewIdx],     false, m_uiInputBitDepth, m_uiInternalBitDepth );  // read  mode
755      m_acTVideoIOYuvDepthInputFileList[iViewIdx]->skipFrames(m_FrameSkip, m_iSourceWidth, m_iSourceHeight);
756    }
[5]757#endif
[2]758  }
759}
760
761Void TAppEncTop::xDestroyLib()
762{
[56]763  // Video I/O
[2]764  for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
765  {
766    m_acTVideoIOYuvInputFileList[iViewIdx]->close();
767    m_acTVideoIOYuvReconFileList[iViewIdx]->close();
[56]768    delete m_acTVideoIOYuvInputFileList[iViewIdx] ; 
769    m_acTVideoIOYuvInputFileList[iViewIdx] = NULL;
770    delete m_acTVideoIOYuvReconFileList[iViewIdx] ; 
771    m_acTVideoIOYuvReconFileList[iViewIdx] = NULL;
772    m_acTEncTopList[iViewIdx]->deletePicBuffer();
[2]773    m_acTEncTopList[iViewIdx]->destroy();
[56]774    delete m_acTEncTopList[iViewIdx] ; 
775    m_acTEncTopList[iViewIdx] = NULL;
776    delete m_picYuvRec[iViewIdx] ; 
777    m_picYuvRec[iViewIdx] = NULL;
[2]778
779    if( iViewIdx < Int( m_acTVideoIOYuvDepthInputFileList.size() ) && m_acTVideoIOYuvDepthInputFileList[iViewIdx] )
780    {
781      m_acTVideoIOYuvDepthInputFileList[iViewIdx]->close( );
[56]782      delete m_acTVideoIOYuvDepthInputFileList[iViewIdx];
783      m_acTVideoIOYuvDepthInputFileList[iViewIdx] = NULL;
[2]784    }
785    if( iViewIdx < Int( m_acTVideoIOYuvDepthReconFileList.size() ) && m_acTVideoIOYuvDepthReconFileList[iViewIdx] )
786    {
787      m_acTVideoIOYuvDepthReconFileList[iViewIdx]->close () ;
788      delete m_acTVideoIOYuvDepthReconFileList[iViewIdx];
[56]789      m_acTVideoIOYuvDepthReconFileList[iViewIdx] = NULL;
[2]790    }
791    if( iViewIdx < Int( m_acTEncDepthTopList.size() ) && m_acTEncDepthTopList[iViewIdx] )
792    {
[56]793      m_acTEncDepthTopList[iViewIdx]->deletePicBuffer();
[2]794      m_acTEncDepthTopList[iViewIdx]->destroy();
795      delete m_acTEncDepthTopList[iViewIdx];
[56]796      m_acTEncDepthTopList[iViewIdx] = NULL;
[2]797    }
[56]798    if( iViewIdx < Int( m_picYuvDepthRec.size() ) && m_picYuvDepthRec[iViewIdx] )
[2]799    {
[56]800      delete m_picYuvDepthRec[iViewIdx] ; 
801      m_picYuvDepthRec[iViewIdx] = NULL;
[2]802    }
803  }
804}
805
806Void TAppEncTop::xInitLib()
807{
808  for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
809  {
810    m_acTEncTopList[iViewIdx]->init( this );
811  }
812  for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
813  {
814    m_acTEncTopList[iViewIdx]->setTEncTopList( &m_acTEncTopList  );
815  }
816  if ( m_bUsingDepthMaps )
817  {
818    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
819    {
820      m_acTEncDepthTopList[iViewIdx]->init( this );
821    }
822    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
823    {
824      m_acTEncDepthTopList[iViewIdx]->setTEncTopList( &m_acTEncDepthTopList  );
825    }
826  }
827}
828
829// ====================================================================================================================
830// Public member functions
831// ====================================================================================================================
832
833/**
834 - create internal class
835 - initialize internal variable
836 - until the end of input YUV file, call encoding function in TEncTop class
837 - delete allocated buffers
838 - destroy internal class
839 .
840 */
841Void TAppEncTop::encode()
842{
[56]843  fstream bitstreamFile(m_pchBitstreamFile, fstream::binary | fstream::out);
844  if (!bitstreamFile)
845  {
846    fprintf(stderr, "\nfailed to open bitstream file `%s' for writing\n", m_pchBitstreamFile);
847    exit(EXIT_FAILURE);
848  }
849
850  TComPicYuv*       pcPicYuvOrg = new TComPicYuv;
[2]851  TComPicYuv*       pcDepthPicYuvOrg = new TComPicYuv;
852  TComPicYuv*       pcPdmDepthOrg    = new TComPicYuv;
[56]853  TComPicYuv*       pcPicYuvRec = NULL;
854  TComPicYuv*       pcDepthPicYuvRec = NULL;
855 
[2]856  // initialize internal class & member variables
857  xInitLibCfg();
858  xCreateLib();
859  xInitLib();
[56]860 
[2]861  // main encoder loop
[56]862  Bool  allEos = false;
863  std::vector<Bool>  eos ;
864  std::vector<Bool>  depthEos ;
865  Int maxGopSize = 0;
866  Int gopSize = 1;
867 
868  list<AccessUnit> outputAccessUnits; ///< list of access units to write out.  is populated by the encoding process
869  maxGopSize = (std::max)(maxGopSize, m_acTEncTopList[0]->getGOPSize());   
[2]870
871  for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
872  {
[56]873    eos.push_back( false );
874    depthEos.push_back( false );
[2]875  }
[56]876
[2]877  // allocate original YUV buffer
878  pcPicYuvOrg->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth );
[56]879  pcDepthPicYuvOrg->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth );
880
[5]881#if HHI_INTER_VIEW_MOTION_PRED
[2]882  if( m_uiMultiviewMvRegMode )
883  {
884    pcPdmDepthOrg->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth );
885  }
[5]886#endif
[2]887
[56]888  while ( !allEos )
[2]889  {
[56]890    for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
[2]891    {
[56]892      Int frmCnt = 0;
893      while ( !eos[iViewIdx] && !(frmCnt == gopSize))
[2]894      {
895        // get buffers
[56]896        xGetBuffer(pcPicYuvRec, iViewIdx, false);
897
[2]898        // read input YUV file
[56]899        m_acTVideoIOYuvInputFileList[iViewIdx]->read( pcPicYuvOrg, m_aiPad );
900     
[5]901#if HHI_INTER_VIEW_MOTION_PRED
[2]902        if( m_uiMultiviewMvRegMode && iViewIdx )
903        {
904          m_acTVideoIOYuvDepthInputFileList[iViewIdx]->read( pcPdmDepthOrg, m_aiPad, m_bUsingDepthMaps );
905        }
[5]906#endif
[2]907
[5]908#if HHI_INTER_VIEW_MOTION_PRED
[56]909        m_acTEncTopList[iViewIdx]->initNewPic( pcPicYuvOrg, ( m_uiMultiviewMvRegMode && iViewIdx ? pcPdmDepthOrg : 0 ) );
[5]910#else
[56]911        m_acTEncTopList[iViewIdx]->initNewPic( pcPicYuvOrg );
[5]912#endif
[2]913
[56]914        // increase number of received frames
915        m_frameRcvd[iViewIdx]++;
916        frmCnt++;
917        // check end of file
918        eos[iViewIdx] = ( m_acTVideoIOYuvInputFileList[iViewIdx]->isEof() == 1 ?   true : false  );
919        eos[iViewIdx] = ( m_frameRcvd[iViewIdx] == m_iFrameToBeEncoded ?    true : eos[iViewIdx]   );
920        allEos = allEos|eos[iViewIdx] ; 
921      }
[2]922      if( m_bUsingDepthMaps )
923      {
[56]924        Int frmCntDepth = 0;
925        while ( !depthEos[iViewIdx] && !(frmCntDepth == gopSize))
[2]926        {
927          // get buffers
[56]928          xGetBuffer(pcDepthPicYuvRec, iViewIdx, true);
929
[2]930          // read input YUV file
[56]931          m_acTVideoIOYuvDepthInputFileList[iViewIdx]->read( pcDepthPicYuvOrg, m_aiPad );
[2]932
[56]933          m_acTEncDepthTopList[iViewIdx]->initNewPic( pcDepthPicYuvOrg );
[2]934
[56]935          // increase number of received frames
936          m_depthFrameRcvd[iViewIdx]++;
937          frmCntDepth++;
938          // check end of file
939          depthEos[iViewIdx] = ( m_acTVideoIOYuvDepthInputFileList[iViewIdx]->isEof() == 1 ?   true : false  );
940          depthEos[iViewIdx] = ( m_depthFrameRcvd[iViewIdx] == m_iFrameToBeEncoded ?    true : depthEos[iViewIdx]   );
941          allEos = allEos|depthEos[iViewIdx] ; 
[42]942        }
943      }
944    }
[56]945    for ( Int gopId=0; gopId < gopSize; gopId++ )
[42]946    {
[56]947      Int  iNumEncoded = 0;
948      UInt iNextPoc = m_acTEncTopList[0] -> getFrameId( gopId );
949      if ( iNextPoc < m_iFrameToBeEncoded )
[2]950      {
[56]951      m_cCameraData.update( iNextPoc );
[2]952      }
[56]953      for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
[2]954      {
[102]955#if SAIT_VSO_EST_A0033
956        if( m_bUseVSO && iNextPoc < m_iFrameToBeEncoded )
957        {
958          m_cCameraData.xSetDispCoeff( iNextPoc, iViewIdx );
959          m_acTEncDepthTopList[iViewIdx]->setDispCoeff( m_cCameraData.getDispCoeff() );
960        }
961#endif
[56]962        iNumEncoded = 0;
963        // call encoding function for one frame
964        m_acTEncTopList[iViewIdx]->encode( eos[iViewIdx], pcPicYuvOrg, *m_picYuvRec[iViewIdx], outputAccessUnits, iNumEncoded, gopId );
965        xWriteOutput(bitstreamFile, iNumEncoded, outputAccessUnits, iViewIdx, false);
966        outputAccessUnits.clear();
967        if( m_bUsingDepthMaps )
[2]968        {
[56]969          Int  iNumDepthEncoded = 0;
970          // call encoding function for one depth frame
971          m_acTEncDepthTopList[iViewIdx]->encode( depthEos[iViewIdx], pcDepthPicYuvOrg, *m_picYuvDepthRec[iViewIdx], outputAccessUnits, iNumDepthEncoded, gopId );
972          xWriteOutput(bitstreamFile, iNumDepthEncoded, outputAccessUnits, iViewIdx, true);
973          outputAccessUnits.clear();
[2]974        }
975      }
[56]976#if HHI_INTERVIEW_SKIP || HHI_INTER_VIEW_MOTION_PRED || HHI_INTER_VIEW_RESIDUAL_PRED
[2]977      for( Int iViewIdx = 0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
978      {
979        if( iViewIdx < (Int)m_acTEncTopList.size() && m_acTEncTopList[iViewIdx] )
980        {
[56]981          m_acTEncTopList[iViewIdx]->deleteExtraPicBuffers( m_acTEncTopList[iViewIdx]->getGOPEncoder()->getPocLastCoded() );
[2]982        }
983        if( iViewIdx < (Int)m_acTEncDepthTopList.size() && m_acTEncDepthTopList[iViewIdx] )
984        {
[56]985          m_acTEncDepthTopList[iViewIdx]->deleteExtraPicBuffers( m_acTEncTopList[iViewIdx]->getGOPEncoder()->getPocLastCoded() );
[2]986        }
987      }
[56]988#endif
989      for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
[2]990      {
[56]991        m_acTEncTopList[iViewIdx]->compressMotion( m_acTEncTopList[iViewIdx]->getGOPEncoder()->getPocLastCoded() );
992        if( m_bUsingDepthMaps )
[2]993        {
[56]994          m_acTEncDepthTopList[iViewIdx]->compressMotion( m_acTEncDepthTopList[iViewIdx]->getGOPEncoder()->getPocLastCoded() );
[2]995        }
996      }
997    }
[56]998    gopSize = maxGopSize;
[2]999  }
[56]1000  // delete original YUV buffer
1001  pcPicYuvOrg->destroy();
1002  delete pcPicYuvOrg;
1003  pcPicYuvOrg = NULL;
1004  pcDepthPicYuvOrg->destroy();
1005  delete pcDepthPicYuvOrg;
1006  pcDepthPicYuvOrg = NULL;
1007 
[121]1008#if FIX_MEM_LEAKS
1009  if ( pcPdmDepthOrg != NULL )
1010  {
1011    pcPdmDepthOrg->destroy();
1012    delete pcPdmDepthOrg;     
1013    pcPdmDepthOrg = NULL; 
1014  };
1015#endif
1016
1017 
[2]1018  for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
1019  {
1020    m_acTEncTopList[iViewIdx]->printOutSummary(m_acTEncTopList[iViewIdx]->getNumAllPicCoded());
1021    if ( m_bUsingDepthMaps )
1022    {
1023      m_acTEncDepthTopList[iViewIdx]->printOutSummary(m_acTEncDepthTopList[iViewIdx]->getNumAllPicCoded());
1024    }
1025  }
1026
[56]1027  // delete buffers & classes
1028  xDeleteBuffer();
1029  xDestroyLib();
[2]1030
[56]1031  return;
1032}
[2]1033
[56]1034TEncTop*  TAppEncTop::getTEncTop( Int viewId, Bool isDepth )   
1035{ 
1036  if ( isDepth ) 
[2]1037  {
[56]1038    return m_acTEncDepthTopList[viewId]; 
1039  } 
1040  else
1041  { 
1042    return m_acTEncTopList[viewId]; 
1043  } 
1044}
[2]1045
1046
1047// ====================================================================================================================
1048// Protected member functions
1049// ====================================================================================================================
1050
1051/**
1052 - application has picture buffer list with size of GOP
1053 - picture buffer list acts as ring buffer
1054 - end of the list has the latest picture
1055 .
1056 */
[56]1057Void TAppEncTop::xGetBuffer( TComPicYuv*& rpcPicYuvRec, Int iViewIdx, Bool isDepth)
[2]1058{
[56]1059  assert( m_iGOPSize > 0 );
1060 
1061  if( !isDepth )
1062  {
1063    if ( m_picYuvRec[iViewIdx]->size() == (UInt)m_iGOPSize )
[2]1064    {
[56]1065      rpcPicYuvRec = m_picYuvRec[iViewIdx]->popFront();
[2]1066    }
[56]1067    else
[2]1068    {
[56]1069      rpcPicYuvRec = new TComPicYuv; 
1070      rpcPicYuvRec->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth );
[2]1071    }
[56]1072    m_picYuvRec[iViewIdx]->pushBack( rpcPicYuvRec );
1073  }
1074  else
1075  {
1076    if ( m_picYuvDepthRec[iViewIdx]->size() == (UInt)m_iGOPSize )
1077    {
1078      rpcPicYuvRec = m_picYuvDepthRec[iViewIdx]->popFront();
1079    }
[2]1080    else
1081    {
[56]1082      rpcPicYuvRec = new TComPicYuv; 
[2]1083      rpcPicYuvRec->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth );
1084    }
[56]1085    m_picYuvDepthRec[iViewIdx]->pushBack( rpcPicYuvRec );
1086  }
[2]1087}
1088
1089Void TAppEncTop::xDeleteBuffer( )
1090{
[56]1091  for(Int iViewIdx=0; iViewIdx<m_picYuvRec.size(); iViewIdx++)
[2]1092  {
[56]1093    if(m_picYuvRec[iViewIdx])
[2]1094    {
[56]1095      TComList<TComPicYuv*>::iterator iterPicYuvRec  = m_picYuvRec[iViewIdx]->begin();
1096      Int iSize = Int( m_picYuvRec[iViewIdx]->size() );
[2]1097      for ( Int i = 0; i < iSize; i++ )
1098      {
[56]1099        TComPicYuv*  pcPicYuvRec  = *(iterPicYuvRec++);
1100        if(pcPicYuvRec)
1101        {
[2]1102          pcPicYuvRec->destroy();
[56]1103          delete pcPicYuvRec; 
1104          pcPicYuvRec = NULL;
1105        }
[2]1106      }
[56]1107    } 
[2]1108  }
[56]1109  for(Int iViewIdx=0; iViewIdx<m_picYuvDepthRec.size(); iViewIdx++)
[2]1110  {
[56]1111    if(m_picYuvDepthRec[iViewIdx])
[2]1112    {
[56]1113      TComList<TComPicYuv*>::iterator iterPicYuvRec  = m_picYuvDepthRec[iViewIdx]->begin();
1114      Int iSize = Int( m_picYuvDepthRec[iViewIdx]->size() );
1115      for ( Int i = 0; i < iSize; i++ )
[2]1116      {
[56]1117        TComPicYuv*  pcPicYuvRec  = *(iterPicYuvRec++);
1118        if(pcPicYuvRec)
1119        {
1120          pcPicYuvRec->destroy();
1121          delete pcPicYuvRec; 
1122          pcPicYuvRec = NULL;
1123        }
1124      } 
[2]1125    }
1126  }
1127}
1128
1129/** \param iNumEncoded  number of encoded frames
1130 */
[56]1131Void TAppEncTop::xWriteOutput(std::ostream& bitstreamFile, Int iNumEncoded, std::list<AccessUnit>& accessUnits, Int iViewIdx, Bool isDepth )
[2]1132{
[56]1133  Int i;
1134 
1135  if( iNumEncoded > 0 )
[2]1136  {
[56]1137    TComList<TComPicYuv*>::iterator iterPicYuvRec = !isDepth ? m_picYuvRec[iViewIdx]->end() : m_picYuvDepthRec[iViewIdx]->end();
1138 
1139    for ( i = 0; i < iNumEncoded; i++ )
1140    {
1141      --iterPicYuvRec;
1142    }
1143 
1144    for ( i = 0; i < iNumEncoded; i++ )
1145    {
1146      TComPicYuv*  pcPicYuvRec  = *(iterPicYuvRec++);
1147      if( !isDepth )
1148      {
1149        if (m_pchReconFileList[iViewIdx])
1150        {
1151#if PIC_CROPPING
1152          m_acTVideoIOYuvReconFileList[iViewIdx]->write( pcPicYuvRec, m_cropLeft, m_cropRight, m_cropTop, m_cropBottom );
1153#else
1154          m_acTVideoIOYuvReconFileList[iViewIdx]->write( pcPicYuvRec, m_aiPad );
1155#endif
1156        }
1157      }
1158      else
1159      {
1160        if (m_pchDepthReconFileList[iViewIdx])
1161        {
1162#if PIC_CROPPING
1163          m_acTVideoIOYuvDepthReconFileList[iViewIdx]->write( pcPicYuvRec, m_cropLeft, m_cropRight, m_cropTop, m_cropBottom );
1164#else
1165          m_acTVideoIOYuvDepthReconFileList[iViewIdx]->write( pcPicYuvRec, m_aiPad );
1166#endif
1167        }
1168      }
1169    }
[2]1170  }
[56]1171  if( ! accessUnits.empty() )
[2]1172  {
[56]1173    list<AccessUnit>::iterator aUIter;
1174    for( aUIter = accessUnits.begin(); aUIter != accessUnits.end(); aUIter++ )
[2]1175    {
[56]1176      const vector<unsigned>& stats = writeAnnexB(bitstreamFile, *aUIter);
1177      rateStatsAccum(*aUIter, stats);
[2]1178    }
1179  }
[56]1180}
[2]1181
1182
1183TComPicYuv* TAppEncTop::xGetPicYuvFromView( Int iViewIdx, Int iPoc, Bool bDepth, Bool bRecon )
1184{
[5]1185  TComPic*    pcPic = xGetPicFromView( iViewIdx, iPoc, bDepth);
1186  TComPicYuv* pcPicYuv = NULL;
[2]1187
1188  if (pcPic != NULL)
1189  {
1190    if( bRecon )
1191    {
1192      if ( pcPic->getReconMark() )
1193      {
[5]1194        pcPicYuv = pcPic->getPicYuvRec();
[2]1195      }
1196    }
1197    else
1198    {
[5]1199      pcPicYuv = pcPic->getPicYuvOrg();
1200    }
[2]1201  };
1202
[5]1203  return pcPicYuv;
1204};
[2]1205
[56]1206/**
1207 *
1208 */
1209void TAppEncTop::rateStatsAccum(const AccessUnit& au, const std::vector<unsigned>& annexBsizes)
[2]1210{
[56]1211  AccessUnit::const_iterator it_au = au.begin();
1212  vector<unsigned>::const_iterator it_stats = annexBsizes.begin();
[2]1213
[56]1214  for (; it_au != au.end(); it_au++, it_stats++)
[2]1215  {
[56]1216    switch ((*it_au)->m_nalUnitType)
[2]1217    {
[56]1218    case NAL_UNIT_CODED_SLICE:
1219#if H0566_TLA
1220    case NAL_UNIT_CODED_SLICE_IDV:
1221    case NAL_UNIT_CODED_SLICE_TLA:
1222    case NAL_UNIT_CODED_SLICE_CRA:
1223#else
1224    case NAL_UNIT_CODED_SLICE_DATAPART_A:
1225    case NAL_UNIT_CODED_SLICE_DATAPART_B:
1226    case NAL_UNIT_CODED_SLICE_CDR:
1227#endif
1228    case NAL_UNIT_CODED_SLICE_IDR:
1229    case NAL_UNIT_SPS:
1230    case NAL_UNIT_PPS:
[77]1231#if VIDYO_VPS_INTEGRATION
1232    case NAL_UNIT_VPS:
1233#endif
[56]1234      m_essentialBytes += *it_stats;
1235      break;
1236    default:
1237      break;
[2]1238    }
1239
[56]1240    m_totalBytes += *it_stats;
[2]1241  }
1242}
1243
[5]1244#if HHI_INTERVIEW_SKIP
[2]1245Void TAppEncTop::getUsedPelsMap( Int iViewIdx, Int iPoc, TComPicYuv* pcPicYuvUsedSplsMap )
1246{
[5]1247  AOT( iViewIdx <= 0);
1248  AOT( iViewIdx >= m_iNumberOfViews );
1249  AOF( m_cCameraData.getCurFrameId() == iPoc );
1250  Int iViewSIdx      = m_cCameraData.getBaseId2SortedId()[iViewIdx];
1251  Int iFirstViewSIdx = m_cCameraData.getBaseId2SortedId()[0];
[2]1252
1253  AOT( iViewSIdx == iFirstViewSIdx );
1254
[5]1255  Bool bFirstIsLeft = (iFirstViewSIdx < iViewSIdx);
[2]1256
[56]1257  m_cUsedPelsRenderer.setShiftLUTs(
[2]1258      m_cCameraData.getBaseViewShiftLUTD()[0][iViewIdx],
1259      m_cCameraData.getBaseViewShiftLUTI()[0][iViewIdx],
1260      m_cCameraData.getBaseViewShiftLUTI()[0][iViewIdx],
1261      m_cCameraData.getBaseViewShiftLUTD()[0][iViewIdx],
1262      m_cCameraData.getBaseViewShiftLUTI()[0][iViewIdx],
1263      m_cCameraData.getBaseViewShiftLUTI()[0][iViewIdx],
1264      -1
[5]1265      );
[2]1266
1267  TComPicYuv* pcPicYuvDepth = xGetPicYuvFromView(0, iPoc, true, true );
[5]1268  AOF( pcPicYuvDepth);
[2]1269
[5]1270  m_cUsedPelsRenderer.getUsedSamplesMap( pcPicYuvDepth, pcPicYuvUsedSplsMap, bFirstIsLeft );
[2]1271}
[5]1272#endif
1273#if HHI_VSO
[101]1274#if HHI_VSO_SPEEDUP_A0033
[100]1275Void TAppEncTop::setupRenModel( Int iPoc, Int iEncViewIdx, Int iEncContent, Int iHorOffset )
1276{
[124]1277#if FIX_VSO_SETUP
1278  m_cRendererModel.setupPart( iHorOffset, Min( g_uiMaxCUHeight, m_iSourceHeight - iHorOffset ) ); 
1279#else
[100]1280  m_cRendererModel.setHorOffset( iHorOffset ); 
[124]1281#endif
[100]1282#else
[2]1283Void TAppEncTop::setupRenModel( Int iPoc, Int iEncViewIdx, Int iEncContent )
1284{
[100]1285#endif
[5]1286  Int iEncViewSIdx = m_cCameraData.getBaseId2SortedId()[ iEncViewIdx ];
[2]1287
1288  // setup base views
[5]1289  Int iNumOfBV = m_cRenModStrParser.getNumOfBaseViewsForView( iEncViewSIdx, iEncContent );
[2]1290
1291  for (Int iCurView = 0; iCurView < iNumOfBV; iCurView++ )
[5]1292  {
1293    Int iBaseViewSIdx;
1294    Int iVideoDistMode;
1295    Int iDepthDistMode;
[2]1296
[5]1297    m_cRenModStrParser.getBaseViewData( iEncViewSIdx, iEncContent, iCurView, iBaseViewSIdx, iVideoDistMode, iDepthDistMode );
[2]1298
[5]1299    AOT( iVideoDistMode < 0 || iVideoDistMode > 2 );
[2]1300
[5]1301    Int iBaseViewIdx = m_cCameraData.getBaseSortedId2Id()[ iBaseViewSIdx ];
[2]1302
[5]1303    TComPicYuv* pcPicYuvVideoRec  = xGetPicYuvFromView( iBaseViewIdx, iPoc, false, true  );
1304    TComPicYuv* pcPicYuvDepthRec  = xGetPicYuvFromView( iBaseViewIdx, iPoc, true , true  );
1305    TComPicYuv* pcPicYuvVideoOrg  = xGetPicYuvFromView( iBaseViewIdx, iPoc, false, false );
1306    TComPicYuv* pcPicYuvDepthOrg  = xGetPicYuvFromView( iBaseViewIdx, iPoc, true , false );
[2]1307
[5]1308    TComPicYuv* pcPicYuvVideoRef  = ( iVideoDistMode == 2 ) ? pcPicYuvVideoOrg  : NULL;
1309    TComPicYuv* pcPicYuvDepthRef  = ( iDepthDistMode == 2 ) ? pcPicYuvDepthOrg  : NULL;
[2]1310
[5]1311    TComPicYuv* pcPicYuvVideoTest = ( iVideoDistMode == 0 ) ? pcPicYuvVideoOrg  : pcPicYuvVideoRec;
1312    TComPicYuv* pcPicYuvDepthTest = ( iDepthDistMode == 0 ) ? pcPicYuvDepthOrg  : pcPicYuvDepthRec;
1313
1314    AOT( (iVideoDistMode == 2) != (pcPicYuvVideoRef != NULL) );
1315    AOT( (iDepthDistMode == 2) != (pcPicYuvDepthRef != NULL) );
1316    AOT( pcPicYuvDepthTest == NULL );
1317    AOT( pcPicYuvVideoTest == NULL );
1318
1319    m_cRendererModel.setBaseView( iBaseViewSIdx, pcPicYuvVideoTest, pcPicYuvDepthTest, pcPicYuvVideoRef, pcPicYuvDepthRef );
[2]1320  }
1321
[5]1322  m_cRendererModel.setErrorMode( iEncViewSIdx, iEncContent, 0 );
[2]1323  // setup virtual views
[5]1324  Int iNumOfSV  = m_cRenModStrParser.getNumOfModelsForView( iEncViewSIdx, iEncContent );
[2]1325  for (Int iCurView = 0; iCurView < iNumOfSV; iCurView++ )
[5]1326  {
1327    Int iOrgRefBaseViewSIdx;
1328    Int iLeftBaseViewSIdx;
1329    Int iRightBaseViewSIdx;
1330    Int iSynthViewRelNum;
1331    Int iModelNum;
1332    Int iBlendMode;
1333    m_cRenModStrParser.getSingleModelData(iEncViewSIdx, iEncContent, iCurView, iModelNum, iBlendMode,iLeftBaseViewSIdx, iRightBaseViewSIdx, iOrgRefBaseViewSIdx, iSynthViewRelNum );
[2]1334
[5]1335    Int iLeftBaseViewIdx    = -1;
1336    Int iRightBaseViewIdx   = -1;
[2]1337
[5]1338    TComPicYuv* pcPicYuvOrgRef  = NULL;
1339    Int**      ppiShiftLUTLeft  = NULL;
1340    Int**      ppiShiftLUTRight = NULL;
1341    Int**      ppiBaseShiftLUTLeft  = NULL;
1342    Int**      ppiBaseShiftLUTRight = NULL;
[2]1343
1344
[5]1345    Int        iDistToLeft      = -1;
[2]1346
[5]1347    Int iSynthViewIdx = m_cCameraData.synthRelNum2Idx( iSynthViewRelNum );
[2]1348
1349    if ( iLeftBaseViewSIdx != -1 )
1350    {
[5]1351      iLeftBaseViewIdx   = m_cCameraData.getBaseSortedId2Id()   [ iLeftBaseViewSIdx ];
[2]1352      ppiShiftLUTLeft    = m_cCameraData.getSynthViewShiftLUTI()[ iLeftBaseViewIdx  ][ iSynthViewIdx  ];
1353    }
1354
1355    if ( iRightBaseViewSIdx != -1 )
1356    {
[5]1357      iRightBaseViewIdx  = m_cCameraData.getBaseSortedId2Id()   [iRightBaseViewSIdx ];
[2]1358      ppiShiftLUTRight   = m_cCameraData.getSynthViewShiftLUTI()[ iRightBaseViewIdx ][ iSynthViewIdx ];
1359    }
1360
1361    if ( iRightBaseViewSIdx != -1 && iLeftBaseViewSIdx != -1 )
[5]1362    {
1363      iDistToLeft    = m_cCameraData.getRelDistLeft(  iSynthViewIdx , iLeftBaseViewIdx, iRightBaseViewIdx);
[2]1364      ppiBaseShiftLUTLeft  = m_cCameraData.getBaseViewShiftLUTI() [ iLeftBaseViewIdx  ][ iRightBaseViewIdx ];
1365      ppiBaseShiftLUTRight = m_cCameraData.getBaseViewShiftLUTI() [ iRightBaseViewIdx ][ iLeftBaseViewIdx  ];
1366
1367    }
1368
1369    if ( iOrgRefBaseViewSIdx != -1 )
1370    {
[5]1371      pcPicYuvOrgRef = xGetPicYuvFromView( m_cCameraData.getBaseSortedId2Id()[ iOrgRefBaseViewSIdx ] , iPoc, false, false );
1372      AOF ( pcPicYuvOrgRef );
1373    }
[2]1374
[5]1375    m_cRendererModel.setSingleModel( iModelNum, ppiShiftLUTLeft, ppiBaseShiftLUTLeft, ppiShiftLUTRight, ppiBaseShiftLUTRight, iDistToLeft, pcPicYuvOrgRef );
[2]1376  }
1377}
[5]1378#endif
[2]1379
[56]1380
1381
1382/*
1383void TAppEncTop::printRateSummary()
1384{
1385  double time = (double) m_iFrameRcvd / m_iFrameRate;
1386  printf("Bytes written to file: %u (%.3f kbps)\n", m_totalBytes, 0.008 * m_totalBytes / time);
1387#if VERBOSE_RATE
1388  printf("Bytes for SPS/PPS/Slice (Incl. Annex B): %u (%.3f kbps)\n", m_essentialBytes, 0.008 * m_essentialBytes / time);
1389#endif
1390}
1391*/
1392
1393std::vector<TComPic*> TAppEncTop::getInterViewRefPics( Int viewId, Int poc, Bool isDepth, TComSPS* sps )
1394{
1395  std::vector<TComPic*> apcRefPics( sps->getNumberOfUsableInterViewRefs(), (TComPic*)NULL );
1396  for( Int k = 0; k < sps->getNumberOfUsableInterViewRefs(); k++ )
1397  {
1398    TComPic* pcRefPic = xGetPicFromView( sps->getUsableInterViewRef( k ) + viewId, poc, isDepth );
1399    assert( pcRefPic != NULL );
1400    apcRefPics[k] = pcRefPic;
1401  }
1402  return apcRefPics;
1403}
1404
1405TComPic* TAppEncTop::xGetPicFromView( Int viewIdx, Int poc, Bool isDepth )
1406{
1407  assert( ( viewIdx >= 0 ) && ( viewIdx < m_iNumberOfViews ) );
1408
1409  TComList<TComPic*>* apcListPic = (isDepth ?  m_acTEncDepthTopList[viewIdx] : m_acTEncTopList[viewIdx])->getListPic() ;
1410
1411  TComPic* pcPic = NULL;
1412  for(TComList<TComPic*>::iterator it=apcListPic->begin(); it!=apcListPic->end(); it++)
1413  {
1414    if( (*it)->getPOC() == poc )
1415    {
1416      pcPic = *it ;
1417      break ;
1418    }
1419  }
1420
1421  return pcPic;
1422};
1423
1424//! \}
Note: See TracBrowser for help on using the repository browser.