1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 */ 5 6 /* From dev/pp_video_dev.idl modified Tue Apr 30 14:58:38 2013. */ 7 8 #ifndef PPAPI_C_DEV_PP_VIDEO_DEV_H_ 9 #define PPAPI_C_DEV_PP_VIDEO_DEV_H_ 10 11 #include "ppapi/c/pp_macros.h" 12 #include "ppapi/c/pp_resource.h" 13 #include "ppapi/c/pp_size.h" 14 #include "ppapi/c/pp_stdint.h" 15 16 /** 17 * @file 18 * NOTE: these must be kept in sync with the versions in media/! 19 */ 20 21 22 /** 23 * @addtogroup Enums 24 * @{ 25 */ 26 /** 27 * Video format. 28 * 29 * Keep the values in this enum unique, as they imply format (h.264 vs. VP8, 30 * for example), and keep the values for a particular format grouped together 31 * for clarity. 32 * Note: Keep these in sync with media::VideoCodecProfile. 33 */ 34 typedef enum { 35 PP_VIDEODECODER_PROFILE_UNKNOWN = -1, 36 PP_VIDEODECODER_H264PROFILE_NONE = 0, 37 PP_VIDEODECODER_H264PROFILE_BASELINE = 1, 38 PP_VIDEODECODER_H264PROFILE_MAIN = 2, 39 PP_VIDEODECODER_H264PROFILE_EXTENDED = 3, 40 PP_VIDEODECODER_H264PROFILE_HIGH = 4, 41 PP_VIDEODECODER_H264PROFILE_HIGH10PROFILE = 5, 42 PP_VIDEODECODER_H264PROFILE_HIGH422PROFILE = 6, 43 PP_VIDEODECODER_H264PROFILE_HIGH444PREDICTIVEPROFILE = 7, 44 PP_VIDEODECODER_H264PROFILE_SCALABLEBASELINE = 8, 45 PP_VIDEODECODER_H264PROFILE_SCALABLEHIGH = 9, 46 PP_VIDEODECODER_H264PROFILE_STEREOHIGH = 10, 47 PP_VIDEODECODER_H264PROFILE_MULTIVIEWHIGH = 11, 48 PP_VIDEODECODER_VP8PROFILE_ANY = 12 49 } PP_VideoDecoder_Profile; 50 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VideoDecoder_Profile, 4); 51 /** 52 * @} 53 */ 54 55 /** 56 * @addtogroup Structs 57 * @{ 58 */ 59 /** 60 * The data structure for video bitstream buffer. 61 */ 62 struct PP_VideoBitstreamBuffer_Dev { 63 /** 64 * Client-specified identifier for the bitstream buffer. Valid values are 65 * non-negative. 66 */ 67 int32_t id; 68 /** 69 * Buffer to hold the bitstream data. Should be allocated using the 70 * PPB_Buffer interface for consistent interprocess behaviour. 71 */ 72 PP_Resource data; 73 /** 74 * Size of the bitstream contained in buffer (in bytes). 75 */ 76 uint32_t size; 77 }; 78 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoBitstreamBuffer_Dev, 12); 79 80 /** 81 * Struct for specifying texture-backed picture data. 82 */ 83 struct PP_PictureBuffer_Dev { 84 /** 85 * Client-specified id for the picture buffer. By using this value client can 86 * keep track of the buffers it has assigned to the video decoder and how they 87 * are passed back to it. Valid values are non-negative. 88 */ 89 int32_t id; 90 /** 91 * Dimensions of the buffer. 92 */ 93 struct PP_Size size; 94 /** 95 * Texture ID in the given context where picture is stored. 96 */ 97 uint32_t texture_id; 98 }; 99 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_PictureBuffer_Dev, 16); 100 101 /** 102 * Structure to describe a decoded output frame. 103 */ 104 struct PP_Picture_Dev { 105 /** 106 * ID of the picture buffer where the picture is stored. 107 */ 108 int32_t picture_buffer_id; 109 /** 110 * ID of the bitstream from which this data was decoded. 111 */ 112 int32_t bitstream_buffer_id; 113 }; 114 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Picture_Dev, 8); 115 /** 116 * @} 117 */ 118 119 /** 120 * @addtogroup Enums 121 * @{ 122 */ 123 /** 124 * Decoder error codes reported to the plugin. A reasonable naive 125 * error handling policy is for the plugin to Destroy() the decoder on error. 126 */ 127 typedef enum { 128 /** 129 * An operation was attempted during an incompatible decoder state. 130 */ 131 PP_VIDEODECODERERROR_ILLEGAL_STATE = 1, 132 /** 133 * Invalid argument was passed to an API method. 134 */ 135 PP_VIDEODECODERERROR_INVALID_ARGUMENT = 2, 136 /** 137 * Encoded input is unreadable. 138 */ 139 PP_VIDEODECODERERROR_UNREADABLE_INPUT = 3, 140 /** 141 * A failure occurred at the browser layer or lower. Examples of such 142 * failures include GPU hardware failures, GPU driver failures, GPU library 143 * failures, browser programming errors, and so on. 144 */ 145 PP_VIDEODECODERERROR_PLATFORM_FAILURE = 4 146 } PP_VideoDecodeError_Dev; 147 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VideoDecodeError_Dev, 4); 148 /** 149 * @} 150 */ 151 152 #endif /* PPAPI_C_DEV_PP_VIDEO_DEV_H_ */ 153 154