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

📄 lists.cpp

📁 神龙卡 SDK_84xx_DShow_145_02.zip 这个是 windows 上二个是linux
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	m_ullCts = ullCts;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::SetPts
 * USAGE
 *  void SetPts(ULONGLONG pts)
 * DESCRIPTION 
 *  Sets the Pts value.
 * PARAMETERS
 *  ULONGLONG pts - PTS value for this media sample.
 * RETURN VALUE
 *  None.
/**********************************************************************/
void CIMediaSample::SetPts(ULONGLONG pts)
{
	m_ullPts = pts;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::SetPts
 * USAGE
 *  void SetPts(ULONGLONG pts, INT bPtsFlag)
 * DESCRIPTION 
 *  Sets the Pts value.
 * PARAMETERS
 *  ULONGLONG pts - PTS value for this media sample.
 *  INT bPtsFlag - TRUE if PTS presents, FALSE otherwise
 * RETURN VALUE
 *  None.
/**********************************************************************/
void CIMediaSample::SetPts(ULONGLONG pts, INT bPtsFlag)
{
	m_ullPts = pts;
	m_bPtsDtsFlag = bPtsFlag;
}


////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::GetFirstAccessUnit
 * USAGE
 *  UINT GetFirstAccessUnit()
 * DESCRIPTION 
 *  Gets the FirstAccessUnitPointer (For audio stream with AC3/DTS).
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  FirstAccessUnitPointer value.
 **********************************************************************/
UINT CIMediaSample::GetFirstAccessUnit()
{
	return m_iFirstAccessUnit;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::SetFirstAccessUnit
 * USAGE
 *  void SetFirstAccessUnit(UINT iFirstAccessUnit)
 * DESCRIPTION 
 *  Sets the FirstAccessUnitPointer (For audio stream with AC3/DTS).
 * PARAMETERS
 *  UINT iFirstAccessUnit - 
 * RETURN VALUE
 *  None
 **********************************************************************/
void CIMediaSample::SetFirstAccessUnit(UINT iFirstAccessUnit)
{
	m_iFirstAccessUnit = iFirstAccessUnit;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::GetNFrameHeaders
 * USAGE
 *  UCHAR GetNFrameHeaders()
 * DESCRIPTION 
 *  Gets the Number of Frame Headers (For audio stream with AC3/DTS).
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  Value of Number of Frame Headers.
 **********************************************************************/
UCHAR CIMediaSample::GetNFrameHeaders()
{
	return m_bNFrameHeaders;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::SetNFrameHeaders
 * USAGE
 *  void SetNFrameHeaders(UCHAR nFrameHeaders)
 * DESCRIPTION 
 *  Sets the Number of Frame Headers (For audio stream with AC3/DTS).
 * PARAMETERS
 *  UCHAR nFrameHeaders - 
 * RETURN VALUE
 *  None
 **********************************************************************/
void CIMediaSample::SetNFrameHeaders(UCHAR nFrameHeaders)
{
	m_bNFrameHeaders = nFrameHeaders;
}

////////////////////////////////////////////////////////////////////

LONG CIMediaSample::GetSampleRate()
{
	return m_lSampleRate;
}

////////////////////////////////////////////////////////////////////

void CIMediaSample::SetSampleRate(LONG rate)
{
	m_lSampleRate = rate;
}

////////////////////////////////////////////////////////////////////
// Implement the overloaded functions
////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::GetPointer
 * USAGE
 *  UCHAR* GetPointer()
 *  UCHAR* GetPayload()
 *  HRESULT GetPointer(BYTE**)
 * DESCRIPTION 
 *  Returns a pointer to the payload.
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  A pointer to the payload.
 **********************************************************************/
UCHAR* CIMediaSample::GetPointer(void)
{
	return m_pPayload;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::GetTime
 * USAGE
 *  ULONGLONG GetTime()
 * DESCRIPTION 
 *  Gets the PTS.
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  The PTS value
 **********************************************************************/
ULONGLONG CIMediaSample::GetTime(void)
{
	if (m_bPtsDtsFlag)
		return m_ullPts;
	else
		return 0;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::GetMediaType
 * USAGE
 *  UCHAR GetMediaType()
 * DESCRIPTION 
 *  Gets media type (MM_AUDIO/MM_VIDEO).
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  Media type (MM_AUDIO/MM_VIDEO)
 **********************************************************************/
UCHAR CIMediaSample::GetMediaType(void)
{
	return m_bMediaType;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::SetMediaType
 * USAGE
 *  void SetMediaType(unsigned char a_v
 * DESCRIPTION 
 *  Set the media type
 * PARAMETERS
 *  unsigned char a_v - MM_AUDIO or MM_VIDEO
 * RETURN VALUE
 *  None
 **********************************************************************/
void CIMediaSample::SetMediaType(unsigned char a_v)
{
	m_bMediaType = a_v;
}

////////////////////////////////////////////////////////////////////
// Implement the IMediaSample interface
////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::QueryInterface(MM_REFIID riid, void** ppvoid)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

ULONG CIMediaSample::AddRef( void)
{
	m_iCount++;
	return m_iCount;
}

////////////////////////////////////////////////////////////////////

ULONG CIMediaSample::Release( void)
{
	m_iCount--;
	if (m_iCount == 0)
	{
		MemManager *pManager = (MemManager*) m_pMemManager;
		pManager->ReleaseMediaSample(this);
	}
	else if (m_iCount < 0)
		m_iCount = 0;
	return m_iCount;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::GetPointer(BYTE** ppBuffer)
{
	*ppBuffer = m_pPayload;
	return MM_OK;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::GetSize
 * USAGE
 *  HRESULT GetSize()
 * DESCRIPTION 
 *  Gets the payload size.
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  The payload size.
 **********************************************************************/
HRESULT CIMediaSample::GetSize(void)
{
	return m_lPayloadLength;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::GetActualDataLength
 * USAGE
 *  HRESULT GetActualDataLength()
 * DESCRIPTION 
 *  Gets the payload length of this media sample.
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  Payload length.
 **********************************************************************/
HRESULT CIMediaSample::GetActualDataLength(void)
{
	return m_lPayloadLength;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSample::SetActualDataLength
 * USAGE
 *  HRESULT SetActualDataLength(long len)
 * DESCRIPTION 
 *  Sets the payload length of this media sample.
 * PARAMETERS
 *  LONG len - the length of this payload
 * RETURN VALUE
 *  MM_OK
 **********************************************************************/
HRESULT CIMediaSample::SetActualDataLength(LONG len)
{
	m_lPayloadLength = len;
	return MM_OK;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::GetMediaTime(LONGLONG* pTimeStart, LONGLONG* pTimeEnd)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::SetMediaTime(LONGLONG* pTimeStart, LONGLONG* pTimeEnd)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::GetMediaType(MM_AM_MEDIA_TYPE** ppMediaType)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::SetMediaType(MM_AM_MEDIA_TYPE* pMediaType)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::GetTime(LONGLONG* pTimeStart, LONGLONG* pTimeEnd)
{
	if (m_bPtsDtsFlag == FALSE)
		return ((HRESULT)0x80040251L);	// VFW_E_MEDIA_TIME_NOT_SET;
	else
	{
		*pTimeStart = ((m_ullPts * 1000) / 9);
		return MM_OK;
	}	
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::SetTime(LONGLONG* pTimeStart, LONGLONG* pTimeEnd)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::IsDiscontinuity( void)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::SetDiscontinuity(BOOL bDiscontinuity)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::IsPreroll( void)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::SetPreroll(BOOL bIsPreroll)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::IsSyncPoint( void)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////

HRESULT CIMediaSample::SetSyncPoint(BOOL bIsSyncPoint)
{
	return MM_NOTIMPL;
}

////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//    Double Linked List implementation of CIMediaSampleList       //
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////


/****f* MMDemux/CIMediaSampleList::CIMediaSampleList
 * USAGE
 *  CIMediaSampleList()
 * DESCRIPTION 
 *  Default constructor of CIMediaSampleList.
 * PARAMETERS
 *  None.
 * RETURN VALUE
 *  None.
/**********************************************************************/
CIMediaSampleList::CIMediaSampleList()
{
	start = last = current = NULL;
}

////////////////////////////////////////////////////////////////////

CIMediaSampleList::~CIMediaSampleList()
{
	CIMediaSample *temp = NULL;
	while (start != NULL) 
	{
		temp = start;
		start = start->next;
		delete temp;
	}
	start = last = NULL;
}

////////////////////////////////////////////////////////////////////

void CIMediaSampleList::SetCIMediaSample(CIMediaSample *pMedia)
{
	if (pMedia)
	{
		if (last == NULL)	// first item in list
			start = last = current = pMedia;
		else		// insert at the end
			last->next = pMedia;
		pMedia->next = NULL;
		pMedia->prior = last;
		last = pMedia;
	}
}

////////////////////////////////////////////////////////////////////

CIMediaSample *CIMediaSampleList::GetCIMediaSample()
{
	CIMediaSample *temp = 0;

	if (start)	// delete first entry
	{
		temp = start;
		start = start->next;
		if (start)
			start->prior = NULL;
		else	
			start = last = NULL;
	}
	return temp;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSampleList::GetMediaSample
 * USAGE
 *  CIMediaSample *GetMediaSample()
 * DESCRIPTION 
 *  Get a MediaSample from the list.
 * PARAMETERS
 *  None.
 * RETURN VALUE
 *  A pointer to the MediaSample if not NULL.
 *  NULL otherwise.
/**********************************************************************/
CIMediaSample *CIMediaSampleList::GetMediaSample(void)
{
	CIMediaSample *pMedia = GetCIMediaSample();
	return pMedia;
}

CIMediaSample *CIMediaSampleList::GetFirstMediaSample(void)
{
	return start;
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSampleList::SetMediaSample
 * USAGE
 *  void SetMediaSample(CIMediaSample *pMedia)
 * DESCRIPTION 
 *  Insert a MediaSample into the list.
 * PARAMETERS
 *  CIMediaSample *pMedia - A pointer to the MediaSample that will be inserted.
 * RETURN VALUE
 *  None.
/**********************************************************************/
void CIMediaSampleList::SetMediaSample(CIMediaSample *pMedia)
{
	SetCIMediaSample(pMedia);
}

////////////////////////////////////////////////////////////////////
/****f* MMDemux/CIMediaSampleList::EmptyList
 * USAGE
 *  void EmptyList(void)
 * DESCRIPTION 
 *  Empty all samples in the list
 * PARAMETERS
 *  None
 * RETURN VALUE
 *  None.
/**********************************************************************/
void CIMediaSampleList::EmptyList(void)
{
	CIMediaSample *pMedia = 0;
	while (1)
	{
		pMedia = GetMediaSample();
		if (pMedia)
			pMedia->Release();
		else
			break;
	}
}

////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -