MCPcopy Create free account
hub / github.com/TheRealMJP/DeferredTexturing / LoadDeepEXR

Function LoadDeepEXR

SampleFramework12/v1.00/TinyEXR.cpp:7754–8088  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7752}
7753
7754int LoadDeepEXR(DeepImage *deepImage, const char *filename, const char **err) {
7755 if (deepImage == NULL) {
7756 if (err) {
7757 (*err) = "Invalid argument.";
7758 }
7759 return -1;
7760 }
7761
7762 FILE *fp = fopen(filename, "rb");
7763 if (!fp) {
7764 if (err) {
7765 (*err) = "Cannot read file.";
7766 }
7767 return -1;
7768 }
7769
7770 size_t filesize;
7771 // Compute size
7772 fseek(fp, 0, SEEK_END);
7773 filesize = ftell(fp);
7774 fseek(fp, 0, SEEK_SET);
7775
7776 std::vector<char> buf(filesize); // @todo { use mmap }
7777 {
7778 size_t ret;
7779 ret = fread(&buf[0], 1, filesize, fp);
7780 assert(ret == filesize);
7781 fclose(fp);
7782 }
7783
7784 const char *head = &buf[0];
7785 const char *marker = &buf[0];
7786
7787 // Header check.
7788 {
7789 const char header[] = {0x76, 0x2f, 0x31, 0x01};
7790
7791 if (memcmp(marker, header, 4) != 0) {
7792 if (err) {
7793 (*err) = "Header mismatch.";
7794 }
7795 return -3;
7796 }
7797 marker += 4;
7798 }
7799
7800 // Version, scanline.
7801 {
7802 // ver 2.0, scanline, deep bit on(0x800)
7803 // must be [2, 0, 0, 0]
7804 if (marker[0] != 2 || marker[1] != 8 || marker[2] != 0 || marker[3] != 0) {
7805 if (err) {
7806 (*err) = "Unsupported version or scanline.";
7807 }
7808 return -4;
7809 }
7810
7811 marker += 4;

Callers

nothing calls this directly

Calls 9

ReadAttributeFunction · 0.85
ReadChannelInfoFunction · 0.85
IsBigEndianFunction · 0.85
swap4Function · 0.85
swap8Function · 0.85
DecompressZipFunction · 0.85
half_to_floatFunction · 0.85
c_strMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected