From b38d7298bdc31e000c3d533d99c0cae1ef57d1c2 Mon Sep 17 00:00:00 2001 From: Gwenole Beauchesne Date: Sun, 22 Mar 2009 01:32:27 +0000 Subject: Add common VA API data structures and helpers. Originally committed as revision 18136 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/vaapi.h | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 libavcodec/vaapi.h (limited to 'libavcodec/vaapi.h') diff --git a/libavcodec/vaapi.h b/libavcodec/vaapi.h new file mode 100644 index 0000000000..d62066281e --- /dev/null +++ b/libavcodec/vaapi.h @@ -0,0 +1,232 @@ +/* + * Video Acceleration API (shared data between FFmpeg and the video player) + * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 + * + * Copyright (C) 2008-2009 Splitted-Desktop Systems + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_VAAPI_H +#define AVCODEC_VAAPI_H + +#include + +/** + * \defgroup VAAPI_Decoding VA API Decoding + * \ingroup Decoder + * @{ + */ + +/** + * This structure is used to share data between the FFmpeg library and + * the client video application. + * This shall be zero-allocated and available as + * AVCodecContext.hwaccel_context. All user members can be set once + * during initialization or through each AVCodecContext.get_buffer() + * function call. In any case, they must be valid prior to calling + * decoding functions. + */ +struct vaapi_context { + /** + * Window system dependent data + * + * - encoding: unused + * - decoding: Set by user + */ + void *display; + + /** + * Configuration ID + * + * - encoding: unused + * - decoding: Set by user + */ + uint32_t config_id; + + /** + * Context ID (video decode pipeline) + * + * - encoding: unused + * - decoding: Set by user + */ + uint32_t context_id; + + /** + * VAPictureParameterBuffer ID + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + VABufferID pic_param_buf_id; + + /** + * VAIQMatrixBuffer ID + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + VABufferID iq_matrix_buf_id; + + /** + * VABitPlaneBuffer ID (for VC-1 decoding) + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + VABufferID bitplane_buf_id; + + /** + * Slice parameter/data buffer IDs + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + VABufferID *slice_buf_ids; + + /** + * Number of effective slice buffer IDs to send to the HW + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int n_slice_buf_ids; + + /** + * Size of pre-allocated slice_buf_ids + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int slice_buf_ids_alloc; + + /** + * Picture parameter buffer + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + union { + VAPictureParameterBufferMPEG2 mpeg2; + VAPictureParameterBufferMPEG4 mpeg4; + VAPictureParameterBufferH264 h264; + VAPictureParameterBufferVC1 vc1; + } pic_param; + + /** + * Size of a VAPictureParameterBuffer element + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int pic_param_size; + + /** + * Inverse quantization matrix buffer + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + union { + VAIQMatrixBufferMPEG2 mpeg2; + VAIQMatrixBufferMPEG4 mpeg4; + VAIQMatrixBufferH264 h264; + } iq_matrix; + + /** + * Size of a VAIQMatrixBuffer element + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int iq_matrix_size; + + /** + * Flag: is quantization matrix present? + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + uint8_t iq_matrix_present; + + /** + * VC-1 bitplane buffer + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + uint8_t *bitplane_buffer; + + /** + * Size of VC-1 bitplane buffer + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int bitplane_buffer_size; + + /** + * Pointer to VASliceParameterBuffers + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + void *slice_params; + + /** + * Size of a VASliceParameterBuffer element + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int slice_param_size; + + /** + * Size of pre-allocated slice_params + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int slice_params_alloc; + + /** + * Number of slices currently filled in + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + unsigned int slice_count; + + /** + * Pointer to slice data buffer base + * - encoding: unused + * - decoding: Set by libavcodec + */ + const uint8_t *slice_data; + + /** + * Current size of slice data + * + * - encoding: unused + * - decoding: Set by libavcodec + */ + uint32_t slice_data_size; +}; + +/* @} */ + +#endif /* AVCODEC_VAAPI_H */ -- cgit v1.2.3