summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_nsv.c
diff options
context:
space:
mode:
authorrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-04-12 17:13:15 +0000
committerrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-04-12 17:13:15 +0000
commit14db042e2e9d61d9ed7ffe945c19e8a09ebdd206 (patch)
tree5ab098eab16fb374957a6238cdf2f205d8aa92fe /libmpdemux/demux_nsv.c
parentc526173ede76ee84410423f2cb3ffe101f6cc0cd (diff)
downloadmpv-14db042e2e9d61d9ed7ffe945c19e8a09ebdd206.tar.bz2
mpv-14db042e2e9d61d9ed7ffe945c19e8a09ebdd206.tar.xz
Fix vp61 keyframe search (do not skip blocks if 1st frame is keyframe)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12180 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_nsv.c')
-rw-r--r--libmpdemux/demux_nsv.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/libmpdemux/demux_nsv.c b/libmpdemux/demux_nsv.c
index 661c12e6e1..b22e7d9db1 100644
--- a/libmpdemux/demux_nsv.c
+++ b/libmpdemux/demux_nsv.c
@@ -134,6 +134,7 @@ demuxer_t* demux_open_nsv ( demuxer_t* demuxer )
// last 2 bytes 17 and 18 are unknown but right after that comes the length
unsigned char hdr[17];
int videolen,audiolen;
+ unsigned char buf[9];
sh_video_t *sh_video = NULL;
sh_audio_t *sh_audio = NULL;
@@ -265,23 +266,20 @@ demuxer_t* demux_open_nsv ( demuxer_t* demuxer )
// here we search for the correct keyframe
// vp6 keyframe is when the 2nd byte of the vp6 header is 0x36
if(priv->v_format==mmioFOURCC('V','P','6','1')){
- stream_read(demuxer->stream,hdr,9);
- videolen=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);
- audiolen=(hdr[5])|(hdr[6]<<8);
- mp_msg(MSGT_DEMUX,MSGL_V,"demux_nsv: Header: %08X\n",*hdr);
- stream_skip(demuxer->stream, videolen+audiolen-2);
- stream_read(demuxer->stream,hdr,9);
-
+ stream_read(demuxer->stream,buf,9);
if (hdr[8]!=0x36) {
- while(hdr[8]!=0x36){
- videolen=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);
- audiolen=(hdr[5])|(hdr[6]<<8);
+ mp_msg(MSGT_DEMUX,MSGL_V,"demux_nsv: searching vp6 keyframe...\n");
+ while(buf[8]!=0x36){
+ mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: vp6 block skip.\n");
+ videolen=(buf[2]>>4)|(buf[3]<<4)|(buf[4]<<0xC);
+ audiolen=(buf[5])|(buf[6]<<8);
stream_skip(demuxer->stream, videolen+audiolen-2);
- stream_read(demuxer->stream,hdr,9);
- if(hdr[0]==0x4E){
+ stream_read(demuxer->stream,buf,9);
+ if(buf[0]==0x4E){
+ mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: Got NSVs block.\n");
if(stream_eof(demuxer->stream)) return 0;
stream_skip(demuxer->stream,8);
- stream_read(demuxer->stream,hdr,9);
+ stream_read(demuxer->stream,buf,9);
}
}
}