summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_nsv.c29
1 files changed, 7 insertions, 22 deletions
diff --git a/libmpdemux/demux_nsv.c b/libmpdemux/demux_nsv.c
index 6341abd7ca..0987aa29b9 100644
--- a/libmpdemux/demux_nsv.c
+++ b/libmpdemux/demux_nsv.c
@@ -285,36 +285,21 @@ static demuxer_t* demux_open_nsv ( demuxer_t* demuxer )
static int nsv_check_file ( demuxer_t* demuxer )
{
- unsigned char hdr;
+ uint32_t hdr = 0;
int i;
- /* Store original position */
-// off_t orig_pos = stream_tell(demuxer->stream);
-
mp_msg ( MSGT_DEMUX, MSGL_V, "Checking for Nullsoft Streaming Video\n" );
for (i = 0; i < HEADER_SEARCH_SIZE; i++) {
- if (stream_read_char(demuxer->stream) != 'N')
- continue;
- if(stream_eof(demuxer->stream))
- return 0;
-
- if (stream_read_char(demuxer->stream) != 'S')
- continue;
- if(stream_eof(demuxer->stream))
- return 0;
- if (stream_read_char(demuxer->stream) != 'V')
- continue;
- if(stream_eof(demuxer->stream))
- return 0;
-
- hdr = stream_read_char(demuxer->stream);
- if(stream_eof(demuxer->stream))
+ uint8_t c = stream_read_char(demuxer->stream);
+ if (stream_eof(demuxer->stream))
return 0;
- if((hdr == 'f') || (hdr == 's')) {
- stream_seek(demuxer->stream,stream_tell(demuxer->stream)-4);
+ if (hdr == mmioFOURCC('s', 'V', 'S', 'N') ||
+ (hdr == mmioFOURCC('f', 'V', 'S', 'N') && !c)) {
+ stream_seek(demuxer->stream,stream_tell(demuxer->stream)-5);
return DEMUXER_TYPE_NSV;
}
+ hdr = (hdr << 8) | c;
}
return 0;