mpeg2: fix decoding of high profile streams.
[vaapi:hkaelbers-gstreamer-vaapi.git] / gst-libs / gst / vaapi / gstvaapiprofile.h
1 /*
2  *  gstvaapiprofile.h - VA profile abstraction
3  *
4  *  Copyright (C) 2010-2011 Splitted-Desktop Systems
5  *
6  *  This library is free software; you can redistribute it and/or
7  *  modify it under the terms of the GNU Lesser General Public License
8  *  as published by the Free Software Foundation; either version 2.1
9  *  of the License, or (at your option) any later version.
10  *
11  *  This library 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 GNU
14  *  Lesser General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Lesser General Public
17  *  License along with this library; if not, write to the Free
18  *  Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  *  Boston, MA 02110-1301 USA
20  */
21
22 #ifndef GST_VAAPI_PROFILE_H
23 #define GST_VAAPI_PROFILE_H
24
25 #include <gst/gstvalue.h>
26
27 G_BEGIN_DECLS
28
29 typedef enum _GstVaapiCodec                     GstVaapiCodec;
30 typedef enum _GstVaapiProfile                   GstVaapiProfile;
31 typedef enum _GstVaapiEntrypoint                GstVaapiEntrypoint;
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  *
43  * The set of all codecs for #GstVaapiCodec.
44  */
45 enum _GstVaapiCodec {
46     GST_VAAPI_CODEC_MPEG1       = GST_MAKE_FOURCC('M','P','1',0),
47     GST_VAAPI_CODEC_MPEG2       = GST_MAKE_FOURCC('M','P','2',0),
48     GST_VAAPI_CODEC_MPEG4       = GST_MAKE_FOURCC('M','P','4',0),
49     GST_VAAPI_CODEC_H263        = GST_MAKE_FOURCC('2','6','3',0),
50     GST_VAAPI_CODEC_H264        = GST_MAKE_FOURCC('2','6','4',0),
51     GST_VAAPI_CODEC_WMV3        = GST_MAKE_FOURCC('W','M','V',0),
52     GST_VAAPI_CODEC_VC1         = GST_MAKE_FOURCC('V','C','1',0),
53 };
54
55 /**
56  * GST_VAAPI_MAKE_PROFILE:
57  * @codec: the #GstVaapiCodec without the GST_VAAPI_CODEC_ prefix
58  * @sub_id: a non-zero sub-codec id
59  *
60  * Macro that evaluates to the profile composed from @codec and
61  * @sub_id.
62  */
63 #define GST_VAAPI_MAKE_PROFILE(codec, sub_id) \
64     (GST_VAAPI_CODEC_##codec | GST_MAKE_FOURCC(0,0,0,sub_id))
65
66 /**
67  * GstVaapiProfile:
68  * @GST_VAAPI_PROFILE_UNKNOWN:
69  *   Unknown profile, used for initializers
70  * @GST_VAAPI_PROFILE_MPEG1:
71  *   MPEG-1
72  * @GST_VAAPI_PROFILE_MPEG2_SIMPLE:
73  *   MPEG-2 simple profile
74  * @GST_VAAPI_PROFILE_MPEG2_MAIN:
75  *   MPEG-2 main profile
76  * @GST_VAAPI_PROFILE_MPEG2_HIGH:
77  *   MPEG-2 high profile
78  * @GST_VAAPI_PROFILE_MPEG4_SIMPLE:
79  *   MPEG-4 Part-2 simple profile
80  * @GST_VAAPI_PROFILE_MPEG4_ADVANCED_SIMPLE:
81  *   MPEG-4 Part-2 advanced simple profile
82  * @GST_VAAPI_PROFILE_MPEG4_MAIN:
83  *   MPEG-4 Part-2 main profile
84  * @GST_VAAPI_PROFILE_H263_BASELINE:
85  *   H.263 baseline profile
86  * @GST_VAAPI_PROFILE_H264_BASELINE:
87  *   H.264 (MPEG-4 Part-10) baseline profile
88  * @GST_VAAPI_PROFILE_H264_MAIN:
89  *   H.264 (MPEG-4 Part-10) main profile
90  * @GST_VAAPI_PROFILE_H264_HIGH:
91  *   H.264 (MPEG-4 Part-10) high profile
92  * @GST_VAAPI_PROFILE_VC1_SIMPLE:
93  *   VC-1 simple profile
94  * @GST_VAAPI_PROFILE_VC1_MAIN:
95  *   VC-1 main profile
96  * @GST_VAAPI_PROFILE_VC1_ADVANCED:
97  *   VC-1 advanced profile
98  *
99  * The set of all profiles for #GstVaapiProfile.
100  */
101 enum _GstVaapiProfile {
102     GST_VAAPI_PROFILE_UNKNOWN               = 0,
103     GST_VAAPI_PROFILE_MPEG1                 = GST_VAAPI_MAKE_PROFILE(MPEG1,1),
104     GST_VAAPI_PROFILE_MPEG2_SIMPLE          = GST_VAAPI_MAKE_PROFILE(MPEG2,1),
105     GST_VAAPI_PROFILE_MPEG2_MAIN            = GST_VAAPI_MAKE_PROFILE(MPEG2,2),
106     GST_VAAPI_PROFILE_MPEG2_HIGH            = GST_VAAPI_MAKE_PROFILE(MPEG2,3),
107     GST_VAAPI_PROFILE_MPEG4_SIMPLE          = GST_VAAPI_MAKE_PROFILE(MPEG4,1),
108     GST_VAAPI_PROFILE_MPEG4_ADVANCED_SIMPLE = GST_VAAPI_MAKE_PROFILE(MPEG4,2),
109     GST_VAAPI_PROFILE_MPEG4_MAIN            = GST_VAAPI_MAKE_PROFILE(MPEG4,3),
110     GST_VAAPI_PROFILE_H263_BASELINE         = GST_VAAPI_MAKE_PROFILE(H263,1),
111     GST_VAAPI_PROFILE_H264_BASELINE         = GST_VAAPI_MAKE_PROFILE(H264,1),
112     GST_VAAPI_PROFILE_H264_MAIN             = GST_VAAPI_MAKE_PROFILE(H264,2),
113     GST_VAAPI_PROFILE_H264_HIGH             = GST_VAAPI_MAKE_PROFILE(H264,3),
114     GST_VAAPI_PROFILE_VC1_SIMPLE            = GST_VAAPI_MAKE_PROFILE(VC1,1),
115     GST_VAAPI_PROFILE_VC1_MAIN              = GST_VAAPI_MAKE_PROFILE(VC1,2),
116     GST_VAAPI_PROFILE_VC1_ADVANCED          = GST_VAAPI_MAKE_PROFILE(VC1,3),
117 };
118
119 /**
120  * GstVaapiEntrypoint:
121  * @GST_VAAPI_ENTRYPOINT_VLD: Variable Length Decoding
122  * @GST_VAAPI_ENTRYPOINT_IDCT: Inverse Decrete Cosine Transform
123  * @GST_VAAPI_ENTRYPOINT_MOCO: Motion Compensation
124  * @GST_VAAPI_ENTRYPOINT_SLICE_ENCODE: Encode Slice
125  *
126  * The set of all entrypoints for #GstVaapiEntrypoint
127  */
128 enum _GstVaapiEntrypoint {
129     GST_VAAPI_ENTRYPOINT_VLD = 1,
130     GST_VAAPI_ENTRYPOINT_IDCT,
131     GST_VAAPI_ENTRYPOINT_MOCO,
132     GST_VAAPI_ENTRYPOINT_SLICE_ENCODE
133 };
134
135 GstVaapiProfile
136 gst_vaapi_profile(VAProfile profile);
137
138 GstVaapiProfile
139 gst_vaapi_profile_from_caps(GstCaps *caps);
140
141 VAProfile
142 gst_vaapi_profile_get_va_profile(GstVaapiProfile profile);
143
144 GstCaps *
145 gst_vaapi_profile_get_caps(GstVaapiProfile profile);
146
147 GstVaapiCodec
148 gst_vaapi_profile_get_codec(GstVaapiProfile profile);
149
150 GstVaapiEntrypoint
151 gst_vaapi_entrypoint(VAEntrypoint entrypoint);
152
153 VAEntrypoint
154 gst_vaapi_entrypoint_get_va_entrypoint(GstVaapiEntrypoint entrypoint);
155
156 G_END_DECLS
157
158 #endif /* GST_GST_VAAPI_IMAGE_H */