libdatachannel-py 2025.1.0.dev9__tar.gz → 2025.1.0.dev11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {libdatachannel_py-2025.1.0.dev9/src/libdatachannel_py.egg-info → libdatachannel_py-2025.1.0.dev11}/PKG-INFO +1 -1
  2. libdatachannel_py-2025.1.0.dev11/VERSION +1 -0
  3. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/setup.py +1 -1
  4. libdatachannel_py-2025.1.0.dev11/src/libdatachannel/codec/__init__.py +1 -0
  5. libdatachannel_py-2025.1.0.dev11/src/libdatachannel/codec/__init__.pyi +376 -0
  6. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/src/libdatachannel/libdatachannel_ext.cpython-313-darwin.so +0 -0
  7. libdatachannel_py-2025.1.0.dev11/src/libdatachannel/libyuv/__init__.py +1 -0
  8. libdatachannel_py-2025.1.0.dev11/src/libdatachannel/libyuv/__init__.pyi +345 -0
  9. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11/src/libdatachannel_py.egg-info}/PKG-INFO +1 -1
  10. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/src/libdatachannel_py.egg-info/SOURCES.txt +4 -0
  11. libdatachannel_py-2025.1.0.dev9/VERSION +0 -1
  12. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/LICENSE +0 -0
  13. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/MANIFEST.in +0 -0
  14. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/README.md +0 -0
  15. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/buildbase.py +0 -0
  16. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/pypath.py +0 -0
  17. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/pyproject.toml +0 -0
  18. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/run.py +0 -0
  19. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/setup.cfg +0 -0
  20. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/src/libdatachannel/__init__.py +0 -0
  21. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/src/libdatachannel/libdatachannel_ext.pyi +0 -0
  22. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/src/libdatachannel/py.typed +0 -0
  23. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/src/libdatachannel_py.egg-info/dependency_links.txt +0 -0
  24. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/src/libdatachannel_py.egg-info/top_level.txt +0 -0
  25. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_audio_codec.py +0 -0
  26. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_candidate.py +0 -0
  27. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_configuration.py +0 -0
  28. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_description.py +0 -0
  29. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_frameinfo.py +0 -0
  30. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_h265nalunit.py +0 -0
  31. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_libyuv.py +0 -0
  32. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_mediahandler.py +0 -0
  33. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_message.py +0 -0
  34. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_nalunit.py +0 -0
  35. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_packetizationconfig.py +0 -0
  36. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_peerconnection.py +0 -0
  37. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_prop_audio_codec.py +0 -0
  38. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_reliability.py +0 -0
  39. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_rtppacketizer.py +0 -0
  40. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_video_codec.py +0 -0
  41. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_websocket.py +0 -0
  42. {libdatachannel_py-2025.1.0.dev9 → libdatachannel_py-2025.1.0.dev11}/tests/test_websocketserver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: libdatachannel-py
3
- Version: 2025.1.0.dev9
3
+ Version: 2025.1.0.dev11
4
4
  Summary: libdatachannel-py is a Python binding for libdatachannel.
5
5
  Home-page: https://github.com/shiguredo/libdatachannel-py
6
6
  License-Expression: Apache-2.0
