# HG changeset patch # User ods15 # Date 1163880798 0 # Node ID fbf3f8cd0bf672bc8ca183817d2b21fa470ad369 # Parent bc0afb5afa986e676272c6d79bb7e510054eb819 Add disabled EAGAIN testing code for libnut diff -r bc0afb5afa98 -r fbf3f8cd0bf6 libmpdemux/demux_nut.c --- a/libmpdemux/demux_nut.c Sat Nov 18 19:36:28 2006 +0000 +++ b/libmpdemux/demux_nut.c Sat Nov 18 20:13:18 2006 +0000 @@ -23,10 +23,17 @@ stream_t * stream = (stream_t*)h; if(stream_eof(stream)) return 0; + //len = MIN(len, 5); return stream_read(stream, buf, len); } +static int mp_eof(void * h) { + stream_t * stream = (stream_t*)h; + if(stream_eof(stream)) return 1; + return 0; +} + static off_t mp_seek(void * h, long long pos, int whence) { stream_t * stream = (stream_t*)h; @@ -64,7 +71,7 @@ .priv = demuxer->stream, .seek = mp_seek, .read = mp_read, - .eof = NULL, + .eof = mp_eof, .file_pos = stream_tell(demuxer->stream), }, .alloc = { .malloc = NULL }, @@ -77,7 +84,8 @@ int ret; int i; - if ((ret = nut_read_headers(nut, &s, NULL))) { + while ((ret = nut_read_headers(nut, &s, NULL)) == NUT_ERR_EAGAIN); + if (ret) { mp_msg(MSGT_HEADER, MSGL_ERR, "NUT error: %s\n", nut_error(ret)); nut_demuxer_uninit(nut); free(priv); @@ -180,7 +188,7 @@ demuxer->filepos = stream_tell(demuxer->stream); if (stream_eof(demuxer->stream)) return 0; - ret = nut_read_next_packet(nut, &pd); + while ((ret = nut_read_next_packet(nut, &pd)) == NUT_ERR_EAGAIN); if (ret) { if (ret != NUT_ERR_EOF) mp_msg(MSGT_HEADER, MSGL_ERR, "NUT error: %s\n", @@ -202,7 +210,7 @@ } else { uint8_t buf[pd.len]; - ret = nut_read_frame(nut, &pd.len, buf); + while ((ret = nut_read_frame(nut, &pd.len, buf)) == NUT_ERR_EAGAIN); if (ret) { mp_msg(MSGT_HEADER, MSGL_ERR, "NUT error: %s\n", nut_error(ret)); @@ -220,7 +228,9 @@ dp->pos = demuxer->filepos; dp->flags= (pd.flags & NUT_FLAG_KEY) ? 0x10 : 0; - ret = nut_read_frame(nut, &pd.len, dp->buffer); + {int len = pd.len; + while ((ret = nut_read_frame(nut, &len, dp->buffer + pd.len-len)) == NUT_ERR_EAGAIN); + } if (ret) { mp_msg(MSGT_HEADER, MSGL_ERR, "NUT error: %s\n", nut_error(ret)); @@ -249,7 +259,7 @@ (double)priv->s[0].time_base.nom / priv->s[0].time_base.den; - ret = nut_seek(nut, time_pos, nutflags, tmp); + while ((ret = nut_seek(nut, time_pos, nutflags, tmp)) == NUT_ERR_EAGAIN); if (ret) mp_msg(MSGT_HEADER, MSGL_ERR, "NUT error: %s\n", nut_error(ret)); if (sh_audio) resync_audio_stream(sh_audio); }