| 401 | |
| 402 | template<typename T> |
| 403 | void writeMapToFileOrTile(int rc, |
| 404 | const MultiViewParams& mp, |
| 405 | const EFileType fileType, |
| 406 | const TileParams& tileParams, |
| 407 | const ROI& roi, |
| 408 | const image::Image<T>& in_map, |
| 409 | int scale, |
| 410 | int step, |
| 411 | const std::string& customSuffix = "") |
| 412 | { |
| 413 | // assert scale & step |
| 414 | assert(scale > 0); |
| 415 | assert(step > 0); |
| 416 | |
| 417 | const int scaleStep = scale * step; |
| 418 | |
| 419 | // get image dimensions at scale / stepXY |
| 420 | const int imageWidth = divideRoundUp(mp.getWidth(rc), scaleStep); |
| 421 | const int imageHeight = divideRoundUp(mp.getHeight(rc), scaleStep); |
| 422 | |
| 423 | // get downscaled ROI |
| 424 | const ROI downscaledROI = downscaleROI(roi, scaleStep); |
| 425 | |
| 426 | // check input map dimensions |
| 427 | assert(in_map.width() == downscaledROI.width() && in_map.width() <= imageWidth); |
| 428 | assert(in_map.height() == downscaledROI.height() && in_map.height() <= imageHeight); |
| 429 | |
| 430 | // set OIIO ROI for map writing |
| 431 | // displayRoi is the image region of interest for display (image size) |
| 432 | // pixelRoi is the buffer region of interest within the displayRoi (tile size) |
| 433 | // no tiling if displayRoi == pixelRoi |
| 434 | const oiio::ROI displayRoi(0, imageWidth, 0, imageHeight); |
| 435 | const oiio::ROI pixelRoi(downscaledROI.x.begin, downscaledROI.x.end, downscaledROI.y.begin, downscaledROI.y.end); |
| 436 | |
| 437 | // output map path |
| 438 | std::string mapPath; |
| 439 | |
| 440 | if (downscaledROI.width() != imageWidth || downscaledROI.height() != imageHeight) // is a tile |
| 441 | { |
| 442 | // tiled map |
| 443 | mapPath = getFileNameFromIndex(mp, rc, fileType, customSuffix, roi.x.begin, roi.y.begin); |
| 444 | } |
| 445 | else |
| 446 | { |
| 447 | // fullsize map |
| 448 | mapPath = getFileNameFromIndex(mp, rc, fileType, customSuffix); |
| 449 | } |
| 450 | |
| 451 | // original picture file metadata |
| 452 | oiio::ParamValueList metadata = image::getMetadataFromMap(mp.getMetadata(rc)); |
| 453 | |
| 454 | // downscale metadata |
| 455 | metadata.push_back(oiio::ParamValue("AliceVision:downscale", mp.getDownscaleFactor(rc) * scaleStep)); |
| 456 | |
| 457 | // roi metadata |
| 458 | { |
| 459 | metadata.push_back(oiio::ParamValue("AliceVision:roiBeginX", int(roi.x.begin))); |
| 460 | metadata.push_back(oiio::ParamValue("AliceVision:roiBeginY", int(roi.y.begin))); |
no test coverage detected