qtatmmgs.h

来自「symbian 下的helix player源代码」· C头文件 代码 · 共 688 行 · 第 1/2 页

H
688
字号
 *  Sample Description Manager
 */
class CQT_SampleDescription_Manager
{
public:
    /*
     *	Constructor/Destructor
     */
    CQT_SampleDescription_Manager(void);
    ~CQT_SampleDescription_Manager();

    /*
     *	Main Interface
     */
    HX_RESULT Init(CQTAtom* pAtom);

    BOOL EstablishByIdx(ULONG32 ulSampleDescIdx)
    {
	if (ulSampleDescIdx == m_ulSampleDescIdx)
	{
	    return TRUE;
	}

	if (ulSampleDescIdx < m_ulNumEntries)
	{
	    m_ulSampleDescIdx = ulSampleDescIdx;
	    return ParseSampleDescription();
	}

	return FALSE;
    }

    ULONG32 GetDataRefIdx(void)		{ return m_ulDataRefIdx; }
    ULONG32 GetDataFormat(void)		{ return m_ulDataFormat; }
    ULONG32 GetNumEntries(void)		{ return m_ulNumEntries; }
    ULONG32 GetRTPTimeScale(void)	{ return m_ulRTPTimeScale; }
    LONG32  GetTimeStampOffset(void)	{ return m_lTimeStampOffset; }
    LONG32  GetSequenceNumOffset(void)	{ return m_lSequenceNumOffset; }
    CQT_stsd_Atom::ArrayEntry* GetSampleDescEntry(void)	{ return m_pSampleDesc; }
    ULONG32 GetSampleDescBufferOffset(void)	
    {
	HX_ASSERT(m_pSampleDescriptionAtom);
	return (ULONG32) (((UINT8*) m_pSampleDesc) - 
			  m_pSampleDescriptionAtom->GetData());
    }
    IHXBuffer* GetSampleDescBuffer(void)
    {
	HX_ASSERT(m_pSampleDescriptionAtom);
	return m_pSampleDescriptionAtom->GetBuffer();
    }
    CQT_stsd_Atom* GetSampleDescriptionAtom() { return m_pSampleDescriptionAtom; }

private:
    BOOL ParseSampleDescription(void);

    CQT_stsd_Atom* m_pSampleDescriptionAtom;

    ULONG32 m_ulSampleDescIdx;
    CQT_stsd_Atom::ArrayEntry* m_pSampleDesc;
    ULONG32 m_ulDataRefIdx;
    ULONG32 m_ulDataFormat;
    ULONG32 m_ulRTPTimeScale;
    LONG32  m_lTimeStampOffset;
    LONG32  m_lSequenceNumOffset;
    ULONG32 m_ulNumEntries;
    ULONG32 m_ulDataRefIdxOffset;
};

/****************************************************************************
 *  Data Reference Manager
 */
class CQT_DataReference_Manager
{
public:
    /*
     *	Constructor/Destructor
     */
    CQT_DataReference_Manager(void);
    ~CQT_DataReference_Manager();

    /*
     *	Main Interface
     */
    HX_RESULT Init(CQTAtom* pAtom, IHXCommonClassFactory* pClassFactory);

    BOOL EstablishByIdx(ULONG32 ulDataRefIdx)
    {
	if (ulDataRefIdx == m_ulDataRefIdx)
	{
	    return TRUE;
	}

	if (ulDataRefIdx < m_ulNumEntries)
	{
	    m_ulDataRefIdx = ulDataRefIdx;
	    return ParseDataReference();
	}

	return FALSE;
    }

    IHXBuffer* GetDataRefName(void)	{ return m_pDataRefName; }

private:
    BOOL ParseDataReference(void);
    BOOL FindRelPath(UINT8* pData,
		     ULONG32 ulDataLength, 
		     UINT8* &pRelPath, 
		     ULONG32 &ulPathLength);

