Mercurial > mplayer.hg
comparison libmpdemux/demux_nsv.c @ 12179:aeb377ccb110
Fix vp61 keyframe search (do not skip blocks if 1st frame is keyframe)
author | rtognimp |
---|---|
date | Mon, 12 Apr 2004 17:13:15 +0000 |
parents | da8e39bfe121 |
children | 12ddc64011fe |
comparison
equal
deleted
inserted
replaced
12178:4a3a984b2fb4 | 12179:aeb377ccb110 |
---|---|
132 demuxer_t* demux_open_nsv ( demuxer_t* demuxer ) | 132 demuxer_t* demux_open_nsv ( demuxer_t* demuxer ) |
133 { | 133 { |
134 // last 2 bytes 17 and 18 are unknown but right after that comes the length | 134 // last 2 bytes 17 and 18 are unknown but right after that comes the length |
135 unsigned char hdr[17]; | 135 unsigned char hdr[17]; |
136 int videolen,audiolen; | 136 int videolen,audiolen; |
137 unsigned char buf[9]; | |
137 sh_video_t *sh_video = NULL; | 138 sh_video_t *sh_video = NULL; |
138 sh_audio_t *sh_audio = NULL; | 139 sh_audio_t *sh_audio = NULL; |
139 | 140 |
140 | 141 |
141 // vp6x magic keyframe ee if no keyframe f0 if keyframe correct if theres a mistake | 142 // vp6x magic keyframe ee if no keyframe f0 if keyframe correct if theres a mistake |
263 mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: VP50 video does not work yet. Expect problems.\n"); | 264 mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: VP50 video does not work yet. Expect problems.\n"); |
264 | 265 |
265 // here we search for the correct keyframe | 266 // here we search for the correct keyframe |
266 // vp6 keyframe is when the 2nd byte of the vp6 header is 0x36 | 267 // vp6 keyframe is when the 2nd byte of the vp6 header is 0x36 |
267 if(priv->v_format==mmioFOURCC('V','P','6','1')){ | 268 if(priv->v_format==mmioFOURCC('V','P','6','1')){ |
268 stream_read(demuxer->stream,hdr,9); | 269 stream_read(demuxer->stream,buf,9); |
269 videolen=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC); | |
270 audiolen=(hdr[5])|(hdr[6]<<8); | |
271 mp_msg(MSGT_DEMUX,MSGL_V,"demux_nsv: Header: %08X\n",*hdr); | |
272 stream_skip(demuxer->stream, videolen+audiolen-2); | |
273 stream_read(demuxer->stream,hdr,9); | |
274 | |
275 if (hdr[8]!=0x36) { | 270 if (hdr[8]!=0x36) { |
276 while(hdr[8]!=0x36){ | 271 mp_msg(MSGT_DEMUX,MSGL_V,"demux_nsv: searching vp6 keyframe...\n"); |
277 videolen=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC); | 272 while(buf[8]!=0x36){ |
278 audiolen=(hdr[5])|(hdr[6]<<8); | 273 mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: vp6 block skip.\n"); |
274 videolen=(buf[2]>>4)|(buf[3]<<4)|(buf[4]<<0xC); | |
275 audiolen=(buf[5])|(buf[6]<<8); | |
279 stream_skip(demuxer->stream, videolen+audiolen-2); | 276 stream_skip(demuxer->stream, videolen+audiolen-2); |
280 stream_read(demuxer->stream,hdr,9); | 277 stream_read(demuxer->stream,buf,9); |
281 if(hdr[0]==0x4E){ | 278 if(buf[0]==0x4E){ |
279 mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: Got NSVs block.\n"); | |
282 if(stream_eof(demuxer->stream)) return 0; | 280 if(stream_eof(demuxer->stream)) return 0; |
283 stream_skip(demuxer->stream,8); | 281 stream_skip(demuxer->stream,8); |
284 stream_read(demuxer->stream,hdr,9); | 282 stream_read(demuxer->stream,buf,9); |
285 } | 283 } |
286 } | 284 } |
287 } | 285 } |
288 | 286 |
289 | 287 |