📄 lists.cpp
字号:
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 + -