windows-nt/Source/XPSP1/NT/multimedia/directx/dmusic/dmscript/autaudiopath.cpp
2020-09-26 16:20:57 +08:00

95 lines
2.2 KiB
C++

// Copyright (c) 1999 Microsoft Corporation. All rights reserved.
//
// Implementation of CAutDirectMusicAudioPath.
//
#include "stdinc.h"
#include "autaudiopath.h"
const WCHAR CAutDirectMusicAudioPath::ms_wszClassName[] = L"AudioPath";
//////////////////////////////////////////////////////////////////////
// Method Names/DispIDs
const DISPID DMPDISP_SetVolume = 1;
const DISPID DMPDISP_GetVolume = 2;
const AutDispatchMethod CAutDirectMusicAudioPath::ms_Methods[] =
{
// dispid, name,
// return: type, (opt), (iid),
// parm 1: type, opt, iid,
// parm 2: type, opt, iid,
// ...
// ADT_None
{ DMPDISP_SetVolume, L"SetVolume",
ADPARAM_NORETURN,
ADT_Long, false, &IID_NULL, // volume
ADT_Long, true, &IID_NULL, // duration
ADT_None },
{ DMPDISP_GetVolume, L"GetVolume",
ADT_Long, true, &IID_NULL, // returned volume
ADT_None },
{ DISPID_UNKNOWN }
};
const DispatchHandlerEntry<CAutDirectMusicAudioPath> CAutDirectMusicAudioPath::ms_Handlers[] =
{
{ DMPDISP_SetVolume, SetVolume },
{ DMPDISP_GetVolume, GetVolume },
{ DISPID_UNKNOWN }
};
//////////////////////////////////////////////////////////////////////
// Creation
CAutDirectMusicAudioPath::CAutDirectMusicAudioPath(
IUnknown* pUnknownOuter,
const IID& iid,
void** ppv,
HRESULT *phr)
: BaseImpAudioPath(pUnknownOuter, iid, ppv, phr),
m_lVolume(0)
{
}
HRESULT
CAutDirectMusicAudioPath::CreateInstance(
IUnknown* pUnknownOuter,
const IID& iid,
void** ppv)
{
HRESULT hr = S_OK;
CAutDirectMusicAudioPath *pInst = new CAutDirectMusicAudioPath(pUnknownOuter, iid, ppv, &hr);
if (FAILED(hr))
{
delete pInst;
return hr;
}
if (pInst == NULL)
return E_OUTOFMEMORY;
return hr;
}
//////////////////////////////////////////////////////////////////////
// Automation methods
HRESULT
CAutDirectMusicAudioPath::SetVolume(AutDispatchDecodedParams *paddp)
{
LONG lVol = paddp->params[0].lVal;
LONG lDuration = paddp->params[1].lVal;
m_lVolume = ClipLongRange(lVol, -9600, 0);
return m_pITarget->SetVolume(m_lVolume, lDuration);
}
HRESULT
CAutDirectMusicAudioPath::GetVolume(AutDispatchDecodedParams *paddp)
{
LONG *plRet = reinterpret_cast<LONG*>(paddp->pvReturn);
if (plRet)
*plRet = m_lVolume;
return S_OK;
}