MCPcopy Create free account
hub / github.com/OpenPathGuidingLibrary/openpgl / ReconstructTileOffsets

Function ReconstructTileOffsets

third-party/tinyexr/tinyexr.h:5753–5864  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5751}
5752
5753static bool ReconstructTileOffsets(OffsetData& offset_data,
5754 const EXRHeader* exr_header,
5755 const unsigned char* head, const unsigned char* marker, const size_t size,
5756 bool isMultiPartFile,
5757 bool isDeep) {
5758 int numXLevels = offset_data.num_x_levels;
5759 for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
5760 for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
5761 for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
5762 tinyexr::tinyexr_uint64 tileOffset = tinyexr::tinyexr_uint64(marker - head);
5763
5764
5765 if (isMultiPartFile) {
5766 if ((marker + sizeof(int)) >= (head + size)) {
5767 return false;
5768 }
5769
5770 //int partNumber;
5771 marker += sizeof(int);
5772 }
5773
5774 if ((marker + 4 * sizeof(int)) >= (head + size)) {
5775 return false;
5776 }
5777
5778 int tileX;
5779 memcpy(&tileX, marker, sizeof(int));
5780 tinyexr::swap4(&tileX);
5781 marker += sizeof(int);
5782
5783 int tileY;
5784 memcpy(&tileY, marker, sizeof(int));
5785 tinyexr::swap4(&tileY);
5786 marker += sizeof(int);
5787
5788 int levelX;
5789 memcpy(&levelX, marker, sizeof(int));
5790 tinyexr::swap4(&levelX);
5791 marker += sizeof(int);
5792
5793 int levelY;
5794 memcpy(&levelY, marker, sizeof(int));
5795 tinyexr::swap4(&levelY);
5796 marker += sizeof(int);
5797
5798 if (isDeep) {
5799 if ((marker + 2 * sizeof(tinyexr::tinyexr_int64)) >= (head + size)) {
5800 return false;
5801 }
5802 tinyexr::tinyexr_int64 packed_offset_table_size;
5803 memcpy(&packed_offset_table_size, marker, sizeof(tinyexr::tinyexr_int64));
5804 tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_offset_table_size));
5805 marker += sizeof(tinyexr::tinyexr_int64);
5806
5807 tinyexr::tinyexr_int64 packed_sample_size;
5808 memcpy(&packed_sample_size, marker, sizeof(tinyexr::tinyexr_int64));
5809 tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_sample_size));
5810 marker += sizeof(tinyexr::tinyexr_int64);

Callers 1

DecodeEXRImageFunction · 0.85

Calls 5

swap4Function · 0.85
swap8Function · 0.85
isValidTileFunction · 0.85
LevelIndexFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected