| 6137 | } // namespace tinyexr |
| 6138 | |
| 6139 | int EXRLayers(const char *filename, const char **layer_names[], int *num_layers, |
| 6140 | const char **err) { |
| 6141 | EXRVersion exr_version; |
| 6142 | EXRHeader exr_header; |
| 6143 | InitEXRHeader(&exr_header); |
| 6144 | |
| 6145 | { |
| 6146 | int ret = ParseEXRVersionFromFile(&exr_version, filename); |
| 6147 | if (ret != TINYEXR_SUCCESS) { |
| 6148 | tinyexr::SetErrorMessage("Invalid EXR header.", err); |
| 6149 | return ret; |
| 6150 | } |
| 6151 | |
| 6152 | if (exr_version.multipart || exr_version.non_image) { |
| 6153 | tinyexr::SetErrorMessage( |
| 6154 | "Loading multipart or DeepImage is not supported in LoadEXR() API", |
| 6155 | err); |
| 6156 | return TINYEXR_ERROR_INVALID_DATA; // @fixme. |
| 6157 | } |
| 6158 | } |
| 6159 | |
| 6160 | int ret = ParseEXRHeaderFromFile(&exr_header, &exr_version, filename, err); |
| 6161 | if (ret != TINYEXR_SUCCESS) { |
| 6162 | FreeEXRHeader(&exr_header); |
| 6163 | return ret; |
| 6164 | } |
| 6165 | |
| 6166 | std::vector<std::string> layer_vec; |
| 6167 | tinyexr::GetLayers(exr_header, layer_vec); |
| 6168 | |
| 6169 | (*num_layers) = int(layer_vec.size()); |
| 6170 | (*layer_names) = static_cast<const char **>( |
| 6171 | malloc(sizeof(const char *) * static_cast<size_t>(layer_vec.size()))); |
| 6172 | for (size_t c = 0; c < static_cast<size_t>(layer_vec.size()); c++) { |
| 6173 | #ifdef _MSC_VER |
| 6174 | (*layer_names)[c] = _strdup(layer_vec[c].c_str()); |
| 6175 | #else |
| 6176 | (*layer_names)[c] = strdup(layer_vec[c].c_str()); |
| 6177 | #endif |
| 6178 | } |
| 6179 | |
| 6180 | FreeEXRHeader(&exr_header); |
| 6181 | return TINYEXR_SUCCESS; |
| 6182 | } |
| 6183 | |
| 6184 | int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, |
| 6185 | const char **err) { |
nothing calls this directly
no test coverage detected