1/*
2 * Video Acceleration API (shared data between FFmpeg and the video player)
3 * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1
4 *
5 * Copyright (C) 2008-2009 Splitted-Desktop Systems
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24#ifndef AVCODEC_VAAPI_H
25#define AVCODEC_VAAPI_H
26
27#include <stdint.h>
28
29/**
30 * \defgroup VAAPI_Decoding VA API Decoding
31 * \ingroup Decoder
32 * @{
33 */
34
35/**
36 * This structure is used to share data between the FFmpeg library and
37 * the client video application.
38 * This shall be zero-allocated and available as
39 * AVCodecContext.hwaccel_context. All user members can be set once
40 * during initialization or through each AVCodecContext.get_buffer()
41 * function call. In any case, they must be valid prior to calling
42 * decoding functions.
43 */
44struct vaapi_context {
45    /**
46     * Window system dependent data
47     *
48     * - encoding: unused
49     * - decoding: Set by user
50     */
51    void *display;
52
53    /**
54     * Configuration ID
55     *
56     * - encoding: unused
57     * - decoding: Set by user
58     */
59    uint32_t config_id;
60
61    /**
62     * Context ID (video decode pipeline)
63     *
64     * - encoding: unused
65     * - decoding: Set by user
66     */
67    uint32_t context_id;
68
69    /**
70     * VAPictureParameterBuffer ID
71     *
72     * - encoding: unused
73     * - decoding: Set by libavcodec
74     */
75    uint32_t pic_param_buf_id;
76
77    /**
78     * VAIQMatrixBuffer ID
79     *
80     * - encoding: unused
81     * - decoding: Set by libavcodec
82     */
83    uint32_t iq_matrix_buf_id;
84
85    /**
86     * VABitPlaneBuffer ID (for VC-1 decoding)
87     *
88     * - encoding: unused
89     * - decoding: Set by libavcodec
90     */
91    uint32_t bitplane_buf_id;
92
93    /**
94     * Slice parameter/data buffer IDs
95     *
96     * - encoding: unused
97     * - decoding: Set by libavcodec
98     */
99    uint32_t *slice_buf_ids;
100
101    /**
102     * Number of effective slice buffer IDs to send to the HW
103     *
104     * - encoding: unused
105     * - decoding: Set by libavcodec
106     */
107    unsigned int n_slice_buf_ids;
108
109    /**
110     * Size of pre-allocated slice_buf_ids
111     *
112     * - encoding: unused
113     * - decoding: Set by libavcodec
114     */
115    unsigned int slice_buf_ids_alloc;
116
117    /**
118     * Pointer to VASliceParameterBuffers
119     *
120     * - encoding: unused
121     * - decoding: Set by libavcodec
122     */
123    void *slice_params;
124
125    /**
126     * Size of a VASliceParameterBuffer element
127     *
128     * - encoding: unused
129     * - decoding: Set by libavcodec
130     */
131    unsigned int slice_param_size;
132
133    /**
134     * Size of pre-allocated slice_params
135     *
136     * - encoding: unused
137     * - decoding: Set by libavcodec
138     */
139    unsigned int slice_params_alloc;
140
141    /**
142     * Number of slices currently filled in
143     *
144     * - encoding: unused
145     * - decoding: Set by libavcodec
146     */
147    unsigned int slice_count;
148
149    /**
150     * Pointer to slice data buffer base
151     * - encoding: unused
152     * - decoding: Set by libavcodec
153     */
154    const uint8_t *slice_data;
155
156    /**
157     * Current size of slice data
158     *
159     * - encoding: unused
160     * - decoding: Set by libavcodec
161     */
162    uint32_t slice_data_size;
163};
164
165/* @} */
166
167#endif /* AVCODEC_VAAPI_H */
168