    CQT_dref_Atom* m_pDataReferenceAtom;

    ULONG32 m_ulDataRefIdx;
    IHXBuffer* m_pDataRefName;
    IHXCommonClassFactory* m_pClassFactory;
    ULONG32 m_ulNumEntries;
};

/****************************************************************************
 *  Hint Reference Manager
 */
class CQT_HintReference_Manager
{
public:
    /*
     *	Constructor/Destructor
     */
    CQT_HintReference_Manager(void);
    ~CQT_HintReference_Manager();

    /*
     *	Main Interface
     */
    HX_RESULT Init(CQTAtom* pAtom);

    BOOL EstablishByIdx(ULONG32 ulTrackRefIdx)
    {
	if (ulTrackRefIdx == m_ulTrackRefIdx)
	{
	    return TRUE;
	}

	if (ulTrackRefIdx < m_ulNumEntries)
	{
	    m_ulTrackRefIdx = ulTrackRefIdx;
	    return ParseTrackReference();
	}

	return FALSE;
    }

    ULONG32 GetTrackID(void)	{ return m_ulTrackID; }

private:
    BOOL ParseTrackReference(void)
    {
	m_ulTrackID = m_pHintAtom->Get_TrackID(m_ulTrackRefIdx);
	
	return TRUE;
    }

    CQT_hint_Atom* m_pHintAtom;

    ULONG32 m_ulTrackRefIdx;
    ULONG32 m_ulTrackID;
    ULONG32 m_ulNumEntries;
};

/****************************************************************************
 *  Track Info Manager
 */
class CQT_TrackInfo_Manager
{
public:
    /*
     *	Constructor/Destructor
     */
    CQT_TrackInfo_Manager(void);
    ~CQT_TrackInfo_Manager();

    /*
     *	Main Interface
     */
    HX_RESULT Init(IUnknown* pContext,
		   CQTAtom* pAtom,
		   CQT_SampleDescription_Manager* pSampleDescManager,
		   CQTTrackManager* pTrackManager,
		   CQT_MovieInfo_Manager* pMovieInfo = NULL);
		   
    HX_RESULT CheckForcePacketization(CQT_sdp_Atom* pSDPAtom, IUnknown* pContext);

    QTAtomType GetTrackType(void)	{ return m_TrackType; }

    ULONG32 GetMediaTimeScale(void)	{ return m_ulMediaTimeScale; }
    // Track duration is given in movie units
    ULONG32 GetTrackDuration(void)	{ return m_ulTrackDuration; }

    ULONG32 GetNameLength(void);
    const UINT8* GetName(void);

    ULONG32 GetSDPLength(void);
    const UINT8* GetSDP(void);

    ULONG32 GetOpaqueDataLength(void);
    const UINT8* GetOpaqueData(void);

    const UINT32 GetNumSamplesInOpaqueData(void);

    const char* GetMimeType(void)   { return m_pMimeType; }

    ULONG32 GetTrackSize(void)	    { return m_ulTrackSize; }

    ULONG32 GetAvgBitrate(void)	    { return m_ulAvgBitrate; }

    ULONG32 GetMaxBitrate(void)	    { return m_ulMaxBitrate; }

    ULONG32 GetPreroll(void)	    { return m_ulPreroll; }

    ULONG32 GetPredata(void)	    { return m_ulPredata; }
    
    ULONG32 GetRefTrackId(void)	    { return m_ulRefTrackID; }

    ULONG32 GetTrackWidth(void)	    { return m_ulTrackWidth; }

    ULONG32 GetTrackHeight(void)    { return m_ulTrackHeight; }

    ULONG32 GetFrameWidth(void)     { return m_ulFrameWidth; }
    ULONG32 GetFrameHeight(void)    { return m_ulFrameHeight; }

    ULONG32 GetNumChannels(void)    { return m_ulChannels; }

