Add VA entrypoint abstraction.
[vaapi:gstreamer-vaapi.git] / gst-libs / gst / vaapi / gstvaapiprofile.h
1 /*
2  *  gstvaapiprofile.h - VA profile abstraction
3  *
4  *  gstreamer-vaapi (C) 2010 Splitted-Desktop Systems
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19  */
20
21 #ifndef GST_VAAPI_PROFILE_H
22 #define GST_VAAPI_PROFILE_H
23
24 #include <gst/gstvalue.h>
25
26 G_BEGIN_DECLS
27
28 typedef enum _GstVaapiCodec                     GstVaapiCodec;
29 typedef enum _GstVaapiProfile                   GstVaapiProfile;
30 typedef enum _GstVaapiEntrypoint                GstVaapiEntrypoint;
31
32 /**
33  * GstVaapiCodec:
34  * @GST_VAAPI_CODEC_MPEG1: MPEG-1 (ISO/IEC 11172)
35  * @GST_VAAPI_CODEC_MPEG2: MPEG-2 (ISO/IEC 13818-2)
36  * @GST_VAAPI_CODEC_MPEG4: MPEG-4 Part 2 (ISO/IEC 14496-2)
37  * @GST_VAAPI_CODEC_H263: H.263
38  * @GST_VAAPI_CODEC_H264: H.264 aka MPEG-4 Part 10 (ISO/IEC 14496-10)
39  * @GST_VAAPI_CODEC_VC1: VC-1 (SMPTE 421M)
40  *
41  * The set of all codecs for #GstVaapiCodec.
42  */
43 enum _GstVaapiCodec {
44     GST_VAAPI_CODEC_MPEG1       = GST_MAKE_FOURCC('M','P','1',0),
45     GST_VAAPI_CODEC_MPEG2       = GST_MAKE_FOURCC('M','P','2',0),
46     GST_VAAPI_CODEC_MPEG4       = GST_MAKE_FOURCC('M','P','4',0),
47     GST_VAAPI_CODEC_H263        = GST_MAKE_FOURCC('2','6','3',0),
48     GST_VAAPI_CODEC_H264        = GST_MAKE_FOURCC('2','6','4',0),
49     GST_VAAPI_CODEC_VC1         = GST_MAKE_FOURCC('V','C','1',0),
50 };
51
52 /**
53  * GstVaapiProfile:
54  * @GST_VAAPI_PROFILE_MPEG1:
55  *   MPEG-1
56  * @GST_VAAPI_PROFILE_MPEG2_SIMPLE:
57  *   MPEG-2 simple profile
58  * @GST_VAAPI_PROFILE_MPEG2_MAIN:
59  *   MPEG-2 main profile
60  * @GST_VAAPI_PROFILE_MPEG4_SIMPLE:
61  *   MPEG-4 Part-2 simple profile
62  * @GST_VAAPI_PROFILE_MPEG4_ADVANCED_SIMPLE:
63  *   MPEG-4 Part-2 advanced simple profile
64  * @GST_VAAPI_PROFILE_MPEG4_MAIN:
65  *   MPEG-4 Part-2 main profile
66  * @GST_VAAPI_PROFILE_H263_BASELINE:
67  *   H.263 baseline profile
68  * @GST_VAAPI_PROFILE_H264_BASELINE:
69  *   H.264 (MPEG-4 Part-10) baseline profile
70  * @GST_VAAPI_PROFILE_H264_MAIN:
71  *   H.264 (MPEG-4 Part-10) main profile
72  * @GST_VAAPI_PROFILE_H264_HIGH:
73  *   H.264 (MPEG-4 Part-10) high profile
74  * @GST_VAAPI_PROFILE_VC1_SIMPLE:
75  *   VC-1 simple profile
76  * @GST_VAAPI_PROFILE_VC1_MAIN:
77  *   VC-1 main profile (WMV3)
78  * @GST_VAAPI_PROFILE_VC1_ADVANCED:
79  *   VC-1 advanced profile
80  *
81  * The set of all profiles for #GstVaapiProfile.
82  */
83 enum _GstVaapiProfile {
84     GST_VAAPI_PROFILE_MPEG1                     = GST_VAAPI_CODEC_MPEG1|1,
85     GST_VAAPI_PROFILE_MPEG2_SIMPLE              = GST_VAAPI_CODEC_MPEG2|1,
86     GST_VAAPI_PROFILE_MPEG2_MAIN                = GST_VAAPI_CODEC_MPEG2|2,
87     GST_VAAPI_PROFILE_MPEG4_SIMPLE              = GST_VAAPI_CODEC_MPEG4|1,
88     GST_VAAPI_PROFILE_MPEG4_ADVANCED_SIMPLE     = GST_VAAPI_CODEC_MPEG4|2,
89     GST_VAAPI_PROFILE_MPEG4_MAIN                = GST_VAAPI_CODEC_MPEG4|3,
90     GST_VAAPI_PROFILE_H263_BASELINE             = GST_VAAPI_CODEC_H263|1,
91     GST_VAAPI_PROFILE_H264_BASELINE             = GST_VAAPI_CODEC_H264|1,
92     GST_VAAPI_PROFILE_H264_MAIN                 = GST_VAAPI_CODEC_H264|2,
93     GST_VAAPI_PROFILE_H264_HIGH                 = GST_VAAPI_CODEC_H264|3,
94     GST_VAAPI_PROFILE_VC1_SIMPLE                = GST_VAAPI_CODEC_VC1|1,
95     GST_VAAPI_PROFILE_VC1_MAIN                  = GST_VAAPI_CODEC_VC1|2,
96     GST_VAAPI_PROFILE_VC1_ADVANCED              = GST_VAAPI_CODEC_VC1|3,
97 };
98
99 /**
100  * GstVaapiEntrypoint:
101  * @GST_VAAPI_ENTRYPOINT_VLD: Variable Length Decoding
102  * @GST_VAAPI_ENTRYPOINT_IDCT: Inverse Decrete Cosine Transform
103  * @GST_VAAPI_ENTRYPOINT_MOCO: Motion Compensation
104  *
105  * The set of all entrypoints for #GstVaapiEntrypoint
106  */
107 enum _GstVaapiEntrypoint {
108     GST_VAAPI_ENTRYPOINT_VLD = 1,
109     GST_VAAPI_ENTRYPOINT_IDCT,
110     GST_VAAPI_ENTRYPOINT_MOCO
111 };
112
113 GstVaapiProfile
114 gst_vaapi_profile(VAProfile profile);
115
116 GstVaapiProfile
117 gst_vaapi_profile_from_caps(GstCaps *caps);
118
119 VAProfile
120 gst_vaapi_profile_get_va_profile(GstVaapiProfile profile);
121
122 GstCaps *
123 gst_vaapi_profile_get_caps(GstVaapiProfile profile);
124
125 GstVaapiCodec
126 gst_vaapi_profile_get_codec(GstVaapiProfile profile);
127
128 GstVaapiEntrypoint
129 gst_vaapi_entrypoint(VAEntrypoint entrypoint);
130
131 VAEntrypoint
132 gst_vaapi_entrypoint_get_va_entrypoint(GstVaapiEntrypoint entrypoint);
133
134 G_END_DECLS
135
136 #endif /* GST_GST_VAAPI_IMAGE_H */