Browse Source

Replace very odd and completely broken oss read_packet() by the obvious way to

read.
Fixes issue348.

Originally committed as revision 20629 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.6
Michael Niedermayer 16 years ago
parent
commit
fed0c2fb71
1 changed files with 5 additions and 24 deletions
  1. +5
    -24
      libavdevice/oss_audio.c

+ 5
- 24
libavdevice/oss_audio.c View 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;



Loading…
Cancel
Save