    UINT32 GetTrackTransformX(void) { return m_ulTrackMatrixTransformX; }
    UINT32 GetTrackTransformY(void) { return m_ulTrackMatrixTransformY; }

    ULONG32 GetPayloadType(void);
    ULONG32 GetPayloadNameLength(void);
    UINT8* GetPayloadName(void);

    HX_RESULT GetHeader(IHXValues* &pHeader);
    void SetHeader(IHXValues* pHeader);

private:
    void Clear(void);

    HX_RESULT InitHinted(CQTAtom* pAtom,
			 CQT_SampleDescription_Manager* pSampleDescManager,
			 CQTTrackManager* pTrackManager,
			 CQT_MovieInfo_Manager* pMovieInfo);
    HX_RESULT InitNonHinted(CQTAtom* pAtom,
			    CQT_SampleDescription_Manager* pSampleDescManager,
			    CQTTrackManager* pTrackManager,
			    CQT_MovieInfo_Manager* pMovieInfo);
    
    ULONG32 m_ulMediaTimeScale;
    ULONG32 m_ulPayloadType;
    ULONG32 m_ulTrackDuration;
    ULONG32 m_ulTrackSize;
    ULONG32 m_ulAvgBitrate;
    ULONG32 m_ulMaxBitrate;
    ULONG32 m_ulPreroll;
    ULONG32 m_ulPredata;
    ULONG32 m_ulRefTrackID;
    ULONG32 m_ulTrackWidth;
    ULONG32 m_ulTrackHeight;
    ULONG32 m_ulFrameWidth;
    ULONG32 m_ulFrameHeight;
    ULONG32 m_ulChannels;

    QTAtomType m_TrackType;
    UINT32 m_ulTrackMatrixTransformX;
    UINT32 m_ulTrackMatrixTransformY;
    char* m_pName;
    char* m_pSDP;
    char* m_pMimeType;
    UINT8* m_pOpaqueData;
    ULONG32 m_ulOpaqueDataSize;
    BOOL m_bOpaqueDataShouldBeDeleted;
    UINT32 m_ulNumSamplesInOpaqueData;
    IHXValues* m_pHeader;
    
    CQT_name_Atom* m_pNameAtom;
    CQT_sdp_Atom* m_pSDPAtom;
    CQT_payt_Atom* m_pPayloadTypeAtom;
};

/****************************************************************************
 *  Movie Info Manager
 */
class CQT_MovieInfo_Manager
{
public:
    /*
     *	Constructor/Destructor
     */
    CQT_MovieInfo_Manager(void);
    ~CQT_MovieInfo_Manager();

    /*
     *	Main Interface
     */
    HX_RESULT Init(CQTAtom* pAtom, 
		   CQTTrackManager* pTrackManager);

    void      Clear(void);

    ULONG32 GetMovieTimeScale(void)	{ return m_ulMovieTimeScale; }
    ULONG32 GetMovieDuration(void)	{ return m_ulMovieDuration; }

    ULONG32 GetNameLength(void)
    {
	ULONG32 ulSize = 0;

	if (m_pNameAtom)
	{
	    ulSize = m_pNameAtom->GetDataSize();
	}

	return ulSize;
    }

    UINT8* GetName(void)
    {
	return m_pNameAtom ? m_pNameAtom->GetData() : NULL;
    }

    ULONG32 GetSDPLength(void);
    UINT8* GetSDP(void);

private:
    HX_RESULT ParseMovieHintInfo(CQTAtom* pAtom);

    ULONG32 m_ulMovieTimeScale;
    ULONG32 m_ulMovieDuration;

    CQT_name_Atom* m_pNameAtom;
    CQT_rtp_Atom* m_pRTPSDPAtom;
};

#ifdef QTCONFIG_SPEED_OVER_SIZE
#include "qtatmmgs_inline.h"
#endif	// QTCONFIG_SPEED_OVER_SIZE

#endif  // _QTATMMGS_H_

⌨️ 快捷键说明

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