[PATCH 5/5] stream_pvr: allow initial latency when opening stream
Reza Arbab <[email protected]>
| Newsgroups | gmane.comp.video.mplayer.devel |
|---|---|
| Message-ID | <[email protected]> |
When opening an hdpvr device, there may be a significant delay before first receiving data, especially at higher bitrates. This can cause mplayer to assume EOF and exit. Move the existing device polling code to a static function. Introduce a new caller with generous 5 second timeout in pvr_stream_open. Signed-off-by: Reza Arbab <[email protected]> --- stream/stream_pvr.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/stream/stream_pvr.c b/stream/stream_pvr.c index 13c2f43..b35ba43 100644 --- a/stream/stream_pvr.c +++ b/stream/stream_pvr.c @@ -1597,6 +1597,26 @@ v4l2_display_settings (struct pvr_t *pvr) return 0; } +static int +poll_device (struct pvr_t *pvr, int timeout) +{ + struct pollfd pfds[1]; + int ret; + + pfds[0].fd = pvr->dev_fd; + pfds[0].events = POLLIN | POLLPRI; + + ret = poll (pfds, 1, timeout); + if (!ret) + { + mp_msg (MSGT_OPEN, MSGL_WARN, + "%s %dms timeout polling stream device\n", + LOG_LEVEL_PVR, timeout); + } + + return ret; +} + /* stream layer */ static void @@ -1614,7 +1634,6 @@ pvr_stream_close (stream_t *stream) static int pvr_stream_read (stream_t *stream, char *buffer, int size) { - struct pollfd pfds[1]; struct pvr_t *pvr; int rk, fd, pos; @@ -1630,15 +1649,9 @@ pvr_stream_read (stream_t *stream, char *buffer, int size) while (pos < size) { - pfds[0].fd = fd; - pfds[0].events = POLLIN | POLLPRI; - - rk = poll (pfds, 1, 500); - if (!rk) { - mp_msg (MSGT_OPEN, MSGL_ERR, - "%s 500ms timeout polling stream device\n", LOG_LEVEL_PVR); + rk = poll_device (pvr, 500); + if (!rk) break; - } else if (rk < 0) { mp_msg (MSGT_OPEN, MSGL_ERR, @@ -1762,6 +1775,10 @@ pvr_stream_open (stream_t *stream, int mode, void *opts, int *file_format) goto err_out; } + /* wait for device to begin streaming */ + if (!poll_device (pvr, 5000)) + goto err_out; + stream->priv = pvr; stream->type = STREAMTYPE_PVR; stream->fill_buffer = pvr_stream_read; -- 2.5.0 _______________________________________________ MPlayer-dev-eng mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng