| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- /*
- * HEIF codec.
- * Copyright (c) 2023 Dirk Farin <dirk.farin@gmail.com>
- *
- * This file is part of libheif.
- *
- * libheif is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * libheif is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with libheif. If not, see <http://www.gnu.org/licenses/>.
- */
- #ifndef LIBHEIF_HEIF_ITEMS_H
- #define LIBHEIF_HEIF_ITEMS_H
- #include "libheif/heif.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * Gets the number of items.
- *
- * This is not the same as the number of images, since there can be other types of items,
- * such as metadata.
- *
- * @param ctx the file context
- * @return the number of items
- */
- LIBHEIF_API
- int heif_context_get_number_of_items(const struct heif_context* ctx);
- /**
- * Get the item identifiers.
- *
- * Fills in the item IDs into the user-supplied array {@code ID_array}, preallocated with {@code count} entries.
- *
- * @param ctx the file context
- * @param ID_array the output array.
- * @param count the number of items allocated within {@code ID_array}.
- * @return the total number of IDs filled into the array, which may be less than {@code count}.
- */
- LIBHEIF_API
- int heif_context_get_list_of_item_IDs(const struct heif_context* ctx,
- heif_item_id* ID_array,
- int count);
- /**
- * Gets the item type.
- *
- * Usually, this is a four character code (e.g. `mime` or `uri `), but it can theoretically be
- * any 4-byte number. Thus, the type is returned as an integer. You can use {@link heif_fourcc} to map
- * between the two representations.
- *
- * @param ctx the file context
- * @param item_id the item identifier for the item
- * @return the item type
- */
- LIBHEIF_API
- uint32_t heif_item_get_item_type(const struct heif_context* ctx, heif_item_id item_id);
- #define heif_item_type_mime heif_fourcc('m','i','m','e')
- #define heif_item_type_uri heif_fourcc('u','r','i',' ')
- LIBHEIF_API
- int heif_item_is_item_hidden(const struct heif_context* ctx, heif_item_id item_id);
- /**
- * Gets the MIME content_type for an item.
- *
- * Only valid if the item type is `mime`.
- * If the item does not exist, or if it is not a `mime` item, NULL is returned.
- *
- * @param ctx the file context
- * @param item_id the item identifier for the item
- * @return the item content_type
- */
- LIBHEIF_API
- const char* heif_item_get_mime_item_content_type(const struct heif_context* ctx, heif_item_id item_id);
- /**
- * Gets the content_encoding for a MIME item.
- *
- * Only valid if the item type is `mime`.
- * If the item does not exist, or if it is not a `mime` item, NULL is returned.
- *
- * If the item is not encoded, the returned value will be an empty string (not null).
- *
- * @param ctx the file context
- * @param item_id the item identifier for the item
- * @return the item content_type
- */
- LIBHEIF_API
- const char* heif_item_get_mime_item_content_encoding(const struct heif_context* ctx, heif_item_id item_id);
- /**
- * Gets the item_uri_type for an item.
- *
- * Only valid if the item type is `uri `.
- * If the item does not exist, or if it is not a `uri ` item, NULL is returned.
- *
- * @param ctx the file context
- * @param item_id the item identifier for the item
- * @return the item item_uri_type
- */
- LIBHEIF_API
- const char* heif_item_get_uri_item_uri_type(const struct heif_context* ctx, heif_item_id item_id);
- LIBHEIF_API
- const char* heif_item_get_item_name(const struct heif_context* ctx, heif_item_id item_id);
- LIBHEIF_API
- struct heif_error heif_item_set_item_name(struct heif_context* ctx,
- heif_item_id item,
- const char* item_name);
- /**
- * Gets the raw metadata, as stored in the HEIF file.
- *
- * Data in a "mime" item with "content_encoding" can be compressed.
- * When `out_compression_format` is NULL, the decompressed data will be returned.
- * Otherwise, the compressed data is returned and `out_compression_format` will be filled with the
- * compression format.
- * If the compression method is not supported, an error will be returned.
- *
- * It is valid to set `out_data` to NULL. In that case, only the `out_data_size` is filled.
- * Note that it is inefficient to use `out_data=NULL` just to get the size of compressed data.
- * In general, this should be avoided.
- *
- * If there is no data assigned to the item or there is an error, `out_data_size` is set to zero.
- *
- * @param ctx the file context
- * @param item_id the item identifier for the item
- * @param out_compression_format how the data is compressed. If the pointer is NULL, the decompressed data will be returned.
- * @param out_data the corresponding raw metadata
- * @param out_data_size the size of the metadata in bytes
- * @return whether the call succeeded, or there was an error
- */
- LIBHEIF_API
- struct heif_error heif_item_get_item_data(const struct heif_context* ctx,
- heif_item_id item_id,
- heif_metadata_compression* out_compression_format,
- uint8_t** out_data, size_t* out_data_size);
- /**
- * Free the item data.
- *
- * This is used to free memory associated with the data returned by
- * {@link heif_item_get_item_data} in 'out_data' and set the pointer to NULL.
- *
- * @param ctx the file context
- * @param item_data the data to free
- */
- LIBHEIF_API
- void heif_release_item_data(const struct heif_context* ctx, uint8_t** item_data);
- // ------------------------- item references -------------------------
- /**
- * Get the item ids that reference the given item.
- *
- * @param ctx the file context.
- * @param from_item_id the item identifier for the item.
- * @param index the index of the reference to get.
- * @param out_reference_type_4cc The 4cc of the reference. (e.g dimg, thmb, cdsc, or auxl)
- * @param out_references_to the item references. Use {@link heif_release_item_references} to free the memory.
- * @return the number of items that reference the given item. Returns 0 if the index exceeds the number of references.
- */
- LIBHEIF_API
- size_t heif_context_get_item_references(const struct heif_context* ctx,
- heif_item_id from_item_id,
- int index,
- uint32_t* out_reference_type_4cc,
- heif_item_id** out_references_to);
- LIBHEIF_API
- void heif_release_item_references(const struct heif_context* ctx, heif_item_id** references);
- LIBHEIF_API
- struct heif_error heif_context_add_item_reference(struct heif_context* ctx,
- uint32_t reference_type,
- heif_item_id from_item,
- heif_item_id to_item);
- LIBHEIF_API
- struct heif_error heif_context_add_item_references(struct heif_context* ctx,
- uint32_t reference_type,
- heif_item_id from_item,
- const heif_item_id* to_item,
- int num_to_items);
- // ------------------------- adding new items -------------------------
- LIBHEIF_API
- struct heif_error heif_context_add_item(struct heif_context* ctx,
- const char* item_type,
- const void* data, int size,
- heif_item_id* out_item_id);
- LIBHEIF_API
- struct heif_error heif_context_add_mime_item(struct heif_context* ctx,
- const char* content_type,
- heif_metadata_compression content_encoding,
- const void* data, int size,
- heif_item_id* out_item_id);
- LIBHEIF_API
- struct heif_error heif_context_add_precompressed_mime_item(struct heif_context* ctx,
- const char* content_type,
- const char* content_encoding,
- const void* data, int size,
- heif_item_id* out_item_id);
- LIBHEIF_API
- struct heif_error heif_context_add_uri_item(struct heif_context* ctx,
- const char* item_uri_type,
- const void* data, int size,
- heif_item_id* out_item_id);
- #ifdef __cplusplus
- }
- #endif
- #endif
|