changeset 16962:bdc218b5a49a

Do not hang forever when the card delivers no new data.
author reimar
date Thu, 10 Nov 2005 20:32:47 +0000
parents 8b5a4d2dcc2b
children 4aa0f65686a6
files libmpdemux/tvi_v4l2.c
diffstat 1 files changed, 4 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/tvi_v4l2.c	Thu Nov 10 20:31:27 2005 +0000
+++ b/libmpdemux/tvi_v4l2.c	Thu Nov 10 20:32:47 2005 +0000
@@ -1360,6 +1360,7 @@
     priv_t *priv = (priv_t*)data;
     long long skew, prev_skew, xskew, interval, prev_interval, delta;
     int i;
+    int err_count = 0;
     int framesize = priv->format.fmt.pix.height*priv->format.fmt.pix.width*
 	pixfmt2depth(priv->format.fmt.pix.pixelformat)/8;
     fd_set rdset;
@@ -1546,9 +1547,11 @@
     return NULL;
 }
 
+#define MAX_LOOP 50
 static double grab_video_frame(priv_t *priv, char *buffer, int len)
 {
     double interval;
+    int loop_cnt = 0;
 
     if (priv->first) {
 	pthread_create(&priv->video_grabber_thread, NULL, video_grabber, priv);
@@ -1557,6 +1560,7 @@
 
     while (priv->video_cnt == 0) {
 	usleep(10000);
+	if (loop_cnt++ > MAX_LOOP) return 0;
     }
 
     pthread_mutex_lock(&priv->video_buffer_mutex);