mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
4.8 KiB
103 lines
4.8 KiB
#ifndef __TOOLPARAM_H__
|
|
#define __TOOLPARAM_H__
|
|
|
|
|
|
|
|
#include "medparam.h"
|
|
#include "alist.h"
|
|
|
|
typedef struct _ParamInfo
|
|
{
|
|
DWORD dwIndex; // Which parameter.
|
|
MP_PARAMINFO MParamInfo; // Standard MediaParams structure.
|
|
WCHAR * pwchText; // Array of text names for enumerated types.
|
|
} ParamInfo;
|
|
|
|
class CCurveItem : public AListItem
|
|
{
|
|
public:
|
|
CCurveItem* GetNext() { return (CCurveItem*)AListItem::GetNext();}
|
|
MP_ENVELOPE_SEGMENT m_Envelope; // Envelope segment.
|
|
};
|
|
|
|
class CCurveList : public AList
|
|
{
|
|
public:
|
|
// void Clear();
|
|
void AddHead(CCurveItem* pCurveItem) { AList::AddHead((AListItem*)pCurveItem);}
|
|
// void Insert(CCurveItem* pCurveItem);
|
|
CCurveItem* GetHead(){return (CCurveItem*)AList::GetHead();}
|
|
// CCurveItem* GetItem(LONG lIndex){return (CCurveItem*)AList::GetItem(lIndex);}
|
|
CCurveItem* RemoveHead(){ return (CCurveItem*)AList::RemoveHead();}
|
|
// void Remove(CCurveItem* pCurveItem){AList::Remove((AListItem*)pCurveItem);}
|
|
// void AddTail(CCurveItem* pCurveItem){AList::AddTail((AListItem*)pCurveItem);}
|
|
// CCurveItem* GetTail(){ return (CCurveItem*)AList::GetTail();}
|
|
~CCurveList();
|
|
};
|
|
|
|
#define MAX_REF_TIME 0x7FFFFFFFFFFFFFFF
|
|
#define MP_CAPS_ALL MP_CAPS_CURVE_JUMP | MP_CAPS_CURVE_LINEAR | MP_CAPS_CURVE_SQUARE | MP_CAPS_CURVE_INVSQUARE | MP_CAPS_CURVE_SINE
|
|
|
|
class CParamsManager : public IMediaParams, public IMediaParamInfo
|
|
{
|
|
public:
|
|
CParamsManager();
|
|
~CParamsManager();
|
|
|
|
// IUnknown
|
|
STDMETHOD(QueryInterface)(REFIID, LPVOID FAR *) PURE;
|
|
STDMETHOD_(ULONG, AddRef)() PURE;
|
|
STDMETHOD_(ULONG, Release)() PURE;
|
|
|
|
// IMediaParams
|
|
STDMETHODIMP GetParam(DWORD dwParamIndex, MP_DATA *pValue);
|
|
STDMETHODIMP SetParam(DWORD dwParamIndex,MP_DATA value);
|
|
STDMETHODIMP AddEnvelope(DWORD dwParamIndex,DWORD cPoints,MP_ENVELOPE_SEGMENT *ppEnvelope);
|
|
STDMETHODIMP FlushEnvelope( DWORD dwParamIndex,REFERENCE_TIME refTimeStart,REFERENCE_TIME refTimeEnd);
|
|
STDMETHODIMP SetTimeFormat( GUID guidTimeFormat,MP_TIMEDATA mpTimeData);
|
|
|
|
// IMediaParamInfo
|
|
STDMETHODIMP GetParamCount(DWORD *pdwParams);
|
|
STDMETHODIMP GetParamInfo(DWORD dwParamIndex,MP_PARAMINFO *pInfo);
|
|
STDMETHODIMP GetParamText(DWORD dwParamIndex,WCHAR **ppwchText);
|
|
STDMETHODIMP GetNumTimeFormats(DWORD *pdwNumTimeFormats);
|
|
STDMETHODIMP GetSupportedTimeFormat(DWORD dwFormatIndex,GUID *pguidTimeFormat);
|
|
STDMETHODIMP GetCurrentTimeFormat( GUID *pguidTimeFormat,MP_TIMEDATA *pTimeData);
|
|
|
|
// other (non-COM) functions
|
|
HRESULT InitParams(DWORD cTimeFormats, const GUID *pguidTimeFormats, DWORD dwFormatIndex, MP_TIMEDATA mptdTimeData, DWORD cParams, ParamInfo *pParamInfos);
|
|
HRESULT GetParamFloat(DWORD dwParamIndex,REFERENCE_TIME rtTime,float *pval); // returns S_FALSE if rtTime is after the end time of the last curve
|
|
HRESULT GetParamInt (DWORD dwParamIndex,REFERENCE_TIME rt,long *pval); // returns S_FALSE if rtTime is after the end time of the last curve
|
|
HRESULT CopyParamsFromSource(CParamsManager * pSource);
|
|
|
|
// parameter control curve handling
|
|
class UpdateCallback
|
|
{
|
|
public:
|
|
// Define this in derived classes if you are going to use UpdateActiveParams.
|
|
// Called by CParamsManager inside UpdateActiveParams to update the effect's internal state variables.
|
|
// SetParamUpdate should be the same as SetParam, except that DMO defer the call to the base class
|
|
// (CParamsManager::SetParam) in SetParam but should not do so in SetParamUpdate.
|
|
virtual HRESULT SetParamUpdate(DWORD dwParamIndex, MP_DATA value) = 0;
|
|
};
|
|
// function that calls SetParam to adjust the value of all parameters that may have changed to their
|
|
// new values at time rtTime
|
|
void UpdateActiveParams(REFERENCE_TIME rtTime, UpdateCallback &rThis); // rThis should be the derived class (*this)
|
|
DWORD GetActiveParamBits() { return m_dwActiveBits; }
|
|
|
|
protected:
|
|
// data
|
|
|
|
CRITICAL_SECTION m_ParamsCriticalSection;
|
|
BOOL m_fDirty; // Has data changed since last file load or save?
|
|
DWORD m_cTimeFormats; // Number of supported time formats.
|
|
GUID *m_pguidTimeFormats; // Array of supported time formats.
|
|
GUID m_guidCurrentTimeFormat; // The time format we're set to.
|
|
MP_TIMEDATA m_mptdCurrentTimeData; // The unit of measure for the current time format.
|
|
DWORD m_cParams; // Number of parameters.
|
|
ParamInfo *m_pParamInfos; // Array of ParamInfo structures, one for each parameter.
|
|
CCurveList *m_pCurveLists; // Array of Curve lists, one for each parameter.
|
|
DWORD m_dwActiveBits; // Tracks the params that currently have curves active.
|
|
};
|
|
|
|
#endif // __TOOLPARAM_H__
|