diff options
| author | manuel <manuel@mausz.at> | 2021-03-04 23:36:40 +0100 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2021-03-04 23:36:40 +0100 |
| commit | 3cb8aa05f8cee9e860cf83531682ff0ed4af6a4f (patch) | |
| tree | 921f4829b32126f80f9113c124f2e14c0ebce8d9 /xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h | |
| parent | be933ef2241d79558f91796cc5b3a161f72ebf9c (diff) | |
| download | kodi-pvr-build-3cb8aa05f8cee9e860cf83531682ff0ed4af6a4f.tar.gz kodi-pvr-build-3cb8aa05f8cee9e860cf83531682ff0ed4af6a4f.tar.bz2 kodi-pvr-build-3cb8aa05f8cee9e860cf83531682ff0ed4af6a4f.zip | |
sync with upstreamMatrix
Diffstat (limited to 'xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h')
| -rw-r--r-- | xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h new file mode 100644 index 0000000..02d8b06 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h | |||
| @@ -0,0 +1,261 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2017-2018 Team Kodi | ||
| 3 | * This file is part of Kodi - https://kodi.tv | ||
| 4 | * | ||
| 5 | * SPDX-License-Identifier: GPL-2.0-or-later | ||
| 6 | * See LICENSES/README.md for more information. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef C_API_ADDONINSTANCE_VIDEOCODEC_H | ||
| 10 | #define C_API_ADDONINSTANCE_VIDEOCODEC_H | ||
| 11 | |||
| 12 | #include "../addon_base.h" | ||
| 13 | #include "inputstream/demux_packet.h" | ||
| 14 | #include "inputstream/stream_codec.h" | ||
| 15 | #include "inputstream/stream_crypto.h" | ||
| 16 | |||
| 17 | #ifdef __cplusplus | ||
| 18 | extern "C" | ||
| 19 | { | ||
| 20 | #endif /* __cplusplus */ | ||
| 21 | |||
| 22 | //============================================================================ | ||
| 23 | /// @ingroup cpp_kodi_addon_videocodec_Defs | ||
| 24 | /// @brief Return values used by video decoder interface | ||
| 25 | enum VIDEOCODEC_RETVAL | ||
| 26 | { | ||
| 27 | /// @brief Noop | ||
| 28 | VC_NONE = 0, | ||
| 29 | |||
| 30 | /// @brief An error occured, no other messages will be returned | ||
| 31 | VC_ERROR, | ||
| 32 | |||
| 33 | /// @brief The decoder needs more data | ||
| 34 | VC_BUFFER, | ||
| 35 | |||
| 36 | /// @brief The decoder got a picture | ||
| 37 | VC_PICTURE, | ||
| 38 | |||
| 39 | /// @brief The decoder signals EOF | ||
| 40 | VC_EOF, | ||
| 41 | }; | ||
| 42 | //---------------------------------------------------------------------------- | ||
| 43 | |||
| 44 | //============================================================================ | ||
| 45 | /// @ingroup cpp_kodi_addon_videocodec_Defs_VideoCodecInitdata | ||
| 46 | /// @brief The video stream representations requested by Kodi | ||
| 47 | /// | ||
| 48 | enum VIDEOCODEC_FORMAT | ||
| 49 | { | ||
| 50 | /// @brief Unknown types, this is used to declare the end of a list of | ||
| 51 | /// requested types | ||
| 52 | VIDEOCODEC_FORMAT_UNKNOWN = 0, | ||
| 53 | |||
| 54 | /// @brief YV12 4:2:0 YCrCb planar format | ||
| 55 | VIDEOCODEC_FORMAT_YV12, | ||
| 56 | |||
| 57 | /// @brief These formats are identical to YV12 except that the U and V plane | ||
| 58 | /// order is reversed. | ||
| 59 | VIDEOCODEC_FORMAT_I420, | ||
| 60 | |||
| 61 | /// @brief The maximum value to use in a list. | ||
| 62 | VIDEOCODEC_FORMAT_MAXFORMATS | ||
| 63 | }; | ||
| 64 | //---------------------------------------------------------------------------- | ||
| 65 | |||
| 66 | //============================================================================ | ||
| 67 | /// @ingroup cpp_kodi_addon_videocodec_Defs_VideoCodecInitdata | ||
| 68 | /// @brief Video codec types that can be requested from Kodi | ||
| 69 | /// | ||
| 70 | enum VIDEOCODEC_TYPE | ||
| 71 | { | ||
| 72 | /// @brief Unknown or other type requested | ||
| 73 | /// | ||
| 74 | VIDEOCODEC_UNKNOWN = 0, | ||
| 75 | |||
| 76 | /// @brief [VP8](https://en.wikipedia.org/wiki/VP8) video coding format | ||
| 77 | /// | ||
| 78 | VIDEOCODEC_VP8, | ||
| 79 | |||
| 80 | /// @brief [Advanced Video Coding (AVC)](https://en.wikipedia.org/wiki/Advanced_Video_Coding), | ||
| 81 | /// also referred to as H.264 or [MPEG-4](https://en.wikipedia.org/wiki/MPEG-4) | ||
| 82 | /// Part 10, Advanced Video Coding (MPEG-4 AVC). | ||
| 83 | VIDEOCODEC_H264, | ||
| 84 | |||
| 85 | /// @brief [VP9](https://en.wikipedia.org/wiki/VP9) video coding format\n | ||
| 86 | /// \n | ||
| 87 | /// VP9 is the successor to VP8 and competes mainly with MPEG's | ||
| 88 | /// [High Efficiency Video Coding](https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding) | ||
| 89 | /// (HEVC/H.265). | ||
| 90 | VIDEOCODEC_VP9 | ||
| 91 | }; | ||
| 92 | //---------------------------------------------------------------------------- | ||
| 93 | |||
| 94 | //============================================================================ | ||
| 95 | /// @ingroup cpp_kodi_addon_videocodec_Defs_VIDEOCODEC_PICTURE | ||
| 96 | /// @brief YUV Plane identification pointers | ||
| 97 | /// | ||
| 98 | /// YUV is a color encoding system typically used as part of a color image pipeline. | ||
| 99 | /// | ||
| 100 | /// These are used to access stored data in @ref VIDEOCODEC_PICTURE::planeOffsets | ||
| 101 | /// and @ref VIDEOCODEC_PICTURE::stride. | ||
| 102 | /// | ||
| 103 | enum VIDEOCODEC_PLANE | ||
| 104 | { | ||
| 105 | /// @brief "luminance" component Y (equivalent to grey scale) | ||
| 106 | VIDEOCODEC_PICTURE_Y_PLANE = 0, | ||
| 107 | |||
| 108 | /// @brief "chrominance" component U (blue projection) | ||
| 109 | VIDEOCODEC_PICTURE_U_PLANE, | ||
| 110 | |||
| 111 | /// @brief "chrominance" component V (red projection) | ||
| 112 | VIDEOCODEC_PICTURE_V_PLANE, | ||
| 113 | |||
| 114 | /// @brief The maximum value to use in a list. | ||
| 115 | VIDEOCODEC_PICTURE_MAXPLANES = 3, | ||
| 116 | }; | ||
| 117 | //---------------------------------------------------------------------------- | ||
| 118 | |||
| 119 | //============================================================================ | ||
| 120 | /// @ingroup cpp_kodi_addon_videocodec_Defs_VIDEOCODEC_PICTURE | ||
| 121 | /// @brief Video coded process flags, used to perform special operations in | ||
| 122 | /// stream calls. | ||
| 123 | /// | ||
| 124 | /// These are used to access stored data in @ref VIDEOCODEC_PICTURE::flags. | ||
| 125 | /// | ||
| 126 | /// @note These variables are bit flags which are created using "|" can be used together. | ||
| 127 | /// | ||
| 128 | enum VIDEOCODEC_PICTURE_FLAG | ||
| 129 | { | ||
| 130 | /// @brief Empty and nothing defined | ||
| 131 | VIDEOCODEC_PICTURE_FLAG_NONE = 0, | ||
| 132 | |||
| 133 | /// @brief Drop in decoder | ||
| 134 | VIDEOCODEC_PICTURE_FLAG_DROP = (1 << 0), | ||
| 135 | |||
| 136 | /// @brief Squeeze out pictured without feeding new packets | ||
| 137 | VIDEOCODEC_PICTURE_FLAG_DRAIN = (1 << 1), | ||
| 138 | }; | ||
| 139 | //---------------------------------------------------------------------------- | ||
| 140 | |||
| 141 | //============================================================================ | ||
| 142 | /// @defgroup cpp_kodi_addon_videocodec_Defs_VIDEOCODEC_PICTURE struct VIDEOCODEC_PICTURE | ||
| 143 | /// @ingroup cpp_kodi_addon_videocodec_Defs | ||
| 144 | /// @brief Data structure which is given to the addon when a decoding call is made. | ||
| 145 | /// | ||
| 146 | ///@{ | ||
| 147 | struct VIDEOCODEC_PICTURE | ||
| 148 | { | ||
| 149 | /// @brief The video format declared with @ref VIDEOCODEC_FORMAT and to be | ||
| 150 | /// used on the addon. | ||
| 151 | enum VIDEOCODEC_FORMAT videoFormat; | ||
| 152 | |||
| 153 | /// @brief Video coded process flags, used to perform special operations in | ||
| 154 | /// stream calls. | ||
| 155 | /// | ||
| 156 | /// Possible flags are declared here @ref VIDEOCODEC_PICTURE_FLAGS. | ||
| 157 | uint32_t flags; | ||
| 158 | |||
| 159 | /// @brief Picture width. | ||
| 160 | uint32_t width; | ||
| 161 | |||
| 162 | /// @brief Picture height. | ||
| 163 | uint32_t height; | ||
| 164 | |||
| 165 | /// @brief Data to be decoded in the addon. | ||
| 166 | uint8_t* decodedData; | ||
| 167 | |||
| 168 | /// @brief Size of the data given with @ref decodedData | ||
| 169 | size_t decodedDataSize; | ||
| 170 | |||
| 171 | /// @brief YUV color plane calculation array. | ||
| 172 | /// | ||
| 173 | /// This includes the three values of the YUV and can be identified using | ||
| 174 | /// @ref VIDEOCODEC_PLANE. | ||
| 175 | uint32_t planeOffsets[VIDEOCODEC_PICTURE_MAXPLANES]; | ||
| 176 | |||
| 177 | /// @brief YUV color stride calculation array | ||
| 178 | /// | ||
| 179 | /// This includes the three values of the YUV and can be identified using | ||
| 180 | /// @ref VIDEOCODEC_PLANE. | ||
| 181 | uint32_t stride[VIDEOCODEC_PICTURE_MAXPLANES]; | ||
| 182 | |||
| 183 | /// @brief Picture presentation time stamp (PTS). | ||
| 184 | int64_t pts; | ||
| 185 | |||
| 186 | /// @brief This is used to save the related handle from Kodi. | ||
| 187 | /// | ||
| 188 | /// To handle the input stream buffer, this is given by Kodi using | ||
| 189 | /// @ref kodi::addon::CInstanceVideoCodec::GetFrameBuffer and must be | ||
| 190 | /// released again using @ref kodi::addon::CInstanceVideoCodec::ReleaseFrameBuffer. | ||
| 191 | KODI_HANDLE videoBufferHandle; | ||
| 192 | }; | ||
| 193 | ///@} | ||
| 194 | //---------------------------------------------------------------------------- | ||
| 195 | |||
| 196 | struct VIDEOCODEC_INITDATA | ||
| 197 | { | ||
| 198 | enum VIDEOCODEC_TYPE codec; | ||
| 199 | enum STREAMCODEC_PROFILE codecProfile; | ||
| 200 | enum VIDEOCODEC_FORMAT* videoFormats; | ||
| 201 | uint32_t width; | ||
| 202 | uint32_t height; | ||
| 203 | const uint8_t* extraData; | ||
| 204 | unsigned int extraDataSize; | ||
| 205 | struct STREAM_CRYPTO_SESSION cryptoSession; | ||
| 206 | }; | ||
| 207 | |||
| 208 | // this are properties given to the addon on create | ||
| 209 | // at this time we have no parameters for the addon | ||
| 210 | typedef struct AddonProps_VideoCodec | ||
| 211 | { | ||
| 212 | int dummy; | ||
| 213 | } AddonProps_VideoCodec; | ||
| 214 | |||
| 215 | struct AddonInstance_VideoCodec; | ||
| 216 | typedef struct KodiToAddonFuncTable_VideoCodec | ||
| 217 | { | ||
| 218 | KODI_HANDLE addonInstance; | ||
| 219 | |||
| 220 | //! @brief Opens a codec | ||
| 221 | bool(__cdecl* open)(const struct AddonInstance_VideoCodec* instance, | ||
| 222 | struct VIDEOCODEC_INITDATA* initData); | ||
| 223 | |||
| 224 | //! @brief Reconfigures a codec | ||
| 225 | bool(__cdecl* reconfigure)(const struct AddonInstance_VideoCodec* instance, | ||
| 226 | struct VIDEOCODEC_INITDATA* initData); | ||
| 227 | |||
| 228 | //! @brief Feed codec if requested from GetPicture() (return VC_BUFFER) | ||
| 229 | bool(__cdecl* add_data)(const struct AddonInstance_VideoCodec* instance, | ||
| 230 | const struct DEMUX_PACKET* packet); | ||
| 231 | |||
| 232 | //! @brief Get a decoded picture / request new data | ||
| 233 | enum VIDEOCODEC_RETVAL(__cdecl* get_picture)(const struct AddonInstance_VideoCodec* instance, | ||
| 234 | struct VIDEOCODEC_PICTURE* picture); | ||
| 235 | |||
| 236 | //! @brief Get the name of this video decoder | ||
| 237 | const char*(__cdecl* get_name)(const struct AddonInstance_VideoCodec* instance); | ||
| 238 | |||
| 239 | //! @brief Reset the codec | ||
| 240 | void(__cdecl* reset)(const struct AddonInstance_VideoCodec* instance); | ||
| 241 | } KodiToAddonFuncTable_VideoCodec; | ||
| 242 | |||
| 243 | typedef struct AddonToKodiFuncTable_VideoCodec | ||
| 244 | { | ||
| 245 | KODI_HANDLE kodiInstance; | ||
| 246 | bool (*get_frame_buffer)(void* kodiInstance, struct VIDEOCODEC_PICTURE* picture); | ||
| 247 | void (*release_frame_buffer)(void* kodiInstance, void* buffer); | ||
| 248 | } AddonToKodiFuncTable_VideoCodec; | ||
| 249 | |||
| 250 | typedef struct AddonInstance_VideoCodec | ||
| 251 | { | ||
| 252 | struct AddonProps_VideoCodec* props; | ||
| 253 | struct AddonToKodiFuncTable_VideoCodec* toKodi; | ||
| 254 | struct KodiToAddonFuncTable_VideoCodec* toAddon; | ||
| 255 | } AddonInstance_VideoCodec; | ||
| 256 | |||
| 257 | #ifdef __cplusplus | ||
| 258 | } /* extern "C" */ | ||
| 259 | #endif /* __cplusplus */ | ||
| 260 | |||
| 261 | #endif /* !C_API_ADDONINSTANCE_VIDEOCODEC_H */ | ||
