Index: third_party/libva/va/va_enc_mpeg2.h |
diff --git a/third_party/libva/va/va_enc_mpeg2.h b/third_party/libva/va/va_enc_mpeg2.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c12c8defc45c6910d93a934d20801ccbe8664818 |
--- /dev/null |
+++ b/third_party/libva/va/va_enc_mpeg2.h |
@@ -0,0 +1,287 @@ |
+/* |
+ * Copyright (c) 2012 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_mpeg2.h |
+ * \brief The MPEG-2 encoding API |
+ * |
+ * This file contains the \ref api_enc_mpeg2 "MPEG-2 encoding API". |
+ */ |
+ |
+#ifndef _VA_ENC_MPEG2_H_ |
+#define _VA_ENC_MPEG2_H_ |
+ |
+#ifdef __cplusplus |
+extern "C" { |
+#endif |
+ |
+/** |
+ * \defgroup api_enc_mpeg2 MPEG-2 encoding API |
+ * |
+ * @{ |
+ */ |
+ |
+/** |
+ * \brief MPEG-2 Quantization Matrix Buffer |
+ * |
+ */ |
+typedef VAIQMatrixBufferMPEG2 VAQMatrixBufferMPEG2; |
+ |
+/** |
+ * \brief Packed header types specific to MPEG-2 encoding. |
+ * |
+ * Types of packed headers generally used for MPEG-2 encoding. |
+ */ |
+typedef enum { |
+ /** |
+ * \brief Packed Sequence Parameter Set (SPS). |
+ * |
+ */ |
+ VAEncPackedHeaderMPEG2_SPS = VAEncPackedHeaderSequence, |
+ /** |
+ * \brief Packed Picture Parameter Set (PPS). |
+ * |
+ */ |
+ VAEncPackedHeaderMPEG2_PPS = VAEncPackedHeaderPicture, |
+ /** |
+ * \brief Packed slice header. |
+ * |
+ */ |
+ VAEncPackedHeaderMPEG2_Slice = VAEncPackedHeaderSlice, |
+} VAEncPackedHeaderTypeMPEG2; |
+ |
+/** |
+ * \brief Sequence parameter for MPEG-2 encoding |
+ * |
+ * This structure holds information for \c sequence_header() and |
+ * sequence_extension(). |
+ * |
+ * If packed sequence headers mode is used, i.e. if the encoding |
+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE |
+ * flag, then the driver expects two more buffers to be provided to |
+ * the same \c vaRenderPicture() as this buffer: |
+ * - a #VAEncPackedHeaderParameterBuffer with type set to |
+ * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; |
+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed |
+ * header data. |
+ * |
+ */ |
+typedef struct _VAEncSequenceParameterBufferMPEG2 { |
+ /** \brief Period between I frames. */ |
+ unsigned int intra_period; |
+ /** \brief Period between I/P frames. */ |
+ unsigned int ip_period; |
+ /** \brief Picture width. |
+ * |
+ * A 14bits unsigned inter, the lower 12bits |
+ * is horizontal_size_value, and the upper |
+ * 2bits is \c horizontal_size_extension |
+ * |
+ */ |
+ unsigned short picture_width; |
+ /** \brief Picture height. |
+ * |
+ * A 14bits unsigned inter, the lower 12bits |
+ * is vertical_size_value, and the upper 2bits is |
+ * vertical_size_size_extension |
+ * |
+ */ |
+ unsigned short picture_height; |
+ /** |
+ * \brief Initial bitrate set for this sequence in CBR or VBR modes. |
+ * |
+ * This field represents the initial bitrate value for this |
+ * sequence if CBR or VBR mode is used, i.e. if the encoder |
+ * pipeline was created with a #VAConfigAttribRateControl |
+ * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. |
+ * |
+ * bits_per_second may be derived from bit_rate. |
+ * |
+ */ |
+ unsigned int bits_per_second; |
+ /** |
+ * \brief Frame rate |
+ * |
+ * Derived from frame_rate_value, frame_rate_extension_n and |
+ * frame_rate_extension_d |
+ * |
+ */ |
+ float frame_rate; |
+ /** \brief Same as the element in sequence_header() */ |
+ unsigned short aspect_ratio_information; |
+ /** \brief Define the size of VBV */ |
+ unsigned int vbv_buffer_size; |
+ |
+ union { |
+ struct { |
+ /** \brief Same as the element in Sequence extension() */ |
+ unsigned int profile_and_level_indication : 8; |
+ /** \brief Same as the element in Sequence extension() */ |
+ unsigned int progressive_sequence : 1; |
+ /** \brief Same as the element in Sequence extension() */ |
+ unsigned int chroma_format : 2; |
+ /** \brief Same as the element in Sequence extension() */ |
+ unsigned int low_delay : 1; |
+ /** \brief Same as the element in Sequence extension() */ |
+ unsigned int frame_rate_extension_n : 2; |
+ /** \brief Same as the element in Sequence extension() */ |
+ unsigned int frame_rate_extension_d : 5; |
+ } bits; |
+ unsigned int value; |
+ } sequence_extension; |
+ |
+ /** \brief Flag to indicate the following GOP header are being updated */ |
+ unsigned int new_gop_header; |
+ |
+ union { |
+ struct { |
+ /** \brief Time code */ |
+ unsigned int time_code : 25; |
+ /** \brief Same as the element in GOP header */ |
+ unsigned int closed_gop : 1; |
+ /** \brief SAme as the element in GOP header */ |
+ unsigned int broken_link : 1; |
+ } bits; |
+ unsigned int value; |
+ } gop_header; |
+} VAEncSequenceParameterBufferMPEG2; |
+ |
+/** |
+ * \brief Picture parameter for MPEG-2 encoding |
+ * |
+ * This structure holds information for picture_header() and |
+ * picture_coding_extension() |
+ * |
+ * If packed picture headers mode is used, i.e. if the encoding |
+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE |
+ * flag, then the driver expects two more buffers to be provided to |
+ * the same \c vaRenderPicture() as this buffer: |
+ * - a #VAEncPackedHeaderParameterBuffer with type set to |
+ * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; |
+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed |
+ * header data. |
+ * |
+ */ |
+typedef struct _VAEncPictureParameterBufferMPEG2 { |
+ /** \brief Forward reference picture */ |
+ VASurfaceID forward_reference_picture; |
+ /** \brief Backward reference picture */ |
+ VASurfaceID backward_reference_picture; |
+ /** \brief Reconstructed(decoded) picture */ |
+ VASurfaceID reconstructed_picture; |
+ /** |
+ * \brief Output encoded bitstream. |
+ * |
+ * \ref coded_buf has type #VAEncCodedBufferType. It should be |
+ * large enough to hold the compressed NAL slice and possibly SPS |
+ * and PPS NAL units. |
+ */ |
+ VABufferID coded_buf; |
+ /** |
+ * \brief Flag to indicate the picture is the last one or not. |
+ * |
+ * This fields holds 0 if the picture to be encoded is not |
+ * the last one in the stream. Otherwise, it |
+ * is \ref MPEG2_LAST_PICTURE_EOSTREAM. |
+ */ |
+ unsigned char last_picture; |
+ /** \brief Picture type */ |
+ VAEncPictureType picture_type; |
+ /** \brief Same as the element in picture_header() */ |
+ unsigned int temporal_reference; |
+ /** \brief Same as the element in picture_header() */ |
+ unsigned int vbv_delay; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned char f_code[2][2]; |
+ union { |
+ struct { |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int intra_dc_precision : 2; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int picture_structure : 2; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int top_field_first : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int frame_pred_frame_dct : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int concealment_motion_vectors : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int q_scale_type : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int intra_vlc_format : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int alternate_scan : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int repeat_first_field : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int progressive_frame : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int composite_display_flag : 1; |
+ } bits; |
+ unsigned int value; |
+ } picture_coding_extension; |
+ |
+ /* \brief Parameters for composite display |
+ * |
+ * Valid only when omposite_display_flag is 1 |
+ */ |
+ union { |
+ struct { |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int v_axis : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int field_sequence : 3; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int sub_carrier : 1; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int burst_amplitude : 7; |
+ /** \brief Same as the element in Picture coding extension */ |
+ unsigned int sub_carrier_phase : 8; |
+ } bits; |
+ unsigned int value; |
+ } composite_display; |
+} VAEncPictureParameterBufferMPEG2; |
+ |
+/** |
+ * \brief Slice parameter for MPEG-2 encoding |
+ * |
+ */ |
+typedef struct _VAEncSliceParameterBufferMPEG2 { |
+ /** \brief Starting MB address for this slice. */ |
+ unsigned int macroblock_address; |
+ /** \brief Number of macroblocks in this slice. */ |
+ unsigned int num_macroblocks; |
+ /** \brief Same as the element in slice() */ |
+ int quantiser_scale_code; |
+ /** \brief Flag to indicate intra slice */ |
+ int is_intra_slice; |
+} VAEncSliceParameterBufferMPEG2; |
+ |
+/**@}*/ |
+ |
+#ifdef __cplusplus |
+} |
+#endif |
+ |
+#endif /* _VA_ENC_MPEG2_H_ */ |