Merge remote-tracking branch 'gst-libav/tizen_gst_1.19.2' into tizen_gst_1.19.2_mono
[platform/upstream/gstreamer.git] / subprojects / gstreamer-vaapi / gst-libs / gst / vaapi / gstvaapiprofile.h
1 /*
2  *  gstvaapiprofile.h - VA profile abstraction
3  *
4  *  Copyright (C) 2010-2011 Splitted-Desktop Systems
5  *    Author: Gwenole Beauchesne <gwenole.beauchesne@splitted-desktop.com>
6  *  Copyright (C) 2012-2013 Intel Corporation
7  *    Author: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
8  *
9  *  This library is free software; you can redistribute it and/or
10  *  modify it under the terms of the GNU Lesser General Public License
11  *  as published by the Free Software Foundation; either version 2.1
12  *  of the License, or (at your option) any later version.
13  *
14  *  This library 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 this library; if not, write to the Free
21  *  Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22  *  Boston, MA 02110-1301 USA
23  */
24
25 #ifndef GST_VAAPI_PROFILE_H
26 #define GST_VAAPI_PROFILE_H
27
28 #include <va/va.h>
29 #include <gst/gstvalue.h>
30
31 G_BEGIN_DECLS
32
33 /**
34  * GstVaapiCodec:
35  * @GST_VAAPI_CODEC_MPEG1: MPEG-1 (ISO/IEC 11172)
36  * @GST_VAAPI_CODEC_MPEG2: MPEG-2 (ISO/IEC 13818-2)
37  * @GST_VAAPI_CODEC_MPEG4: MPEG-4 Part 2 (ISO/IEC 14496-2)
38  * @GST_VAAPI_CODEC_H263: H.263
39  * @GST_VAAPI_CODEC_H264: H.264 aka MPEG-4 Part 10 (ISO/IEC 14496-10)
40  * @GST_VAAPI_CODEC_WMV3: Windows Media Video 9. VC-1 Simple or Main profile (SMPTE 421M)
41  * @GST_VAAPI_CODEC_VC1: VC-1 Advanced profile (SMPTE 421M)
42  * @GST_VAAPI_CODEC_JPEG: JPEG (ITU-T 81)
43  * @GST_VAAPI_CODEC_H265: H.265 aka MPEG-H Part 2 (ITU-T H.265)
44  * @GST_VAAPI_CODEC_VP9: VP9 (libvpx)
45  * @GST_VAAPI_CODEC_AV1: AV1 (aom)
46  *
47  * The set of all codecs for #GstVaapiCodec.
48  */
49 typedef enum {
50     GST_VAAPI_CODEC_MPEG1       = GST_MAKE_FOURCC('M','P','1',0),
51     GST_VAAPI_CODEC_MPEG2       = GST_MAKE_FOURCC('M','P','2',0),
52     GST_VAAPI_CODEC_MPEG4       = GST_MAKE_FOURCC('M','P','4',0),
53     GST_VAAPI_CODEC_H263        = GST_MAKE_FOURCC('2','6','3',0),
54     GST_VAAPI_CODEC_H264        = GST_MAKE_FOURCC('2','6','4',0),
55     GST_VAAPI_CODEC_WMV3        = GST_MAKE_FOURCC('W','M','V',0),
56     GST_VAAPI_CODEC_VC1         = GST_MAKE_FOURCC('V','C','1',0),
57     GST_VAAPI_CODEC_JPEG        = GST_MAKE_FOURCC('J','P','G',0),
58     GST_VAAPI_CODEC_VP8         = GST_MAKE_FOURCC('V','P','8',0),
59     GST_VAAPI_CODEC_H265        = GST_MAKE_FOURCC('2','6','5',0),
60     GST_VAAPI_CODEC_VP9         = GST_MAKE_FOURCC('V','P','9',0),
61     GST_VAAPI_CODEC_AV1         = GST_MAKE_FOURCC('A','V','1',0),
62 } GstVaapiCodec;
63
64 /**
65  * GST_VAAPI_MAKE_PROFILE:
66  * @codec: the #GstVaapiCodec without the GST_VAAPI_CODEC_ prefix
67  * @sub_id: a non-zero sub-codec id
68  *
69  * Macro that evaluates to the profile composed from @codec and
70  * @sub_id.
71  */
72 #define GST_VAAPI_MAKE_PROFILE(codec, sub_id) \
73     (GST_VAAPI_CODEC_##codec | GST_MAKE_FOURCC(0,0,0,sub_id))
74
75 /**
76  * GstVaapiProfile:
77  * @GST_VAAPI_PROFILE_UNKNOWN:
78  *   Unknown profile, used for initializers
79  * @GST_VAAPI_PROFILE_MPEG1:
80  *   MPEG-1
81  * @GST_VAAPI_PROFILE_MPEG2_SIMPLE:
82  *   MPEG-2 simple profile
83  * @GST_VAAPI_PROFILE_MPEG2_MAIN:
84  *   MPEG-2 main profile
85  * @GST_VAAPI_PROFILE_MPEG2_HIGH:
86  *   MPEG-2 high profile
87  * @GST_VAAPI_PROFILE_MPEG4_SIMPLE:
88  *   MPEG-4 Part-2 simple profile
89  * @GST_VAAPI_PROFILE_MPEG4_ADVANCED_SIMPLE:
90  *   MPEG-4 Part-2 advanced simple profile
91  * @GST_VAAPI_PROFILE_MPEG4_MAIN:
92  *   MPEG-4 Part-2 main profile
93  * @GST_VAAPI_PROFILE_H263_BASELINE:
94  *   H.263 baseline profile
95  * @GST_VAAPI_PROFILE_H264_BASELINE:
96  *   H.264 (MPEG-4 Part-10) baseline profile [A.2.1]
97  * @GST_VAAPI_PROFILE_H264_CONSTRAINED_BASELINE:
98  *   H.264 (MPEG-4 Part-10) constrained baseline profile [A.2.1.1]
99  * @GST_VAAPI_PROFILE_H264_MAIN:
100  *   H.264 (MPEG-4 Part-10) main profile [A.2.2]
101  * @GST_VAAPI_PROFILE_H264_EXTENDED:
102  *   H.264 (MPEG-4 Part 10) extended profile [A.2.3]
103  * @GST_VAAPI_PROFILE_H264_HIGH:
104  *   H.264 (MPEG-4 Part-10) high profile [A.2.4]
105  * @GST_VAAPI_PROFILE_H264_HIGH10:
106  *   H.264 (MPEG-4 Part-10) high 10 profile [A.2.5], or high 10 intra
107  *   profile [A.2.8], depending on constraint_set3_flag
108  * @GST_VAAPI_PROFILE_H264_HIGH_422:
109  *   H.264 (MPEG-4 Part-10) high 4:2:2 profile [A.2.6], or high 4:2:2
110  *   intra profile [A.2.9], depending on constraint_set3_flag
111  * @GST_VAAPI_PROFILE_H264_HIGH_444:
112  *   H.264 (MPEG-4 Part-10) high 4:4:4 predictive profile [A.2.7], or
113  *   high 4:4:4 intra profile [A.2.10], depending on constraint_set3_flag
114  * @GST_VAAPI_PROFILE_H264_SCALABLE_BASELINE:
115  *   H.264 (MPEG-4 Part-10) scalable baseline profile [G.10.1.1]
116  * @GST_VAAPI_PROFILE_H264_SCALABLE_HIGH:
117  *   H.264 (MPEG-4 Part-10) scalable high profile [G.10.1.2], or scalable
118  *   high intra profile [G.10.1.3], depending on constraint_set3_flag
119  * @GST_VAAPI_PROFILE_H264_MULTIVIEW_HIGH:
120  *   H.264 (MPEG-4 Part-10) multiview high profile [H.10.1.1]
121  * @GST_VAAPI_PROFILE_H264_STEREO_HIGH:
122  *   H.264 (MPEG-4 Part-10) stereo high profile [H.10.1.2]
123  * @GST_VAAPI_PROFILE_VC1_SIMPLE:
124  *   VC-1 simple profile
125  * @GST_VAAPI_PROFILE_VC1_MAIN:
126  *   VC-1 main profile
127  * @GST_VAAPI_PROFILE_VC1_ADVANCED:
128  *   VC-1 advanced profile
129  * @GST_VAAPI_PROFILE_JPEG_BASELINE:
130  *   JPEG baseline profile
131  * @GST_VAAPI_PROFILE_H265_MAIN:
132  *   H.265 main profile [A.3.2]
133  * @GST_VAAPI_PROFILE_H265_MAIN10:
134  *   H.265 main 10 profile [A.3.3]
135  * @GST_VAAPI_PROFILE_H265_MAIN_STILL_PICTURE:
136  *   H.265 main still picture profile [A.3.4]
137  * @GST_VAAPI_PROFILE_H265_MAIN_422_10:
138  *   H.265 main still picture profile [A.3.5]
139  * @GST_VAAPI_PROFILE_VP9_0:
140  *   VP9 prfile 0, bitdepth=8, 420
141  * @GST_VAAPI_PROFILE_VP9_1:
142  *   VP9 prfile 1, bitdepth=8, 422/444/440/RGB
143  * @GST_VAAPI_PROFILE_VP9_2:
144  *   VP9 prfile 2, bitdepth=10/12, 420
145  * @GST_VAAPI_PROFILE_VP9_3:
146  *   VP9 prfile 3 bitdepth=10/12, 422/444/440/RGB
147  * @GST_VAAPI_PROFILE_AV1_0:
148  *   AV1 prfile 0, bitdepth=8/10, 420/400
149  * @GST_VAAPI_PROFILE_AV1_1:
150  *   AV1 prfile 1 bitdepth=8/10, 444
151  *
152  * The set of all profiles for #GstVaapiProfile.
153  */
154 typedef enum {
155     GST_VAAPI_PROFILE_UNKNOWN               = 0,
156     GST_VAAPI_PROFILE_MPEG1                 = GST_VAAPI_MAKE_PROFILE(MPEG1,1),
157     GST_VAAPI_PROFILE_MPEG2_SIMPLE          = GST_VAAPI_MAKE_PROFILE(MPEG2,1),
158     GST_VAAPI_PROFILE_MPEG2_MAIN            = GST_VAAPI_MAKE_PROFILE(MPEG2,2),
159     GST_VAAPI_PROFILE_MPEG2_HIGH            = GST_VAAPI_MAKE_PROFILE(MPEG2,3),
160     GST_VAAPI_PROFILE_MPEG4_SIMPLE          = GST_VAAPI_MAKE_PROFILE(MPEG4,1),
161     GST_VAAPI_PROFILE_MPEG4_ADVANCED_SIMPLE = GST_VAAPI_MAKE_PROFILE(MPEG4,2),
162     GST_VAAPI_PROFILE_MPEG4_MAIN            = GST_VAAPI_MAKE_PROFILE(MPEG4,3),
163     GST_VAAPI_PROFILE_H263_BASELINE         = GST_VAAPI_MAKE_PROFILE(H263,1),
164     GST_VAAPI_PROFILE_H264_BASELINE         = GST_VAAPI_MAKE_PROFILE(H264,1),
165     GST_VAAPI_PROFILE_H264_CONSTRAINED_BASELINE =
166                                               GST_VAAPI_MAKE_PROFILE(H264,9),
167     GST_VAAPI_PROFILE_H264_MAIN             = GST_VAAPI_MAKE_PROFILE(H264,2),
168     GST_VAAPI_PROFILE_H264_EXTENDED         = GST_VAAPI_MAKE_PROFILE(H264,10),
169     GST_VAAPI_PROFILE_H264_HIGH             = GST_VAAPI_MAKE_PROFILE(H264,3),
170     GST_VAAPI_PROFILE_H264_HIGH10           = GST_VAAPI_MAKE_PROFILE(H264,7),
171     GST_VAAPI_PROFILE_H264_HIGH_422         = GST_VAAPI_MAKE_PROFILE(H264,4),
172     GST_VAAPI_PROFILE_H264_HIGH_444         = GST_VAAPI_MAKE_PROFILE(H264,8),
173     GST_VAAPI_PROFILE_H264_SCALABLE_BASELINE =
174                                               GST_VAAPI_MAKE_PROFILE(H264,5),
175     GST_VAAPI_PROFILE_H264_SCALABLE_HIGH    = GST_VAAPI_MAKE_PROFILE(H264,6),
176     GST_VAAPI_PROFILE_H264_MULTIVIEW_HIGH   = GST_VAAPI_MAKE_PROFILE(H264,11),
177     GST_VAAPI_PROFILE_H264_STEREO_HIGH      = GST_VAAPI_MAKE_PROFILE(H264,15),
178     GST_VAAPI_PROFILE_VC1_SIMPLE            = GST_VAAPI_MAKE_PROFILE(VC1,1),
179     GST_VAAPI_PROFILE_VC1_MAIN              = GST_VAAPI_MAKE_PROFILE(VC1,2),
180     GST_VAAPI_PROFILE_VC1_ADVANCED          = GST_VAAPI_MAKE_PROFILE(VC1,3),
181     GST_VAAPI_PROFILE_JPEG_BASELINE         = GST_VAAPI_MAKE_PROFILE(JPEG,1),
182     GST_VAAPI_PROFILE_VP8                   = GST_VAAPI_MAKE_PROFILE(VP8,1),
183     GST_VAAPI_PROFILE_H265_MAIN             = GST_VAAPI_MAKE_PROFILE(H265,1),
184     GST_VAAPI_PROFILE_H265_MAIN10           = GST_VAAPI_MAKE_PROFILE(H265,2),
185     GST_VAAPI_PROFILE_H265_MAIN_STILL_PICTURE =
186                                                GST_VAAPI_MAKE_PROFILE(H265,3),
187     GST_VAAPI_PROFILE_H265_MAIN_422_10        = GST_VAAPI_MAKE_PROFILE(H265,4),
188     GST_VAAPI_PROFILE_H265_MAIN_444           = GST_VAAPI_MAKE_PROFILE(H265,5),
189     GST_VAAPI_PROFILE_H265_MAIN_444_10        = GST_VAAPI_MAKE_PROFILE(H265,6),
190     GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN =
191                                                 GST_VAAPI_MAKE_PROFILE(H265,7),
192     GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN_10 =
193                                                 GST_VAAPI_MAKE_PROFILE(H265,8),
194     GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN_444 =
195                                                 GST_VAAPI_MAKE_PROFILE(H265,9),
196     GST_VAAPI_PROFILE_H265_SCREEN_EXTENDED_MAIN_444_10 =
197                                                 GST_VAAPI_MAKE_PROFILE(H265,10),
198     GST_VAAPI_PROFILE_H265_MAIN12             = GST_VAAPI_MAKE_PROFILE(H265,11),
199     GST_VAAPI_PROFILE_H265_MAIN_444_12        = GST_VAAPI_MAKE_PROFILE(H265,12),
200     GST_VAAPI_PROFILE_H265_MAIN_422_12        = GST_VAAPI_MAKE_PROFILE(H265,13),
201     GST_VAAPI_PROFILE_VP9_0                   = GST_VAAPI_MAKE_PROFILE(VP9,1),
202     GST_VAAPI_PROFILE_VP9_1                   = GST_VAAPI_MAKE_PROFILE(VP9,2),
203     GST_VAAPI_PROFILE_VP9_2                   = GST_VAAPI_MAKE_PROFILE(VP9,3),
204     GST_VAAPI_PROFILE_VP9_3                   = GST_VAAPI_MAKE_PROFILE(VP9,4),
205
206     GST_VAAPI_PROFILE_AV1_0                   = GST_VAAPI_MAKE_PROFILE(AV1,1),
207     GST_VAAPI_PROFILE_AV1_1                   = GST_VAAPI_MAKE_PROFILE(AV1,2),
208 } GstVaapiProfile;
209
210 /**
211  * GstVaapiEntrypoint:
212  * @GST_VAAPI_ENTRYPOINT_INVALID: Invalid entrypoint
213  * @GST_VAAPI_ENTRYPOINT_VLD: Variable Length Decoding
214  * @GST_VAAPI_ENTRYPOINT_IDCT: Inverse Decrete Cosine Transform
215  * @GST_VAAPI_ENTRYPOINT_MOCO: Motion Compensation
216  * @GST_VAAPI_ENTRYPOINT_SLICE_ENCODE: Encode Slice
217  * @GST_VAAPI_ENTRYPOINT_PICTURE_ENCODE: Encode Picture
218  * @GST_VAAPI_ENTRYPOINT_SLICE_ENCODE_LP: Encode Slice low power/
219  *                                        high performace varient
220  *
221  * The set of all entrypoints for #GstVaapiEntrypoint
222  */
223 typedef enum {
224     GST_VAAPI_ENTRYPOINT_INVALID,
225     GST_VAAPI_ENTRYPOINT_VLD,
226     GST_VAAPI_ENTRYPOINT_IDCT,
227     GST_VAAPI_ENTRYPOINT_MOCO,
228     GST_VAAPI_ENTRYPOINT_SLICE_ENCODE,
229     GST_VAAPI_ENTRYPOINT_PICTURE_ENCODE,
230     GST_VAAPI_ENTRYPOINT_SLICE_ENCODE_LP,
231 } GstVaapiEntrypoint;
232
233 const gchar *
234 gst_vaapi_codec_get_name(GstVaapiCodec codec);
235
236 GstVaapiProfile
237 gst_vaapi_profile(VAProfile profile);
238
239 GstVaapiProfile
240 gst_vaapi_profile_from_caps(const GstCaps *caps);
241
242 GstVaapiCodec
243 gst_vaapi_get_codec_from_caps (const GstCaps *caps);
244
245 const gchar *
246 gst_vaapi_profile_get_name(GstVaapiProfile profile);
247
248 const gchar *
249 gst_vaapi_profile_get_va_name(GstVaapiProfile profile);
250
251 const gchar *
252 gst_vaapi_profile_get_media_type_name(GstVaapiProfile profile);
253
254 VAProfile
255 gst_vaapi_profile_get_va_profile(GstVaapiProfile profile);
256
257 GstCaps *
258 gst_vaapi_profile_get_caps(GstVaapiProfile profile);
259
260 GstVaapiCodec
261 gst_vaapi_profile_get_codec(GstVaapiProfile profile);
262
263 GstVaapiEntrypoint
264 gst_vaapi_entrypoint(VAEntrypoint entrypoint);
265
266 VAEntrypoint
267 gst_vaapi_entrypoint_get_va_entrypoint(GstVaapiEntrypoint entrypoint);
268
269 G_END_DECLS
270
271 #endif /* GST_GST_VAAPI_IMAGE_H */