std::string WsiToDcm::initOpenSlide()

in src/wsiToDcm.cpp [197:258]


std::string WsiToDcm::initOpenSlide() {
  svsLevelCount_ = openslide_get_level_count(getOpenSlidePtr());
  // Openslide API call 0 returns dimensions of highest resolution image.
  openslide_get_level_dimensions(getOpenSlidePtr(), 0,
                                 &largestSlideLevelWidth_,
                                 &largestSlideLevelHeight_);
  std::string vendor(openslide_get_property_value(getOpenSlidePtr(),
                     OPENSLIDE_PROPERTY_NAME_VENDOR));
  BOOST_LOG_TRIVIAL(info) << "Reading " << vendor.c_str() << " formatted WSI.";
  if (vendor == "dicom") {
    wsiRequest_->startOnLevel = std::max(wsiRequest_->startOnLevel, 1);
  }
  tiffFile_ = nullptr;
  if (wsiRequest_->SVSImportPreferScannerTileingForAllLevels ||
      wsiRequest_->SVSImportPreferScannerTileingForLargestLevel) {
    bool useSVSTileing = false;
    if (vendor == "aperio" || vendor == "generic-tiff") {
      tiffFile_ = std::make_unique<TiffFile>(wsiRequest_->inputFile);
      if (tiffFile_->isLoaded()) {
          int32_t level = tiffFile_->getDirectoryIndexMatchingImageDimensions(
                            largestSlideLevelWidth_, largestSlideLevelHeight_);
          if (level != -1) {
            tiffFile_ = std::make_unique<TiffFile>(*tiffFile_, level);
            TiffFrame tiffFrame(tiffFile_.get(), 0, true);
            if (!tiffFrame.tiffDirectory()->isJpeg2kCompressed() &&
                !tiffFrame.tiffDirectory()->isJpegCompressed()) {
              BOOST_LOG_TRIVIAL(error) << "Tiff contains unexpected format.";
              throw 1;
            } else if (tiffFrame.tiffDirectory()->isJpegCompressed() &&
                       !tiffFrame.canDecodeJpeg()) {
              BOOST_LOG_TRIVIAL(error) << "Error decoding JPEG in SVS.";
              throw 1;
            } else {
              const TiffDirectory * tiffDir = tiffFile_->directory(level);
              BOOST_LOG_TRIVIAL(info) << "Reading JPEG tiles from SVS with "
                                         "out decoding.";
              int oldX = wsiRequest_->frameSizeX;
              int oldY = wsiRequest_->frameSizeY;
              wsiRequest_->frameSizeX = tiffDir->tileWidth();
              wsiRequest_->frameSizeY = tiffDir->tileHeight();
              BOOST_LOG_TRIVIAL(info) << "Changing generated DICOM tile size "
                                        "to jpeg tile size defined in svs. "
                                        "Command line specified tile size: " <<
                                        oldX << ", " << oldY << ". Changed to"
                                        " svs jpeg tile size: " <<
                                        wsiRequest_->frameSizeX << ", " <<
                                        wsiRequest_->frameSizeY;
              useSVSTileing = true;
            }
            tiffFile_->close();
          }
      }
    }
    if (!useSVSTileing) {
      wsiRequest_->SVSImportPreferScannerTileingForLargestLevel = false;
      wsiRequest_->SVSImportPreferScannerTileingForAllLevels = false;
    }
  }
  BOOST_LOG_TRIVIAL(debug) << " ";
  BOOST_LOG_TRIVIAL(debug) << "Level Count: " << svsLevelCount_;
  return vendor;
}