205 lines
6.3 KiB
C
205 lines
6.3 KiB
C
/*
|
|
* 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 */
|