|  | /* | 
|  | * Copyright (c) 2019, Alliance for Open Media. All rights reserved | 
|  | * | 
|  | * This source code is subject to the terms of the BSD 2 Clause License and | 
|  | * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License | 
|  | * was not distributed with this source code in the LICENSE file, you can | 
|  | * obtain it at www.aomedia.org/license/software. If the Alliance for Open | 
|  | * Media Patent License 1.0 was not distributed with this source code in the | 
|  | * PATENTS file, you can obtain it at www.aomedia.org/license/patent. | 
|  | */ | 
|  |  | 
|  | /*!\file | 
|  | * \brief Describes the internal functions associated with the aom image | 
|  | * descriptor. | 
|  | * | 
|  | */ | 
|  | #ifndef AOM_AOM_INTERNAL_AOM_IMAGE_INTERNAL_H_ | 
|  | #define AOM_AOM_INTERNAL_AOM_IMAGE_INTERNAL_H_ | 
|  |  | 
|  | #include "aom/aom_image.h" | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /*!\brief Array of aom_metadata structs for an image. */ | 
|  | struct aom_metadata_array { | 
|  | size_t sz;                       /* Number of metadata structs in the list */ | 
|  | aom_metadata_t **metadata_array; /* Array of metadata structs */ | 
|  | }; | 
|  |  | 
|  | /*!\brief Alloc memory for aom_metadata_array struct. | 
|  | * | 
|  | * Allocate memory for aom_metadata_array struct. | 
|  | * If sz is 0 the aom_metadata_array struct's internal buffer list will be | 
|  | * NULL, but the aom_metadata_array struct itself will still be allocated. | 
|  | * Returns a pointer to the allocated struct or NULL on failure. | 
|  | * | 
|  | * \param[in]    sz       Size of internal metadata list buffer | 
|  | */ | 
|  | aom_metadata_array_t *aom_img_metadata_array_alloc(size_t sz); | 
|  |  | 
|  | /*!\brief Free metadata array struct. | 
|  | * | 
|  | * Free metadata array struct and all metadata structs inside. | 
|  | * | 
|  | * \param[in]    arr       Metadata array struct pointer | 
|  | */ | 
|  | void aom_img_metadata_array_free(aom_metadata_array_t *arr); | 
|  |  | 
|  | typedef void *(*aom_alloc_img_data_cb_fn_t)(void *priv, size_t size); | 
|  |  | 
|  | /*!\brief Open a descriptor, allocating storage for the underlying image by | 
|  | * using the provided callback function. | 
|  | * | 
|  | * Returns a descriptor for storing an image of the given format. The storage | 
|  | * for the image is allocated by using the provided callback function. Unlike | 
|  | * aom_img_alloc(), the returned descriptor does not own the storage for the | 
|  | * image. The caller is responsible for freeing the storage for the image. | 
|  | * | 
|  | * Note: If the callback function is invoked and succeeds, | 
|  | * aom_img_alloc_with_cb() is guaranteed to succeed. Therefore, if | 
|  | * aom_img_alloc_with_cb() fails, the caller is assured that no storage was | 
|  | * allocated. | 
|  | * | 
|  | * \param[in]    img       Pointer to storage for descriptor. If this parameter | 
|  | *                         is NULL, the storage for the descriptor will be | 
|  | *                         allocated on the heap. | 
|  | * \param[in]    fmt       Format for the image | 
|  | * \param[in]    d_w       Width of the image | 
|  | * \param[in]    d_h       Height of the image | 
|  | * \param[in]    align     Alignment, in bytes, of the image buffer and | 
|  | *                         each row in the image (stride). | 
|  | * \param[in]    alloc_cb  Callback function used to allocate storage for the | 
|  | *                         image. | 
|  | * \param[in]    cb_priv   The first argument ('priv') for the callback | 
|  | *                         function. | 
|  | * | 
|  | * \return Returns a pointer to the initialized image descriptor. If the img | 
|  | *         parameter is non-null, the value of the img parameter will be | 
|  | *         returned. | 
|  | */ | 
|  | aom_image_t *aom_img_alloc_with_cb(aom_image_t *img, aom_img_fmt_t fmt, | 
|  | unsigned int d_w, unsigned int d_h, | 
|  | unsigned int align, | 
|  | aom_alloc_img_data_cb_fn_t alloc_cb, | 
|  | void *cb_priv); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | }  // extern "C" | 
|  | #endif | 
|  |  | 
|  | #endif  // AOM_AOM_INTERNAL_AOM_IMAGE_INTERNAL_H_ |