[MPlayer-users] [BUG] incorrect detection of VP3/VP6 keyframes in NSV demux
Corey Hickey
bugfood-ml at fatooh.org
Tue Jul 25 20:38:44 CEST 2006
Chris Dolan wrote:
> As of SVN r18890, the NSV demuxer uses an incorrect algorithm to detect
> keyframes in a VP31, VP61 or VP62 stream. As documented for VP3
> (http://www.multimedia.cx/vp3-format.txt) the keyframe/interframe
> distingisher is bit 7 of the frame header, that is, "buf[7] & 0x80" in
> the notation of the code below. The below code looks for a magic number
> in bits 9-11 for VP6x and bits 8-23 for VP31, both of which are
> incorrect. While keyframes should always pass those tests, interframes
> may accidentally pass them too.
>
> I've examined several FLVs containing VP62 video and discovered that bit
> 7 is the only consistent distinguisher between keyframes and
> interframes. I don't have any authoritative documentation for VP61 or
> VP62, so this conclusion is empirical.
>
>
> Current code:
> http://svn.mplayerhq.hu/mplayer/trunk/libmpdemux/demux_nsv.c?view=markup&pathrev=18890
>
>
> // here we search for the correct keyframe
> // vp6 keyframe is when the 2nd byte of the vp6 header is
> // 0x36 for VP61 and 0x46 for VP62
> if((priv->v_format==mmioFOURCC('V','P','6','1')) ||
> (priv->v_format==mmioFOURCC('V','P','6','2')) ||
> (priv->v_format==mmioFOURCC('V','P','3','1'))) {
> stream_read(demuxer->stream,buf,10);
> if (((((priv->v_format>>16) & 0xff) == '6') &&
> ((buf[8]&0x0e)!=0x06)) ||
> ((((priv->v_format>>16) & 0xff) == '3') &&
> (buf[8]!=0x00 || buf[9]!=0x08))) {
>
> Speculative fix (untested):
>
> // here we search for the correct keyframe
> // vp3/6 keyframe is indicated by bit 7 of the frame header
> if((priv->v_format==mmioFOURCC('V','P','6','1')) ||
> (priv->v_format==mmioFOURCC('V','P','6','2')) ||
> (priv->v_format==mmioFOURCC('V','P','3','1'))) {
> stream_read(demuxer->stream,buf,10);
> if ((buf[7]&0x80)==0) {
>
> Please note that all of my experiments have been on FLV files, not NSV
> files, but in the VP62 case, they contain similar payload.
If you can suggest a fix to a problem, please subscribe to the
mplayer-dev-eng list and post there. Also, provide fixes in the unified
diff format. 'svn diff' is the easiest way.
-Corey
More information about the MPlayer-users
mailing list