0x00, 0x00, 0x01, 0xb6作为一个VOL(VOP?)的开始,紧跟着它的,有 2bit 的标志,用来表征这个 Frame到底是一个 I Frame还是 P Frame,抑或是 B Frame:
00: I Frame
01: P Frame
10: B Frame
但是,有关这 2bit 是在0xb6的后面字节的高位还是低位,却没有很明确的描述。
于是又回头开始针对某个AVI文件开始分析,结果终于发现,判定方法原来是这个样子滴:
static char *Find_VOP_Start(unsigned char *addrp, unsigned int FindSizes)
{
int i = 0;
while(i < FindSizes)
{
if(addrp[i] == 0x00)
if(addrp[i + 1] == 0x00)
if(addrp[i + 2] == 0x01)
if(addrp[i + 3] == 0xB6)
break;
i++;
}
if(i < FindSizes - 4)
return addrp + i + 4;
else
return 0;
}
unsigned int *p = Find_VOP_Start(VLCData, VLCSize);
switch(*p & 0xC0)
{
case 0x00:
// I Frame
break;
case 0x40:
// P Frame
break;
case 0x80:
// B Frame
break;
}