@@ -0,0 +1 @@
1
+ 2025.1.0.dev11
@@ -44,7 +44,7 @@ def run_setup(build_platform, target_platform):
44
44
  setup(
45
45
  version=version,
46
46
  url="https://github.com/shiguredo/libdatachannel-py",
47
- packages=["libdatachannel"],
47
+ packages=["libdatachannel", "libdatachannel.codec", "libdatachannel.libyuv"],
48
48
  package_dir={"": "src"},
49
49
  package_data={
50
50
  "libdatachannel": ["libdatachannel_ext.*"],
@@ -0,0 +1 @@
1
+ from ..libdatachannel_ext.codec import * # noqa: F401,F403
@@ -0,0 +1,376 @@
1
+ from collections.abc import Callable
2
+ import datetime
3
+ import enum
4
+ from typing import Annotated
5
+
6
+ from numpy.typing import ArrayLike
7
+
8
+
9
+ class VideoCodecType(enum.Enum):
10
+ H264 = 0
11
+
12
+ H265 = 1
13
+
14
+ VP8 = 2
15
+
16
+ VP9 = 3
17
+
18
+ AV1 = 4
19
+
20
+ class ImageFormat(enum.Enum):
21
+ I420 = 0
22
+
23
+ NV12 = 1
24
+
25
+ BGR888 = 2
26
+
27
+ class VideoFrameBufferI420:
28
+ @staticmethod
29
+ def create(arg0: int, arg1: int, /) -> VideoFrameBufferI420: ...
30
+
31
+ @property
32
+ def y(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
33
+
34
+ @y.setter
35
+ def y(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
36
+
37
+ @property
38
+ def u(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
39
+
40
+ @u.setter
41
+ def u(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
42
+
43
+ @property
44
+ def v(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
45
+
46
+ @v.setter
47
+ def v(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
48
+
49
+ def width(self) -> int: ...
50
+
51
+ def height(self) -> int: ...
52
+
53
+ def stride_y(self) -> int: ...
54
+
55
+ def stride_u(self) -> int: ...
56
+
57
+ def stride_v(self) -> int: ...
58
+
59
+ class VideoFrameBufferNV12:
60
+ @staticmethod
61
+ def create(arg0: int, arg1: int, /) -> VideoFrameBufferNV12: ...
62
+
63
+ @property
64
+ def y(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
65
+
66
+ @y.setter
67
+ def y(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
68
+
69
+ @property
70
+ def uv(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
71
+
72
+ @uv.setter
73
+ def uv(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
74
+
75
+ def width(self) -> int: ...
76
+
77
+ def height(self) -> int: ...
78
+
79
+ def stride_y(self) -> int: ...
80
+
81
+ def stride_uv(self) -> int: ...
82
+
83
+ class VideoFrameBufferBGR888:
84
+ @staticmethod
85
+ def create(arg0: int, arg1: int, /) -> VideoFrameBufferBGR888: ...
86
+
87
+ @property
88
+ def bgr(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None, 3), order='C')]: ...
89
+
90
+ @bgr.setter
91
+ def bgr(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None, 3), order='C')], /) -> None: ...
92
+
93
+ def width(self) -> int: ...
94
+
95
+ def height(self) -> int: ...
96
+
97
+ def stride(self) -> int: ...
98
+
99
+ class VideoFrame:
100
+ def __init__(self) -> None: ...
101
+
102
+ @property
103
+ def format(self) -> ImageFormat: ...
104
+
105
+ @format.setter
106
+ def format(self, arg: ImageFormat, /) -> None: ...
107
+
108
+ @property
109
+ def i420_buffer(self) -> VideoFrameBufferI420: ...
110
+
111
+ @i420_buffer.setter
112
+ def i420_buffer(self, arg: VideoFrameBufferI420, /) -> None: ...
113
+
114
+ @property
115
+ def nv12_buffer(self) -> VideoFrameBufferNV12: ...
116
+
117
+ @nv12_buffer.setter
118
+ def nv12_buffer(self, arg: VideoFrameBufferNV12, /) -> None: ...
119
+
120
+ @property
121
+ def bgr888_buffer(self) -> VideoFrameBufferBGR888: ...
122
+
123
+ @bgr888_buffer.setter
124
+ def bgr888_buffer(self, arg: VideoFrameBufferBGR888, /) -> None: ...
125
+
126
+ @property
127
+ def timestamp(self) -> datetime.timedelta: ...
128
+
129
+ @timestamp.setter
130
+ def timestamp(self, arg: datetime.timedelta | float, /) -> None: ...
131
+
132
+ @property
133
+ def rid(self) -> str | None: ...
134
+
135
+ @rid.setter
136
+ def rid(self, arg: str, /) -> None: ...
137
+
138
+ @property
139
+ def base_width(self) -> int: ...
140
+
141
+ @base_width.setter
142
+ def base_width(self, arg: int, /) -> None: ...
143
+
144
+ @property
145
+ def base_height(self) -> int: ...
146
+
147
+ @base_height.setter
148
+ def base_height(self, arg: int, /) -> None: ...
149
+
150
+ @property
151
+ def frame_number(self) -> int: ...
152
+
153
+ @frame_number.setter
154
+ def frame_number(self, arg: int, /) -> None: ...
155
+
156
+ def width(self) -> int: ...
157
+
158
+ def height(self) -> int: ...
159
+
160
+ class EncodedImage:
161
+ def __init__(self) -> None: ...
162
+
163
+ @property
164
+ def data(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None), order='C')]: ...
165
+
166
+ @data.setter
167
+ def data(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None), order='C')], /) -> None: ...
168
+
169
+ @property
170
+ def timestamp(self) -> datetime.timedelta: ...
171
+
172
+ @timestamp.setter
173
+ def timestamp(self, arg: datetime.timedelta | float, /) -> None: ...
174
+
175
+ @property
176
+ def rid(self) -> str | None: ...
177
+
178
+ @rid.setter
179
+ def rid(self, arg: str, /) -> None: ...
180
+
181
+ class VideoEncoder:
182
+ def init(self, arg: VideoEncoder.Settings, /) -> bool: ...
183
+
184
+ def release(self) -> None: ...
185
+
186
+ def encode(self, arg: VideoFrame, /) -> None: ...
187
+
188
+ def force_intra_next_frame(self) -> None: ...
189
+
190
+ def set_on_encode(self, arg: Callable[[EncodedImage], None], /) -> None: ...
191
+
192
+ class Settings:
193
+ def __init__(self) -> None: ...
194
+
195
+ @property
196
+ def codec_type(self) -> VideoCodecType: ...
197
+
198
+ @codec_type.setter
199
+ def codec_type(self, arg: VideoCodecType, /) -> None: ...
200
+
201
+ @property
202
+ def width(self) -> int: ...
203
+
204
+ @width.setter
205
+ def width(self, arg: int, /) -> None: ...
206
+
207
+ @property
208
+ def height(self) -> int: ...
209
+
210
+ @height.setter
211
+ def height(self, arg: int, /) -> None: ...
212
+
213
+ @property
214
+ def bitrate(self) -> int: ...
215
+
216
+ @bitrate.setter
217
+ def bitrate(self, arg: int, /) -> None: ...
218
+
219
+ @property
220
+ def fps(self) -> int: ...
221
+
222
+ @fps.setter
223
+ def fps(self, arg: int, /) -> None: ...
224
+
225
+ def create_openh264_video_encoder(openh264: str) -> VideoEncoder: ...
226
+
227
+ def create_videotoolbox_video_encoder() -> VideoEncoder: ...
228
+
229
+ def create_aom_video_encoder() -> VideoEncoder: ...
230
+
231
+ class VideoDecoder:
232
+ def init(self, arg: VideoDecoder.Settings, /) -> bool: ...
233
+
234
+ def release(self) -> None: ...
235
+
236
+ def decode(self, arg: EncodedImage, /) -> None: ...
237
+
238
+ def set_on_decode(self, arg: Callable[[VideoFrame], None], /) -> None: ...
239
+
240
+ class Settings:
241
+ def __init__(self) -> None: ...
242
+
243
+ @property
244
+ def codec_type(self) -> VideoCodecType: ...
245
+
246
+ @codec_type.setter
247
+ def codec_type(self, arg: VideoCodecType, /) -> None: ...
248
+
249
+ def create_openh264_video_decoder(openh264: str) -> VideoDecoder: ...
250
+
251
+ def create_aom_video_decoder() -> VideoDecoder: ...
252
+
253
+ class AudioCodecType(enum.Enum):
254
+ OPUS = 0
255
+
256
+ class AudioFrame:
257
+ def __init__(self) -> None: ...
258
+
259
+ @property
260
+ def sample_rate(self) -> int: ...
261
+
262
+ @sample_rate.setter
263
+ def sample_rate(self, arg: int, /) -> None: ...
264
+
265
+ @property
266
+ def pcm(self) -> Annotated[ArrayLike, dict(dtype='float32', shape=(None, None), order='C')]: ...
267
+
268
+ @pcm.setter
269
+ def pcm(self, arg: Annotated[ArrayLike, dict(dtype='float32', shape=(None, None), order='C')], /) -> None: ...
270
+
271
+ @property
272
+ def timestamp(self) -> datetime.timedelta: ...
273
+
274
+ @timestamp.setter
275
+ def timestamp(self, arg: datetime.timedelta | float, /) -> None: ...
276
+
277
+ def channels(self) -> int: ...
278
+
279
+ def samples(self) -> int: ...
280
+
281
+ class EncodedAudio:
282
+ def __init__(self) -> None: ...
283
+
284
+ @property
285
+ def data(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None), order='C')]: ...
286
+
287
+ @data.setter
288
+ def data(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None), order='C')], /) -> None: ...
289
+
290
+ @property
291
+ def timestamp(self) -> datetime.timedelta: ...
292
+
293
+ @timestamp.setter
294
+ def timestamp(self, arg: datetime.timedelta | float, /) -> None: ...
295
+
296
+ class AudioEncoder:
297
+ def init(self, arg: AudioEncoder.Settings, /) -> bool: ...
298
+
299
+ def release(self) -> None: ...
300
+
301
+ def encode(self, arg: AudioFrame, /) -> None: ...
302
+
303
+ def set_on_encode(self, arg: Callable[[EncodedAudio], None], /) -> None: ...
304
+
305
+ class Settings:
306
+ def __init__(self) -> None: ...
307
+
308
+ @property
309
+ def codec_type(self) -> AudioCodecType: ...
310
+
311
+ @codec_type.setter
312
+ def codec_type(self, arg: AudioCodecType, /) -> None: ...
313
+
314
+ @property
315
+ def sample_rate(self) -> int: ...
316
+
317
+ @sample_rate.setter
318
+ def sample_rate(self, arg: int, /) -> None: ...
319
+
320
+ @property
321
+ def channels(self) -> int: ...
322
+
323
+ @channels.setter
324
+ def channels(self, arg: int, /) -> None: ...
325
+
326
+ @property
327
+ def bitrate(self) -> int: ...
328
+
329
+ @bitrate.setter
330
+ def bitrate(self, arg: int, /) -> None: ...
331
+
332
+ @property
333
+ def frame_duration_ms(self) -> int: ...
334
+
335
+ @frame_duration_ms.setter
336
+ def frame_duration_ms(self, arg: int, /) -> None: ...
337
+
338
+ @property
339
+ def opus_inband_fec(self) -> int: ...
340
+
341
+ @opus_inband_fec.setter
342
+ def opus_inband_fec(self, arg: int, /) -> None: ...
343
+
344
+ def create_opus_audio_encoder() -> AudioEncoder: ...
345
+
346
+ class AudioDecoder:
347
+ def init(self, arg: AudioDecoder.Settings, /) -> bool: ...
348
+
349
+ def release(self) -> None: ...
350
+
351
+ def decode(self, arg: EncodedAudio, /) -> None: ...
352
+
353
+ def set_on_decode(self, arg: Callable[[AudioFrame], None], /) -> None: ...
354
+
355
+ class Settings:
356
+ def __init__(self) -> None: ...
357
+
358
+ @property
359
+ def codec_type(self) -> AudioCodecType: ...
360
+
361
+ @codec_type.setter
362
+ def codec_type(self, arg: AudioCodecType, /) -> None: ...
363
+
364
+ @property
365
+ def sample_rate(self) -> int: ...
366
+
367
+ @sample_rate.setter
368
+ def sample_rate(self, arg: int, /) -> None: ...
369
+
370
+ @property
371
+ def channels(self) -> int: ...
372
+
373
+ @channels.setter
374
+ def channels(self, arg: int, /) -> None: ...
375
+
376
+ def create_opus_audio_decoder() -> AudioDecoder: ...
@@ -0,0 +1 @@
1
+ from ..libdatachannel_ext.libyuv import * # noqa: F401,F403
@@ -0,0 +1,345 @@
1
+ import enum
2
+
3
+ from numpy.typing import ArrayLike
4
+
5
+
6
+ class FilterMode(enum.Enum):
7
+ NONE = 0
8
+
9
+ Linear = 1
10
+
11
+ Bilinear = 2
12
+
13
+ Box = 3
14
+
15
+ class FourCC(enum.Enum):
16
+ I420 = 808596553
17
+
18
+ I422 = 842150985
19
+
20
+ I444 = 875836489
21
+
22
+ I400 = 808465481
23
+
24
+ NV21 = 825382478
25
+
26
+ NV12 = 842094158
27
+
28
+ YUY2 = 844715353
29
+
30
+ UYVY = 1498831189
31
+
32
+ I010 = 808529993
33
+
34
+ I210 = 808530505
35
+
36
+ M420 = 808596557
37
+
38
+ ARGB = 1111970369
39
+
40
+ BGRA = 1095911234
41
+
42
+ ABGR = 1380401729
43
+
44
+ AR30 = 808669761
45
+
46
+ AB30 = 808665665
47
+
48
+ AR64 = 875975233
49
+
50
+ AB64 = 875971137
51
+
52
+ 24BG = 1195521074
53
+
54
+ RAW = 544694642
55
+
56
+ RGBA = 1094862674
57
+
58
+ RGBP = 1346520914
59
+
60
+ RGBO = 1329743698
61
+
62
+ R444 = 875836498
63
+
64
+ MJPG = 1196444237
65
+
66
+ YV12 = 842094169
67
+
68
+ YV16 = 909203033
69
+
70
+ YV24 = 875714137
71
+
72
+ YU12 = 842093913
73
+
74
+ J420 = 808596554
75
+
76
+ J422 = 842150986
77
+
78
+ J444 = 875836490
79
+
80
+ J400 = 808465482
81
+
82
+ F420 = 808596550
83
+
84
+ F422 = 842150982
85
+
86
+ F444 = 875836486
87
+
88
+ H420 = 808596552
89
+
90
+ H422 = 842150984
91
+
92
+ H444 = 875836488
93
+
94
+ U420 = 808596565
95
+
96
+ U422 = 842150997
97
+
98
+ U444 = 875836501
99
+
100
+ F010 = 808529990
101
+
102
+ H010 = 808529992
103
+
104
+ U010 = 808530005
105
+
106
+ F210 = 808530502
107
+
108
+ H210 = 808530504
109
+
110
+ U210 = 808530517
111
+
112
+ P010 = 808530000
113
+
114
+ P210 = 808530512
115
+
116
+ IYUV = 1448433993
117
+
118
+ YU16 = 909202777
119
+
120
+ YU24 = 875713881
121
+
122
+ YUYV = 1448695129
123
+
124
+ YUVS = 1937143161
125
+
126
+ HDYC = 1129923656
127
+
128
+ 2VUY = 2037741106
129
+
130
+ JPEG = 1195724874
131
+
132
+ DMB1 = 828534116
133
+
134
+ BA81 = 825770306
135
+
136
+ RGB3 = 859981650
137
+
138
+ BGR3 = 861030210
139
+
140
+ CM32 = 536870912
141
+
142
+ CM24 = 402653184
143
+
144
+ L555 = 892679500
145
+
146
+ L565 = 892745036
147
+
148
+ 5551 = 825570613
149
+
150
+ I411 = 825308233
151
+
152
+ Q420 = 808596561
153
+
154
+ RGGB = 1111967570
155
+
156
+ BGGR = 1380403010
157
+
158
+ GRBG = 1195528775
159
+
160
+ GBRG = 1196573255
161
+
162
+ H264 = 875967048
163
+
164
+ ANY = -1
165
+
166
+ I420: FourCC = FourCC.I420
167
+
168
+ I422: FourCC = FourCC.I422
169
+
170
+ I444: FourCC = FourCC.I444
171
+
172
+ I400: FourCC = FourCC.I400
173
+
174
+ NV21: FourCC = FourCC.NV21
175
+
176
+ NV12: FourCC = FourCC.NV12
177
+
178
+ YUY2: FourCC = FourCC.YUY2
179
+
180
+ UYVY: FourCC = FourCC.UYVY
181
+
182
+ I010: FourCC = FourCC.I010
183
+
184
+ I210: FourCC = FourCC.I210
185
+
186
+ M420: FourCC = FourCC.M420
187
+
188
+ ARGB: FourCC = FourCC.ARGB
189
+
190
+ BGRA: FourCC = FourCC.BGRA
191
+
192
+ ABGR: FourCC = FourCC.ABGR
193
+
194
+ AR30: FourCC = FourCC.AR30
195
+
196
+ AB30: FourCC = FourCC.AB30
197
+
198
+ AR64: FourCC = FourCC.AR64
199
+
200
+ AB64: FourCC = FourCC.AB64
201
+
202
+ 24BG: FourCC = FourCC.24BG
203
+
204
+ RAW: FourCC = FourCC.RAW
205
+
206
+ RGBA: FourCC = FourCC.RGBA
207
+
208
+ RGBP: FourCC = FourCC.RGBP
209
+
210
+ RGBO: FourCC = FourCC.RGBO
211
+
212
+ R444: FourCC = FourCC.R444
213
+
214
+ MJPG: FourCC = FourCC.MJPG
215
+
216
+ YV12: FourCC = FourCC.YV12
217
+
218
+ YV16: FourCC = FourCC.YV16
219
+
220
+ YV24: FourCC = FourCC.YV24
221
+
222
+ YU12: FourCC = FourCC.YU12
223
+
224
+ J420: FourCC = FourCC.J420
225
+
226
+ J422: FourCC = FourCC.J422
227
+
228
+ J444: FourCC = FourCC.J444
229
+
230
+ J400: FourCC = FourCC.J400
231
+
232
+ F420: FourCC = FourCC.F420
233
+
234
+ F422: FourCC = FourCC.F422
235
+
236
+ F444: FourCC = FourCC.F444
237
+
238
+ H420: FourCC = FourCC.H420
239
+
240
+ H422: FourCC = FourCC.H422
241
+
242
+ H444: FourCC = FourCC.H444
243
+
244
+ U420: FourCC = FourCC.U420
245
+
246
+ U422: FourCC = FourCC.U422
247
+
248
+ U444: FourCC = FourCC.U444
249
+
250
+ F010: FourCC = FourCC.F010
251
+
252
+ H010: FourCC = FourCC.H010
253
+
254
+ U010: FourCC = FourCC.U010
255
+
256
+ F210: FourCC = FourCC.F210
257
+
258
+ H210: FourCC = FourCC.H210
259
+
260
+ U210: FourCC = FourCC.U210
261
+
262
+ P010: FourCC = FourCC.P010
263
+
264
+ P210: FourCC = FourCC.P210
265
+
266
+ IYUV: FourCC = FourCC.IYUV
267
+
268
+ YU16: FourCC = FourCC.YU16
269
+
270
+ YU24: FourCC = FourCC.YU24
271
+
272
+ YUYV: FourCC = FourCC.YUYV
273
+
274
+ YUVS: FourCC = FourCC.YUVS
275
+
276
+ HDYC: FourCC = FourCC.HDYC
277
+
278
+ 2VUY: FourCC = FourCC.2VUY
279
+
280
+ JPEG: FourCC = FourCC.JPEG
281
+
282
+ DMB1: FourCC = FourCC.DMB1
283
+
284
+ BA81: FourCC = FourCC.BA81
285
+
286
+ RGB3: FourCC = FourCC.RGB3
287
+
288
+ BGR3: FourCC = FourCC.BGR3
289
+
290
+ CM32: FourCC = FourCC.CM32
291
+
292
+ CM24: FourCC = FourCC.CM24
293
+
294
+ L555: FourCC = FourCC.L555
295
+
296
+ L565: FourCC = FourCC.L565
297
+
298
+ 5551: FourCC = FourCC.5551
299
+
300
+ I411: FourCC = FourCC.I411
301
+
302
+ Q420: FourCC = FourCC.Q420
303
+
304
+ RGGB: FourCC = FourCC.RGGB
305
+
306
+ BGGR: FourCC = FourCC.BGGR
307
+
308
+ GRBG: FourCC = FourCC.GRBG
309
+
310
+ GBRG: FourCC = FourCC.GBRG
311
+
312
+ H264: FourCC = FourCC.H264
313
+
314
+ ANY: FourCC = FourCC.ANY
315
+
316
+ class RotationMode(enum.Enum):
317
+ Rotate0 = 0
318
+
319
+ Rotate90 = 90
320
+
321
+ Rotate180 = 180
322
+
323
+ Rotate270 = 270
324
+
325
+ Rotate0: RotationMode = RotationMode.Rotate0
326
+
327
+ Rotate90: RotationMode = RotationMode.Rotate90
328
+
329
+ Rotate180: RotationMode = RotationMode.Rotate180
330
+
331
+ Rotate270: RotationMode = RotationMode.Rotate270
332
+
333
+ def nv12_scale(src_y: ArrayLike, src_uv: ArrayLike, src_stride_y: int, src_stride_uv: int, src_width: int, src_height: int, dst_y: ArrayLike, dst_uv: ArrayLike, dst_stride_y: int, dst_stride_uv: int, dst_width: int, dst_height: int, filtering: FilterMode) -> int: ...
334
+
335
+ def i420_scale(src_y: ArrayLike, src_u: ArrayLike, src_v: ArrayLike, src_stride_y: int, src_stride_u: int, src_stride_v: int, src_width: int, src_height: int, dst_y: ArrayLike, dst_u: ArrayLike, dst_v: ArrayLike, dst_stride_y: int, dst_stride_u: int, dst_stride_v: int, dst_width: int, dst_height: int, filtering: FilterMode) -> int: ...
336
+
337
+ def convert_to_i420(sample: ArrayLike, sample_size: int, dst_y: ArrayLike, dst_stride_y: int, dst_u: ArrayLike, dst_stride_u: int, dst_v: ArrayLike, dst_stride_v: int, crop_x: int, crop_y: int, src_width: int, src_height: int, crop_width: int, crop_height: int, rotation: RotationMode, fourcc: FourCC) -> int: ...
338
+
339
+ def nv12_to_i420(src_y: ArrayLike, src_uv: ArrayLike, src_stride_y: int, src_stride_uv: int, dst_y: ArrayLike, dst_u: ArrayLike, dst_v: ArrayLike, dst_stride_y: int, dst_stride_u: int, dst_stride_v: int, width: int, height: int) -> int: ...
340
+
341
+ def i420_to_nv12(src_y: ArrayLike, src_u: ArrayLike, src_v: ArrayLike, src_stride_y: int, src_stride_u: int, src_stride_v: int, dst_y: ArrayLike, dst_uv: ArrayLike, dst_stride_y: int, dst_stride_uv: int, width: int, height: int) -> int: ...
342
+
343
+ def rgb24_to_i420(src_rgb24: ArrayLike, src_stride_rgb24: int, dst_y: ArrayLike, dst_u: ArrayLike, dst_v: ArrayLike, dst_stride_y: int, dst_stride_u: int, dst_stride_v: int, width: int, height: int) -> int: ...
344
+
345
+ def i420_to_rgb24(src_y: ArrayLike, src_u: ArrayLike, src_v: ArrayLike, src_stride_y: int, src_stride_u: int, src_stride_v: int, dst_rgb24: ArrayLike, dst_stride_rgb24: int, width: int, height: int) -> int: ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: libdatachannel-py
3
- Version: 2025.1.0.dev9
3
+ Version: 2025.1.0.dev11
4
4
  Summary: libdatachannel-py is a Python binding for libdatachannel.
5
5
  Home-page: https://github.com/shiguredo/libdatachannel-py
6
6
  License-Expression: Apache-2.0
@@ -11,6 +11,10 @@ src/libdatachannel/__init__.py
11
11
  src/libdatachannel/libdatachannel_ext.cpython-313-darwin.so
12
12
  src/libdatachannel/libdatachannel_ext.pyi
13
13
  src/libdatachannel/py.typed
14
+ src/libdatachannel/codec/__init__.py
15
+ src/libdatachannel/codec/__init__.pyi
16
+ src/libdatachannel/libyuv/__init__.py
17
+ src/libdatachannel/libyuv/__init__.pyi
14
18
  src/libdatachannel_py.egg-info/PKG-INFO
15
19
  src/libdatachannel_py.egg-info/SOURCES.txt
16
20
  src/libdatachannel_py.egg-info/dependency_links.txt
@@ -1 +0,0 @@
1
- 2025.1.0.dev9