| OLD | NEW |
| 1 /* Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
| 3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
| 4 */ | 4 */ |
| 5 #ifndef PPAPI_C_DEV_PP_VIDEO_DEV_H_ | 5 #ifndef PPAPI_C_DEV_PP_VIDEO_DEV_H_ |
| 6 #define PPAPI_C_DEV_PP_VIDEO_DEV_H_ | 6 #define PPAPI_C_DEV_PP_VIDEO_DEV_H_ |
| 7 | 7 |
| 8 #include "ppapi/c/dev/ppb_opengles_dev.h" | 8 #include "ppapi/c/dev/ppb_opengles_dev.h" |
| 9 #include "ppapi/c/pp_bool.h" | 9 #include "ppapi/c/pp_bool.h" |
| 10 #include "ppapi/c/pp_instance.h" | 10 #include "ppapi/c/pp_instance.h" |
| 11 #include "ppapi/c/pp_macros.h" | 11 #include "ppapi/c/pp_macros.h" |
| 12 #include "ppapi/c/pp_resource.h" | 12 #include "ppapi/c/pp_resource.h" |
| 13 #include "ppapi/c/pp_size.h" | 13 #include "ppapi/c/pp_size.h" |
| 14 #include "ppapi/c/pp_stdint.h" | 14 #include "ppapi/c/pp_stdint.h" |
| 15 | 15 |
| 16 // Enumeration defining global dictionary ranges for various purposes that are | 16 // Video decoder configuration. |
| 17 // used to handle the configurations of the video decoder. | 17 struct PP_VideoDecoderConfig_Dev { |
| 18 // | 18 // Format of the video data, as a FourCC code. |
| 19 // IMPORTANT! Dictionary keys and corresponding values MUST match the ones found | 19 enum Format { |
| 20 // in VideoDecodeAccelerator interface in Chromium media stack | 20 // VP8 = 0x00385056, // 'VP8\0', not yet supported. |
| 21 // (media/video/video_decode_accelerator.h)! | 21 H264 = 0x31637661 // 'avc1' |
| 22 enum PP_VideoAttributeDictionary { | 22 } format; |
| 23 PP_VIDEOATTR_DICTIONARY_TERMINATOR = 0, | |
| 24 | 23 |
| 25 PP_VIDEOATTR_DICTIONARY_BITSTREAM_FORMAT_BASE = 0x100, | 24 // h.264 profile; ignored if |format| above is not H264. |
| 26 // Array of key/value pairs describing video configuration. | 25 enum H264Profile { |
| 27 // It could include any keys from PP_VideoKey. Its last element shall be | 26 H264PROFILE_NONE = 0, |
| 28 // PP_VIDEOATTR_BITSTREAMFORMATKEY_NONE with no corresponding value. | 27 H264PROFILE_BASELINE = 1, |
| 29 // An example: | 28 H264PROFILE_MAIN = 1 << 2, |
| 30 // { | 29 H264PROFILE_EXTENDED = 1 << 3, |
| 31 // PP_VIDEOATTR_BITSTREAMFORMATKEY_FOURCC, PP_VIDEODECODECID_VP8, | 30 H264PROFILE_HIGH = 1 << 4, |
| 32 // PP_VIDEOATTR_BITSTREAMFORMATKEY_VP8_PROFILE, (PP_VP8PROFILE_1 | | 31 H264PROFILE_HIGH10PROFILE = 1 << 5, |
| 33 // PP_VP8PROFILE_2 | | 32 H264PROFILE_HIGH422PROFILE = 1 << 6, |
| 34 // PP_VP8PROFILE_3), | 33 H264PROFILE_HIGH444PREDICTIVEPROFILE = 1 << 7, |
| 35 // PP_VIDEOATTR_DICTIONARY_TERMINATOR | 34 H264PROFILE_SCALABLEBASELINE = 1 << 8, |
| 36 // }; | 35 H264PROFILE_SCALABLEHIGH = 1 << 9, |
| 37 // Keys for defining video bitstream format. | 36 H264PROFILE_STEREOHIGH = 1 << 10, |
| 38 // Value is type of PP_VideoCodecFourcc. Commonly known attributes values are | 37 H264PROFILE_MULTIVIEWHIGH = 1 << 11 |
| 39 // defined in PP_VideoCodecFourcc enumeration. | 38 } h264_profile; |
| 40 PP_VIDEOATTR_BITSTREAMFORMATKEY_FOURCC, | |
| 41 // Bitrate in bits/s. Attribute value is 32-bit unsigned integer. | |
| 42 PP_VIDEOATTR_BITSTREAMFORMATKEY_BITRATE, | |
| 43 // Width and height of the input video bitstream, if known by the application. | |
| 44 // Decoder will expect the bitstream to match these values and does memory | |
| 45 // considerations accordingly. | |
| 46 PP_VIDEOATTR_BITSTREAMFORMATKEY_WIDTH, | |
| 47 PP_VIDEOATTR_BITSTREAMFORMATKEY_HEIGHT, | |
| 48 // Following attributes are applicable only in case of VP8. | |
| 49 // Key for VP8 profile attribute. Attribute value is bitmask of flags defined | |
| 50 // in PP_VP8Profile_Dev enumeration. | |
| 51 PP_VIDEOATTR_BITSTREAMFORMATKEY_VP8_PROFILE, | |
| 52 // Number of partitions per picture. Attribute value is unsigned 32-bit | |
| 53 // integer. | |
| 54 PP_VIDEOATTR_BITSTREAMFORMATKEY_VP8_NUM_OF_PARTITIONS, | |
| 55 // Following attributes are applicable only in case of H.264. | |
| 56 // Value is bitmask collection from the flags defined in PP_H264Profile. | |
| 57 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_PROFILE, | |
| 58 // Value is type of PP_H264Level. | |
| 59 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_LEVEL, | |
| 60 // Value is type of PP_H264PayloadFormat_Dev. | |
| 61 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_PAYLOADFORMAT, | |
| 62 // Subset for H.264 features, attribute value 0 signifies unsupported. | |
| 63 // This is needed in case decoder has partial support for certain profile. | |
| 64 // Default for features are enabled if they're part of supported profile. | |
| 65 // H264 tool called Flexible Macroblock Ordering. | |
| 66 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_FEATURE_FMO, | |
| 67 // H264 tool called Arbitrary Slice Ordering. | |
| 68 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_FEATURE_ASO, | |
| 69 // H264 tool called Interlacing. | |
| 70 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_FEATURE_INTERLACE, | |
| 71 // H264 tool called Context-Adaptive Binary Arithmetic Coding. | |
| 72 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_FEATURE_CABAC, | |
| 73 // H264 tool called Weighted Prediction. | |
| 74 PP_VIDEOATTR_BITSTREAMFORMATKEY_H264_FEATURE_WEIGHTEDPREDICTION, | |
| 75 | |
| 76 PP_VIDEOATTR_DICTIONARY_COLOR_FORMAT_BASE = 0x1000, | |
| 77 // This specifies the output color format for a decoded frame. Value is one | |
| 78 // of the values in PP_ColorFormat_Dev enumeration. | |
| 79 PP_VIDEOATTR_PICTUREFORMATKEY_COLORFORMAT | |
| 80 }; | 39 }; |
| 81 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoAttributeDictionary, 4); | |
| 82 typedef int32_t PP_VideoConfigElement; | |
| 83 | |
| 84 enum PP_VideoCodecFourcc { | |
| 85 PP_VIDEOCODECFOURCC_NONE = 0, | |
| 86 PP_VIDEOCODECFOURCC_VP8 = 0x00385056, // a.k.a. Fourcc 'VP8\0'. | |
| 87 PP_VIDEOCODECFOURCC_H264 = 0x31637661 // a.k.a. Fourcc 'avc1'. | |
| 88 }; | |
| 89 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoCodecFourcc, 4); | |
| 90 | |
| 91 // VP8 specific information to be carried over the APIs. | |
| 92 // Enumeration for flags defining supported VP8 profiles. | |
| 93 enum PP_VP8Profile_Dev { | |
| 94 PP_VP8PROFILE_NONE = 0, | |
| 95 PP_VP8PROFILE_0 = 1, | |
| 96 PP_VP8PROFILE_1 = 1 << 1, | |
| 97 PP_VP8PROFILE_2 = 1 << 2, | |
| 98 PP_VP8PROFILE_3 = 1 << 3 | |
| 99 }; | |
| 100 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VP8Profile_Dev, 4); | |
| 101 | |
| 102 // H.264 specific information to be carried over the APIs. | |
| 103 // Enumeration for flags defining supported H.264 profiles. | |
| 104 enum PP_H264Profile_Dev { | |
| 105 PP_H264PROFILE_NONE = 0, | |
| 106 PP_H264PROFILE_BASELINE = 1, | |
| 107 PP_H264PROFILE_MAIN = 1 << 2, | |
| 108 PP_H264PROFILE_EXTENDED = 1 << 3, | |
| 109 PP_H264PROFILE_HIGH = 1 << 4, | |
| 110 PP_H264PROFILE_HIGH10PROFILE = 1 << 5, | |
| 111 PP_H264PROFILE_HIGH422PROFILE = 1 << 6, | |
| 112 PP_H264PROFILE_HIGH444PREDICTIVEPROFILE = 1 << 7, | |
| 113 PP_H264PROFILE_SCALABLEBASELINE = 1 << 8, | |
| 114 PP_H264PROFILE_SCALABLEHIGH = 1 << 9, | |
| 115 PP_H264PROFILE_STEREOHIGH = 1 << 10, | |
| 116 PP_H264PROFILE_MULTIVIEWHIGH = 1 << 11 | |
| 117 }; | |
| 118 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_H264Profile_Dev, 4); | |
| 119 | |
| 120 // Enumeration for defining H.264 level of decoder implementation. | |
| 121 enum PP_H264Level_Dev { | |
| 122 PP_H264LEVEL_NONE = 0, | |
| 123 PP_H264LEVEL_10 = 1, | |
| 124 PP_H264LEVEL_1B = PP_H264LEVEL_10 | 1 << 1, | |
| 125 PP_H264LEVEL_11 = PP_H264LEVEL_1B | 1 << 2, | |
| 126 PP_H264LEVEL_12 = PP_H264LEVEL_11 | 1 << 3, | |
| 127 PP_H264LEVEL_13 = PP_H264LEVEL_12 | 1 << 4, | |
| 128 PP_H264LEVEL_20 = PP_H264LEVEL_13 | 1 << 5, | |
| 129 PP_H264LEVEL_21 = PP_H264LEVEL_20 | 1 << 6, | |
| 130 PP_H264LEVEL_22 = PP_H264LEVEL_21 | 1 << 7, | |
| 131 PP_H264LEVEL_30 = PP_H264LEVEL_22 | 1 << 8, | |
| 132 PP_H264LEVEL_31 = PP_H264LEVEL_30 | 1 << 9, | |
| 133 PP_H264LEVEL_32 = PP_H264LEVEL_31 | 1 << 10, | |
| 134 PP_H264LEVEL_40 = PP_H264LEVEL_32 | 1 << 11, | |
| 135 PP_H264LEVEL_41 = PP_H264LEVEL_40 | 1 << 12, | |
| 136 PP_H264LEVEL_42 = PP_H264LEVEL_41 | 1 << 13, | |
| 137 PP_H264LEVEL_50 = PP_H264LEVEL_42 | 1 << 14, | |
| 138 PP_H264LEVEL_51 = PP_H264LEVEL_50 | 1 << 15 | |
| 139 }; | |
| 140 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_H264Level_Dev, 4); | |
| 141 | |
| 142 // Enumeration to describe which payload format is used within the exchanged | |
| 143 // bitstream buffers. | |
| 144 enum PP_H264PayloadFormat_Dev { | |
| 145 PP_H264PAYLOADFORMAT_NONE = 0, | |
| 146 // NALUs separated by Start Code. | |
| 147 PP_H264PAYLOADFORMAT_BYTESTREAM = 1, | |
| 148 // Exactly one raw NALU per buffer. | |
| 149 PP_H264PAYLOADFORMAT_ONE_NALU_PER_BUFFER = 1 << 1, | |
| 150 // NALU separated by 1-byte interleaved length field. | |
| 151 PP_H264PAYLOADFORMAT_ONE_BYTE_INTERLEAVED_LENGTH = 1 << 2, | |
| 152 // NALU separated by 2-byte interleaved length field. | |
| 153 PP_H264PAYLOADFORMAT_TWO_BYTE_INTERLEAVED_LENGTH = 1 << 3, | |
| 154 // NALU separated by 4-byte interleaved length field. | |
| 155 PP_H264PAYLOADFORMAT_FOUR_BYTE_INTERLEAVED_LENGTH = 1 << 4 | |
| 156 }; | |
| 157 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_H264PayloadFormat_Dev, 4); | |
| 158 | |
| 159 // Enumeration for various color formats. | |
| 160 enum PP_ColorFormat_Dev { | |
| 161 // Value represents 32-bit RGBA format where each component is 8-bit in order | |
| 162 // R-G-B-A. Regardless of endianness of the architecture color components are | |
| 163 // stored in this order in the memory. | |
| 164 PP_VIDEOATTR_COLORFORMAT_RGBA = 0 | |
| 165 }; | |
| 166 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_ColorFormat_Dev, 4); | |
| 167 | 40 |
| 168 // The data structure for video bitstream buffer. | 41 // The data structure for video bitstream buffer. |
| 169 struct PP_VideoBitstreamBuffer_Dev { | 42 struct PP_VideoBitstreamBuffer_Dev { |
| 170 // Client-specified identifier for the bitstream buffer. | 43 // Client-specified identifier for the bitstream buffer. |
| 171 int32_t id; | 44 int32_t id; |
| 172 | 45 |
| 173 // Buffer to hold the bitstream data. Should be allocated using the PPB_Buffer | 46 // Buffer to hold the bitstream data. Should be allocated using the PPB_Buffer |
| 174 // interface for consistent interprocess behaviour. | 47 // interface for consistent interprocess behaviour. |
| 175 PP_Resource data; | 48 PP_Resource data; |
| 176 | 49 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 // Encoded input is unreadable. | 85 // Encoded input is unreadable. |
| 213 PP_VIDEODECODERERROR_UNREADABLE_INPUT, | 86 PP_VIDEODECODERERROR_UNREADABLE_INPUT, |
| 214 // A failure occurred at the browser layer or lower. Examples of such | 87 // A failure occurred at the browser layer or lower. Examples of such |
| 215 // failures include GPU hardware failures, GPU driver failures, GPU library | 88 // failures include GPU hardware failures, GPU driver failures, GPU library |
| 216 // failures, browser programming errors, and so on. | 89 // failures, browser programming errors, and so on. |
| 217 PP_VIDEODECODERERROR_PLATFORM_FAILURE | 90 PP_VIDEODECODERERROR_PLATFORM_FAILURE |
| 218 }; | 91 }; |
| 219 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoDecodeError_Dev, 4); | 92 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoDecodeError_Dev, 4); |
| 220 | 93 |
| 221 #endif /* PPAPI_C_DEV_PP_VIDEO_DEV_H_ */ | 94 #endif /* PPAPI_C_DEV_PP_VIDEO_DEV_H_ */ |
| OLD | NEW |