summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2021-03-04 23:36:40 +0100
committermanuel <manuel@mausz.at>2021-03-04 23:36:40 +0100
commit3cb8aa05f8cee9e860cf83531682ff0ed4af6a4f (patch)
tree921f4829b32126f80f9113c124f2e14c0ebce8d9 /xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h
parentbe933ef2241d79558f91796cc5b3a161f72ebf9c (diff)
downloadkodi-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.h261
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
18extern "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 */