OFCondition DcmtkUtils::populateDataSet()

in src/dcmtkUtils.cpp [230:303]


OFCondition DcmtkUtils::populateDataSet(
const int64_t imageHeight, const int64_t imageWidth,
const uint32_t rowSize, absl::string_view studyId,
absl::string_view seriesId, absl::string_view imageName,
std::unique_ptr<DcmPixelData> pixelData,
const DcmtkImgDataInfo& imgInfo, const uint32_t numberOfFrames,
const uint32_t row, const uint32_t column, const int32_t instanceNumber,
const int32_t downsample, const int batchNumber, const uint32_t offset,
const uint32_t totalNumberOfFrames, const bool tiled,
DcmTags* additionalTags, const double firstLevelWidthMm,
const double firstLevelHeightMm, DcmDataset* dataSet) {
  std::unique_ptr<I2DOutputPlug> outPlug;

  OFString pixDataFile, outputFile;

  outPlug = std::make_unique<I2DOutputPlugSC>();
  if (outPlug.get() == nullptr) return EC_MemoryExhausted;

  OFBool insertType2 = OFTrue;
  OFBool inventType1 = OFTrue;
  OFBool doChecks = OFTrue;

  outPlug->setValidityChecking(doChecks, insertType2, inventType1);

  if (!dcmDataDict.isDictionaryLoaded()) {
    dcmDataDict.wrlock().reloadDictionaries(true, false);
    dcmDataDict.wrunlock();
  }

  OFCondition cond =
      generateDcmDataset(outPlug.get(), dataSet, imgInfo, numberOfFrames);

  if (cond.bad()) return cond;

  cond = dataSet->insert(pixelData.release());
  if (cond.bad()) return cond;

  cond = generateDateTags(dataSet);

  if (cond.bad()) return cond;

  cond = insertIds(studyId, seriesId, dataSet);

  if (cond.bad()) return cond;

  cond = insertBaseImageTags(imageName, imageHeight, imageWidth,
                             firstLevelWidthMm, firstLevelHeightMm, dataSet);

  if (cond.bad()) return cond;

  insertMultiFrameTags(imgInfo, numberOfFrames, rowSize, row, column,
                       instanceNumber, batchNumber, offset,
                       totalNumberOfFrames, tiled, seriesId, dataSet);
  if (cond.bad()) return cond;

  cond = insertStaticTags(dataSet, downsample);

  if (cond.bad()) return cond;

  cond = generateSharedFunctionalGroupsSequence(
      dataSet, firstLevelWidthMm / static_cast<double>(imageWidth),
               firstLevelHeightMm / static_cast<double>(imageHeight));
  if (cond.bad()) return cond;

  cond = generateDimensionIndexSequence(dataSet);

  if (cond.bad()) return cond;

  if (additionalTags != nullptr) {
    additionalTags->populateDataset(dataSet);
  }

  return cond;
}