diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-03-02 13:30:22 +0300 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-03-02 13:30:22 +0300 |
commit | b99992675a64d89b77d2c3a3436998f421f5089a (patch) | |
tree | ab282bd6d24807ef52c1e0d18d3faacf638db69e /decoder | |
parent | 2a28bcbb30eb5cce7b9657dbdda6221612081d68 (diff) |
Add H.264 MVC to the format configuration
Additionally add an override API for players.
Diffstat (limited to 'decoder')
-rw-r--r-- | decoder/LAVVideo/LAVVideo.cpp | 14 | ||||
-rw-r--r-- | decoder/LAVVideo/LAVVideo.h | 3 | ||||
-rw-r--r-- | decoder/LAVVideo/LAVVideoSettings.h | 7 | ||||
-rw-r--r-- | decoder/LAVVideo/Media.cpp | 1 |
4 files changed, 24 insertions, 1 deletions
diff --git a/decoder/LAVVideo/LAVVideo.cpp b/decoder/LAVVideo/LAVVideo.cpp index 7472a8f2..e307c3fd 100644 --- a/decoder/LAVVideo/LAVVideo.cpp +++ b/decoder/LAVVideo/LAVVideo.cpp @@ -174,10 +174,11 @@ HRESULT CLAVVideo::LoadDefaults() m_settings.DitherMode = LAVDither_Random; - m_settings.HWAccelDeviceDXVA2 = LAVHWACCEL_DEVICE_DEFAULT; m_settings.HWAccelDeviceDXVA2Desc = 0; + m_settings.bH264MVCOverride = TRUE; + return S_OK; } @@ -590,6 +591,11 @@ HRESULT CLAVVideo::CreateDecoder(const CMediaType *pmt) } } + if (codec == AV_CODEC_ID_H264_MVC && !m_settings.bH264MVCOverride) { + DbgLog((LOG_TRACE, 10, L"-> H.264 MVC override, refusing")); + return VFW_E_TYPE_NOT_ACCEPTED; + } + ILAVPinInfo *pPinInfo = nullptr; hr = FindPinIntefaceInGraph(m_pInput, IID_ILAVPinInfo, (void **)&pPinInfo); if (SUCCEEDED(hr)) { @@ -2287,6 +2293,12 @@ STDMETHODIMP CLAVVideo::SetHWAccelDeviceIndex(LAVHWAccel hwAccel, DWORD dwIndex, } } +STDMETHODIMP CLAVVideo::SetH264MVCDecodingOverride(BOOL bEnabled) +{ + m_settings.bH264MVCOverride = bEnabled; + return S_OK; +} + STDMETHODIMP CLAVVideo::GetHWAccelActiveDevice(BSTR *pstrDeviceName) { return m_Decoder.GetHWAccelActiveDevice(pstrDeviceName); diff --git a/decoder/LAVVideo/LAVVideo.h b/decoder/LAVVideo/LAVVideo.h index 9089d6a4..47ff8f22 100644 --- a/decoder/LAVVideo/LAVVideo.h +++ b/decoder/LAVVideo/LAVVideo.h @@ -133,6 +133,8 @@ public: STDMETHODIMP_(DWORD) GetHWAccelDeviceIndex(LAVHWAccel hwAccel, DWORD *pdwDeviceIdentifier); STDMETHODIMP SetHWAccelDeviceIndex(LAVHWAccel hwAccel, DWORD dwIndex, DWORD dwDeviceIdentifier); + STDMETHODIMP SetH264MVCDecodingOverride(BOOL bEnabled); + // ILAVVideoStatus STDMETHODIMP_(const WCHAR *) GetActiveDecoderName() { return m_Decoder.GetDecoderName(); } STDMETHODIMP GetHWAccelActiveDevice(BSTR *pstrDeviceName); @@ -290,6 +292,7 @@ private: BOOL bDVDVideo; DWORD HWAccelDeviceDXVA2; DWORD HWAccelDeviceDXVA2Desc; + BOOL bH264MVCOverride; } m_settings; DWORD m_dwGPUDeviceIndex = DWORD_MAX; diff --git a/decoder/LAVVideo/LAVVideoSettings.h b/decoder/LAVVideo/LAVVideoSettings.h index 6a8a7518..2134a39b 100644 --- a/decoder/LAVVideo/LAVVideoSettings.h +++ b/decoder/LAVVideo/LAVVideoSettings.h @@ -87,6 +87,7 @@ typedef enum LAVVideoCodec { Codec_VP9, Codec_TrueMotion, Codec_VP7, + Codec_H264MVC, Codec_VideoNB // Number of entries (do not use when dynamically linking) } LAVVideoCodec; @@ -375,6 +376,12 @@ interface ILAVVideoSettings : public IUnknown #define LAVHWACCEL_DEVICE_DEFAULT ((DWORD)-1) STDMETHOD_(DWORD, GetHWAccelDeviceIndex)(LAVHWAccel hwAccel, DWORD *pdwDeviceIdentifier) = 0; STDMETHOD(SetHWAccelDeviceIndex)(LAVHWAccel hwAccel, DWORD dwIndex, DWORD dwDeviceIdentifier) = 0; + + // Temporary Override for players to disable H.264 MVC decoding + // This is not a permanent setting and not saved, but can be used by players to offer a "Play in 2D" option, or similar. + // A setting of FALSE disable MVC decoding temporarily + // Note that the override cannot force-enable the option if its turned off through SetFormatConfiguration + STDMETHOD(SetH264MVCDecodingOverride)(BOOL bEnabled) = 0; }; // LAV Video status interface diff --git a/decoder/LAVVideo/Media.cpp b/decoder/LAVVideo/Media.cpp index 5e964970..fd4d3d54 100644 --- a/decoder/LAVVideo/Media.cpp +++ b/decoder/LAVVideo/Media.cpp @@ -623,6 +623,7 @@ static codec_config_t m_codec_config[] = { { 1, { AV_CODEC_ID_VP9 }}, // Codec_VP9 { 2, { AV_CODEC_ID_TRUEMOTION1, AV_CODEC_ID_TRUEMOTION2 }, "truemotion", "Duck TrueMotion 1/2"}, // Codec_TrueMotion { 1, { AV_CODEC_ID_VP7 }}, // Codec_VP7 + { 1, { AV_CODEC_ID_H264_MVC }, "h264mvc", "H.264 MVC 3D" }, // Codec_H264MVC }; const codec_config_t *get_codec_config(LAVVideoCodec codec) |