MCPcopy Create free account
hub / github.com/ARM-software/astc-encoder / LoadEXRFromMemory

Function LoadEXRFromMemory

Source/ThirdParty/tinyexr.h:8045–8253  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8043}
8044
8045int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
8046 const unsigned char *memory, size_t size,
8047 const char **err) {
8048 if (out_rgba == NULL || memory == NULL) {
8049 tinyexr::SetErrorMessage("Invalid argument for LoadEXRFromMemory", err);
8050 return TINYEXR_ERROR_INVALID_ARGUMENT;
8051 }
8052
8053 EXRVersion exr_version;
8054 EXRImage exr_image;
8055 EXRHeader exr_header;
8056
8057 InitEXRHeader(&exr_header);
8058
8059 int ret = ParseEXRVersionFromMemory(&exr_version, memory, size);
8060 if (ret != TINYEXR_SUCCESS) {
8061 std::stringstream ss;
8062 ss << "Failed to parse EXR version. code(" << ret << ")";
8063 tinyexr::SetErrorMessage(ss.str(), err);
8064 return ret;
8065 }
8066
8067 ret = ParseEXRHeaderFromMemory(&exr_header, &exr_version, memory, size, err);
8068 if (ret != TINYEXR_SUCCESS) {
8069 FreeEXRHeader(&exr_header);
8070 return ret;
8071 }
8072
8073 // Read HALF channel as FLOAT.
8074 for (int i = 0; i < exr_header.num_channels; i++) {
8075 if (exr_header.pixel_types[i] == TINYEXR_PIXELTYPE_HALF) {
8076 exr_header.requested_pixel_types[i] = TINYEXR_PIXELTYPE_FLOAT;
8077 }
8078 }
8079
8080 InitEXRImage(&exr_image);
8081 ret = LoadEXRImageFromMemory(&exr_image, &exr_header, memory, size, err);
8082 if (ret != TINYEXR_SUCCESS) {
8083 FreeEXRHeader(&exr_header);
8084 FreeEXRImage(&exr_image);
8085 return ret;
8086 }
8087
8088 // RGBA
8089 int idxR = -1;
8090 int idxG = -1;
8091 int idxB = -1;
8092 int idxA = -1;
8093 for (int c = 0; c < exr_header.num_channels; c++) {
8094 if (strcmp(exr_header.channels[c].name, "R") == 0) {
8095 idxR = c;
8096 } else if (strcmp(exr_header.channels[c].name, "G") == 0) {
8097 idxG = c;
8098 } else if (strcmp(exr_header.channels[c].name, "B") == 0) {
8099 idxB = c;
8100 } else if (strcmp(exr_header.channels[c].name, "A") == 0) {
8101 idxA = c;
8102 }

Callers

nothing calls this directly

Calls 8

SetErrorMessageFunction · 0.85
InitEXRHeaderFunction · 0.85
ParseEXRHeaderFromMemoryFunction · 0.85
FreeEXRHeaderFunction · 0.85
InitEXRImageFunction · 0.85
LoadEXRImageFromMemoryFunction · 0.85
FreeEXRImageFunction · 0.85

Tested by

no test coverage detected