⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 video.cpp

📁 神龙卡 SDK_84xx_DShow_145_02.zip 这个是 windows 上二个是linux
💻 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 + -