robotpy-cscore 2024.3.2.1__cp39-cp39-win_amd64.whl → 2025.0.0b1__cp39-cp39-win_amd64.whl

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.

Potentially problematic release.


This version of robotpy-cscore might be problematic. Click here for more details.

cscore/__init__.py CHANGED
@@ -1,8 +1,6 @@
1
1
  from . import _init_cscore
2
2
 
3
- from ._logging import enableLogging
4
-
5
- # autogenerated by 'robotpy-build create-imports cscore'
3
+ # autogenerated by 'robotpy-build create-imports cscore cscore._cscore'
6
4
  from ._cscore import (
7
5
  AxisCamera,
8
6
  CameraServer,
@@ -49,9 +47,12 @@ __all__ = [
49
47
  "runMainRunLoop",
50
48
  "runMainRunLoopTimeout",
51
49
  "stopMainRunLoop",
52
- "enableLogging",
53
50
  ]
54
51
 
52
+ from ._logging import enableLogging
53
+
54
+ __all__.append("enableLogging")
55
+
55
56
  try:
56
57
  from .version import __version__
57
58
  except ImportError:
Binary file
Binary file
Binary file
Binary file
cscore/_cscore.pyi CHANGED
@@ -6,7 +6,12 @@ __all__ = ['AxisCamera', 'CameraServer', 'CvSink', 'CvSource', 'HttpCamera', 'Im
6
6
  class AxisCamera(HttpCamera):
7
7
  """
8
8
  A source that represents an Axis IP camera.
9
+
10
+ :deprecated: Use HttpCamera instead.
9
11
  """
12
+ @staticmethod
13
+ def _pybind11_conduit_v1_(*args, **kwargs):
14
+ ...
10
15
  @typing.overload
11
16
  def __init__(self, name: str, host: str) -> None:
12
17
  """
@@ -47,6 +52,9 @@ class CameraServer:
47
52
  """
48
53
  kBasePort: typing.ClassVar[int] = 1181
49
54
  @staticmethod
55
+ def _pybind11_conduit_v1_(*args, **kwargs):
56
+ ...
57
+ @staticmethod
50
58
  @typing.overload
51
59
  def addAxisCamera(host: str) -> AxisCamera:
52
60
  """
@@ -54,6 +62,8 @@ class CameraServer:
54
62
 
55
63
  This overload calls AddAxisCamera() with name "Axis Camera".
56
64
 
65
+ :deprecated: Call StartAutomaticCapture with a HttpCamera instead.
66
+
57
67
  :param host: Camera host IP or DNS name (e.g. "10.x.y.11")
58
68
  """
59
69
  @staticmethod
@@ -64,6 +74,8 @@ class CameraServer:
64
74
 
65
75
  This overload calls AddAxisCamera() with name "Axis Camera".
66
76
 
77
+ :deprecated: Call StartAutomaticCapture with a HttpCamera instead.
78
+
67
79
  :param hosts: Array of Camera host IPs/DNS names
68
80
  """
69
81
  @staticmethod
@@ -72,6 +84,8 @@ class CameraServer:
72
84
  """
73
85
  Adds an Axis IP camera.
74
86
 
87
+ :deprecated: Call StartAutomaticCapture with a HttpCamera instead.
88
+
75
89
  :param name: The name to give the camera
76
90
  :param host: Camera host IP or DNS name (e.g. "10.x.y.11")
77
91
  """
@@ -81,6 +95,8 @@ class CameraServer:
81
95
  """
82
96
  Adds an Axis IP camera.
83
97
 
98
+ :deprecated: Call StartAutomaticCapture with a HttpCamera instead.
99
+
84
100
  :param name: The name to give the camera
85
101
  :param hosts: Array of Camera host IPs/DNS names
86
102
  """
@@ -281,7 +297,9 @@ class CvSink(ImageSink):
281
297
  """
282
298
  A sink for user code to accept video frames as OpenCV images.
283
299
  """
284
- @typing.overload
300
+ @staticmethod
301
+ def _pybind11_conduit_v1_(*args, **kwargs):
302
+ ...
285
303
  def __init__(self, name: str, pixelFormat: VideoMode.PixelFormat = ...) -> None:
286
304
  """
287
305
  Create a sink for accepting OpenCV images.
@@ -290,28 +308,26 @@ class CvSink(ImageSink):
290
308
  image.
291
309
 
292
310
  :param name: Source name (arbitrary unique identifier)
293
- :param pixelFormat: Source pixel format
311
+ :param pixelFormat: The pixel format to read
294
312
  """
295
- @typing.overload
296
- def __init__(self, name: str, processFrame: typing.Callable[[int], None], pixelFormat: VideoMode.PixelFormat = ...) -> None:
313
+ def grabFrame(self, image: numpy.ndarray, timeout: float = 0.225) -> tuple[int, numpy.ndarray]:
297
314
  """
298
- Create a sink for accepting OpenCV images in a separate thread.
299
-
300
- A thread will be created that calls WaitForFrame() and calls the
301
- processFrame() callback each time a new frame arrives.
315
+ Wait for the next frame and get the image.
316
+ Times out (returning 0) after timeout seconds.
317
+ The provided image will have the pixelFormat this class was constructed
318
+ with.
302
319
 
303
- :param name: Source name (arbitrary unique identifier)
304
- :param processFrame: Frame processing function; will be called with a
305
- time=0 if an error occurred. processFrame should call GetImage()
306
- or GetError() as needed, but should not call (except in very
307
- unusual circumstances) WaitForImage().
308
- :param pixelFormat: Source pixel format
320
+ :returns: Frame time, or 0 on error (call GetError() to obtain the error
321
+ message); the frame time is in the same time base as wpi::Now(),
322
+ and is in 1 us increments.
309
323
  """
310
- def grabFrame(self, image: numpy.ndarray, timeout: float = 0.225) -> tuple[int, numpy.ndarray]:
324
+ def grabFrameDirect(self, image: numpy.ndarray, timeout: float = 0.225) -> int:
311
325
  """
312
326
  Wait for the next frame and get the image.
313
327
  Times out (returning 0) after timeout seconds.
314
- The provided image will have three 8-bit channels stored in BGR order.
328
+ The provided image will have the pixelFormat this class was constructed
329
+ with. The data is backed by data in the CvSink. It will be invalidated by
330
+ any grabFrame*() call on the sink.
315
331
 
316
332
  :returns: Frame time, or 0 on error (call GetError() to obtain the error
317
333
  message); the frame time is in the same time base as wpi::Now(),
@@ -320,7 +336,19 @@ class CvSink(ImageSink):
320
336
  def grabFrameNoTimeout(self, image: numpy.ndarray) -> tuple[int, numpy.ndarray]:
321
337
  """
322
338
  Wait for the next frame and get the image. May block forever.
323
- The provided image will have three 8-bit channels stored in BGR order.
339
+ The provided image will have the pixelFormat this class was constructed
340
+ with.
341
+
342
+ :returns: Frame time, or 0 on error (call GetError() to obtain the error
343
+ message); the frame time is in the same time base as wpi::Now(),
344
+ and is in 1 us increments.
345
+ """
346
+ def grabFrameNoTimeoutDirect(self, image: numpy.ndarray) -> int:
347
+ """
348
+ Wait for the next frame and get the image. May block forever.
349
+ The provided image will have the pixelFormat this class was constructed
350
+ with. The data is backed by data in the CvSink. It will be invalidated by
351
+ any grabFrame*() call on the sink.
324
352
 
325
353
  :returns: Frame time, or 0 on error (call GetError() to obtain the error
326
354
  message); the frame time is in the same time base as wpi::Now(),
@@ -330,6 +358,9 @@ class CvSource(ImageSource):
330
358
  """
331
359
  A source for user code to provide OpenCV images as video frames.
332
360
  """
361
+ @staticmethod
362
+ def _pybind11_conduit_v1_(*args, **kwargs):
363
+ ...
333
364
  @typing.overload
334
365
  def __init__(self, name: str, mode: VideoMode) -> None:
335
366
  """
@@ -341,7 +372,7 @@ class CvSource(ImageSource):
341
372
  @typing.overload
342
373
  def __init__(self, name: str, pixelFormat: VideoMode.PixelFormat, width: int, height: int, fps: int) -> None:
343
374
  """
344
- Create an OpenCV source.
375
+ Create an OpenCV source.
345
376
 
346
377
  :param name: Source name (arbitrary unique identifier)
347
378
  :param pixelFormat: Pixel format
@@ -349,15 +380,31 @@ class CvSource(ImageSource):
349
380
  :param height: height
350
381
  :param fps: fps
351
382
  """
383
+ @typing.overload
352
384
  def putFrame(self, image: numpy.ndarray) -> None:
385
+ """
386
+ Put an OpenCV image and notify sinks
387
+
388
+ The image format is guessed from the number of channels. The channel
389
+ mapping is as follows. 1: kGray 2: kYUYV 3: BGR 4: BGRA Any other channel
390
+ numbers will throw an error. If your image is an in alternate format, use
391
+ the overload that takes a PixelFormat.
392
+
393
+ :param image: OpenCV Image
394
+ """
395
+ @typing.overload
396
+ def putFrame(self, image: numpy.ndarray, pixelFormat: VideoMode.PixelFormat, skipVerification: bool) -> None:
353
397
  """
354
398
  Put an OpenCV image and notify sinks.
355
399
 
356
- Only 8-bit single-channel or 3-channel (with BGR channel order) images
357
- are supported. If the format, depth or channel order is different, use
358
- cv::Mat::convertTo() and/or cv::cvtColor() to convert it first.
400
+ The format of the Mat must match the PixelFormat. You will corrupt memory
401
+ if they dont. With skipVerification false, we will verify the number of
402
+ channels matches the pixel format. If skipVerification is true, this step
403
+ is skipped and is passed straight through.
359
404
 
360
- :param image: OpenCV image
405
+ :param image: OpenCV image
406
+ :param pixelFormat: The pixel format of the image
407
+ :param skipVerification: skip verifying pixel format
361
408
  """
362
409
  class HttpCamera(VideoCamera):
363
410
  """
@@ -382,6 +429,9 @@ class HttpCamera(VideoCamera):
382
429
  kCSCore: typing.ClassVar[HttpCamera.HttpCameraKind] # value = <HttpCameraKind.kCSCore: 2>
383
430
  kMJPGStreamer: typing.ClassVar[HttpCamera.HttpCameraKind] # value = <HttpCameraKind.kMJPGStreamer: 1>
384
431
  kUnknown: typing.ClassVar[HttpCamera.HttpCameraKind] # value = <HttpCameraKind.kUnknown: 0>
432
+ @staticmethod
433
+ def _pybind11_conduit_v1_(*args, **kwargs):
434
+ ...
385
435
  def __eq__(self, other: typing.Any) -> bool:
386
436
  ...
387
437
  def __getstate__(self) -> int:
@@ -408,6 +458,9 @@ class HttpCamera(VideoCamera):
408
458
  @property
409
459
  def value(self) -> int:
410
460
  ...
461
+ @staticmethod
462
+ def _pybind11_conduit_v1_(*args, **kwargs):
463
+ ...
411
464
  @typing.overload
412
465
  def __init__(self, name: str, url: str, kind: HttpCamera.HttpCameraKind = ...) -> None:
413
466
  """
@@ -463,6 +516,9 @@ class ImageSink(VideoSink):
463
516
  """
464
517
  A base class for single image reading sinks.
465
518
  """
519
+ @staticmethod
520
+ def _pybind11_conduit_v1_(*args, **kwargs):
521
+ ...
466
522
  def getError(self) -> str:
467
523
  """
468
524
  Get error string. Call this if WaitForFrame() returns 0 to determine
@@ -486,6 +542,9 @@ class ImageSource(VideoSource):
486
542
  """
487
543
  A base class for single image providing sources.
488
544
  """
545
+ @staticmethod
546
+ def _pybind11_conduit_v1_(*args, **kwargs):
547
+ ...
489
548
  def createBooleanProperty(self, name: str, defaultValue: bool, value: bool) -> VideoProperty:
490
549
  """
491
550
  Create a boolean property.
@@ -562,6 +621,9 @@ class MjpegServer(VideoSink):
562
621
  """
563
622
  A sink that acts as a MJPEG-over-HTTP network server.
564
623
  """
624
+ @staticmethod
625
+ def _pybind11_conduit_v1_(*args, **kwargs):
626
+ ...
565
627
  @typing.overload
566
628
  def __init__(self) -> None:
567
629
  ...
@@ -635,11 +697,17 @@ class RawEvent:
635
697
  """
636
698
  Listener event
637
699
  """
700
+ @staticmethod
701
+ def _pybind11_conduit_v1_(*args, **kwargs):
702
+ ...
638
703
  class UsbCamera(VideoCamera):
639
704
  """
640
705
  A source that represents a USB camera.
641
706
  """
642
707
  @staticmethod
708
+ def _pybind11_conduit_v1_(*args, **kwargs):
709
+ ...
710
+ @staticmethod
643
711
  def enumerateUsbCameras() -> list[UsbCameraInfo]:
644
712
  """
645
713
  Enumerate USB cameras on the local system.
@@ -687,6 +755,9 @@ class UsbCameraInfo:
687
755
  """
688
756
  USB camera information
689
757
  """
758
+ @staticmethod
759
+ def _pybind11_conduit_v1_(*args, **kwargs):
760
+ ...
690
761
  def __init__(self) -> None:
691
762
  ...
692
763
  @property
@@ -763,6 +834,9 @@ class VideoCamera(VideoSource):
763
834
  kFixedIndoor: typing.ClassVar[VideoCamera.WhiteBalance] # value = <WhiteBalance.kFixedIndoor: 3000>
764
835
  kFixedOutdoor1: typing.ClassVar[VideoCamera.WhiteBalance] # value = <WhiteBalance.kFixedOutdoor1: 4000>
765
836
  kFixedOutdoor2: typing.ClassVar[VideoCamera.WhiteBalance] # value = <WhiteBalance.kFixedOutdoor2: 5000>
837
+ @staticmethod
838
+ def _pybind11_conduit_v1_(*args, **kwargs):
839
+ ...
766
840
  def __eq__(self, other: typing.Any) -> bool:
767
841
  ...
768
842
  def __getstate__(self) -> int:
@@ -789,6 +863,9 @@ class VideoCamera(VideoSource):
789
863
  @property
790
864
  def value(self) -> int:
791
865
  ...
866
+ @staticmethod
867
+ def _pybind11_conduit_v1_(*args, **kwargs):
868
+ ...
792
869
  def __init__(self) -> None:
793
870
  ...
794
871
  def getBrightness(self) -> int:
@@ -801,7 +878,7 @@ class VideoCamera(VideoSource):
801
878
  """
802
879
  def setExposureAuto(self) -> None:
803
880
  """
804
- Set the exposure to auto aperature.
881
+ Set the exposure to auto aperture.
805
882
  """
806
883
  def setExposureHoldCurrent(self) -> None:
807
884
  """
@@ -827,6 +904,9 @@ class VideoEvent(RawEvent):
827
904
  """
828
905
  An event generated by the library and provided to event listeners.
829
906
  """
907
+ @staticmethod
908
+ def _pybind11_conduit_v1_(*args, **kwargs):
909
+ ...
830
910
  def __init__(self) -> None:
831
911
  ...
832
912
  def getProperty(self) -> VideoProperty:
@@ -849,9 +929,12 @@ class VideoEvent(RawEvent):
849
929
  """
850
930
  class VideoListener:
851
931
  """
852
- An event listener. This calls back to a desigated callback function when
932
+ An event listener. This calls back to a designated callback function when
853
933
  an event matching the specified mask is generated by the library.
854
934
  """
935
+ @staticmethod
936
+ def _pybind11_conduit_v1_(*args, **kwargs):
937
+ ...
855
938
  @typing.overload
856
939
  def __init__(self) -> None:
857
940
  ...
@@ -888,9 +971,12 @@ class VideoMode:
888
971
  kY16
889
972
 
890
973
  kUYVY
974
+
975
+ kBGRA
891
976
  """
892
- __members__: typing.ClassVar[dict[str, VideoMode.PixelFormat]] # value = {'kUnknown': <PixelFormat.kUnknown: 0>, 'kMJPEG': <PixelFormat.kMJPEG: 1>, 'kYUYV': <PixelFormat.kYUYV: 2>, 'kRGB565': <PixelFormat.kRGB565: 3>, 'kBGR': <PixelFormat.kBGR: 4>, 'kGray': <PixelFormat.kGray: 5>, 'kY16': <PixelFormat.kY16: 6>, 'kUYVY': <PixelFormat.kUYVY: 7>}
977
+ __members__: typing.ClassVar[dict[str, VideoMode.PixelFormat]] # value = {'kUnknown': <PixelFormat.kUnknown: 0>, 'kMJPEG': <PixelFormat.kMJPEG: 1>, 'kYUYV': <PixelFormat.kYUYV: 2>, 'kRGB565': <PixelFormat.kRGB565: 3>, 'kBGR': <PixelFormat.kBGR: 4>, 'kGray': <PixelFormat.kGray: 5>, 'kY16': <PixelFormat.kY16: 6>, 'kUYVY': <PixelFormat.kUYVY: 7>, 'kBGRA': <PixelFormat.kBGRA: 8>}
893
978
  kBGR: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kBGR: 4>
979
+ kBGRA: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kBGRA: 8>
894
980
  kGray: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kGray: 5>
895
981
  kMJPEG: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kMJPEG: 1>
896
982
  kRGB565: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kRGB565: 3>
@@ -898,6 +984,9 @@ class VideoMode:
898
984
  kUnknown: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kUnknown: 0>
899
985
  kY16: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kY16: 6>
900
986
  kYUYV: typing.ClassVar[VideoMode.PixelFormat] # value = <PixelFormat.kYUYV: 2>
987
+ @staticmethod
988
+ def _pybind11_conduit_v1_(*args, **kwargs):
989
+ ...
901
990
  def __eq__(self, other: typing.Any) -> bool:
902
991
  ...
903
992
  def __getstate__(self) -> int:
@@ -929,6 +1018,9 @@ class VideoMode:
929
1018
  height: int
930
1019
  pixelFormat: int
931
1020
  width: int
1021
+ @staticmethod
1022
+ def _pybind11_conduit_v1_(*args, **kwargs):
1023
+ ...
932
1024
  def __eq__(self, arg0: VideoMode) -> bool:
933
1025
  ...
934
1026
  @typing.overload
@@ -963,6 +1055,9 @@ class VideoProperty:
963
1055
  kInteger: typing.ClassVar[VideoProperty.Kind] # value = <Kind.kInteger: 2>
964
1056
  kNone: typing.ClassVar[VideoProperty.Kind] # value = <Kind.kNone: 0>
965
1057
  kString: typing.ClassVar[VideoProperty.Kind] # value = <Kind.kString: 4>
1058
+ @staticmethod
1059
+ def _pybind11_conduit_v1_(*args, **kwargs):
1060
+ ...
966
1061
  def __eq__(self, other: typing.Any) -> bool:
967
1062
  ...
968
1063
  def __getstate__(self) -> int:
@@ -989,6 +1084,9 @@ class VideoProperty:
989
1084
  @property
990
1085
  def value(self) -> int:
991
1086
  ...
1087
+ @staticmethod
1088
+ def _pybind11_conduit_v1_(*args, **kwargs):
1089
+ ...
992
1090
  def __init__(self) -> None:
993
1091
  ...
994
1092
  def get(self) -> int:
@@ -1118,11 +1216,17 @@ class VideoSink:
1118
1216
  kMjpeg : MJPEG video sink.
1119
1217
 
1120
1218
  kCv : CV video sink.
1219
+
1220
+ kRaw : Raw video sink.
1121
1221
  """
1122
- __members__: typing.ClassVar[dict[str, VideoSink.Kind]] # value = {'kUnknown': <Kind.kUnknown: 0>, 'kMjpeg': <Kind.kMjpeg: 2>, 'kCv': <Kind.kCv: 4>}
1222
+ __members__: typing.ClassVar[dict[str, VideoSink.Kind]] # value = {'kUnknown': <Kind.kUnknown: 0>, 'kMjpeg': <Kind.kMjpeg: 2>, 'kCv': <Kind.kCv: 4>, 'kRaw': <Kind.kRaw: 8>}
1123
1223
  kCv: typing.ClassVar[VideoSink.Kind] # value = <Kind.kCv: 4>
1124
1224
  kMjpeg: typing.ClassVar[VideoSink.Kind] # value = <Kind.kMjpeg: 2>
1225
+ kRaw: typing.ClassVar[VideoSink.Kind] # value = <Kind.kRaw: 8>
1125
1226
  kUnknown: typing.ClassVar[VideoSink.Kind] # value = <Kind.kUnknown: 0>
1227
+ @staticmethod
1228
+ def _pybind11_conduit_v1_(*args, **kwargs):
1229
+ ...
1126
1230
  def __eq__(self, other: typing.Any) -> bool:
1127
1231
  ...
1128
1232
  def __getstate__(self) -> int:
@@ -1151,6 +1255,9 @@ class VideoSink:
1151
1255
  ...
1152
1256
  __hash__: typing.ClassVar[None] = None
1153
1257
  @staticmethod
1258
+ def _pybind11_conduit_v1_(*args, **kwargs):
1259
+ ...
1260
+ @staticmethod
1154
1261
  def enumerateSinks() -> list[VideoSink]:
1155
1262
  """
1156
1263
  Enumerate all existing sinks.
@@ -1284,6 +1391,9 @@ class VideoSource:
1284
1391
  kConnectionAutoManage: typing.ClassVar[VideoSource.ConnectionStrategy] # value = <ConnectionStrategy.kConnectionAutoManage: 0>
1285
1392
  kConnectionForceClose: typing.ClassVar[VideoSource.ConnectionStrategy] # value = <ConnectionStrategy.kConnectionForceClose: 2>
1286
1393
  kConnectionKeepOpen: typing.ClassVar[VideoSource.ConnectionStrategy] # value = <ConnectionStrategy.kConnectionKeepOpen: 1>
1394
+ @staticmethod
1395
+ def _pybind11_conduit_v1_(*args, **kwargs):
1396
+ ...
1287
1397
  def __eq__(self, other: typing.Any) -> bool:
1288
1398
  ...
1289
1399
  def __getstate__(self) -> int:
@@ -1323,12 +1433,18 @@ class VideoSource:
1323
1433
  kHttp : HTTP video source.
1324
1434
 
1325
1435
  kCv : CV video source.
1436
+
1437
+ kRaw : Raw video source.
1326
1438
  """
1327
- __members__: typing.ClassVar[dict[str, VideoSource.Kind]] # value = {'kUnknown': <Kind.kUnknown: 0>, 'kUsb': <Kind.kUsb: 1>, 'kHttp': <Kind.kHttp: 2>, 'kCv': <Kind.kCv: 4>}
1439
+ __members__: typing.ClassVar[dict[str, VideoSource.Kind]] # value = {'kUnknown': <Kind.kUnknown: 0>, 'kUsb': <Kind.kUsb: 1>, 'kHttp': <Kind.kHttp: 2>, 'kCv': <Kind.kCv: 4>, 'kRaw': <Kind.kRaw: 8>}
1328
1440
  kCv: typing.ClassVar[VideoSource.Kind] # value = <Kind.kCv: 4>
1329
1441
  kHttp: typing.ClassVar[VideoSource.Kind] # value = <Kind.kHttp: 2>
1442
+ kRaw: typing.ClassVar[VideoSource.Kind] # value = <Kind.kRaw: 8>
1330
1443
  kUnknown: typing.ClassVar[VideoSource.Kind] # value = <Kind.kUnknown: 0>
1331
1444
  kUsb: typing.ClassVar[VideoSource.Kind] # value = <Kind.kUsb: 1>
1445
+ @staticmethod
1446
+ def _pybind11_conduit_v1_(*args, **kwargs):
1447
+ ...
1332
1448
  def __eq__(self, other: typing.Any) -> bool:
1333
1449
  ...
1334
1450
  def __getstate__(self) -> int:
@@ -1357,6 +1473,9 @@ class VideoSource:
1357
1473
  ...
1358
1474
  __hash__: typing.ClassVar[None] = None
1359
1475
  @staticmethod
1476
+ def _pybind11_conduit_v1_(*args, **kwargs):
1477
+ ...
1478
+ @staticmethod
1360
1479
  def enumerateSources() -> list[VideoSource]:
1361
1480
  """
1362
1481
  Enumerate all existing sources.
cscore/cvnp/cvnp.cpp CHANGED
@@ -181,15 +181,7 @@ namespace cvnp
181
181
 
182
182
  bool is_array_contiguous(const pybind11::array& a)
183
183
  {
184
- pybind11::ssize_t expected_stride = a.itemsize();
185
- for (int i = a.ndim() - 1; i >=0; --i)
186
- {
187
- pybind11::ssize_t current_stride = a.strides()[i];
188
- if (current_stride != expected_stride)
189
- return false;
190
- expected_stride = expected_stride * a.shape()[i];
191
- }
192
- return true;
184
+ return a.flags() & pybind11::array::c_style;
193
185
  }
194
186
 
195
187
 
cscore/cvnp/cvnp.h CHANGED
@@ -49,6 +49,7 @@ namespace cvnp
49
49
  return pybind11::array(
50
50
  pybind11::dtype::of<_Tp>()
51
51
  , std::vector<std::size_t> {_rows, _cols}
52
+ , std::vector<std::size_t>{_cols * sizeof(_Tp), sizeof(_Tp)} // Strides
52
53
  , m.val
53
54
  );
54
55
  }
cscore/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '2024.3.2.1'
4
- __version_tuple__ = version_tuple = (2024, 3, 2, 1)
3
+ __version__ = version = '2025.0.0b1'
4
+ __version_tuple__ = version_tuple = (2025, 0, 0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: robotpy-cscore
3
- Version: 2024.3.2.1
3
+ Version: 2025.0.0b1
4
4
  Summary: RobotPy bindings for cscore image processing library
5
5
  Home-page: https://github.com/robotpy/robotpy-cscore
6
6
  Author: RobotPy Development Team
@@ -10,9 +10,9 @@ Platform: UNKNOWN
10
10
  Requires-Python: >=3.8
11
11
  Description-Content-Type: text/x-rst
12
12
  License-File: LICENSE
13
- Requires-Dist: robotpy-wpiutil ==2024.3.2.1
14
- Requires-Dist: robotpy-wpinet ==2024.3.2.1
15
- Requires-Dist: pyntcore ==2024.3.2.1
13
+ Requires-Dist: robotpy-wpiutil==2025.0.0b1
14
+ Requires-Dist: robotpy-wpinet==2025.0.0b1
15
+ Requires-Dist: pyntcore==2025.0.0b1
16
16
 
17
17
  robotpy-cscore
18
18
  ==============
@@ -0,0 +1,27 @@
1
+ cscore/__init__.py,sha256=xtJaSt6Uiihii-R_9XYbQVovx_D3Q-tqZpnyt6i2s0I,1119
2
+ cscore/__main__.py,sha256=No4nfyEHnbuyavQ9yInscvbiEGFPxxse9klZ-DSVMhc,4588
3
+ cscore/_cscore.cp39-win_amd64.pyd,sha256=muToWHCWh3tU-VCB8NBIXod7ZHyF42R-a4IaZlcUWL8,3527168
4
+ cscore/_cscore.pyi,sha256=djn_9I0m4TldKRPlRrM9E1TLNHdubwvHU0HxUR_-Djg,57823
5
+ cscore/_init_cscore.py,sha256=IJoWfQi1FpW48Uez-o9vS8SVCArHlmCAGt1BZkmbZmY,267
6
+ cscore/_logging.py,sha256=uv1Shlu49aPgQpRn5yD2ybT4N8ewJS3qUFOn8YTffwg,333
7
+ cscore/grip.py,sha256=qC6MbWvVllpnnsm10f31gqq4_PMWI_G9GKt3PfOaUpo,1042
8
+ cscore/imagewriter.py,sha256=RAWRRhL3DLNampZJjdd7Ye_8P1AmiYAZsWhnwov5id0,4537
9
+ cscore/pkgcfg.py,sha256=nkuqOy-Oy0Kw0pi8YXX9KfQCviwNliFZZlSOi2slsiw,791
10
+ cscore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ cscore/version.py,sha256=mbT1n9Aeez2kLCUucrThMR_QhRFSchOunB1mmFuqfSE,172
12
+ cscore/__pycache__/__init__.cpython-39.pyc,sha256=Nk4Cn9V4vd2SKLs3fokVFVH_5qCXgf2mSJjhA_IOD_w,899
13
+ cscore/__pycache__/_init_cscore.cpython-39.pyc,sha256=8GC1YqGRAOQTiJmYc3TdKj7asq2CP0rYL8lpps_kuH4,433
14
+ cscore/__pycache__/_logging.cpython-39.pyc,sha256=XSWh6WVvLQvJbUWtA3pn4BySQOLnyHDgQaPQqi1z6Iw,678
15
+ cscore/__pycache__/version.cpython-39.pyc,sha256=BYWQDFlUR06qNNZECCBZSbGCrgnBRdn6rVVMiR6PAiQ,288
16
+ cscore/cvnp/README.md,sha256=197MQ-gG-pZf9YAUZqcHXLKk8au8WtxXrfFf7lnwHAo,1175
17
+ cscore/cvnp/cvnp.cpp,sha256=dE3cBEbVVXaEdULdxbzglt9elRCxhkcXjF69W_Ak6so,9216
18
+ cscore/cvnp/cvnp.h,sha256=021_w8fhAlnew4Nc88ypPAdT9sBPwPzXwGPRiGIY1_Q,14937
19
+ cscore/cvnp/cvnp_synonyms.cpp,sha256=ZpLZzmK5ZcrIgLfi_j7eJ_NXLNtcb8ymDWehYuVVHvo,2419
20
+ cscore/cvnp/cvnp_synonyms.h,sha256=MgU4yOOXMhGGLrKb06dX4nsQLtqkq_1gDE6ToR3mjFo,589
21
+ cscore/src/main.cpp,sha256=sXb-crcVv2JxivUGCqPkpYmjgeupf5-M9XXOrxkRiRw,737
22
+ robotpy_cscore-2025.0.0b1.dist-info/LICENSE,sha256=eday0nHMlO9Rc7a6n0ONgNEe6N20r5xNWivVL5n-fN4,3138
23
+ robotpy_cscore-2025.0.0b1.dist-info/METADATA,sha256=WoFVrxv42gs1v5pAu5zWoshyS-dJlZ6enguujZke5_E,1119
24
+ robotpy_cscore-2025.0.0b1.dist-info/WHEEL,sha256=YorN2HPccIdfJm1vtDZTOGjQ579sMRaAowQ3R-HpNAE,100
25
+ robotpy_cscore-2025.0.0b1.dist-info/entry_points.txt,sha256=hFrjQmvJC8KIGhuinIdAazBPJW2oCe301Q9ZaIHVCe4,39
26
+ robotpy_cscore-2025.0.0b1.dist-info/top_level.txt,sha256=yKRnfRQe07G2XO6XXYgsj9CN2obAQX3D3gsGvcewpVw,7
27
+ robotpy_cscore-2025.0.0b1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-win_amd64
5
5
 
@@ -1,27 +0,0 @@
1
- cscore/__init__.py,sha256=VaZBAeqPudG-P5ca41SS9q7UNjEyfAM08xaXba1Q-uk,1091
2
- cscore/__main__.py,sha256=No4nfyEHnbuyavQ9yInscvbiEGFPxxse9klZ-DSVMhc,4588
3
- cscore/_cscore.cp39-win_amd64.pyd,sha256=swR5mB5RRAwhDU3r1b07GU0g3PVMXR---fb_ouWAEEI,3563008
4
- cscore/_cscore.pyi,sha256=Dw4M5fQ95tmPem5BC7TVCW3-4Fynka-6TlpE5ZRuxCc,53708
5
- cscore/_init_cscore.py,sha256=IJoWfQi1FpW48Uez-o9vS8SVCArHlmCAGt1BZkmbZmY,267
6
- cscore/_logging.py,sha256=uv1Shlu49aPgQpRn5yD2ybT4N8ewJS3qUFOn8YTffwg,333
7
- cscore/grip.py,sha256=qC6MbWvVllpnnsm10f31gqq4_PMWI_G9GKt3PfOaUpo,1042
8
- cscore/imagewriter.py,sha256=RAWRRhL3DLNampZJjdd7Ye_8P1AmiYAZsWhnwov5id0,4537
9
- cscore/pkgcfg.py,sha256=nkuqOy-Oy0Kw0pi8YXX9KfQCviwNliFZZlSOi2slsiw,791
10
- cscore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- cscore/version.py,sha256=BRzsf6IEqQtPKO-VyxoeQmB0EuN414faTBe-n-8PTs8,175
12
- cscore/__pycache__/__init__.cpython-39.pyc,sha256=j9V4tEytU0XrF6RbWMayyRnGIctd5IAJmDMGTnDUhTs,986
13
- cscore/__pycache__/_init_cscore.cpython-39.pyc,sha256=lmGIVfjw_Uplco7A-pEDfw5d0ir4stGAp121xUleJP4,433
14
- cscore/__pycache__/_logging.cpython-39.pyc,sha256=w5M7xL-sqVbbiCiTPoXKgaWEjM2GPvrHr3y4aMyOySU,678
15
- cscore/__pycache__/version.cpython-39.pyc,sha256=FFjLOIejXPuaveFQ-ALv5weJRSUwyO0ZNyQSYZK5ydc,293
16
- cscore/cvnp/README.md,sha256=197MQ-gG-pZf9YAUZqcHXLKk8au8WtxXrfFf7lnwHAo,1175
17
- cscore/cvnp/cvnp.cpp,sha256=xGs0MUNMPFw34WJWWo02E0s41Si0MvWgeJI_TWdOw_A,9523
18
- cscore/cvnp/cvnp.h,sha256=4ymsVQgp8nOJqVazCtENVMgfTJ32M_j0ShfltPxL5aw,14852
19
- cscore/cvnp/cvnp_synonyms.cpp,sha256=ZpLZzmK5ZcrIgLfi_j7eJ_NXLNtcb8ymDWehYuVVHvo,2419
20
- cscore/cvnp/cvnp_synonyms.h,sha256=MgU4yOOXMhGGLrKb06dX4nsQLtqkq_1gDE6ToR3mjFo,589
21
- cscore/src/main.cpp,sha256=sXb-crcVv2JxivUGCqPkpYmjgeupf5-M9XXOrxkRiRw,737
22
- robotpy_cscore-2024.3.2.1.dist-info/LICENSE,sha256=eday0nHMlO9Rc7a6n0ONgNEe6N20r5xNWivVL5n-fN4,3138
23
- robotpy_cscore-2024.3.2.1.dist-info/METADATA,sha256=YYQFfmFKRmt1ZtGjOPKDybHDfPDMOC-XycUbYYvjjLs,1122
24
- robotpy_cscore-2024.3.2.1.dist-info/WHEEL,sha256=Z6c-bE0pUM47a70GvqO_SvH_XXU0lm62gEAKtoNJ08A,100
25
- robotpy_cscore-2024.3.2.1.dist-info/entry_points.txt,sha256=hFrjQmvJC8KIGhuinIdAazBPJW2oCe301Q9ZaIHVCe4,39
26
- robotpy_cscore-2024.3.2.1.dist-info/top_level.txt,sha256=yKRnfRQe07G2XO6XXYgsj9CN2obAQX3D3gsGvcewpVw,7
27
- robotpy_cscore-2024.3.2.1.dist-info/RECORD,,