Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2016-03-02 13:30:22 +0300
committerHendrik Leppkes <h.leppkes@gmail.com>2016-03-02 13:30:22 +0300
commitb99992675a64d89b77d2c3a3436998f421f5089a (patch)
treeab282bd6d24807ef52c1e0d18d3faacf638db69e /decoder
parent2a28bcbb30eb5cce7b9657dbdda6221612081d68 (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.cpp14
-rw-r--r--decoder/LAVVideo/LAVVideo.h3
-rw-r--r--decoder/LAVVideo/LAVVideoSettings.h7
-rw-r--r--decoder/LAVVideo/Media.cpp1
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)