List Info

Thread: r238 - trunk/libnut/demuxer.c




r238 - trunk/libnut/demuxer.c
user name
2006-11-18 14:44:12
Author: ods15
Date: Sat Nov 18 15:44:12 2006
New Revision: 238

Modified:
   trunk/libnut/demuxer.c

Log:
add a last resort in main header search - not stop search at
syncpoints


Modified: trunk/libnut/demuxer.c
============================================================
==================
--- trunk/libnut/demuxer.c	(original)
+++ trunk/libnut/demuxer.c	Sat Nov 18 15:44:12 2006
 -726,7
+726,7 
 		tmp = (tmp << 8) | *(nut->i->buf_ptr++);
 		if (tmp == MAIN_STARTCODE) break;
 		// give up if we reach a syncpoint, unless we're
searching the file end
-		if (tmp == SYNCPOINT_STARTCODE &&
nut->seek_status != 18) break;
+		if (tmp == SYNCPOINT_STARTCODE &&
nut->seek_status != 18 &&
!nut->last_syncpoint) break;
 	}
 	if (tmp == MAIN_STARTCODE) {
 		off_t pos = bctello(nut->i) - 8;
 -741,7
+741,7 
 			ERROR(err, err); // if get_bytes returns EAGAIN or a
memory error, check for that
 		} while (tmp != SYNCPOINT_STARTCODE);
 		if (tmp == SYNCPOINT_STARTCODE) { // success!
-			nut->before_seek = nut->seek_status = 0;
+			nut->last_syncpoint = nut->before_seek =
nut->seek_status = 0;
 			nut->last_headers = pos;
 			nut->i->buf_ptr = get_buf(nut->i,
nut->last_headers);
 			flush_buf(nut->i);
 -766,6
+766,13 
 	// evantually we'll hit EOF and give up
 	return find_main_headers(nut);
 err_out:
+	if (err == NUT_ERR_EOF && !nut->last_syncpoint
&& nut->seek_status) {
+		// last resort: after checking whole file, try again,
this time don't stop at syncpoints.
+		nut->last_syncpoint = 1;
+		nut->before_seek = nut->seek_status = 0;
+		seek_buf(nut->i, 0, SEEK_SET);
+		return find_main_headers(nut);
+	}
 	return err;
 }
 
_______________________________________________
NUT-devel mailing list
NUT-develmplayerhq.hu

http://lists.mplayerhq.hu/mailman/listinfo/nut-devel
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )