[FFmpeg-cvslog] r20629 - trunk/libavdevice/oss_audio.c

michael subversion
Fri Nov 27 14:37:53 CET 2009


Author: michael
Date: Fri Nov 27 14:37:53 2009
New Revision: 20629

Log:
Replace very odd and completely broken oss read_packet() by the obvious way to
read.
Fixes issue348.

Modified:
   trunk/libavdevice/oss_audio.c

Modified: trunk/libavdevice/oss_audio.c
==============================================================================
--- trunk/libavdevice/oss_audio.c	Fri Nov 27 14:10:56 2009	(r20628)
+++ trunk/libavdevice/oss_audio.c	Fri Nov 27 14:37:53 2009	(r20629)
@@ -250,32 +250,13 @@ static int audio_read_packet(AVFormatCon
 
     if (av_new_packet(pkt, s->frame_size) < 0)
         return AVERROR(EIO);
-    for(;;) {
-        struct timeval tv;
-        fd_set fds;
-
-        tv.tv_sec = 0;
-        tv.tv_usec = 30 * 1000; /* 30 msecs -- a bit shorter than 1 frame at 30fps */
-
-        FD_ZERO(&fds);
-        FD_SET(s->fd, &fds);
-
-        /* This will block until data is available or we get a timeout */
-        (void) select(s->fd + 1, &fds, 0, 0, &tv);
 
         ret = read(s->fd, pkt->data, pkt->size);
-        if (ret > 0)
-            break;
-        if (ret == -1 && (errno == EAGAIN || errno == EINTR)) {
-            av_free_packet(pkt);
-            pkt->size = 0;
-            pkt->pts = av_gettime();
-            return 0;
-        }
-        if (!(ret == 0 || (ret == -1 && (errno == EAGAIN || errno == EINTR)))) {
-            av_free_packet(pkt);
-            return AVERROR(EIO);
-        }
+    if (ret <= 0){
+        av_free_packet(pkt);
+        pkt->size = 0;
+        if (ret<0)  return AVERROR(errno);
+        else        return AVERROR(EOF);
     }
     pkt->size = ret;
 



More information about the ffmpeg-cvslog mailing list