OSDN Git Service

Replace very odd and completely broken oss read_packet() by the obvious way to
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 27 Nov 2009 13:37:53 +0000 (13:37 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 27 Nov 2009 13:37:53 +0000 (13:37 +0000)
read.
Fixes issue348.

Originally committed as revision 20629 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavdevice/oss_audio.c

index ed1a7a1..8876bd2 100644 (file)
@@ -250,32 +250,13 @@ static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt)
 
     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;