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;
}