blob: 6f077dcf331157c0d338b26937145130bcec0328 [file] [log] [blame]
#ifndef LIBGAV1_SRC_FRAME_BUFFER_H_
#define LIBGAV1_SRC_FRAME_BUFFER_H_
// All the declarations in this file are part of the public ABI. This file may
// be included by both C and C++ files.
#include <stddef.h>
#include <stdint.h>
// The callback functions use the C linkage conventions.
#if defined(__cplusplus)
extern "C" {
#endif
// This structure represents an allocated frame buffer.
struct Libgav1FrameBuffer {
// In the |data| and |size| arrays, the elements at indexes 0, 1, and 2 are
// for the Y, U, and V planes, respectively.
uint8_t* data[3]; // Pointers to the data buffers.
size_t size[3]; // Sizes of the data buffers in bytes.
void* private_data; // Frame buffer's private data. Available for use by the
// release frame buffer callback. Also copied to the
// |buffer_private_data| field of DecoderBuffer for use
// by the consumer of a DecoderBuffer.
};
// This callback is invoked by the decoder to allocate a frame buffer, which
// consists of three data buffers, for the Y, U, and V planes, respectively.
// |y_plane_min_size| specifies the minimum size in bytes of the Y plane data
// buffer, and |uv_plane_min_size| specifies the minimum size in bytes of the
// U and V plane data buffers.
//
// The callback must set |frame_buffer->data[i]| to point to the data buffers,
// and set |frame_buffer->size[i]| to the actual sizes of the data buffers. The
// callback may set |frame_buffer->private_data| to a value that will be useful
// to the release frame buffer callback and the consumer of a DecoderBuffer.
//
// Returns 0 on success, -1 on failure.
typedef int (*Libgav1GetFrameBufferCallback)(void* private_data,
size_t y_plane_min_size,
size_t uv_plane_min_size,
Libgav1FrameBuffer* frame_buffer);
// This callback is invoked by the decoder to release a frame buffer.
//
// Returns 0 on success, -1 on failure.
typedef int (*Libgav1ReleaseFrameBufferCallback)(
void* private_data, Libgav1FrameBuffer* frame_buffer);
#if defined(__cplusplus)
} // extern "C"
// Declare type aliases for C++.
namespace libgav1 {
using FrameBuffer = Libgav1FrameBuffer;
using GetFrameBufferCallback = Libgav1GetFrameBufferCallback;
using ReleaseFrameBufferCallback = Libgav1ReleaseFrameBufferCallback;
} // namespace libgav1
#endif // defined(__cplusplus)
#endif // LIBGAV1_SRC_FRAME_BUFFER_H_