windows-nt/Source/XPSP1/NT/multimedia/dshow/vidctl/msvidctl/msvidaudiorenderer.h

199 lines
5.5 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
//==========================================================================;
// MSVidAudioRenderer.h : Declaration of the CMSVidAudioRenderer
// copyright (c) Microsoft Corp. 1998-1999.
//==========================================================================;
#ifndef __MSVidAUDIORENDERER_H_
#define __MSVidAUDIORENDERER_H_
#pragma once
#include "segimpl.h"
#include "devimpl.h"
#include "seg.h"
#include <objectwithsiteimplsec.h>
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CMSVidAudioRenderer
class ATL_NO_VTABLE __declspec(uuid("37B03544-A4C8-11d2-B634-00C04F79498E")) CMSVidAudioRenderer :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMSVidAudioRenderer, &CLSID_MSVidAudioRenderer>,
public IObjectWithSiteImplSec<CMSVidAudioRenderer>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CMSVidAudioRenderer>,
public IMSVidGraphSegmentImpl<CMSVidAudioRenderer, MSVidSEG_DEST, &GUID_NULL>,
public IMSVidDeviceImpl<CMSVidAudioRenderer, &LIBID_MSVidCtlLib, &GUID_NULL, IMSVidAudioRenderer>
{
public:
CMSVidAudioRenderer() :
m_fUseKSRenderer(false),
m_fAnalogOnly(false),
m_fDigitalOnly(false),
m_iAudioRenderer(-1)
{}
REGISTER_AUTOMATION_OBJECT(IDS_PROJNAME,
IDS_REG_AUDIORENDERER_PROGID,
IDS_REG_AUDIORENDERER_DESC,
LIBID_MSVidCtlLib,
CLSID_MSVidAudioRenderer);
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CMSVidAudioRenderer)
COM_INTERFACE_ENTRY(IMSVidGraphSegment)
COM_INTERFACE_ENTRY(IMSVidAudioRenderer)
COM_INTERFACE_ENTRY(IMSVidOutputDevice)
COM_INTERFACE_ENTRY(IMSVidDevice)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IObjectWithSite)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IPersist)
END_COM_MAP()
BEGIN_CATEGORY_MAP(CMSVidAudioRenderer)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
IMPLEMENTED_CATEGORY(CATID_PersistsToPropertyBag)
END_CATEGORY_MAP()
BEGIN_CONNECTION_POINT_MAP(CMSVidAudioRenderer)
END_CONNECTION_POINT_MAP()
DSFilter m_pAR;
int m_iAudioRenderer;
bool m_fUseKSRenderer;
bool m_fAnalogOnly;
bool m_fDigitalOnly;
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
public:
CComBSTR __declspec(property(get=GetName)) m_Name;
CComBSTR GetName(void) {
return CComBSTR(OLESTR("audio renderer"));
}
// IMSVidDevice
STDMETHOD(get_Name)(BSTR * Name)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidAudioRenderer), CO_E_NOTINITIALIZED);
}
if (Name == NULL)
return E_POINTER;
try {
*Name = m_Name.Copy();
} catch(...) {
return E_POINTER;
}
return NOERROR;
}
STDMETHOD(get_Status)(LONG * Status)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidAudioRenderer), CO_E_NOTINITIALIZED);
}
if (Status == NULL)
return E_POINTER;
return E_NOTIMPL;
}
STDMETHOD(get_Segment)(IMSVidGraphSegment * * pIMSVidGraphSegment)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidAudioRenderer), CO_E_NOTINITIALIZED);
}
if (pIMSVidGraphSegment == NULL)
return E_POINTER;
return E_NOTIMPL;
}
// IMSVidAudioRenderer
STDMETHOD(get_Volume)(LONG * plPercent)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidAudioRenderer), CO_E_NOTINITIALIZED);
}
if (plPercent == NULL)
return E_POINTER;
try {
if (!m_pGraph) {
Error(IDS_INVALID_STATE, __uuidof(IMSVidAudioRenderer), HRESULT_FROM_WIN32(ERROR_INVALID_STATE));
}
PQBasicAudio pBA(m_pGraph);
if (!pBA) {
Error(IDS_E_CANTQI, __uuidof(IBasicAudio), E_NOINTERFACE);
}
return pBA->get_Volume(plPercent);
} catch(...) {
return E_POINTER;
}
}
STDMETHOD(put_Volume)(LONG plPercent)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidAudioRenderer), CO_E_NOTINITIALIZED);
}
try {
if (!m_pGraph) {
Error(IDS_INVALID_STATE, __uuidof(IMSVidAudioRenderer), HRESULT_FROM_WIN32(ERROR_INVALID_STATE));
}
PQBasicAudio pBA(m_pGraph);
if (!pBA) {
Error(IDS_E_CANTQI, __uuidof(IBasicAudio), E_NOINTERFACE);
}
return pBA->put_Volume(plPercent);
} catch(...) {
return E_UNEXPECTED;
}
}
STDMETHOD(get_Balance)(LONG * plPercent)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidAudioRenderer), CO_E_NOTINITIALIZED);
}
if (plPercent == NULL)
return E_POINTER;
try {
if (!m_pGraph) {
Error(IDS_INVALID_STATE, __uuidof(IMSVidAudioRenderer), HRESULT_FROM_WIN32(ERROR_INVALID_STATE));
}
PQBasicAudio pBA(m_pGraph);
if (!pBA) {
Error(IDS_E_CANTQI, __uuidof(IBasicAudio), E_NOINTERFACE);
}
return pBA->get_Balance(plPercent);
} catch(...) {
return E_POINTER;
}
}
STDMETHOD(put_Balance)(LONG plPercent)
{
if (!m_fInit) {
return Error(IDS_OBJ_NO_INIT, __uuidof(IMSVidAudioRenderer), CO_E_NOTINITIALIZED);
}
try {
if (!m_pGraph) {
Error(IDS_INVALID_STATE, __uuidof(IMSVidAudioRenderer), HRESULT_FROM_WIN32(ERROR_INVALID_STATE));
}
PQBasicAudio pBA(m_pGraph);
if (!pBA) {
Error(IDS_E_CANTQI, __uuidof(IBasicAudio), E_NOINTERFACE);
}
return pBA->put_Balance(plPercent);
} catch(...) {
return E_UNEXPECTED;
}
}
// IMSVidGraphSegment
STDMETHOD(Build)();
STDMETHOD(PreRun)();
};
#endif //__MSVidAUDIORENDERER_H_