summaryrefslogtreecommitdiffstats
path: root/va/va_enc.h
diff options
context:
space:
mode:
Diffstat (limited to 'va/va_enc.h')
-rw-r--r--va/va_enc.h184
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 */