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