From c7dae1908fba5f709c83092179dd60a7ee443246 Mon Sep 17 00:00:00 2001 From: Underground78 Date: Sat, 28 Sep 2013 17:30:14 +0200 Subject: [MPC-HC] Tray icon: Add an optional custom callback for "show property page" events. --- decoder/LAVAudio/LAVAudio.cpp | 11 +++++++++++ decoder/LAVAudio/LAVAudio.h | 7 ++++++- decoder/LAVAudio/LAVAudioSettings.h | 11 +++++++++++ decoder/LAVVideo/LAVVideo.cpp | 12 ++++++++++++ decoder/LAVVideo/LAVVideo.h | 7 ++++++- decoder/LAVVideo/LAVVideoSettings.h | 11 +++++++++++ 6 files changed, 57 insertions(+), 2 deletions(-) (limited to 'decoder') diff --git a/decoder/LAVAudio/LAVAudio.cpp b/decoder/LAVAudio/LAVAudio.cpp index 2ebf6679..9d655bfe 100644 --- a/decoder/LAVAudio/LAVAudio.cpp +++ b/decoder/LAVAudio/LAVAudio.cpp @@ -131,6 +131,7 @@ STDMETHODIMP CLAVAudio::CreateTrayIcon() if (CBaseTrayIcon::ProcessBlackList()) return S_FALSE; m_pTrayIcon = new CBaseTrayIcon(this, TEXT(LAV_AUDIO), IDI_ICON1); + m_pTrayIcon->SetCustomOpenPropPage(m_fpPropPageCallback); return S_OK; } @@ -416,6 +417,7 @@ STDMETHODIMP CLAVAudio::NonDelegatingQueryInterface(REFIID riid, void** ppv) QI(ISpecifyPropertyPages) QI(ISpecifyPropertyPages2) QI2(ILAVAudioSettings) + QI2(ILAVAudioSettingsMPCHCCustom) QI2(ILAVAudioStatus) __super::NonDelegatingQueryInterface(riid, ppv); } @@ -783,6 +785,15 @@ STDMETHODIMP_(BOOL) CLAVAudio::GetSuppressFormatChanges() return m_settings.SuppressFormatChanges; } +// ILAVAudioSettingsMPCHCCustom +STDMETHODIMP CLAVAudio::SetPropertyPageCallback(HRESULT (*fpPropPageCallback)(IBaseFilter* pFilter)) +{ + m_fpPropPageCallback = fpPropPageCallback; + if (m_pTrayIcon) + m_pTrayIcon->SetCustomOpenPropPage(fpPropPageCallback); + return S_OK; +} + // ILAVAudioStatus BOOL CLAVAudio::IsSampleFormatSupported(LAVAudioSampleFormat sfCheck) { diff --git a/decoder/LAVAudio/LAVAudio.h b/decoder/LAVAudio/LAVAudio.h index d1fa9aef..e97c37ec 100644 --- a/decoder/LAVAudio/LAVAudio.h +++ b/decoder/LAVAudio/LAVAudio.h @@ -80,7 +80,8 @@ struct BufferDetails { struct DTSDecoder; [uuid("E8E73B6B-4CB3-44A4-BE99-4F7BCB96E491")] -class CLAVAudio : public CTransformFilter, public ISpecifyPropertyPages2, public ILAVAudioSettings, public ILAVAudioStatus +class CLAVAudio : public CTransformFilter, public ISpecifyPropertyPages2, + public ILAVAudioSettings, public ILAVAudioSettingsMPCHCCustom, public ILAVAudioStatus { public: CLAVAudio(LPUNKNOWN pUnk, HRESULT* phr); @@ -137,6 +138,9 @@ public: STDMETHODIMP SetSuppressFormatChanges(BOOL bEnabled); STDMETHODIMP_(BOOL) GetSuppressFormatChanges(); + // ILAVAudioSettingsMPCHCCustom + STDMETHODIMP SetPropertyPageCallback(HRESULT (*fpPropPageCallback)(IBaseFilter* pFilter)); + // ILAVAudioStatus STDMETHODIMP_(BOOL) IsSampleFormatSupported(LAVAudioSampleFormat sfCheck); STDMETHODIMP GetDecodeDetails(const char **pCodec, const char **pDecodeFormat, int *pnChannels, int *pSampleRate, DWORD *pChannelMask); @@ -346,4 +350,5 @@ private: } m_raData; CBaseTrayIcon *m_pTrayIcon = nullptr; + HRESULT (*m_fpPropPageCallback)(IBaseFilter* pFilter) = nullptr; }; diff --git a/decoder/LAVAudio/LAVAudioSettings.h b/decoder/LAVAudio/LAVAudioSettings.h index 42230a6a..2d609aca 100644 --- a/decoder/LAVAudio/LAVAudioSettings.h +++ b/decoder/LAVAudio/LAVAudioSettings.h @@ -23,6 +23,10 @@ DEFINE_GUID(IID_ILAVAudioSettings, 0x4158a22b, 0x6553, 0x45d0, 0x80, 0x69, 0x24, 0x71, 0x6f, 0x8f, 0xf1, 0x71); +// {40A1D048-D41B-4D53-B737-FF9F99A245A0} +DEFINE_GUID(IID_ILAVAudioSettingsMPCHCCustom, + 0x40a1d048, 0xd41b, 0x4d53, 0xb7, 0x37, 0xff, 0x9f, 0x99, 0xa2, 0x45, 0xa0); + // {A668B8F2-BA87-4F63-9D41-768F7DE9C50E} DEFINE_GUID(IID_ILAVAudioStatus, 0xa668b8f2, 0xba87, 0x4f63, 0x9d, 0x41, 0x76, 0x8f, 0x7d, 0xe9, 0xc5, 0xe); @@ -192,6 +196,13 @@ interface ILAVAudioSettings : public IUnknown STDMETHOD_(BOOL, GetSuppressFormatChanges)() = 0; }; +[uuid("40A1D048-D41B-4D53-B737-FF9F99A245A0")] +interface ILAVAudioSettingsMPCHCCustom : public IUnknown +{ + // Set a custom callback function to handle the property page + STDMETHOD(SetPropertyPageCallback)(HRESULT (*fpPropPageCallback)(IBaseFilter* pFilter)) = 0; +}; + // LAV Audio Status Interface // Get the current playback stats [uuid("A668B8F2-BA87-4F63-9D41-768F7DE9C50E")] diff --git a/decoder/LAVVideo/LAVVideo.cpp b/decoder/LAVVideo/LAVVideo.cpp index 05ac3b6c..ea2cb035 100644 --- a/decoder/LAVVideo/LAVVideo.cpp +++ b/decoder/LAVVideo/LAVVideo.cpp @@ -65,6 +65,7 @@ void CALLBACK CLAVVideo::StaticInit(BOOL bLoading, const CLSID *clsid) CLAVVideo::CLAVVideo(LPUNKNOWN pUnk, HRESULT* phr) : CTransformFilter(NAME("LAV Video Decoder"), 0, __uuidof(CLAVVideo)) , m_Decoder(this) + , m_fpPropPageCallback(NULL) { *phr = S_OK; m_pInput = new CVideoInputPin(TEXT("CVideoInputPin"), this, phr, L"Input"); @@ -126,6 +127,7 @@ HRESULT CLAVVideo::CreateTrayIcon() if (CBaseTrayIcon::ProcessBlackList()) return S_FALSE; m_pTrayIcon = new CBaseTrayIcon(this, TEXT(LAV_VIDEO), IDI_ICON1); + m_pTrayIcon->SetCustomOpenPropPage(m_fpPropPageCallback); return S_OK; } @@ -390,6 +392,7 @@ STDMETHODIMP CLAVVideo::NonDelegatingQueryInterface(REFIID riid, void** ppv) QI(ISpecifyPropertyPages) QI(ISpecifyPropertyPages2) QI2(ILAVVideoSettings) + QI2(ILAVVideoSettingsMPCHCCustom) QI2(ILAVVideoStatus) __super::NonDelegatingQueryInterface(riid, ppv); } @@ -2085,6 +2088,15 @@ STDMETHODIMP CLAVVideo::SetGPUDeviceIndex(DWORD dwDevice) return S_OK; } +// ILAVVideoSettingsMPCHCCustom +STDMETHODIMP CLAVVideo::SetPropertyPageCallback(HRESULT (*fpPropPageCallback)(IBaseFilter* pFilter)) +{ + m_fpPropPageCallback = fpPropPageCallback; + if (m_pTrayIcon) + m_pTrayIcon->SetCustomOpenPropPage(fpPropPageCallback); + return S_OK; +} + CLAVControlThread::CLAVControlThread(CLAVVideo *pLAVVideo) : CAMThread() , m_pLAVVideo(pLAVVideo) diff --git a/decoder/LAVVideo/LAVVideo.h b/decoder/LAVVideo/LAVVideo.h index 7fd834c9..95d0d0db 100644 --- a/decoder/LAVVideo/LAVVideo.h +++ b/decoder/LAVVideo/LAVVideo.h @@ -51,7 +51,8 @@ typedef struct { } TimingCache; [uuid("EE30215D-164F-4A92-A4EB-9D4C13390F9F")] -class CLAVVideo : public CTransformFilter, public ISpecifyPropertyPages2, public ILAVVideoSettings, public ILAVVideoStatus, public ILAVVideoCallback +class CLAVVideo : public CTransformFilter, public ISpecifyPropertyPages2, + public ILAVVideoSettings, public ILAVVideoSettingsMPCHCCustom, public ILAVVideoStatus, public ILAVVideoCallback { public: CLAVVideo(LPUNKNOWN pUnk, HRESULT* phr); @@ -126,6 +127,9 @@ public: STDMETHODIMP SetGPUDeviceIndex(DWORD dwDevice); + // ILAVVideoSettingsMPCHCCustom + STDMETHODIMP SetPropertyPageCallback(HRESULT (*fpPropPageCallback)(IBaseFilter* pFilter)); + // ILAVVideoStatus STDMETHODIMP_(const WCHAR *) GetActiveDecoderName() { return m_Decoder.GetDecoderName(); } @@ -285,6 +289,7 @@ private: DWORD m_dwGPUDeviceIndex = DWORD_MAX; CBaseTrayIcon *m_pTrayIcon = nullptr; + HRESULT (*m_fpPropPageCallback)(IBaseFilter* pFilter) = nullptr; #ifdef DEBUG FloatingAverage m_pixFmtTimingAvg; diff --git a/decoder/LAVVideo/LAVVideoSettings.h b/decoder/LAVVideo/LAVVideoSettings.h index e00e22c1..d2eca74d 100644 --- a/decoder/LAVVideo/LAVVideoSettings.h +++ b/decoder/LAVVideo/LAVVideoSettings.h @@ -23,6 +23,10 @@ DEFINE_GUID(IID_ILAVVideoSettings, 0xfa40d6e9, 0x4d38, 0x4761, 0xad, 0xd2, 0x71, 0xa9, 0xec, 0x5f, 0xd3, 0x2f); +// {F3BB90A3-B1CE-48C1-954C-3A506A33DE25} +DEFINE_GUID(IID_ILAVVideoSettingsMPCHCCustom, +0xf3bb90a3, 0xb1ce, 0x48c1, 0x95, 0x4c, 0x3a, 0x50, 0x6a, 0x33, 0xde, 0x25); + // {1CC2385F-36FA-41B1-9942-5024CE0235DC} DEFINE_GUID(IID_ILAVVideoStatus, 0x1cc2385f, 0x36fa, 0x41b1, 0x99, 0x42, 0x50, 0x24, 0xce, 0x2, 0x35, 0xdc); @@ -364,6 +368,13 @@ interface ILAVVideoSettings : public IUnknown STDMETHOD(SetGPUDeviceIndex)(DWORD dwDevice) = 0; }; +[uuid("F3BB90A3-B1CE-48C1-954C-3A506A33DE25")] +interface ILAVVideoSettingsMPCHCCustom : public IUnknown +{ + // Set a custom callback function to handle the property page + STDMETHOD(SetPropertyPageCallback)(HRESULT (*fpPropPageCallback)(IBaseFilter* pFilter)) = 0; +}; + // LAV Video status interface [uuid("1CC2385F-36FA-41B1-9942-5024CE0235DC")] interface ILAVVideoStatus : public IUnknown -- cgit v1.2.3