numpyimage 3.0.0__tar.gz → 3.0.2__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: numpyimage
3
- Version: 3.0.0
3
+ Version: 3.0.2
4
4
  Summary: Load, save, & manipulate image files as numpy arrays
5
5
  Author-email: Jasper Phelps <jasper.s.phelps@gmail.com>
6
6
  License: MIT License
@@ -42,7 +42,7 @@ codec_aliases = {
42
42
  'H.265': 'libx265',
43
43
  }
44
44
 
45
- supported_extensions = ['mp4', 'mkv', 'avi', 'mov']
45
+ supported_extensions = ['mp4', 'mkv', 'avi', 'mov', 'webm']
46
46
 
47
47
 
48
48
  def load_video(filename,
@@ -313,13 +313,14 @@ class VideoStreamer:
313
313
  return float(1.0 / self._framerate)
314
314
 
315
315
  def frame_number_to_pts(self, frame_number: int) -> int:
316
+ frame_number = self._normalize_frame_number(frame_number)
316
317
  if self._framerate == 'variable':
317
318
  return self.frames_pts[frame_number]
318
319
  else:
319
320
  return int(frame_number) * self.pts_delta + self.pts0
320
321
 
321
322
  def frame_number_to_time(self, frame_number: int) -> float:
322
- return self.frame_number_to_pts(frame_number) * self.time_base
323
+ return float(self.frame_number_to_pts(frame_number) * self.time_base)
323
324
 
324
325
  def __getitem__(self, key) -> np.ndarray:
325
326
  if isinstance(key, tuple):
@@ -366,16 +367,7 @@ class VideoStreamer:
366
367
  start, stop, step = frame_number.indices(self.n_frames)
367
368
  return np.array([self._get_frame(i) for i in range(start, stop, step)])
368
369
  with self._lock:
369
- # Support negative indexing
370
- if frame_number < 0 and frame_number + self.n_frames >= 0:
371
- frame_number += self.n_frames
372
- elif frame_number >= self.n_frames:
373
- raise IndexError(f'Frame {frame_number} out of range:'
374
- f' [0, {self.n_frames-1}]')
375
- elif frame_number < 0:
376
- raise IndexError(f'Negative frame {frame_number} out of'
377
- f' range: [-{self.n_frames}, -1]')
378
-
370
+ frame_number = self._normalize_frame_number(frame_number)
379
371
  if (self._current_frame_number is None
380
372
  or frame_number <= self._current_frame_number
381
373
  or frame_number > self._current_frame_number + 100):
@@ -391,6 +383,24 @@ class VideoStreamer:
391
383
  image = np.rot90(image, k=-int(self.rotation) // 90)
392
384
  return image
393
385
 
386
+ def _normalize_frame_number(self, frame_number: int) -> int:
387
+ """
388
+ Normalize frame number to be within the valid range.
389
+ """
390
+ if not isinstance(frame_number, int):
391
+ raise TypeError(f'Frame number must be an integer, not {type(frame_number)}')
392
+ if frame_number < -self.n_frames:
393
+ raise IndexError(f'Negative frame {frame_number} not in'
394
+ f' valid range [-{self.n_frames}, -1]')
395
+ elif -self.n_frames <= frame_number and frame_number < 0:
396
+ return frame_number + self.n_frames
397
+ elif 0 <= frame_number and frame_number < self.n_frames:
398
+ return frame_number
399
+ elif self.n_frames <= frame_number:
400
+ raise IndexError(f'Frame {frame_number} not in'
401
+ f' valid range [0, {self.n_frames-1}]')
402
+ raise IndexError(f'Frame {frame_number} not understood')
403
+
394
404
  @property
395
405
  def first_frame(self):
396
406
  if self._first_frame is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: numpyimage
3
- Version: 3.0.0
3
+ Version: 3.0.2
4
4
  Summary: Load, save, & manipulate image files as numpy arrays
5
5
  Author-email: Jasper Phelps <jasper.s.phelps@gmail.com>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = 'numpyimage'
7
- version = '3.0.0'
7
+ version = '3.0.2'
8
8
  description = 'Load, save, & manipulate image files as numpy arrays'
9
9
  readme.file = 'README.md'
10
10
  readme.content-type = 'text/markdown'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes