Skip to content

Commit

Permalink
v1.3.9
Browse files Browse the repository at this point in the history
  • Loading branch information
Lijun-Yu committed Dec 21, 2020
1 parent 4b0e340 commit 40c833a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 11 deletions.
24 changes: 14 additions & 10 deletions avi_r/reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ def seek(self, frame_id: int):
frame_id, self.num_frames))
self._frame_gen = self._get_frame_gen(frame_id)

def get_at(self, frame_id):
def get_at(self, frame_id: int):
"""Get a specific frame.
Parameters
Expand Down Expand Up @@ -245,25 +245,29 @@ def _del(self):
del self.reorder_buffer

def _get_frame_gen(self, start_frame_id=0, retry=5, retry_step=120):
start_frame_id = int(start_frame_id)
seek_frame_id = start_frame_id
retry = min(retry, start_frame_id // retry_step + 1)
for _ in range(retry):
if seek_frame_id != start_frame_id:
self._logger.info(
'Failed to seek to frame %d, retrying with frame %d',
start_frame_id, seek_frame_id)
for retry_i in range(1, retry + 1):
try:
self._container.seek(seek_frame_id, stream=self._stream)
frame_gen = self._fix_missing(start_frame_id)
frame = next(frame_gen)
break
except:
seek_frame_id = max(0, seek_frame_id - retry_step)
if retry_i < retry:
new_seek_frame_id = max(0, seek_frame_id - retry_step)
self._logger.info(
'Failed to seek to frame %d, retrying with frame %d',
seek_frame_id, new_seek_frame_id, exc_info=True)
seek_frame_id = new_seek_frame_id
continue
self._logger.info('Failed to seek to frame %d', seek_frame_id)
self._logger.warn(
'Failed to seek for frame %d after %d retries, iterating '
'from the begining', start_frame_id, retry, exc_info=True)
else:
seek_frame_id = 0
self._logger.warn(
'Failed to seek to frame %d, iterating from the beginning',
start_frame_id)
try:
self._container.seek(seek_frame_id, stream=self._stream)
except:
Expand Down
5 changes: 5 additions & 0 deletions docs/version.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Version History

## AVI-R v1.3.9

* Ensure seeking frame_ids are Python integers.
* Optimize logs of seeking error.

## AVI-R v1.3.8

* Add back timeout.
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

setuptools.setup(
name='avi-r',
version='1.3.8',
version='1.3.9',
author='Lijun Yu',
author_email='lijun@lj-y.com',
description='A robust reader for avi videos.',
Expand Down

0 comments on commit 40c833a

Please sign in to comment.