| /* |
| * 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 Picture flags |
| * |
| * Those flags flags are meant to signal when a picture marks the end |
| * of a sequence, a stream, or even both at once. |
| * |
| * @{ |
| */ |
| /** |
| * \brief Marks the last picture in the sequence. |
| * |
| */ |
| #define VA_ENC_LAST_PICTURE_EOSEQ 0x01 |
| /** |
| * \brief Marks the last picture in the stream. |
| * |
| */ |
| #define VA_ENC_LAST_PICTURE_EOSTREAM 0x02 |
| /**@}*/ |
| |
| |
| /** @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 */ |