1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VPX_VPX_FRAME_BUFFER_H_ 12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VPX_VPX_FRAME_BUFFER_H_ 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker /*!\file 15*fb1b10abSAndroid Build Coastguard Worker * \brief Describes the decoder external frame buffer interface. 16*fb1b10abSAndroid Build Coastguard Worker */ 17*fb1b10abSAndroid Build Coastguard Worker 18*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 19*fb1b10abSAndroid Build Coastguard Worker extern "C" { 20*fb1b10abSAndroid Build Coastguard Worker #endif 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_integer.h" 23*fb1b10abSAndroid Build Coastguard Worker 24*fb1b10abSAndroid Build Coastguard Worker /*!\brief The maximum number of work buffers used by libvpx. 25*fb1b10abSAndroid Build Coastguard Worker * Support maximum 4 threads to decode video in parallel. 26*fb1b10abSAndroid Build Coastguard Worker * Each thread will use one work buffer. 27*fb1b10abSAndroid Build Coastguard Worker * TODO(hkuang): Add support to set number of worker threads dynamically. 28*fb1b10abSAndroid Build Coastguard Worker */ 29*fb1b10abSAndroid Build Coastguard Worker #define VPX_MAXIMUM_WORK_BUFFERS 8 30*fb1b10abSAndroid Build Coastguard Worker 31*fb1b10abSAndroid Build Coastguard Worker /*!\brief The maximum number of reference buffers that a VP9 encoder may use. 32*fb1b10abSAndroid Build Coastguard Worker */ 33*fb1b10abSAndroid Build Coastguard Worker #define VP9_MAXIMUM_REF_BUFFERS 8 34*fb1b10abSAndroid Build Coastguard Worker 35*fb1b10abSAndroid Build Coastguard Worker /*!\brief External frame buffer 36*fb1b10abSAndroid Build Coastguard Worker * 37*fb1b10abSAndroid Build Coastguard Worker * This structure holds allocated frame buffers used by the decoder. 38*fb1b10abSAndroid Build Coastguard Worker */ 39*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_codec_frame_buffer { 40*fb1b10abSAndroid Build Coastguard Worker uint8_t *data; /**< Pointer to the data buffer */ 41*fb1b10abSAndroid Build Coastguard Worker size_t size; /**< Size of data in bytes */ 42*fb1b10abSAndroid Build Coastguard Worker void *priv; /**< Frame's private data */ 43*fb1b10abSAndroid Build Coastguard Worker } vpx_codec_frame_buffer_t; 44*fb1b10abSAndroid Build Coastguard Worker 45*fb1b10abSAndroid Build Coastguard Worker /*!\brief get frame buffer callback prototype 46*fb1b10abSAndroid Build Coastguard Worker * 47*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the decoder to retrieve data for the frame 48*fb1b10abSAndroid Build Coastguard Worker * buffer in order for the decode call to complete. The callback must 49*fb1b10abSAndroid Build Coastguard Worker * allocate at least min_size in bytes and assign it to fb->data. The callback 50*fb1b10abSAndroid Build Coastguard Worker * must zero out all the data allocated. Then the callback must set fb->size 51*fb1b10abSAndroid Build Coastguard Worker * to the allocated size. The application does not need to align the allocated 52*fb1b10abSAndroid Build Coastguard Worker * data. The callback is triggered when the decoder needs a frame buffer to 53*fb1b10abSAndroid Build Coastguard Worker * decode a compressed image into. This function may be called more than once 54*fb1b10abSAndroid Build Coastguard Worker * for every call to vpx_codec_decode. The application may set fb->priv to 55*fb1b10abSAndroid Build Coastguard Worker * some data which will be passed back in the vpx_image_t and the release 56*fb1b10abSAndroid Build Coastguard Worker * function call. |fb| is guaranteed to not be NULL. On success the callback 57*fb1b10abSAndroid Build Coastguard Worker * must return 0. Any failure the callback must return a value less than 0. 58*fb1b10abSAndroid Build Coastguard Worker * 59*fb1b10abSAndroid Build Coastguard Worker * \param[in] priv Callback's private data 60*fb1b10abSAndroid Build Coastguard Worker * \param[in] min_size Size in bytes needed by the buffer 61*fb1b10abSAndroid Build Coastguard Worker * \param[in,out] fb Pointer to vpx_codec_frame_buffer_t 62*fb1b10abSAndroid Build Coastguard Worker */ 63*fb1b10abSAndroid Build Coastguard Worker typedef int (*vpx_get_frame_buffer_cb_fn_t)(void *priv, size_t min_size, 64*fb1b10abSAndroid Build Coastguard Worker vpx_codec_frame_buffer_t *fb); 65*fb1b10abSAndroid Build Coastguard Worker 66*fb1b10abSAndroid Build Coastguard Worker /*!\brief release frame buffer callback prototype 67*fb1b10abSAndroid Build Coastguard Worker * 68*fb1b10abSAndroid Build Coastguard Worker * This callback is invoked by the decoder when the frame buffer is not 69*fb1b10abSAndroid Build Coastguard Worker * referenced by any other buffers. |fb| is guaranteed to not be NULL. On 70*fb1b10abSAndroid Build Coastguard Worker * success the callback must return 0. Any failure the callback must return 71*fb1b10abSAndroid Build Coastguard Worker * a value less than 0. 72*fb1b10abSAndroid Build Coastguard Worker * 73*fb1b10abSAndroid Build Coastguard Worker * \param[in] priv Callback's private data 74*fb1b10abSAndroid Build Coastguard Worker * \param[in] fb Pointer to vpx_codec_frame_buffer_t 75*fb1b10abSAndroid Build Coastguard Worker */ 76*fb1b10abSAndroid Build Coastguard Worker typedef int (*vpx_release_frame_buffer_cb_fn_t)(void *priv, 77*fb1b10abSAndroid Build Coastguard Worker vpx_codec_frame_buffer_t *fb); 78*fb1b10abSAndroid Build Coastguard Worker 79*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 80*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 81*fb1b10abSAndroid Build Coastguard Worker #endif 82*fb1b10abSAndroid Build Coastguard Worker 83*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VPX_VPX_FRAME_BUFFER_H_ 84