• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**************************************************************************
2  *
3  * Copyright 2009 Younes Manton.
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the
8  * "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sub license, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * The above copyright notice and this permission notice (including the
15  * next paragraph) shall be included in all copies or substantial portions
16  * of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25  *
26  **************************************************************************/
27 
28 #ifndef PIPE_VIDEO_ENUMS_H
29 #define PIPE_VIDEO_ENUMS_H
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 enum pipe_video_format
36 {
37    PIPE_VIDEO_FORMAT_UNKNOWN = 0,
38    PIPE_VIDEO_FORMAT_MPEG12,   /**< MPEG1, MPEG2 */
39    PIPE_VIDEO_FORMAT_MPEG4,    /**< DIVX, XVID */
40    PIPE_VIDEO_FORMAT_VC1,      /**< WMV */
41    PIPE_VIDEO_FORMAT_MPEG4_AVC,/**< H.264 */
42    PIPE_VIDEO_FORMAT_HEVC,     /**< H.265 */
43    PIPE_VIDEO_FORMAT_JPEG,     /**< JPEG */
44    PIPE_VIDEO_FORMAT_VP9,      /**< VP9 */
45    PIPE_VIDEO_FORMAT_AV1       /**< AV1 */
46 };
47 
48 enum pipe_video_profile
49 {
50    PIPE_VIDEO_PROFILE_UNKNOWN,
51    PIPE_VIDEO_PROFILE_MPEG1,
52    PIPE_VIDEO_PROFILE_MPEG2_SIMPLE,
53    PIPE_VIDEO_PROFILE_MPEG2_MAIN,
54    PIPE_VIDEO_PROFILE_MPEG4_SIMPLE,
55    PIPE_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE,
56    PIPE_VIDEO_PROFILE_VC1_SIMPLE,
57    PIPE_VIDEO_PROFILE_VC1_MAIN,
58    PIPE_VIDEO_PROFILE_VC1_ADVANCED,
59    PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE,
60    PIPE_VIDEO_PROFILE_MPEG4_AVC_CONSTRAINED_BASELINE,
61    PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN,
62    PIPE_VIDEO_PROFILE_MPEG4_AVC_EXTENDED,
63    PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH,
64    PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH10,
65    PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH422,
66    PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH444,
67    PIPE_VIDEO_PROFILE_HEVC_MAIN,
68    PIPE_VIDEO_PROFILE_HEVC_MAIN_10,
69    PIPE_VIDEO_PROFILE_HEVC_MAIN_STILL,
70    PIPE_VIDEO_PROFILE_HEVC_MAIN_12,
71    PIPE_VIDEO_PROFILE_HEVC_MAIN_444,
72    PIPE_VIDEO_PROFILE_JPEG_BASELINE,
73    PIPE_VIDEO_PROFILE_VP9_PROFILE0,
74    PIPE_VIDEO_PROFILE_VP9_PROFILE2,
75    PIPE_VIDEO_PROFILE_AV1_MAIN,
76    PIPE_VIDEO_PROFILE_MAX
77 };
78 
79 /* Video caps, can be different for each codec/profile */
80 enum pipe_video_cap
81 {
82    PIPE_VIDEO_CAP_SUPPORTED = 0,
83    PIPE_VIDEO_CAP_NPOT_TEXTURES = 1,
84    PIPE_VIDEO_CAP_MAX_WIDTH = 2,
85    PIPE_VIDEO_CAP_MAX_HEIGHT = 3,
86    PIPE_VIDEO_CAP_PREFERED_FORMAT = 4,
87    PIPE_VIDEO_CAP_PREFERS_INTERLACED = 5,
88    PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE = 6,
89    PIPE_VIDEO_CAP_SUPPORTS_INTERLACED = 7,
90    PIPE_VIDEO_CAP_MAX_LEVEL = 8,
91    PIPE_VIDEO_CAP_STACKED_FRAMES = 9,
92    PIPE_VIDEO_CAP_MAX_MACROBLOCKS = 10,
93    PIPE_VIDEO_CAP_MAX_TEMPORAL_LAYERS = 11,
94    PIPE_VIDEO_CAP_EFC_SUPPORTED = 12,
95    PIPE_VIDEO_CAP_ENC_MAX_SLICES_PER_FRAME = 13,
96    PIPE_VIDEO_CAP_ENC_SLICES_STRUCTURE = 14,
97    PIPE_VIDEO_CAP_ENC_MAX_REFERENCES_PER_FRAME = 15,
98    PIPE_VIDEO_CAP_VPP_ORIENTATION_MODES = 16,
99    PIPE_VIDEO_CAP_VPP_BLEND_MODES = 17,
100    PIPE_VIDEO_CAP_VPP_MAX_INPUT_WIDTH = 18,
101    PIPE_VIDEO_CAP_VPP_MAX_INPUT_HEIGHT = 19,
102    PIPE_VIDEO_CAP_VPP_MIN_INPUT_WIDTH = 20,
103    PIPE_VIDEO_CAP_VPP_MIN_INPUT_HEIGHT = 21,
104    PIPE_VIDEO_CAP_VPP_MAX_OUTPUT_WIDTH = 22,
105    PIPE_VIDEO_CAP_VPP_MAX_OUTPUT_HEIGHT = 23,
106    PIPE_VIDEO_CAP_VPP_MIN_OUTPUT_WIDTH = 24,
107    PIPE_VIDEO_CAP_VPP_MIN_OUTPUT_HEIGHT = 25,
108    /* If true, when mapping planar textures like NV12 or P016 the mapped buffer contains
109    all the planes contiguously. This allows for use with some frontends functions that
110    require this like vaDeriveImage */
111    PIPE_VIDEO_SUPPORTS_CONTIGUOUS_PLANES_MAP = 27,
112 };
113 
114 /* To be used with PIPE_VIDEO_CAP_VPP_ORIENTATION_MODES and for VPP state*/
115 enum pipe_video_vpp_orientation
116 {
117    PIPE_VIDEO_VPP_ORIENTATION_DEFAULT = 0x0,
118    PIPE_VIDEO_VPP_ROTATION_90 = 0x01,
119    PIPE_VIDEO_VPP_ROTATION_180 = 0x02,
120    PIPE_VIDEO_VPP_ROTATION_270 = 0x04,
121    PIPE_VIDEO_VPP_FLIP_HORIZONTAL = 0x08,
122    PIPE_VIDEO_VPP_FLIP_VERTICAL = 0x10,
123 };
124 
125 /* To be used with PIPE_VIDEO_CAP_VPP_BLEND_MODES and for VPP state*/
126 enum pipe_video_vpp_blend_mode
127 {
128    PIPE_VIDEO_VPP_BLEND_MODE_NONE = 0x0,
129    PIPE_VIDEO_VPP_BLEND_MODE_GLOBAL_ALPHA = 0x1,
130 };
131 
132 
133 /* To be used with cap PIPE_VIDEO_CAP_ENC_SLICES_STRUCTURE*/
134 /**
135  * pipe_video_cap_slice_structure
136  *
137  * This attribute determines slice structures supported by the
138  * driver for encoding. This attribute is a hint to the user so
139  * that he can choose a suitable surface size and how to arrange
140  * the encoding process of multiple slices per frame.
141  *
142  * More specifically, for H.264 encoding, this attribute
143  * determines the range of accepted values to
144  * h264_slice_descriptor::macroblock_address and
145  * h264_slice_descriptor::num_macroblocks.
146  */
147 enum pipe_video_cap_slice_structure
148 {
149    /* Driver does not supports multiple slice per frame.*/
150    PIPE_VIDEO_CAP_SLICE_STRUCTURE_NONE = 0x00000000,
151    /* Driver supports a power-of-two number of rows per slice.*/
152    PIPE_VIDEO_CAP_SLICE_STRUCTURE_POWER_OF_TWO_ROWS = 0x00000001,
153    /* Driver supports an arbitrary number of macroblocks per slice.*/
154    PIPE_VIDEO_CAP_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS = 0x00000002,
155    /* Driver support 1 row per slice*/
156    PIPE_VIDEO_CAP_SLICE_STRUCTURE_EQUAL_ROWS = 0x00000004,
157    /* Driver support max encoded slice size per slice */
158    PIPE_VIDEO_CAP_SLICE_STRUCTURE_MAX_SLICE_SIZE = 0x00000008,
159    /* Driver supports an arbitrary number of rows per slice. */
160    PIPE_VIDEO_CAP_SLICE_STRUCTURE_ARBITRARY_ROWS = 0x00000010,
161    /* Driver supports any number of rows per slice but they must be the same
162    *  for all slices except for the last one, which must be equal or smaller
163    *  to the previous slices. */
164    PIPE_VIDEO_CAP_SLICE_STRUCTURE_EQUAL_MULTI_ROWS = 0x00000020,
165 };
166 
167 
168 enum pipe_video_entrypoint
169 {
170    PIPE_VIDEO_ENTRYPOINT_UNKNOWN,
171    PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
172    PIPE_VIDEO_ENTRYPOINT_IDCT,
173    PIPE_VIDEO_ENTRYPOINT_MC,
174    PIPE_VIDEO_ENTRYPOINT_ENCODE,
175    PIPE_VIDEO_ENTRYPOINT_PROCESSING,
176 };
177 
178 #if defined(__cplusplus)
179 }
180 #endif
181 
182 #endif /* PIPE_VIDEO_ENUMS_H */
183