DWORD CRevPlayWnd::Parse(PBYTE Ptr, DWORD dwSize, LONGLONG *llTime)
{
DWORD RetV;
DWORD LeftBytes = dwSize;
while ((LONGLONG)LeftBytes >= 4 ) {
if (!NextStartCode ((const BYTE **)&Ptr, &LeftBytes))
break;
DWORD Code = DWORD_SWAP(*(UNALIGNED DWORD *)Ptr);
if (VALID_PACKET(Code)) {
PBYTE PcktPtr;
DWORD Remain;
DWORD PtsPos;
RetV = ParseMPEG1Packet(Ptr, LeftBytes, &PacketData, &PtsPos);
PcktPtr = Ptr+4;
Remain = RetV;
while ((LONG)Remain > 4) {
if (!NextStartCode ((const BYTE **)&PcktPtr, &Remain))
break;
DWORD PcktCode = DWORD_SWAP(*(UNALIGNED DWORD *)PcktPtr);
switch (PcktCode) {
case SEQUENCE_HEADER_CODE:
ParseSequenceHeader(PcktPtr, 0, &SeqInfo);
return (SeqInfo.dwBitRate);
}
PcktPtr += 4;
Remain -=4 ;
}
} else {
switch (Code) {
case PACK_START_CODE:
GetClock (Ptr+4, llTime);
RetV = PACK_HEADER_LENGTH;
break;
case SYSTEM_HEADER_START_CODE:
RetV = ParseSystemHeader(Ptr, LeftBytes);
break;
default:
RetV = 4;
break;
}
}
Ptr += RetV;
LeftBytes -= RetV;
if (RetV <=0)
break;
}
return 0;
}
void CRevPlayWnd::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rect;
GetClientRect(&rect);
if(m_pivw)
m_pivw -> SetWindowPosition(rect.left, rect.top, rect.right, rect.bottom);
}