Files
EqualizerAPO/EqualizerAPO.h
T
jthedering 9d1d57b352 Version 1.1.1
Fixed: With some sound card drivers, unwanted sounds were heard when audio got silent (e.g. by pausing). The modification of silent buffers, which seems to cause this issue, is now optionally available via the troubleshooting options in the Configurator.
Fixed: In the Configuration Editor the peak gain display in the analysis panel was sometimes showing incorrect values.
Improved: The GUI of the GraphicEQ command can now import the measurement text file format from Room EQ Wizard.
2015-12-09 21:55:07 +00:00

83 lines
3.0 KiB
C++

/*
This file is part of EqualizerAPO, a system-wide equalizer.
Copyright (C) 2012 Jonas Thedering
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
#include <Unknwn.h>
#include <audioenginebaseapo.h>
#include <BaseAudioProcessingObject.h>
#include "FilterEngine.h"
class INonDelegatingUnknown
{
virtual HRESULT __stdcall NonDelegatingQueryInterface(const IID& iid, void** ppv) = 0;
virtual ULONG __stdcall NonDelegatingAddRef() = 0;
virtual ULONG __stdcall NonDelegatingRelease() = 0;
};
class EqualizerAPO : public CBaseAudioProcessingObject, public IAudioSystemEffects, public INonDelegatingUnknown
{
public:
EqualizerAPO(IUnknown* pUnkOuter);
virtual ~EqualizerAPO();
// IUnknown
virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv);
virtual ULONG __stdcall AddRef();
virtual ULONG __stdcall Release();
// IAudioProcessingObject
virtual HRESULT __stdcall GetLatency(HNSTIME* pTime);
virtual HRESULT __stdcall Initialize(UINT32 cbDataSize, BYTE* pbyData);
virtual HRESULT __stdcall IsInputFormatSupported(IAudioMediaType* pOutputFormat,
IAudioMediaType* pRequestedInputFormat, IAudioMediaType** ppSupportedInputFormat);
// IAudioProcessingObjectConfiguration
virtual HRESULT __stdcall LockForProcess(UINT32 u32NumInputConnections,
APO_CONNECTION_DESCRIPTOR** ppInputConnections, UINT32 u32NumOutputConnections,
APO_CONNECTION_DESCRIPTOR** ppOutputConnections);
virtual HRESULT __stdcall UnlockForProcess(void);
// IAudioProcessingObjectRT
virtual void __stdcall APOProcess(UINT32 u32NumInputConnections,
APO_CONNECTION_PROPERTY** ppInputConnections, UINT32 u32NumOutputConnections,
APO_CONNECTION_PROPERTY** ppOutputConnections);
// INonDelegatingUnknown
virtual HRESULT __stdcall NonDelegatingQueryInterface(const IID& iid, void** ppv);
virtual ULONG __stdcall NonDelegatingAddRef();
virtual ULONG __stdcall NonDelegatingRelease();
static long instCount;
static const CRegAPOProperties<1> regPostMixProperties;
static const CRegAPOProperties<1> regPreMixProperties;
private:
long refCount;
IUnknown* pUnkOuter;
FilterEngine engine;
bool allowSilentBufferModification;
void resetChild();
IAudioProcessingObject* childAPO;
IAudioProcessingObjectRT* childRT;
IAudioProcessingObjectConfiguration* childCfg;
};