1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved.
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * copy of this software and associated documentation files (the
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * "Software"), to deal in the Software without restriction, including
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * without limitation the rights to use, copy, modify, merge, publish,
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * distribute, sub license, and/or sell copies of the Software, and to
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * permit persons to whom the Software is furnished to do so, subject to
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * the following conditions:
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * The above copyright notice and this permission notice (including the
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * next paragraph) shall be included in all copies or substantial portions
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * of the Software.
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \file va_enc_h264.h
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \brief The H.264 encoding API
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * This file contains the \ref api_enc_h264 "H.264 encoding API".
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef VA_ENC_H264_H
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define VA_ENC_H264_H
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef __cplusplus
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)extern "C" {
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \defgroup api_enc_h264 H.264 encoding API
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @{
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @name Picture flags
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Those flags flags are meant to signal when a picture marks the end
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * of a sequence, a stream, or even both at once.
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @{
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \brief Marks the last picture in the sequence.
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame.
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define H264_LAST_PICTURE_EOSEQ     0x01
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \brief Marks the last picture in the stream.
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame.
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define H264_LAST_PICTURE_EOSTREAM  0x02
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**@}*/
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \brief Packed header types specific to H.264 encoding.
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Types of packed headers generally used for H.264 encoding. Each
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * associated packed header data buffer shall contain the start code
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * prefix 0x000001 followed by the complete NAL unit, thus also
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * including the \c nal_unit_type.
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Note: the start code prefix can contain an arbitrary number of leading
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * zeros. The driver will skip them for emulation prevention bytes insertion,
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * if necessary.
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef enum {
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Packed Sequence Parameter Set (SPS).
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * The corresponding packed header data buffer shall contain the
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * complete seq_parameter_set_rbsp() syntax element.
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * Note: packed \c nal_unit_type shall be equal to 7.
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAEncPackedHeaderH264_SPS   = VAEncPackedHeaderSequence,
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Packed Picture Parameter Set (PPS).
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * The corresponding packed header data buffer shall contain the
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * complete pic_parameter_set_rbsp() syntax element.
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * Note: packed \c nal_unit_type shall be equal to 8.
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAEncPackedHeaderH264_PPS   = VAEncPackedHeaderPicture,
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Packed slice header.
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * The corresponding packed header data buffer shall contain the
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \c slice_header() syntax element only, along with any start
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * code prefix and NAL unit type preceeding it. i.e. this means
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * that the buffer does not contain any of the \c slice_data() or
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * the \c rbsp_slice_trailing_bits().
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * picture), or 5 (IDR picture).
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice,
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Packed Supplemental Enhancement Information (SEI).
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * The corresponding packed header data buffer shall contain the
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * complete sei_rbsp() syntax element, thus including several
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * sei_message() elements if necessary.
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * Note: packed \c nal_unit_type shall be equal to 6.
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAEncPackedHeaderH264_SEI   = (VAEncPackedHeaderMiscMask | 1),
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} VAEncPackedHeaderTypeH264;
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \brief Sequence parameter for H.264 encoding in baseline, main & high
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * profiles.
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * This structure holds information for \c seq_parameter_set_data() as
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * defined by the H.264 specification.
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * If packed sequence headers mode is used, i.e. if the encoding
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * flag, then the driver expects two more buffers to be provided to
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * the same \c vaRenderPicture() as this buffer:
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * - a #VAEncPackedHeaderParameterBuffer with type set to
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   VAEncPackedHeaderType::VAEncPackedHeaderSequence ;
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   header data.
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * If \c seq_scaling_matrix_present_flag is set to \c 1, then a
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * #VAIQMatrixBufferH264 buffer shall also be provided within the same
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \c vaRenderPicture() call as this sequence parameter buffer.
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef struct _VAEncSequenceParameterBufferH264 {
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   seq_parameter_set_id;
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   level_idc;
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Period between I frames. */
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    intra_period;
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Period between IDR frames. */
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    intra_idr_period;
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Period between I/P frames. */
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    ip_period;
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Initial bitrate set for this sequence in CBR or VBR modes.
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * This field represents the initial bitrate value for this
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * sequence if CBR or VBR mode is used, i.e. if the encoder
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * pipeline was created with a #VAConfigAttribRateControl
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * The bitrate can be modified later on through
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * #VAEncMiscParameterRateControl buffers.
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    bits_per_second;
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    max_num_ref_frames;
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Picture width in macroblocks. */
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned short  picture_width_in_mbs;
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Picture height in macroblocks. */
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned short  picture_height_in_mbs;
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    union {
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        struct {
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int chroma_format_idc                      : 2;
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int frame_mbs_only_flag                    : 1;
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int mb_adaptive_frame_field_flag           : 1;
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int seq_scaling_matrix_present_flag        : 1;
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int direct_8x8_inference_flag              : 1;
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int log2_max_frame_num_minus4              : 4;
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int pic_order_cnt_type                     : 2;
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int log2_max_pic_order_cnt_lsb_minus4      : 4;
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int delta_pic_order_always_zero_flag       : 1;
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        } bits;
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        unsigned int value;
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    } seq_fields;
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   bit_depth_luma_minus8;
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   bit_depth_chroma_minus8;
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** if pic_order_cnt_type == 1 */
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   num_ref_frames_in_pic_order_cnt_cycle;
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    int             offset_for_non_ref_pic;
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    int             offset_for_top_to_bottom_field;
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    int             offset_for_ref_frame[256];
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name Cropping (optional) */
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   frame_cropping_flag;
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    frame_crop_left_offset;
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    frame_crop_right_offset;
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    frame_crop_top_offset;
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    frame_crop_bottom_offset;
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name VUI parameters (optional) */
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   vui_parameters_present_flag;
232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    union {
233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        struct {
234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int aspect_ratio_info_present_flag         : 1;
236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int timing_info_present_flag               : 1;
238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int bitstream_restriction_flag             : 1;
240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Range: 0 to 16, inclusive. */
241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int log2_max_mv_length_horizontal          : 5;
242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Range: 0 to 16, inclusive. */
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int log2_max_mv_length_vertical            : 5;
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        } bits;
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        unsigned int value;
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    } vui_fields;
247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   aspect_ratio_idc;
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    sar_width;
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    sar_height;
253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    num_units_in_tick;
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    time_scale;
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} VAEncSequenceParameterBufferH264;
259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \brief Picture parameter for H.264 encoding in baseline, main & high
262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * profiles.
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * This structure holds information for \c pic_parameter_set_rbsp() as
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * defined by the H.264 specification.
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * If packed picture headers mode is used, i.e. if the encoding
268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE
269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * flag, then the driver expects two more buffers to be provided to
270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * the same \c vaRenderPicture() as this buffer:
271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * - a #VAEncPackedHeaderParameterBuffer with type set to
272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   VAEncPackedHeaderType::VAEncPackedHeaderPicture ;
273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   header data.
275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * If \c pic_scaling_matrix_present_flag is set to \c 1, then a
277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * #VAIQMatrixBufferH264 buffer shall also be provided within the same
278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \c vaRenderPicture() call as this picture parameter buffer.
279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef struct _VAEncPictureParameterBufferH264 {
281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Information about the picture to be encoded.
283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * See #VAPictureH264 for further description of each field.
285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * Note that CurrPic.picture_id represents the reconstructed
286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * (decoded) picture. User provides a scratch VA surface ID here.
287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAPictureH264   CurrPic;
289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Decoded Picture Buffer (DPB).
291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * This array represents the list of reconstructed (decoded)
293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * frames used as reference. It is important to keep track of
294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * reconstructed frames so that they can be used later on as
295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * reference for P or B-frames encoding.
296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAPictureH264   ReferenceFrames[16];
298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Output encoded bitstream.
300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \ref coded_buf has type #VAEncCodedBufferType. It should be
302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * large enough to hold the compressed NAL slice and possibly SPS
303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * and PPS NAL units.
304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VABufferID      coded_buf;
306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief The picture parameter set referred to in the slice header. */
308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   pic_parameter_set_id;
309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */
310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   seq_parameter_set_id;
311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief OR'd flags describing whether the picture is the last one or not.
314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * This fields holds 0 if the picture to be encoded is not the last
316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * one in the stream or sequence. Otherwise, it is a combination of
317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM.
318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   last_picture;
320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief The picture identifier.
322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *   Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive.
323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned short  frame_num;
325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief \c pic_init_qp_minus26 + 26. */
327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   pic_init_qp;
328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Maximum reference index for reference picture list 0.
329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *   Range: 0 to 31, inclusive.
330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   num_ref_idx_l0_active_minus1;
332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Maximum reference index for reference picture list 1.
333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *  Range: 0 to 31, inclusive.
334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   num_ref_idx_l1_active_minus1;
336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Range: -12 to 12, inclusive. */
338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed char     chroma_qp_index_offset;
339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Range: -12 to 12, inclusive. */
340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed char     second_chroma_qp_index_offset;
341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    union {
343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        struct {
344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Is picture an IDR picture? */
345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int idr_pic_flag                           : 1;
346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Is picture a reference picture? */
347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int reference_pic_flag                     : 2;
348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */
349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int entropy_coding_mode_flag               : 1;
350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Is weighted prediction applied to P slices? */
351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int weighted_pred_flag                     : 1;
352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Range: 0 to 2, inclusive. */
353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int weighted_bipred_idc                    : 2;
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int constrained_intra_pred_flag            : 1;
356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int transform_8x8_mode_flag                : 1;
358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int deblocking_filter_control_present_flag : 1;
360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int redundant_pic_cnt_present_flag         : 1;
362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int pic_order_present_flag                 : 1;
364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            /** \brief Same as the H.264 bitstream syntax element. */
365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            unsigned int pic_scaling_matrix_present_flag        : 1;
366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        } bits;
367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        unsigned int value;
368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    } pic_fields;
369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} VAEncPictureParameterBufferH264;
370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \brief Slice parameter for H.264 encoding in baseline, main & high profiles.
373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * This structure holds information for \c
375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * slice_layer_without_partitioning_rbsp() as defined by the H.264
376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * specification.
377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * If packed slice headers mode is used, i.e. if the encoding
379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE
380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * flag, then the driver expects two more buffers to be provided to
381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * the same \c vaRenderPicture() as this buffer:
382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * - a #VAEncPackedHeaderParameterBuffer with type set to
383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   VAEncPackedHeaderType::VAEncPackedHeaderSlice ;
384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   header data.
386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * If per-macroblock encoder configuration is needed, \c macroblock_info
388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * references a buffer of type #VAEncMacroblockParameterBufferH264. This
389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * buffer is not passed to vaRenderPicture(). i.e. it is not destroyed
390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * by subsequent calls to vaRenderPicture() and then can be re-used
391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * without re-allocating the whole buffer.
392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef struct _VAEncSliceParameterBufferH264 {
394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Starting MB address for this slice. */
395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    macroblock_address;
396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Number of macroblocks in this slice. */
397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned int    num_macroblocks;
398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**
399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID.
400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * If per-MB encoder configuration is needed, then \ref macroblock_info
402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * references a buffer of type #VAEncMacroblockParameterBufferH264
403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id
404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * is set to \c VA_INVALID_ID and per-MB configuration is derived
405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * from this slice parameter.
406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *
407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * The \c macroblock_info buffer must hold \ref num_macroblocks
408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * elements.
409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VABufferID      macroblock_info;
411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Slice type.
412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *  Range: 0..2, 5..7, i.e. no switching slices.
413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   slice_type;
415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   pic_parameter_set_id;
417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned short  idr_pic_id;
419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name If pic_order_cnt_type == 0 */
421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief The picture order count modulo MaxPicOrderCntLsb. */
423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned short  pic_order_cnt_lsb;
424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */
425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    int             delta_pic_order_cnt_bottom;
426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */
428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief [0]: top, [1]: bottom. */
430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    int             delta_pic_order_cnt[2];
431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name If slice_type == B */
434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   direct_spatial_mv_pred_flag;
436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name If slice_type == P */
439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Specifies if
441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or
442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are
443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     * overriden by the values for this slice.
444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   num_ref_idx_active_override_flag;
446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Maximum reference index for reference picture list 0.
447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *  Range: 0 to 31, inclusive.
448f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
449f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   num_ref_idx_l0_active_minus1;
450f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Maximum reference index for reference picture list 1.
451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     *  Range: 0 to 31, inclusive.
452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)     */
453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   num_ref_idx_l1_active_minus1;
454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Reference picture list 0 (for P slices). */
455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAPictureH264   RefPicList0[32];
456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Reference picture list 1 (for B slices). */
457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    VAPictureH264   RefPicList1[32];
458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name pred_weight_table() */
461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   luma_log2_weight_denom;
464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   chroma_log2_weight_denom;
466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   luma_weight_l0_flag;
468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    luma_weight_l0[32];
470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    luma_offset_l0[32];
472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   chroma_weight_l0_flag;
474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    chroma_weight_l0[32][2];
476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
477f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    chroma_offset_l0[32][2];
478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   luma_weight_l1_flag;
480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    luma_weight_l1[32];
482f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    luma_offset_l1[32];
484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   chroma_weight_l1_flag;
486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    chroma_weight_l1[32][2];
488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed short    chroma_offset_l1[32][2];
490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Range: 0 to 2, inclusive. */
493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   cabac_init_idc;
494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed char     slice_qp_delta;
496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** @name If deblocking_filter_control_present_flag */
497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@{*/
498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Range: 0 to 2, inclusive. */
499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    unsigned char   disable_deblocking_filter_idc;
500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed char     slice_alpha_c0_offset_div2;
502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /** \brief Same as the H.264 bitstream syntax element. */
503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    signed char     slice_beta_offset_div2;
504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    /**@}*/
505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} VAEncSliceParameterBufferH264;
506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @name Macroblock neighbour availability bits
509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * \anchor api_enc_h264_mb_pred_avail_bits
511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Definitions for macroblock neighbour availability bits used in
512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * intra prediction mode (non MBAFF only).
513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @{
515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** \brief References macroblock in the top-left corner. */
517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define VA_MB_PRED_AVAIL_TOP_LEFT         (1 << 2)
518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** \brief References macroblock above the current macroblock. */
519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define VA_MB_PRED_AVAIL_TOP              (1 << 4)
520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** \brief References macroblock in the top-right corner. */
521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define VA_MB_PRED_AVAIL_TOP_RIGHT        (1 << 3)
522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** \brief References macroblock on the left of the current macroblock. */
523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define VA_MB_PRED_AVAIL_LEFT             (1 << 6)
524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**@}*/
525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef __cplusplus
527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif /* VA_ENC_H264_H */
531