Changeset 1325 in 3DVCSoftware for branches/HTM-15.1-MV-draft-4/source/App/TAppRenderer/TAppRendererCfg.cpp
- Timestamp:
- 7 Sep 2015, 18:40:35 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-15.1-MV-draft-4/source/App/TAppRenderer/TAppRendererCfg.cpp
r1313 r1325 44 44 #include "../../Lib/TAppCommon/program_options_lite.h" 45 45 46 #if NH_3D47 48 using namespace std;49 namespace po = df::program_options_lite;50 51 // ====================================================================================================================52 // Local constants53 // ====================================================================================================================54 55 #define MAX_INPUT_VIEW_NUM 1056 #define MAX_OUTPUT_VIEW_NUM 6457 58 // ====================================================================================================================59 // Constructor / destructor / initialization / destroy60 // ====================================================================================================================61 62 63 TAppRendererCfg::TAppRendererCfg()64 {65 66 }67 68 TAppRendererCfg::~TAppRendererCfg()69 {70 for(Int i = 0; i< m_pchVideoInputFileList.size(); i++ )71 {72 if ( m_pchVideoInputFileList[i] != NULL )73 free (m_pchVideoInputFileList[i]);74 }75 76 for(Int i = 0; i< m_pchDepthInputFileList.size(); i++ )77 {78 if ( m_pchDepthInputFileList[i] != NULL )79 free (m_pchDepthInputFileList[i]);80 }81 82 for(Int i = 0; i< m_pchSynthOutputFileList.size(); i++ )83 {84 if ( m_pchSynthOutputFileList[i] != NULL )85 free (m_pchSynthOutputFileList[i]);86 }87 88 if ( m_pchVideoInputFileBaseName ) free( m_pchVideoInputFileBaseName );89 if ( m_pchDepthInputFileBaseName ) free( m_pchDepthInputFileBaseName );90 if ( m_pchSynthOutputFileBaseName ) free( m_pchSynthOutputFileBaseName);91 if ( m_pchCameraParameterFile ) free( m_pchCameraParameterFile );92 if ( m_pchBaseViewCameraNumbers ) free( m_pchBaseViewCameraNumbers );93 if ( m_pchSynthViewCameraNumbers ) free( m_pchSynthViewCameraNumbers );94 if ( m_pchViewConfig ) free( m_pchViewConfig );95 }96 97 Void TAppRendererCfg::create()98 {99 }100 101 Void TAppRendererCfg::destroy()102 {103 }104 105 // ====================================================================================================================106 // Public member functions107 // ====================================================================================================================108 109 /** \param argc number of arguments110 \param argv array of arguments111 \retval true when success112 */113 Bool TAppRendererCfg::parseCfg( Int argc, Char* argv[] )114 {115 bool do_help = false;116 117 po::Options opts;118 opts.addOptions()119 ("help", do_help, false, "this help text")120 ("c", po::parseConfigFile, "configuration file name")121 122 /* File I/O */123 ("VideoInputFileBaseName,v", m_pchVideoInputFileBaseName, (Char*) 0, "Basename to generate video input file names")124 ("DepthInputFileBaseName,d", m_pchDepthInputFileBaseName, (Char*) 0, "Basename to generate depth input file names")125 ("SynthOutputFileBaseName,s", m_pchSynthOutputFileBaseName, (Char*) 0, "Basename to generate synthesized output file names")126 ("ContOutputFileNumbering", m_bContOutputFileNumbering , false , "Continuous Output File Numbering")127 ("Sweep" , m_bSweep , false , "Store all views in first Output File")128 129 ("VideoInputFile_%d,v_%d", m_pchVideoInputFileList , (Char *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv video input file name %d")130 ("DepthInputFile_%d,d_%d", m_pchDepthInputFileList , (Char *) 0, MAX_INPUT_VIEW_NUM , "Original Yuv depth input file name %d")131 ("SynthOutputFile_%d,s_%d", m_pchSynthOutputFileList, (Char *) 0, MAX_OUTPUT_VIEW_NUM, "Synthesized Yuv output file name %d")132 133 ("InputBitDepth", m_inputBitDepth[0], 8, "Bit-depth of input file")134 ("OutputBitDepth", m_outputBitDepth[0], 0, "Bit-depth of output file (default:InternalBitDepth)")135 ("InternalBitDepth", m_internalBitDepth[0], 0, "Bit-depth the renderer operates at. (default:InputBitDepth)" "If different to InputBitDepth, source data will be converted")136 137 ("InputBitDepthC", m_inputBitDepth[1], 0, "As per InputBitDepth but for chroma component. (default:InputBitDepth)")138 ("OutputBitDepthC", m_outputBitDepth[1], 0, "As per OutputBitDepth but for chroma component. (default:InternalBitDepthC)")139 ("InternalBitDepthC", m_internalBitDepth[1], 0, "As per InternalBitDepth but for chroma component. (default:IntrenalBitDepth)")140 141 /* Source Specification */142 ("SourceWidth,-wdt", m_iSourceWidth, 0, "Source picture width")143 ("SourceHeight,-hgt", m_iSourceHeight, 0, "Source picture height")144 ("FrameSkip,-fs", m_iFrameSkip, 0, "Number of frames to skip at start of input YUV")145 ("FramesToBeRendered,f", m_iFramesToBeRendered, 0, "Number of frames to be rendered (default=all)")146 147 /* Camera Specification */148 ("CameraParameterFile,-cpf", m_pchCameraParameterFile, (Char *) 0, "Camera Parameter File Name")149 ("BaseViewCameraNumbers" , m_pchBaseViewCameraNumbers, (Char *) 0, "Numbers of base views")150 ("SynthViewCameraNumbers" , m_pchSynthViewCameraNumbers, (Char *) 0, "Numbers of views to synthesis")151 ("ViewConfig" , m_pchViewConfig, (Char *) 0, "View Configuration" )152 153 /* Renderer Modes */154 ("Log2SamplingFactor", m_iLog2SamplingFactor, 0, "Factor for horizontal up sampling before processing" )155 ("UVup" , m_bUVUp , true, "Up sampling of chroma planes before processing" )156 ("PreProcMode" , m_iPreProcMode , 0, "Depth preprocessing: 0 = None, 1 = Binomial filtering" )157 ("PreFilterSize" , m_iPreFilterSize , 0, "For PreProcMode 1: Half Size of filter kernel" )158 ("SimEnhance" , m_bSimEnhance , true, "Similarity enhancement of video" )159 ("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" )160 ("BlendZThresPerc" , m_iBlendZThresPerc , 30, "Z-difference threshold for blending in percent of total Z-range" )161 ("BlendUseDistWeight", m_bBlendUseDistWeight , true, "0: blend using average; 1: blend factor depends on view distance" )162 ("BlendHoleMargin" , m_iBlendHoleMargin , 6, "Margin around holes to fill with other view" )163 ("InterpolationMode" , m_iInterpolationMode , 4, "0: NN, 1:linear (int), 2:linear (double) , 3:cubic Hermite spline (double), 4: 8-tap (int)" )164 ("HoleFillingMode" , m_iHoleFillingMode , 1, "0: None, 1: line wise background extension" )165 ("PostProcMode" , m_iPostProcMode , 0, "0: None, 1: horizontal 3-tap median" )166 ("RenderMode" , m_iRenderMode , 0, "0: Use renderer, 1: use model renderer, 10: create used pels map")167 ("ShiftPrecision" , m_iShiftPrecision , 2, "Shift Precision for Interpolation Mode 4" )168 ("TemporalDepthFilter", m_bTempDepthFilter , false, "Temporal depth filtering" )169 ("RenderDirection" , m_iRenderDirection , 0, "0: Interpolate, 1: Extrapolate from left, 2: Extrapolate from right")170 ("UsedPelMapMarExt" , m_iUsedPelMapMarExt , 0, "Margin Extension in Pels for used pels map generation" );171 172 po::setDefaults(opts);173 po::scanArgv(opts, argc, (const char**) argv);174 175 if (argc == 1 || do_help)176 {177 /* argc == 1: no options have been specified */178 po::doHelp(cout, opts);179 xPrintUsage();180 return false;181 }182 183 /*184 * Set any derived parameters before checking185 */186 187 /* rules for input, output and internal bitdepths as per help text */188 if (!m_internalBitDepth[0]) { m_internalBitDepth[0] = m_inputBitDepth[0]; }189 if (!m_internalBitDepth[1]) { m_internalBitDepth[1] = m_internalBitDepth[0]; }190 if (!m_inputBitDepth[1]) { m_inputBitDepth[1] = m_inputBitDepth[0]; }191 if (!m_outputBitDepth[0]) { m_outputBitDepth[0] = m_internalBitDepth[0]; }192 if (!m_outputBitDepth[1]) { m_outputBitDepth[1] = m_internalBitDepth[1]; }193 194 UInt uiInputBitDepth = 8;195 UInt uiCamParPrecision = 5;196 197 m_bUseSetupString = ( m_pchViewConfig != NULL ) && ( m_iRenderMode != 0);198 199 if ( m_iRenderMode == 10 )200 {201 m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered,202 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, NULL, m_iLog2SamplingFactor+m_iShiftPrecision );203 m_iNumberOfInputViews = (Int) m_cCameraData.getBaseViewNumbers() .size();204 m_iNumberOfOutputViews = m_iNumberOfInputViews - 1;205 m_iRenderDirection = 1;206 }207 else208 {209 if ( m_bUseSetupString )210 {211 std::vector<Int> iaTempViews;212 std::vector<Int>* piaTempViews;213 m_cCameraData .convertNumberString( m_pchBaseViewCameraNumbers, iaTempViews, VIEW_NUM_PREC );214 m_cRenModStrParser.setString( (Int) iaTempViews.size(), m_pchViewConfig );215 piaTempViews = m_cRenModStrParser.getSynthViews();216 m_iNumberOfOutputViews = (Int) m_cRenModStrParser.getNumOfModels();217 m_iNumberOfInputViews = (Int) m_cRenModStrParser.getNumOfBaseViews();218 m_bContOutputFileNumbering = true;219 220 m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered,221 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, piaTempViews, m_iLog2SamplingFactor+m_iShiftPrecision );222 }223 else224 {225 m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered,226 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, m_pchSynthViewCameraNumbers, NULL, m_iLog2SamplingFactor+m_iShiftPrecision );227 m_iNumberOfOutputViews = (Int) m_cCameraData.getSynthViewNumbers().size();228 m_iNumberOfInputViews = (Int) m_cCameraData.getBaseViewNumbers() .size();229 }230 }231 232 if (m_pchSynthOutputFileBaseName != NULL)233 xConfirmParameter( strrchr(m_pchSynthOutputFileBaseName,'$') == 0, "'$' must be a character in SynthOutputFileBaseName");234 235 if (m_pchDepthInputFileBaseName != NULL)236 xConfirmParameter( strrchr(m_pchDepthInputFileBaseName, '$') == 0, "'$' must be a character in DepthInputFileBaseName" );237 238 if (m_pchVideoInputFileBaseName != NULL)239 xConfirmParameter( strrchr(m_pchVideoInputFileBaseName, '$') == 0, "'$' must be a character in VideoInputFileBaseName" );240 241 xCreateFileNames();242 243 /*244 * check validity of input parameters245 */246 xCheckParameter();247 m_cCameraData.check( m_iRenderDirection == 0, m_iFramesToBeRendered != 0 );248 249 // print-out parameters250 xPrintParameter();251 252 return true;253 }254 255 256 // ====================================================================================================================257 // Private member functions258 // ====================================================================================================================259 260 Void TAppRendererCfg::xCheckParameter()261 {262 bool check_failed = false; /* abort if there is a fatal configuration problem */263 #define xConfirmPara(a,b) check_failed |= xConfirmParameter(a,b)264 // check range of parameters265 266 /// File I/O267 268 // source specification269 xConfirmPara( m_iSourceWidth <= 0, "Source width must be greater than 0" );270 xConfirmPara( m_iSourceHeight <= 0, "Source height must be greater than 0" );271 xConfirmPara( m_iFrameSkip < 0, "Frame Skipping must be more than or equal to 0" );272 xConfirmPara( m_iFramesToBeRendered < 0, "Total Number Of Frames rendered must be more than 1" );273 274 // bit depth275 xConfirmPara( m_internalBitDepth[0] != m_internalBitDepth[1], "InternalBitDepth for luma and chroma must be equal. ");276 xConfirmPara( m_inputBitDepth[0] < 8, "InputBitDepth must be at least 8" );277 xConfirmPara( m_inputBitDepth[1] < 8, "InputBitDepthC must be at least 8" );278 279 // camera specification280 xConfirmPara( m_iNumberOfInputViews > MAX_INPUT_VIEW_NUM , "NumberOfInputViews must be less than of equal to MAX_INPUT_VIEW_NUM");281 xConfirmPara( m_iNumberOfOutputViews > MAX_OUTPUT_VIEW_NUM, "NumberOfOutputViews must be less than of equal to MAX_OUTPUT_VIEW_NUM");282 283 284 xConfirmPara( m_iRenderDirection < 0 || m_iRenderDirection > 2 , "RenderDirection must be greater than or equal to 0 and less than 3");285 xConfirmPara(m_iNumberOfOutputViews < 1, "Number of OutputViews must be greater or equal to 1");286 if ( m_iRenderDirection == 0 )287 {288 xConfirmPara( m_iNumberOfInputViews < 2, "Number of InputViews must be more than or equal to 2");289 }290 else291 {292 xConfirmPara( m_iNumberOfInputViews < 1, "Number of InputViews must be more than or equal to 1");293 }294 295 xConfirmPara( m_iLog2SamplingFactor < 0 || m_iLog2SamplingFactor > 4, "Log2SamplingFactor must be more than or equal to 0 and less than 5" );296 xConfirmPara( m_iPreProcMode < 0 || m_iPreProcMode > 1, "PreProcMode must be more than or equal to 0 and less than 2" );297 298 299 xConfirmPara( m_iPreFilterSize < 0 || m_iPreFilterSize > 3, "PreFilterSize must be more than or equal to 0 and less than 4" );300 xConfirmPara( m_iBlendMode < 0 || m_iBlendMode > 3, "BlendMode must be more than or equal to 0 and less than 4" );301 xConfirmPara( m_iBlendZThresPerc < 0 || m_iBlendZThresPerc > 100,"BlendZThresPerc must be more than or equal to 0 and less than 101" );302 xConfirmPara( m_iBlendHoleMargin < 0 || m_iBlendHoleMargin > 20,"BlendHoleMargin must be more than or equal to 0 and less than 19" );303 xConfirmPara( m_iInterpolationMode < 0 || m_iInterpolationMode > 4, "InterpolationMode must be more than or equal to 0 and less than 5" );304 xConfirmPara( m_iHoleFillingMode < 0 || m_iHoleFillingMode > 1, "HoleFillingMode must be more than or equal to 0 and less than 2" );305 xConfirmPara( m_iPostProcMode < 0 || m_iPostProcMode > 2, "PostProcMode must be more than or equal to 0 and less than 3" );306 307 Int iNumNonNULL;308 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" );309 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" );310 311 312 if ( !m_bSweep )313 {314 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" );315 }316 else317 {318 xConfirmPara( iNumNonNULL < 1, "Number of SynthOutputFiles must be equal to or more than 1" );319 }320 321 #undef xConfirmPara322 if ( check_failed )323 {324 exit(EXIT_FAILURE);325 }326 327 }328 329 330 331 Void TAppRendererCfg::xPrintParameter()332 {333 printf("\n");334 for( Int iCounter = 0; iCounter < m_iNumberOfInputViews; iCounter++)335 {336 printf("InputVideoFile_%i : %s\n", iCounter, m_pchVideoInputFileList[iCounter]);337 }338 for( Int iCounter = 0; iCounter < m_iNumberOfInputViews; iCounter++)339 {340 printf("InputDepthFile_%i : %s\n", iCounter, m_pchDepthInputFileList[iCounter]);341 }342 343 for( Int iCounter = 0; iCounter < m_iNumberOfOutputViews; iCounter++)344 {345 printf("SynthOutputFile_%i : %s\n", iCounter, m_pchSynthOutputFileList[iCounter]);346 }347 348 printf("Format : %dx%d \n", m_iSourceWidth, m_iSourceHeight );349 printf("Frame index : %d - %d (%d frames)\n", m_iFrameSkip, m_iFrameSkip+m_iFramesToBeRendered-1, m_iFramesToBeRendered);350 printf("CameraParameterFile : %s\n", m_pchCameraParameterFile );351 printf("BaseViewNumbers : %s (%d views) \n", m_pchBaseViewCameraNumbers , m_iNumberOfInputViews );352 printf("Sweep : %d\n", m_bSweep );353 354 if ( m_bUseSetupString )355 {356 printf("ViewConfig : %s\n", m_pchViewConfig );357 }358 else359 {360 printf("SynthViewNumbers : %s (%d views) \n", m_pchSynthViewCameraNumbers, m_iNumberOfOutputViews );361 }362 363 printf("Log2SamplingFactor : %d\n", m_iLog2SamplingFactor );364 printf("UVUp : %d\n", m_bUVUp );365 printf("PreProcMode : %d\n", m_iPreProcMode );366 printf("PreFilterSize : %d\n", m_iPreFilterSize );367 printf("SimEnhance : %d\n", m_bSimEnhance );368 printf("BlendMode : %d\n", m_iBlendMode );369 printf("BlendZThresPerc : %d\n", m_iBlendZThresPerc );370 printf("BlendUseDistWeight : %d\n", m_bBlendUseDistWeight );371 printf("BlendHoleMargin : %d\n", m_iBlendHoleMargin );372 printf("InterpolationMode : %d\n", m_iInterpolationMode );373 printf("HoleFillingMode : %d\n", m_iHoleFillingMode );374 printf("PostProcMode : %d\n", m_iPostProcMode );375 printf("ShiftPrecision : %d\n", m_iShiftPrecision );376 printf("TemporalDepthFilter : %d\n", m_bTempDepthFilter );377 printf("RenderMode : %d\n", m_iRenderMode );378 printf("RendererDirection : %d\n", m_iRenderDirection );379 380 if (m_iRenderMode == 10 )381 {382 printf("UsedPelMapMarExt : %d\n", m_iUsedPelMapMarExt );383 }384 385 printf("\n");386 387 // printf("TOOL CFG: ");388 // printf("ALF:%d ", m_bUseALF );389 // printf("\n");390 391 fflush(stdout);392 }393 394 Void TAppRendererCfg::xPrintUsage()395 {396 printf( "\n" );397 printf( " Example: TAppRenderer.exe -c test.cfg\n\n");398 }399 400 Bool TAppRendererCfg::xConfirmParameter(Bool bflag, const char* message)401 {402 if (!bflag)403 return false;404 405 printf("Error: %s\n",message);406 return true;407 }408 409 410 Void TAppRendererCfg::xCreateFileNames()411 {412 if ( m_iRenderMode == 10 )413 return;414 415 Int iPrecBefore;416 Int iPrecAfter;417 418 xGetMaxPrecision( m_cCameraData.getSynthViewNumbers(), iPrecBefore, iPrecAfter );419 420 421 if (iPrecBefore > LOG10_VIEW_NUM_PREC )422 {423 std::cerr << "Error: View Numbers with more than " << LOG10_VIEW_NUM_PREC << " digits are not supported" << std::endl;424 exit(EXIT_FAILURE);425 }426 427 AOT( !m_bContOutputFileNumbering && (m_cCameraData.getSynthViewNumbers().size() != m_iNumberOfOutputViews ));428 for(Int iIdx = 0; iIdx < m_iNumberOfOutputViews; iIdx++)429 {430 //GT; Create ReconFileNames431 if (m_pchSynthOutputFileList[iIdx] == NULL )432 {433 if ( m_bContOutputFileNumbering )434 {435 xAddNumberToFileName( m_pchSynthOutputFileBaseName, m_pchSynthOutputFileList[iIdx], (Int) ((iIdx+1) * VIEW_NUM_PREC) , 2, 0 );436 }437 else438 {439 xAddNumberToFileName( m_pchSynthOutputFileBaseName, m_pchSynthOutputFileList[iIdx], m_cCameraData.getSynthViewNumbers()[iIdx], iPrecBefore, iPrecAfter );440 }441 }442 }443 444 xGetMaxPrecision( m_cCameraData.getBaseViewNumbers(), iPrecBefore, iPrecAfter );445 for(Int iIdx = 0; iIdx < m_cCameraData.getBaseViewNumbers().size() ; iIdx++)446 {447 //GT; Create ReconFileNames448 if (m_pchVideoInputFileList[iIdx] == NULL )449 {450 xAddNumberToFileName( m_pchVideoInputFileBaseName, m_pchVideoInputFileList[iIdx], m_cCameraData.getBaseViewNumbers()[iIdx], iPrecBefore, iPrecAfter );451 }452 453 if (m_pchDepthInputFileList[iIdx] == NULL )454 {455 xAddNumberToFileName( m_pchDepthInputFileBaseName, m_pchDepthInputFileList[iIdx], m_cCameraData.getBaseViewNumbers()[iIdx], iPrecBefore, iPrecAfter );456 }457 }458 }459 460 Void TAppRendererCfg::xAddNumberToFileName( Char* pchSourceFileName, Char*& rpchTargetFileName, Int iNumberToAdd, UInt uiPrecBefore, UInt uiPrecAfter )461 {462 463 if ( pchSourceFileName == NULL )464 {465 std::cerr << "No BaseName for file name generation given." << std::endl;466 AOT(true);467 exit(EXIT_FAILURE);468 }469 470 Char pchNumberBuffer[2* LOG10_VIEW_NUM_PREC + 2];471 Char pchPrintBuffer[10];472 473 Double dNumberToAdd = ( (Double) iNumberToAdd ) / VIEW_NUM_PREC;474 475 UInt uiWidth = uiPrecBefore;476 477 if (uiPrecAfter != 0)478 {479 uiWidth += uiPrecAfter + 1;480 }481 482 sprintf( pchPrintBuffer, "%%0%d.%df", uiWidth, uiPrecAfter );483 sprintf( pchNumberBuffer, pchPrintBuffer, dNumberToAdd );484 485 if ( uiPrecAfter > 0 ) pchNumberBuffer[ uiPrecBefore ] = '_';486 487 size_t iInLength = strlen(pchSourceFileName);488 size_t iAddLength = strlen(pchNumberBuffer);489 490 rpchTargetFileName = (Char*) malloc(iInLength+iAddLength+1);491 492 Char* pchPlaceHolder = strrchr(pchSourceFileName,'$');493 assert( pchPlaceHolder );494 495 size_t iCharsToPlaceHolder = pchPlaceHolder - pchSourceFileName;496 size_t iCharsToEnd = iInLength - iCharsToPlaceHolder;497 498 strncpy(rpchTargetFileName , pchSourceFileName , iCharsToPlaceHolder);499 strncpy(rpchTargetFileName+iCharsToPlaceHolder , pchNumberBuffer , iAddLength );500 strncpy(rpchTargetFileName+iCharsToPlaceHolder+iAddLength, pchSourceFileName+iCharsToPlaceHolder+1, iCharsToEnd-1 );501 rpchTargetFileName[iInLength+iAddLength-1] = '\0';502 }503 504 Void TAppRendererCfg::xGetMaxPrecision( IntAry1d aiIn, Int& iPrecBefore, Int& iPrecAfter )505 {506 iPrecBefore = 0;507 iPrecAfter = 0;508 509 for (UInt uiK = 0; uiK < aiIn.size(); uiK ++ )510 {511 if ( aiIn[uiK] == 0 ) continue;512 513 Int iCurPrec;514 iCurPrec = 0;515 for ( Int iCur = aiIn[uiK]; iCur != 0; iCur /= 10, iCurPrec++ );516 iPrecBefore = max(iPrecBefore, iCurPrec - LOG10_VIEW_NUM_PREC );517 518 iCurPrec = 0;519 for ( Int iCur = 1; aiIn[uiK] % iCur == 0; iCur *= 10, iCurPrec++);520 iCurPrec = LOG10_VIEW_NUM_PREC - std::min((Int) LOG10_VIEW_NUM_PREC, iCurPrec-1 );521 iPrecAfter = max(iPrecAfter, iCurPrec );522 }523 }524 525 #endif
Note: See TracChangeset for help on using the changeset viewer.