Add cancel handling to streams
This commit is contained in:
parent
677b62cd81
commit
bd46633641
1 changed files with 9 additions and 12 deletions
21
mpv.py
21
mpv.py
|
|
@ -711,8 +711,8 @@ class _DecoderPropertyProxy(_PropertyProxy):
|
||||||
setattr(self.mpv, _py_to_mpv(name), value)
|
setattr(self.mpv, _py_to_mpv(name), value)
|
||||||
|
|
||||||
class GeneratorStream:
|
class GeneratorStream:
|
||||||
"""Transform a python generator into an mpv-compatible stream object. This only supports size() and read(), and
|
"""Transform a python generator into an mpv-compatible stream object. The total size of the file can be indicated to
|
||||||
does not support seek(), close() or cancel().
|
mpv using the size argument to __init__. Seeking is not supported.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, generator_fun, size=None):
|
def __init__(self, generator_fun, size=None):
|
||||||
|
|
@ -742,7 +742,6 @@ class GeneratorStream:
|
||||||
|
|
||||||
def cancel(self):
|
def cancel(self):
|
||||||
self._read_iter = iter([]) # make next read() call return EOF
|
self._read_iter = iter([]) # make next read() call return EOF
|
||||||
# TODO?
|
|
||||||
|
|
||||||
|
|
||||||
class ImageOverlay:
|
class ImageOverlay:
|
||||||
|
|
@ -1746,16 +1745,16 @@ class MPV(object):
|
||||||
return read # non-empty bytes object with input
|
return read # non-empty bytes object with input
|
||||||
return b'' # empty byte object signals permanent EOF
|
return b'' # empty byte object signals permanent EOF
|
||||||
|
|
||||||
def seek(self, pos):
|
def seek(self, pos): # optional
|
||||||
return new_offset # integer with new byte offset. The new offset may be before the requested offset
|
return new_offset # integer with new byte offset. The new offset may be before the requested offset
|
||||||
in case an exact seek is inconvenient.
|
in case an exact seek is inconvenient.
|
||||||
|
|
||||||
def close(self):
|
def close(self): # optional
|
||||||
...
|
...
|
||||||
|
|
||||||
# def cancel(self): (future API versions only)
|
def cancel(self): # optional
|
||||||
# Abort a running read() or seek() operation
|
Abort a running read() or seek() operation
|
||||||
# ...
|
...
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
@ -1782,10 +1781,8 @@ class MPV(object):
|
||||||
seek = cb_info.contents.seek = StreamSeekFn(lambda _userdata, offx: frontend.seek(offx))
|
seek = cb_info.contents.seek = StreamSeekFn(lambda _userdata, offx: frontend.seek(offx))
|
||||||
if hasattr(frontend, 'size') and frontend.size is not None:
|
if hasattr(frontend, 'size') and frontend.size is not None:
|
||||||
size = cb_info.contents.size = StreamSizeFn(lambda _userdata: frontend.size)
|
size = cb_info.contents.size = StreamSizeFn(lambda _userdata: frontend.size)
|
||||||
|
if hasattr(frontend, 'cancel'):
|
||||||
# Future API versions only
|
cancel = cb_info.contents.cancel = StreamCancelFn(lambda _userdata: frontend.cancel())
|
||||||
# if hasattr(frontend, 'cancel'):
|
|
||||||
# cb_info.contents.cancel = StreamCancelFn(lambda _userdata: frontend.cancel())
|
|
||||||
|
|
||||||
# keep frontend and callbacks in memory forever (TODO)
|
# keep frontend and callbacks in memory forever (TODO)
|
||||||
frontend._registered_callbacks = [read, close, seek, size, cancel]
|
frontend._registered_callbacks = [read, close, seek, size, cancel]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue