diff options
Diffstat (limited to 'va/va_enc.h')
| -rw-r--r-- | va/va_enc.h | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/va/va_enc.h b/va/va_enc.h new file mode 100644 index 0000000..becd980 --- /dev/null +++ b/va/va_enc.h @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_enc.h + * \brief The Core encoding API + * + * This file contains the \ref api_enc_core "Core encoding API". + */ + +#ifndef VA_ENC_H +#define VA_ENC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <va/va.h> + +/** + * \defgroup api_enc_core Core encoding API + * + * @{ + */ + +/** \brief Abstract representation of a bitstream writer. */ +typedef struct _VAEncBitstream VAEncBitstream; + +/** @name The set of all possible error codes */ +/**@{*/ +/** \brief An invalid bitstream writer handle was supplied. */ +#define VA_ENC_STATUS_ERROR_INVALID_BITSTREAM_WRITER (-1) +/** \brief An invalid/unsupported parameter value was supplied. */ +#define VA_ENC_STATUS_ERROR_INVALID_VALUE (-2) +/** \brief A buffer overflow has occurred. */ +#define VA_ENC_STATUS_ERROR_BUFFER_OVERFLOW (-3) +/**@}*/ + +typedef int (*VAEncBitstreamFlushFunc)( + VAEncBitstream *bs, + unsigned char *buffer, + unsigned int buffer_size +); + +/** \brief Bitstream writer attribute types. */ +typedef enum { + /** + * \brief User-provided buffer to hold output bitstream (pointer). + * + * If this attribute is provided, then \c VAencBitstreamAttribBufferSize + * shall also be supplied or va_enc_bitstream_new() will ignore that + * attribute and allocate its own buffer. + */ + VAEncBitstreamAttribBuffer = 1, + /** \brief Size of the user-provided buffer (integer). */ + VAEncBitstreamAttribBufferSize = 2, + /** \brief User-provided \c flush() callback (pointer-to-function). */ + VAEncBitstreamAttribFlushFunc = 3, + /** \brief Placeholder for codec-specific attributes. */ + VAEncBitstreamAttribMiscMask = 0x80000000 +} VAEncBitstreamAttribType; + +/** \brief Bitstream writer attribute value. */ +typedef struct { + /** \brief Attribute type (#VAEncBitstreamAttribType). */ + VAEncBitstreamAttribType type; + /** \brief Attribute value (#VAGenericValue). */ + VAGenericValue value; +} VAEncBitstreamAttrib; + +/** + * \brief Allocates a new bitstream writer. + * + * Allocates a new bitstream writer. By default, libva allocates and + * maintains its own buffer. However, the user can pass down his own + * buffer with the \c VAEncBitstreamAttribBuffer attribute, along with + * the size of that buffer with the \c VAEncBitstreamAttribBufferSize + * attribute. + * + * @param[in] attribs the optional attributes, or NULL + * @param[in] num_attribs the number of attributes available in \c attribs + * @return a new #VAEncBitstream, or NULL if an error occurred + */ +VAEncBitstream * +va_enc_bitstream_new(VAEncBitstreamAttrib *attribs, unsigned int num_attribs); + +/** + * \brief Destroys a bitstream writer. + * + * @param[in] bs the bitstream writer to destroy + */ +void +va_enc_bitstream_destroy(VAEncBitstream *bs); + +/** + * \brief Writes an unsigned integer. + * + * Writes an unsigned int value of the specified length in bits. The + * value is implicitly zero-extended to the number of specified bits. + * + * @param[in] bs the bitstream writer + * @param[in] value the unsigned int value to write + * @param[in] length the length (in bits) of the value + * @return the number of bits written, or a negative value to indicate an error + */ +int +va_enc_bitstream_write_ui(VAEncBitstream *bs, unsigned int value, int length); + +/** + * \brief Writes a signed integer. + * + * Writes a signed int value of the specified length in bits. The + * value is implicitly sign-extended to the number of specified bits. + * + * @param[in] bs the bitstream writer + * @param[in] value the signed int value to write + * @param[in] length the length (in bits) of the value + * @return the number of bits written, or a negative value to indicate an error + */ +int +va_enc_bitstream_write_si(VAEncBitstream *bs, int value, int length); + +#if 0 +/* XXX: expose such API? */ +int +va_enc_bitstream_skip(VAEncBitstream *bs, unsigned int length); +#endif + +/** + * \brief Byte aligns the bitstream. + * + * Align the bitstream to next byte boundary, while filling in bits + * with the specified value (0 or 1). + * + * @param[in] bs the bitstream writer + * @param[in] value the bit filler value (0 or 1) + * @return the number of bits written, or a negative value to indicate an error + */ +int +va_enc_bitstream_align(VAEncBitstream *bs, unsigned int value); + +/** + * \brief Flushes the bitstream. + * + * Flushes the bitstream, while padding with zeroe's up to the next + * byte boundary. This functions resets the bitstream writer to its + * initial state. If the user provided a flush function through the + * \c VAEncBitstreamFlushFunc attribute, then his callback will be + * called. + * + * @param[in] bs the bitstream writer + * @return the number of bytes written, or a negative value to indicate an error + */ +int +va_enc_bitstream_flush(VAEncBitstream *bs); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_ENC_H */ |
