source: 3DVCSoftware/branches/0.1-poznan-univ/source/App/TAppRenderer/TAppRendererCfg.cpp @ 4

Last change on this file since 4 was 2, checked in by hhi, 13 years ago

inital import

  • Property svn:eol-style set to native
File size: 20.7 KB
Line 
1
2
3#include <stdlib.h>
4#include <math.h>
5#include <cassert>
6#include <cstring>
7#include <string>
8
9
10
11#include "TAppRendererCfg.h"
12#include "../../App/TAppCommon/program_options_lite.h"
13
14
15using namespace std;
16namespace po = df::program_options_lite;
17
18// ====================================================================================================================
19// Local constants
20// ====================================================================================================================
21
22#define MAX_INPUT_VIEW_NUM                                      10
23#define MAX_OUTPUT_VIEW_NUM         64
24
25// ====================================================================================================================
26// Constructor / destructor / initialization / destroy
27// ====================================================================================================================
28
29TAppRendererCfg::TAppRendererCfg()
30{
31
32}
33
34TAppRendererCfg::~TAppRendererCfg()
35{
36  for(Int i = 0; i< m_pchVideoInputFileList.size(); i++ )
37  {
38    if ( m_pchVideoInputFileList[i] != NULL )
39      free (m_pchVideoInputFileList[i]);
40  }
41
42  for(Int i = 0; i< m_pchDepthInputFileList.size(); i++ )
43  {
44    if ( m_pchDepthInputFileList[i] != NULL )
45      free (m_pchDepthInputFileList[i]);
46  }
47
48  for(Int i = 0; i< m_pchSynthOutputFileList.size(); i++ )
49  {
50    if ( m_pchSynthOutputFileList[i] != NULL )
51      free (m_pchSynthOutputFileList[i]);
52  }
53
54
55  if ( m_pchVideoInputFileBaseName  ) free( m_pchVideoInputFileBaseName );
56  if ( m_pchDepthInputFileBaseName  ) free( m_pchDepthInputFileBaseName );
57  if ( m_pchSynthOutputFileBaseName ) free( m_pchSynthOutputFileBaseName);
58  if ( m_pchCameraParameterFile     ) free( m_pchCameraParameterFile    );
59  if ( m_pchBaseViewCameraNumbers   ) free( m_pchBaseViewCameraNumbers  );
60  if ( m_pchSynthViewCameraNumbers  ) free( m_pchSynthViewCameraNumbers );
61  if ( m_pchViewConfig              ) free( m_pchViewConfig         );
62
63
64}
65
66Void TAppRendererCfg::create()
67{
68}
69
70Void TAppRendererCfg::destroy()
71{
72}
73
74// ====================================================================================================================
75// Public member functions
76// ====================================================================================================================
77
78/** \param  argc        number of arguments
79\param  argv        array of arguments
80\retval             true when success
81*/
82Bool TAppRendererCfg::parseCfg( Int argc, Char* argv[] )
83{
84  bool do_help = false;
85
86  po::Options opts;
87  opts.addOptions()
88    ("help", do_help, false, "this help text")
89    ("c", po::parseConfigFile, "configuration file name")
90
91    /* File I/O */
92    ("VideoInputFileBaseName",  m_pchVideoInputFileBaseName,  (Char*) 0, "Basename to generate video input file names")
93    ("DepthInputFileBaseName",  m_pchDepthInputFileBaseName,  (Char*) 0, "Basename to generate depth input file names")
94    ("SynthOutputFileBaseName", m_pchSynthOutputFileBaseName, (Char*) 0, "Basename to generate synthesized output file names")
95    ("ContOutputFileNumbering", m_bContOutputFileNumbering  ,  false   , "Continuous Output File Numbering")
96    ("Sweep"                  , m_bSweep                    ,  false   , "Store all views in first Output File")
97
98    ("VideoInputFile_%d,v_%d",  m_pchVideoInputFileList ,    (Char *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv video input file name %d")
99    ("DepthInputFile_%d,d_%d",  m_pchDepthInputFileList ,    (Char *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv depth input file name %d")
100    ("SynthOutputFile_%d,s_%d", m_pchSynthOutputFileList,    (Char *) 0, MAX_OUTPUT_VIEW_NUM, "Synthesized Yuv output file name %d")
101
102    /* Source Specification */
103    ("SourceWidth,-wdt",        m_iSourceWidth,                       0, "Source picture width")
104    ("SourceHeight,-hgt",       m_iSourceHeight,                      0, "Source picture height")
105    ("FrameSkip,-fs",           m_iFrameSkip,                         0, "Number of frames to skip at start of input YUV")
106    ("FramesToBeRendered,f",    m_iFramesToBeRendered,                0, "Number of frames to be rendered (default=all)")
107
108    /* Camera Specification */
109    ("CameraParameterFile,cpf", m_pchCameraParameterFile,          (Char *) 0, "Camera Parameter File Name")
110    ("BaseViewCameraNumbers"  , m_pchBaseViewCameraNumbers,        (Char *) 0, "Numbers of base views")
111    ("SynthViewCameraNumbers" , m_pchSynthViewCameraNumbers,       (Char *) 0, "Numbers of views to synthesis")
112    ("ViewConfig"             , m_pchViewConfig,                   (Char *) 0, "View Configuration"               )
113
114    /* Renderer Modes */
115    ("Log2SamplingFactor",      m_iLog2SamplingFactor,                0, "Factor for horizontal up sampling before processing"     )
116    ("UVup"              ,      m_bUVUp               ,            true, "Up sampling of chroma planes before processing"          )
117    ("PreProcMode"       ,      m_iPreProcMode        ,               0, "Depth preprocessing: 0 = None, 1 = Binomial filtering"   )
118    ("PreFilterSize"     ,      m_iPreFilterSize      ,               0, "For PreProcMode 1: Half Size of filter kernel"           )
119    ("SimEnhance"        ,      m_bSimEnhance         ,           false, "Similarity enhancement of video" )
120    ("BlendMode"         ,      m_iBlendMode          ,               0, "Blending of left and right image: 0: average, 1: only holes from right, 2: only holes from left, 3: first view in BaseViewOrder as main view" )
121    ("BlendZThresPerc"   ,      m_iBlendZThresPerc    ,               3, "Z-difference threshold for blending in percent of total Z-range"   )
122    ("BlendUseDistWeight",      m_bBlendUseDistWeight ,            true, "0: blend using average; 1: blend factor depends on view distance"  )
123    ("BlendHoleMargin"   ,      m_iBlendHoleMargin    ,               0, "Margin around holes to fill with other view"                       )
124    ("InterpolationMode" ,      m_iInterpolationMode  ,               0, "0: NN, 1:linear (int), 2:linear (double) , 3:cubic Hermite spline (double), 4: 8-tap (int)" )
125    ("HoleFillingMode"   ,      m_iHoleFillingMode    ,               1, "0: None, 1: line wise background extension"              )
126    ("PostProcMode"      ,      m_iPostProcMode       ,               0, "0: None, 1: horizontal 3-tap median"                     )
127    ("RenderMode"        ,      m_iRenderMode         ,               0, "0: Use renderer, 1: use model renderer, 10: create used pels map")
128    ("ShiftPrecision"    ,      m_iShiftPrecision     ,               0, "Shift Precision for Interpolation Mode 4"                )
129    ("TemporalDepthFilter",     m_bTempDepthFilter    ,           false, "Temporal depth filtering"                                )
130    ("RenderDirection"   ,      m_iRenderDirection    ,               0, "0: Interpolate, 1: Extrapolate from left, 2: Extrapolate from right")
131    ("UsedPelMapMarExt"  ,      m_iUsedPelMapMarExt   ,               0, "Margin Extension in Pels for used pels map generation"   );
132
133  po::setDefaults(opts);
134  po::scanArgv(opts, argc, (const char**) argv);
135
136  if (argc == 1 || do_help)
137  {
138    /* argc == 1: no options have been specified */
139    po::doHelp(cout, opts);
140    xPrintUsage();
141    return false;
142  }
143
144  /*
145  * Set any derived parameters before checking
146  */
147
148  xSetGlobal();
149
150  UInt  uiInputBitDepth   = 8;
151  UInt  uiCamParPrecision = 5;
152
153  m_bUseSetupString = ( m_pchViewConfig != NULL ) && ( m_iRenderMode != 0);
154
155  if ( m_iRenderMode == 10 )
156  {
157    m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered,
158      m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, NULL, m_iLog2SamplingFactor+m_iShiftPrecision );
159    m_iNumberOfInputViews  = (Int) m_cCameraData.getBaseViewNumbers() .size();
160    m_iNumberOfOutputViews = m_iNumberOfInputViews - 1;
161    m_iRenderDirection     = 1;
162  }
163  else
164  {
165  if ( m_bUseSetupString )
166  {
167    std::vector<Int>  iaTempViews;
168    std::vector<Int>* piaTempViews;
169    m_cCameraData     .convertNumberString( m_pchBaseViewCameraNumbers, iaTempViews, VIEW_NUM_PREC );
170    m_cRenModStrParser.setString( (Int) iaTempViews.size(), m_pchViewConfig );
171    piaTempViews               = m_cRenModStrParser.getSynthViews();
172    m_iNumberOfOutputViews     = (Int) m_cRenModStrParser.getNumOfModels();
173    m_iNumberOfInputViews      = (Int) m_cRenModStrParser.getNumOfBaseViews();
174    m_bContOutputFileNumbering = true;
175
176  m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered,
177      m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, piaTempViews, m_iLog2SamplingFactor+m_iShiftPrecision );
178  }
179  else
180  {
181  m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered,
182      m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, m_pchSynthViewCameraNumbers, NULL, m_iLog2SamplingFactor+m_iShiftPrecision );
183  m_iNumberOfOutputViews = (Int) m_cCameraData.getSynthViewNumbers().size();
184  m_iNumberOfInputViews  = (Int) m_cCameraData.getBaseViewNumbers() .size();
185  }
186  }
187
188  if (m_pchSynthOutputFileBaseName != NULL)
189    xConfirmParameter( strrchr(m_pchSynthOutputFileBaseName,'$')  == 0, "'$' must be a character in SynthOutputFileBaseName");
190
191  if (m_pchDepthInputFileBaseName != NULL)
192    xConfirmParameter( strrchr(m_pchDepthInputFileBaseName, '$')  == 0, "'$' must be a character in DepthInputFileBaseName" );
193
194  if (m_pchVideoInputFileBaseName != NULL)
195    xConfirmParameter( strrchr(m_pchVideoInputFileBaseName, '$')  == 0, "'$' must be a character in VideoInputFileBaseName" );
196
197  xCreateFileNames();
198
199  /*
200  * check validity of input parameters
201  */
202  xCheckParameter();
203  m_cCameraData.check( m_iRenderDirection == 0, m_iFramesToBeRendered != 0 );
204
205  // print-out parameters
206  xPrintParameter();
207
208  return true;
209}
210
211
212// ====================================================================================================================
213// Private member functions
214// ====================================================================================================================
215
216Void TAppRendererCfg::xCheckParameter()
217{
218  bool check_failed = false; /* abort if there is a fatal configuration problem */
219#define xConfirmPara(a,b) check_failed |= xConfirmParameter(a,b)
220  // check range of parameters
221
222  /// File I/O
223
224  // source specification
225  xConfirmPara( m_iSourceWidth        <= 0,                   "Source width  must be greater than 0" );
226  xConfirmPara( m_iSourceHeight       <= 0,                   "Source height must be greater than 0" );
227  xConfirmPara( m_iFrameSkip          <  0,                   "Frame Skipping must be more than or equal to 0" );
228  xConfirmPara( m_iFramesToBeRendered <  0,                   "Total Number Of Frames rendered must be more than 1" );
229
230
231  // camera specification
232  xConfirmPara( m_iNumberOfInputViews  > MAX_INPUT_VIEW_NUM , "NumberOfInputViews must be less than of equal to MAX_INPUT_VIEW_NUM");
233  xConfirmPara( m_iNumberOfOutputViews > MAX_OUTPUT_VIEW_NUM, "NumberOfOutputViews must be less than of equal to MAX_OUTPUT_VIEW_NUM");
234
235
236  xConfirmPara( m_iRenderDirection < 0 || m_iRenderDirection > 2  , "RenderDirection must be greater than or equal to 0 and less than 3");
237  xConfirmPara(m_iNumberOfOutputViews < 1,                    "Number of OutputViews must be greater or equal to 1");
238  if ( m_iRenderDirection == 0 )
239  {
240    xConfirmPara( m_iNumberOfInputViews < 2,                  "Number of InputViews must be more than or equal to 2");
241  }
242  else
243  {
244    xConfirmPara( m_iNumberOfInputViews < 1,                  "Number of InputViews must be more than or equal to 1");
245  }
246
247  xConfirmPara( m_iLog2SamplingFactor < 0 || m_iLog2SamplingFactor >  4, "Log2SamplingFactor must be more than or equal to 0 and less than 5"  );
248  xConfirmPara( m_iPreProcMode        < 0 || m_iPreProcMode        >  1, "PreProcMode        must be more than or equal to 0 and less than 2"  );
249
250
251  xConfirmPara( m_iPreFilterSize      < 0 || m_iPreFilterSize      >  3, "PreFilterSize      must be more than or equal to 0 and less than 4" );
252  xConfirmPara( m_iBlendMode          < 0 || m_iBlendMode          >  3, "BlendMode          must be more than or equal to 0 and less than 4"  );
253  xConfirmPara( m_iBlendZThresPerc    < 0 || m_iBlendZThresPerc    > 100,"BlendZThresPerc    must be more than or equal to 0 and less than 101"  );
254  xConfirmPara( m_iBlendHoleMargin    < 0 || m_iBlendHoleMargin    >  20,"BlendHoleMargin    must be more than or equal to 0 and less than 19"  );
255  xConfirmPara( m_iInterpolationMode  < 0 || m_iInterpolationMode  >  4, "InterpolationMode  must be more than or equal to 0 and less than 5"  );
256  xConfirmPara( m_iHoleFillingMode    < 0 || m_iHoleFillingMode    >  1, "HoleFillingMode    must be more than or equal to 0 and less than 2"  );
257  xConfirmPara( m_iPostProcMode       < 0 || m_iPostProcMode       >  2, "PostProcMode       must be more than or equal to 0 and less than 3"  );
258
259  Int iNumNonNULL;
260  for (iNumNonNULL = 0; (iNumNonNULL < m_iNumberOfInputViews)  && m_pchDepthInputFileList[iNumNonNULL]; iNumNonNULL++);  xConfirmPara( iNumNonNULL < m_iNumberOfInputViews,  "Number of DepthInputFiles  must be greater than or equal to number of BaseViewNumbers" );
261  for (iNumNonNULL = 0; (iNumNonNULL < m_iNumberOfInputViews)  && m_pchVideoInputFileList[iNumNonNULL]; iNumNonNULL++);  xConfirmPara( iNumNonNULL < m_iNumberOfInputViews,  "Number of DepthInputFiles  must be greater than or equal to number of BaseViewNumbers" );
262
263
264  if ( !m_bSweep )
265  {
266  for (iNumNonNULL = 0; (iNumNonNULL < m_iNumberOfOutputViews) && m_pchSynthOutputFileList[iNumNonNULL]; iNumNonNULL++); xConfirmPara( iNumNonNULL < m_iNumberOfOutputViews, "Number of SynthOutputFiles must be greater than or equal to number of SynthViewNumbers" );
267  }
268  else
269  {
270      xConfirmPara( iNumNonNULL < 1, "Number of SynthOutputFiles must be equal to or more than 1" );
271  }
272
273#undef xConfirmPara
274  if ( check_failed )
275  {
276    exit(EXIT_FAILURE);
277  }
278
279}
280
281
282
283Void TAppRendererCfg::xPrintParameter()
284{
285  printf("\n");
286  for( Int iCounter = 0; iCounter < m_iNumberOfInputViews; iCounter++)
287  {
288    printf("InputVideoFile_%i        : %s\n", iCounter, m_pchVideoInputFileList[iCounter]);
289  }
290  for( Int iCounter = 0; iCounter < m_iNumberOfInputViews; iCounter++)
291  {
292    printf("InputDepthFile_%i        : %s\n", iCounter, m_pchDepthInputFileList[iCounter]);
293  }
294
295  for( Int iCounter = 0; iCounter < m_iNumberOfOutputViews; iCounter++)
296  {
297    printf("SynthOutputFile_%i       : %s\n", iCounter, m_pchSynthOutputFileList[iCounter]);
298  }
299
300  printf("Format                  : %dx%d \n", m_iSourceWidth, m_iSourceHeight );
301  printf("Frame index             : %d - %d (%d frames)\n", m_iFrameSkip, m_iFrameSkip+m_iFramesToBeRendered-1, m_iFramesToBeRendered);
302  printf("CameraParameterFile     : %s\n", m_pchCameraParameterFile );
303  printf("BaseViewNumbers         : %s  (%d views) \n", m_pchBaseViewCameraNumbers , m_iNumberOfInputViews  );
304  printf("Sweep                   : %d\n", m_bSweep               );
305
306  if ( m_bUseSetupString )
307  {
308    printf("ViewConfig              : %s\n", m_pchViewConfig );
309  }
310  else
311  {
312  printf("SynthViewNumbers        : %s  (%d views) \n", m_pchSynthViewCameraNumbers, m_iNumberOfOutputViews );
313  }
314
315  printf("Log2SamplingFactor      : %d\n", m_iLog2SamplingFactor );
316  printf("UVUp                    : %d\n", m_bUVUp               );
317  printf("PreProcMode             : %d\n", m_iPreProcMode        );
318  printf("PreFilterSize           : %d\n", m_iPreFilterSize      );
319  printf("SimEnhance              : %d\n", m_bSimEnhance         );
320  printf("BlendMode               : %d\n", m_iBlendMode          );
321  printf("BlendZThresPerc         : %d\n", m_iBlendZThresPerc    );
322  printf("BlendUseDistWeight      : %d\n", m_bBlendUseDistWeight );
323  printf("BlendHoleMargin         : %d\n", m_iBlendHoleMargin    );
324  printf("InterpolationMode       : %d\n", m_iInterpolationMode  );
325  printf("HoleFillingMode         : %d\n", m_iHoleFillingMode    );
326  printf("PostProcMode            : %d\n", m_iPostProcMode       );
327  printf("ShiftPrecision          : %d\n", m_iShiftPrecision     );
328  printf("TemporalDepthFilter     : %d\n", m_bTempDepthFilter    );
329  printf("RenderMode              : %d\n", m_iRenderMode         );
330  printf("RendererDirection       : %d\n", m_iRenderDirection       );
331
332  if (m_iRenderMode == 10 )
333  {
334    printf("UsedPelMapMarExt        : %d\n", m_iUsedPelMapMarExt );
335  }
336
337  printf("\n");
338
339  //  printf("TOOL CFG: ");
340  //  printf("ALF:%d ", m_bUseALF             );
341  //  printf("\n");
342
343  fflush(stdout);
344}
345
346Void TAppRendererCfg::xPrintUsage()
347{
348  printf( "\n" );
349  printf( "  Example: TAppRenderer.exe -c test.cfg\n\n");
350}
351
352Bool TAppRendererCfg::xConfirmParameter(Bool bflag, const char* message)
353{
354  if (!bflag)
355    return false;
356
357  printf("Error: %s\n",message);
358  return true;
359}
360
361
362Void TAppRendererCfg::xCreateFileNames()
363{
364  if ( m_iRenderMode == 10 )
365    return;
366
367  Int iPrecBefore;
368  Int iPrecAfter;
369
370  xGetMaxPrecision( m_cCameraData.getSynthViewNumbers(), iPrecBefore, iPrecAfter );
371
372
373  if (iPrecBefore > LOG10_VIEW_NUM_PREC )
374  {
375    std::cerr << "Error: View Numbers with more than " << LOG10_VIEW_NUM_PREC << " digits are not supported" << std::endl;
376    exit(EXIT_FAILURE);
377  }
378
379  AOT( !m_bContOutputFileNumbering && (m_cCameraData.getSynthViewNumbers().size() != m_iNumberOfOutputViews ));
380  for(Int iIdx = 0; iIdx < m_iNumberOfOutputViews; iIdx++)
381  {
382    //GT; Create ReconFileNames
383    if (m_pchSynthOutputFileList[iIdx] == NULL )
384    {
385      if ( m_bContOutputFileNumbering )
386      {
387        xAddNumberToFileName( m_pchSynthOutputFileBaseName, m_pchSynthOutputFileList[iIdx], (Int) ((iIdx+1) * VIEW_NUM_PREC) , 2, 0  );
388      }
389      else
390      {
391        xAddNumberToFileName( m_pchSynthOutputFileBaseName, m_pchSynthOutputFileList[iIdx], m_cCameraData.getSynthViewNumbers()[iIdx], iPrecBefore, iPrecAfter  );
392      }
393    }
394  }
395
396  xGetMaxPrecision( m_cCameraData.getBaseViewNumbers(), iPrecBefore, iPrecAfter );
397  for(Int iIdx = 0; iIdx < m_cCameraData.getBaseViewNumbers().size() ; iIdx++)
398  {
399    //GT; Create ReconFileNames
400    if (m_pchVideoInputFileList[iIdx] == NULL )
401    {
402      xAddNumberToFileName( m_pchVideoInputFileBaseName, m_pchVideoInputFileList[iIdx], m_cCameraData.getBaseViewNumbers()[iIdx], iPrecBefore, iPrecAfter  );
403    }
404
405    if (m_pchDepthInputFileList[iIdx] == NULL )
406    {
407      xAddNumberToFileName( m_pchDepthInputFileBaseName, m_pchDepthInputFileList[iIdx], m_cCameraData.getBaseViewNumbers()[iIdx], iPrecBefore, iPrecAfter  );
408    }
409  }
410}
411
412Void TAppRendererCfg::xAddNumberToFileName( Char* pchSourceFileName, Char*& rpchTargetFileName, Int iNumberToAdd, UInt uiPrecBefore, UInt uiPrecAfter )
413{
414
415  if ( pchSourceFileName == NULL )
416  {
417    std::cerr << "No BaseName for file name generation given." << std::endl;
418    AOT(true);
419    exit(EXIT_FAILURE);
420  }
421
422  Char pchNumberBuffer[2* LOG10_VIEW_NUM_PREC + 2];
423  Char pchPrintBuffer[10];
424
425  Double dNumberToAdd = ( (Double) iNumberToAdd ) / VIEW_NUM_PREC;
426
427  UInt uiWidth = uiPrecBefore;
428
429  if (uiPrecAfter != 0)
430  {
431    uiWidth += uiPrecAfter + 1;
432  }
433
434  sprintf( pchPrintBuffer, "%%0%d.%df", uiWidth, uiPrecAfter );
435  sprintf( pchNumberBuffer, pchPrintBuffer, dNumberToAdd );
436
437  if ( uiPrecAfter > 0 ) pchNumberBuffer[ uiPrecBefore ] = '_';
438
439  size_t iInLength  = strlen(pchSourceFileName);
440  size_t iAddLength = strlen(pchNumberBuffer);
441
442  rpchTargetFileName = (Char*) malloc(iInLength+iAddLength+1);
443
444  Char* pchPlaceHolder = strrchr(pchSourceFileName,'$');
445  assert( pchPlaceHolder );
446
447  size_t iCharsToPlaceHolder = pchPlaceHolder - pchSourceFileName;
448  size_t iCharsToEnd         = iInLength      - iCharsToPlaceHolder;
449
450  strncpy(rpchTargetFileName                               , pchSourceFileName                      , iCharsToPlaceHolder);
451  strncpy(rpchTargetFileName+iCharsToPlaceHolder           , pchNumberBuffer                        , iAddLength         );
452  strncpy(rpchTargetFileName+iCharsToPlaceHolder+iAddLength, pchSourceFileName+iCharsToPlaceHolder+1, iCharsToEnd-1      );
453  rpchTargetFileName[iInLength+iAddLength-1] = '\0';
454}
455
456Void TAppRendererCfg::xGetMaxPrecision( std::vector< Int > aiIn, Int& iPrecBefore, Int& iPrecAfter )
457{
458  iPrecBefore = 0;
459  iPrecAfter  = 0;
460
461  for (UInt uiK = 0; uiK < aiIn.size(); uiK ++ )
462  {
463    if ( aiIn[uiK] == 0 ) continue;
464
465    Int iCurPrec;
466    iCurPrec = 0;
467    for ( Int iCur = aiIn[uiK]; iCur != 0; iCur /= 10, iCurPrec++ );
468    iPrecBefore = Max(iPrecBefore, iCurPrec - LOG10_VIEW_NUM_PREC );
469
470    iCurPrec = 0;
471    for ( Int iCur = 1;  aiIn[uiK] % iCur == 0; iCur *= 10, iCurPrec++);
472    iCurPrec = LOG10_VIEW_NUM_PREC - Min(LOG10_VIEW_NUM_PREC, iCurPrec-1 );
473    iPrecAfter = Max(iPrecAfter, iCurPrec );
474  }
475}
476
477Void TAppRendererCfg::xSetGlobal()
478{
479  // set max CU width & height
480  Int iInternalBitDepth = 8;
481  g_uiMaxCUWidth   = 0;
482  g_uiMaxCUHeight  = 0;
483  g_uiBitDepth     = 8;
484  g_uiBitIncrement = iInternalBitDepth - g_uiBitDepth;
485  g_uiBASE_MAX     = ((1<<(g_uiBitDepth))-1);
486  g_uiIBDI_MAX     = ((1<<(g_uiBitDepth+g_uiBitIncrement))-1);
487}
Note: See TracBrowser for help on using the repository browser.