📄 video.cpp
字号:
/***********************************************************************/
/* video.cpp :
* REALmagic Quasar Hardware Library
* Created by Kevin Vo
* Copyright 2000 Sigma Designs Inc.
* 355 Fairview Way, Milpitas, CA 95035-3024 USA. All Rights Reserved.
* Sigma Designs Proprietary and Confidential
* Created on 3/20/01
* Description: Parses the video elementary stream.
/************************************************************************/
#include "pch.h"
#include "manager.h"
#include "splitter.h"
///////////////////////////////////////////////////////////////////
CMpegVideo::CMpegVideo(MemManager *pMemManager) : CBitParser(pMemManager)
{
}
///////////////////////////////////////////////////////////////////
CMpegVideo::~CMpegVideo()
{
if (!m_bStopDemux)
StopDemux();
}
///////////////////////////////////////////////////////////////////
/****f* MMDemux/CMpegVideo::Process
* USAGE
* void Process(CBuffer *pCBuffer)
* DESCRIPTION
* Processes the video payload.
* PARAMETERS
* CBuffer* pCBuffer - a pointer to the CBuffer object which contains
* the video payload.
* RETURN VALUE
* STOP_DEMUX if the buffer is NULL; otherwise, SUCCESS_DEMUX
/**********************************************************************/
int CMpegVideo::Process(CBuffer *pCBuffer)
{
if (pCBuffer != NULL)
{
m_pCBuffer = pCBuffer;
m_dwBufferIndex = 0;
m_dwBufferSize = m_pCBuffer->GetActualSize();
m_pBuffer = (BYTE*)m_pCBuffer->GetBuffer();
int iReturnCode = ParseMpegVideo();
if (m_bStopDemux)
return STOP_DEMUX;
else // iReturnCode == SUCCESS_DEMUX
m_pCBuffer->Release();
return SUCCESS_DEMUX;
}
else
{
return STOP_DEMUX;
}
}
////////////////////////////////////////////////////////////////////
int CMpegVideo::ParseMpegVideo()
// PURPOSE: Parses the MpegVideo file.
{
INT iPacketDataLength = 2048;
while (TRUE)
{
if (m_bStopDemux)
return STOP_DEMUX;
else if (m_dwBufferIndex + iPacketDataLength < m_dwBufferSize)
{
m_bPayloadPtr = m_pBuffer + m_dwBufferIndex;
m_dwPayloadLength = iPacketDataLength;
m_bStreamType = MM_VIDEO;
m_llPts = 0;
m_bPtsDtsFlag = FALSE;
// Move ptr to end of this packet
m_dwBufferIndex += iPacketDataLength;
SetMediaSampleParameters();
}
else // Last packet in the buffer
{
m_bPayloadPtr = m_pBuffer + m_dwBufferIndex;
m_dwPayloadLength = m_dwBufferSize - m_dwBufferIndex;
m_bStreamType = MM_VIDEO;
m_llPts = 0;
m_bPtsDtsFlag = FALSE;
SetMediaSampleParameters();
break;
}
}
return SUCCESS_DEMUX;
}
///////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -