windows-nt/Source/XPSP1/NT/multimedia/directx/dmusic/dmime/tsigtrk.h

123 lines
3.9 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
// Copyright (c) 1998-1999 Microsoft Corporation
// TSigTrk.h : Declaration of the CTimeSigTrack
#ifndef __TSIGTRK_H_
#define __TSIGTRK_H_
#include "dmusici.h"
#include "dmusicf.h"
#include "alist.h"
class CRiffParser;
class CTimeSigItem : public AListItem
{
public:
CTimeSigItem();
CTimeSigItem* GetNext(){ return (CTimeSigItem*)AListItem::GetNext(); };
DMUS_IO_TIMESIGNATURE_ITEM m_TimeSig;
};
class CTimeSigList : public AList
{
public:
CTimeSigItem* GetHead() {return (CTimeSigItem*)AList::GetHead();};
CTimeSigItem* RemoveHead() {return (CTimeSigItem*)AList::RemoveHead();};
CTimeSigItem* GetItem(LONG lIndex) { return (CTimeSigItem*) AList::GetItem(lIndex);};
};
class CTimeSigStateData
{
public:
CTimeSigStateData()
{
m_mtPrevEnd = 0;
m_bBeat = 4;
m_bBeatsPerMeasure = 4;
m_mtTimeSig = 0;
m_fActive = TRUE;
/* don't need these since they are always initialized
m_pPerformance = NULL;
m_pSegState = NULL;
m_dwVirtualTrackID = 0;
*/
}
CTimeSigItem * m_pCurrentTSig;
IDirectMusicPerformance* m_pPerformance;
IDirectMusicSegmentState* m_pSegState;
DWORD m_dwVirtualTrackID;
DWORD m_dwValidate; // used to validate state data
MUSIC_TIME m_mtPrevEnd;
MUSIC_TIME m_mtTimeSig; // previous time sig time
BOOL m_fActive;
BYTE m_bBeat; // previous beat
BYTE m_bBeatsPerMeasure; // previous beats per measure
};
/////////////////////////////////////////////////////////////////////////////
// CTimeSigTrack
class CTimeSigTrack :
public IPersistStream,
public IDirectMusicTrack
{
public:
CTimeSigTrack();
CTimeSigTrack(CTimeSigTrack *pTrack, MUSIC_TIME mtStart, MUSIC_TIME mtEnd);
~CTimeSigTrack();
// member variables
protected:
CTimeSigList m_TSigEventList;
long m_cRef;
DWORD m_dwValidate; // used to validate state data.
CRITICAL_SECTION m_CrSec;
BOOL m_fCSInitialized;
BOOL m_fNotificationMeasureBeat;
BOOL m_fActive; // Track is active for generating time signatures
BOOL m_fStateSetBySetParam; // If TRUE, active flag was set by GUID. Don't override.
public:
// IUnknown
STDMETHODIMP QueryInterface(const IID &iid, void **ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IDirectMusicTrack methods
STDMETHODIMP IsParamSupported(REFGUID rguid);
STDMETHODIMP Init(IDirectMusicSegment *pSegment);
STDMETHODIMP InitPlay(IDirectMusicSegmentState *pSegmentState,
IDirectMusicPerformance *pPerformance,
void **ppStateData,
DWORD dwTrackID,
DWORD dwFlags);
STDMETHODIMP EndPlay(void *pStateData);
STDMETHODIMP Play(void *pStateData,MUSIC_TIME mtStart,
MUSIC_TIME mtEnd,MUSIC_TIME mtOffset,
DWORD dwFlags,IDirectMusicPerformance* pPerf,
IDirectMusicSegmentState* pSegSt,DWORD dwVirtualID);
STDMETHODIMP GetParam(REFGUID rguid,MUSIC_TIME mtTime,MUSIC_TIME* pmtNext,void *pData);
STDMETHODIMP SetParam(REFGUID rguid,MUSIC_TIME mtTime,void *pData);
STDMETHODIMP AddNotificationType(REFGUID rguidNotification);
STDMETHODIMP RemoveNotificationType(REFGUID rguidNotification);
STDMETHODIMP Clone(MUSIC_TIME mtStart,MUSIC_TIME mtEnd,IDirectMusicTrack** ppTrack);
// IPersist functions
STDMETHODIMP GetClassID( CLSID* pClsId );
// IPersistStream functions
STDMETHODIMP IsDirty();
STDMETHODIMP Load( IStream* pIStream );
STDMETHODIMP Save( IStream* pIStream, BOOL fClearDirty );
STDMETHODIMP GetSizeMax( ULARGE_INTEGER FAR* pcbSize );
protected:
HRESULT STDMETHODCALLTYPE Seek( void *pStateData,MUSIC_TIME mtTime,BOOL fGetPrevious);
void Construct(void);
void Clear();
HRESULT LoadTimeSigList( CRiffParser *pParser, long lChunkSize );
protected:
MUSIC_TIME NotificationMeasureBeat( MUSIC_TIME mtStart, MUSIC_TIME mtEnd,
CTimeSigStateData* pSD, MUSIC_TIME mtOffset );
};
#endif //__TSIGTRK_H_