| 8663 | } |
| 8664 | |
| 8665 | int FreeEXRImage(EXRImage *exr_image) { |
| 8666 | if (exr_image == NULL) { |
| 8667 | return TINYEXR_ERROR_INVALID_ARGUMENT; |
| 8668 | } |
| 8669 | |
| 8670 | if (exr_image->next_level) { |
| 8671 | FreeEXRImage(exr_image->next_level); |
| 8672 | delete exr_image->next_level; |
| 8673 | } |
| 8674 | |
| 8675 | for (int i = 0; i < exr_image->num_channels; i++) { |
| 8676 | if (exr_image->images && exr_image->images[i]) { |
| 8677 | free(exr_image->images[i]); |
| 8678 | } |
| 8679 | } |
| 8680 | |
| 8681 | if (exr_image->images) { |
| 8682 | free(exr_image->images); |
| 8683 | } |
| 8684 | |
| 8685 | if (exr_image->tiles) { |
| 8686 | for (int tid = 0; tid < exr_image->num_tiles; tid++) { |
| 8687 | for (int i = 0; i < exr_image->num_channels; i++) { |
| 8688 | if (exr_image->tiles[tid].images && exr_image->tiles[tid].images[i]) { |
| 8689 | free(exr_image->tiles[tid].images[i]); |
| 8690 | } |
| 8691 | } |
| 8692 | if (exr_image->tiles[tid].images) { |
| 8693 | free(exr_image->tiles[tid].images); |
| 8694 | } |
| 8695 | } |
| 8696 | free(exr_image->tiles); |
| 8697 | } |
| 8698 | |
| 8699 | return TINYEXR_SUCCESS; |
| 8700 | } |
| 8701 | |
| 8702 | int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version, |
| 8703 | const char *filename, const char **err) { |
no outgoing calls
no test coverage detected