| 6216 | } // namespace tinyexr |
| 6217 | |
| 6218 | int EXRLayers(const char *filename, const char **layer_names[], int *num_layers, |
| 6219 | const char **err) { |
| 6220 | EXRVersion exr_version; |
| 6221 | EXRHeader exr_header; |
| 6222 | InitEXRHeader(&exr_header); |
| 6223 | |
| 6224 | { |
| 6225 | int ret = ParseEXRVersionFromFile(&exr_version, filename); |
| 6226 | if (ret != TINYEXR_SUCCESS) { |
| 6227 | tinyexr::SetErrorMessage("Invalid EXR header.", err); |
| 6228 | return ret; |
| 6229 | } |
| 6230 | |
| 6231 | if (exr_version.multipart || exr_version.non_image) { |
| 6232 | tinyexr::SetErrorMessage( |
| 6233 | "Loading multipart or DeepImage is not supported in LoadEXR() API", |
| 6234 | err); |
| 6235 | return TINYEXR_ERROR_INVALID_DATA; // @fixme. |
| 6236 | } |
| 6237 | } |
| 6238 | |
| 6239 | int ret = ParseEXRHeaderFromFile(&exr_header, &exr_version, filename, err); |
| 6240 | if (ret != TINYEXR_SUCCESS) { |
| 6241 | FreeEXRHeader(&exr_header); |
| 6242 | return ret; |
| 6243 | } |
| 6244 | |
| 6245 | std::vector<std::string> layer_vec; |
| 6246 | tinyexr::GetLayers(exr_header, layer_vec); |
| 6247 | |
| 6248 | (*num_layers) = int(layer_vec.size()); |
| 6249 | (*layer_names) = static_cast<const char **>( |
| 6250 | malloc(sizeof(const char *) * static_cast<size_t>(layer_vec.size()))); |
| 6251 | for (size_t c = 0; c < static_cast<size_t>(layer_vec.size()); c++) { |
| 6252 | #ifdef _MSC_VER |
| 6253 | (*layer_names)[c] = _strdup(layer_vec[c].c_str()); |
| 6254 | #else |
| 6255 | (*layer_names)[c] = strdup(layer_vec[c].c_str()); |
| 6256 | #endif |
| 6257 | } |
| 6258 | |
| 6259 | FreeEXRHeader(&exr_header); |
| 6260 | return TINYEXR_SUCCESS; |
| 6261 | } |
| 6262 | |
| 6263 | int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, |
| 6264 | const char **err) { |
nothing calls this directly
no test coverage detected