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>2012-07-02 23:05:18 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2012-07-02 23:05:18 +0400
commit8aa64d3a6fe925c284f0795cc9933afda43a87a6 (patch)
tree8b0a0a047ba1266ba7db8cf0cb2020966b150d42 /decoder/LAVAudio
parent324d5cb3d90fe57dbc15c24cb7cfa793e22f2f9d (diff)
mixing: add configuration for matrix encoding
Diffstat (limited to 'decoder/LAVAudio')
-rw-r--r--decoder/LAVAudio/AudioSettingsProp.cpp25
-rw-r--r--decoder/LAVAudio/AudioSettingsProp.h1
-rw-r--r--decoder/LAVAudio/LAVAudio.cpp20
-rw-r--r--decoder/LAVAudio/LAVAudio.h3
-rw-r--r--decoder/LAVAudio/LAVAudio.rc12
-rw-r--r--decoder/LAVAudio/LAVAudioSettings.h14
-rw-r--r--decoder/LAVAudio/PostProcessor.cpp2
-rw-r--r--decoder/LAVAudio/resource.h6
8 files changed, 76 insertions, 7 deletions
diff --git a/decoder/LAVAudio/AudioSettingsProp.cpp b/decoder/LAVAudio/AudioSettingsProp.cpp
index 75b54624..e6fd697d 100644
--- a/decoder/LAVAudio/AudioSettingsProp.cpp
+++ b/decoder/LAVAudio/AudioSettingsProp.cpp
@@ -394,6 +394,11 @@ HRESULT CLAVAudioMixingProp::OnApplyChanges()
m_pAudioSettings->SetMixingFlags(dwMixingFlags);
+ BOOL bNormal = (BOOL)SendDlgItemMessage(m_Dlg, IDC_MIXMODE_NORMAL, BM_GETCHECK, 0, 0);
+ BOOL bDolby = (BOOL)SendDlgItemMessage(m_Dlg, IDC_MIXMODE_DOLBY, BM_GETCHECK, 0, 0);
+ BOOL bDPL2 = (BOOL)SendDlgItemMessage(m_Dlg, IDC_MIXMODE_DPL2, BM_GETCHECK, 0, 0);
+ m_pAudioSettings->SetMixingMode(bDolby ? MatrixEncoding_Dolby : (bDPL2 ? MatrixEncoding_DPLII : MatrixEncoding_None));
+
LoadData();
return hr;
@@ -432,6 +437,10 @@ HRESULT CLAVAudioMixingProp::OnActivate()
SendDlgItemMessage(m_Dlg, IDC_UNTOUCHED_STEREO, BM_SETCHECK, !!(m_dwFlags & LAV_MIXING_FLAG_UNTOUCHED_STEREO), 0);
SendDlgItemMessage(m_Dlg, IDC_NORMALIZE_MATRIX, BM_SETCHECK, !!(m_dwFlags & LAV_MIXING_FLAG_NORMALIZE_MATRIX), 0);
SendDlgItemMessage(m_Dlg, IDC_CLIP_PROTECTION, BM_SETCHECK, !!(m_dwFlags & LAV_MIXING_FLAG_CLIP_PROTECTION), 0);
+
+ SendDlgItemMessage(m_Dlg, IDC_MIXMODE_NORMAL, BM_SETCHECK, (m_dwMixingMode == MatrixEncoding_None), 0);
+ SendDlgItemMessage(m_Dlg, IDC_MIXMODE_DOLBY, BM_SETCHECK, (m_dwMixingMode == MatrixEncoding_Dolby), 0);
+ SendDlgItemMessage(m_Dlg, IDC_MIXMODE_DPL2, BM_SETCHECK, (m_dwMixingMode == MatrixEncoding_DPLII), 0);
}
return hr;
@@ -444,6 +453,7 @@ HRESULT CLAVAudioMixingProp::LoadData()
m_dwSpeakerLayout = m_pAudioSettings->GetMixingLayout();
m_bMixing = m_pAudioSettings->GetMixingEnabled();
m_dwFlags = m_pAudioSettings->GetMixingFlags();
+ m_dwMixingMode = m_pAudioSettings->GetMixingMode();
return hr;
}
@@ -479,6 +489,21 @@ INT_PTR CLAVAudioMixingProp::OnReceiveMessage(HWND hwnd, UINT uMsg, WPARAM wPara
if (lValue == !(m_dwFlags & LAV_MIXING_FLAG_CLIP_PROTECTION)) {
SetDirty();
}
+ } else if (LOWORD(wParam) == IDC_MIXMODE_NORMAL && HIWORD(wParam) == BN_CLICKED) {
+ lValue = SendDlgItemMessage(m_Dlg, LOWORD(wParam), BM_GETCHECK, 0, 0);
+ if (lValue != (m_dwMixingMode == MatrixEncoding_None)) {
+ SetDirty();
+ }
+ } else if (LOWORD(wParam) == IDC_MIXMODE_DOLBY && HIWORD(wParam) == BN_CLICKED) {
+ lValue = SendDlgItemMessage(m_Dlg, LOWORD(wParam), BM_GETCHECK, 0, 0);
+ if (lValue != (m_dwMixingMode == MatrixEncoding_Dolby)) {
+ SetDirty();
+ }
+ } else if (LOWORD(wParam) == IDC_MIXMODE_DPL2 && HIWORD(wParam) == BN_CLICKED) {
+ lValue = SendDlgItemMessage(m_Dlg, LOWORD(wParam), BM_GETCHECK, 0, 0);
+ if (lValue != (m_dwMixingMode == MatrixEncoding_DPLII)) {
+ SetDirty();
+ }
}
break;
case WM_HSCROLL:
diff --git a/decoder/LAVAudio/AudioSettingsProp.h b/decoder/LAVAudio/AudioSettingsProp.h
index 7e01e3ab..3a6eeb8d 100644
--- a/decoder/LAVAudio/AudioSettingsProp.h
+++ b/decoder/LAVAudio/AudioSettingsProp.h
@@ -110,6 +110,7 @@ private:
BOOL m_bMixing;
DWORD m_dwSpeakerLayout;
DWORD m_dwFlags;
+ DWORD m_dwMixingMode;
};
class CLAVAudioFormatsProp : public CBaseDSPropPage
diff --git a/decoder/LAVAudio/LAVAudio.cpp b/decoder/LAVAudio/LAVAudio.cpp
index 9cf2edab..924ba62a 100644
--- a/decoder/LAVAudio/LAVAudio.cpp
+++ b/decoder/LAVAudio/LAVAudio.cpp
@@ -196,6 +196,7 @@ HRESULT CLAVAudio::LoadDefaults()
m_settings.MixingEnabled = FALSE;
m_settings.MixingLayout = AV_CH_LAYOUT_STEREO;
m_settings.MixingFlags = LAV_MIXING_FLAG_CLIP_PROTECTION;
+ m_settings.MixingMode = MatrixEncoding_None;
return S_OK;
}
@@ -268,6 +269,9 @@ HRESULT CLAVAudio::LoadSettings()
dwVal = reg.ReadDWORD(L"MixingFlags", hr);
if (SUCCEEDED(hr)) m_settings.MixingFlags = dwVal;
+ dwVal = reg.ReadDWORD(L"MixingMode", hr);
+ if (SUCCEEDED(hr)) m_settings.MixingMode = dwVal;
+
// Deprecated sample format storage
pBuf = reg.ReadBinary(L"SampleFormats", dwVal, hr);
if (SUCCEEDED(hr)) {
@@ -327,6 +331,7 @@ HRESULT CLAVAudio::SaveSettings()
reg.WriteBOOL(L"Mixing", m_settings.MixingEnabled);
reg.WriteDWORD(L"MixingLayout", m_settings.MixingLayout);
reg.WriteDWORD(L"MixingFlags", m_settings.MixingFlags);
+ reg.WriteDWORD(L"MixingMode", m_settings.MixingMode);
reg.DeleteKey(L"Formats");
CRegistry regF = CRegistry(HKEY_CURRENT_USER, LAVC_AUDIO_REGISTRY_KEY_FORMATS, hr);
@@ -675,6 +680,21 @@ STDMETHODIMP_(DWORD) CLAVAudio::GetMixingFlags()
return m_settings.MixingFlags;
}
+STDMETHODIMP CLAVAudio::SetMixingMode(LAVAudioMixingMode mixingMode)
+{
+ m_settings.MixingMode = mixingMode;
+ SaveSettings();
+
+ m_bMixingSettingsChanged = TRUE;
+
+ return S_OK;
+}
+
+STDMETHODIMP_(LAVAudioMixingMode) CLAVAudio::GetMixingMode()
+{
+ return (LAVAudioMixingMode)m_settings.MixingMode;
+}
+
// ILAVAudioStatus
BOOL CLAVAudio::IsSampleFormatSupported(LAVAudioSampleFormat sfCheck)
{
diff --git a/decoder/LAVAudio/LAVAudio.h b/decoder/LAVAudio/LAVAudio.h
index 3f670d81..f4567a34 100644
--- a/decoder/LAVAudio/LAVAudio.h
+++ b/decoder/LAVAudio/LAVAudio.h
@@ -138,6 +138,8 @@ public:
STDMETHODIMP_(DWORD) GetMixingLayout();
STDMETHODIMP SetMixingFlags(DWORD dwFlags);
STDMETHODIMP_(DWORD) GetMixingFlags();
+ STDMETHODIMP SetMixingMode(LAVAudioMixingMode mixingMode);
+ STDMETHODIMP_(LAVAudioMixingMode) GetMixingMode();
// ILAVAudioStatus
STDMETHODIMP_(BOOL) IsSampleFormatSupported(LAVAudioSampleFormat sfCheck);
@@ -290,6 +292,7 @@ private:
BOOL MixingEnabled;
DWORD MixingLayout;
DWORD MixingFlags;
+ DWORD MixingMode;
} m_settings;
BOOL m_bRuntimeConfig;
diff --git a/decoder/LAVAudio/LAVAudio.rc b/decoder/LAVAudio/LAVAudio.rc
index ea83beba..d45c1dd6 100644
--- a/decoder/LAVAudio/LAVAudio.rc
+++ b/decoder/LAVAudio/LAVAudio.rc
@@ -113,10 +113,14 @@ BEGIN
CONTROL "Enable Mixing",IDC_MIXING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,19,59,10
LTEXT "Output Speaker Configuration:",IDC_LBL_OUTPUT_SPEAKERS,15,32,100,8
COMBOBOX IDC_OUTPUT_SPEAKERS,121,30,90,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- GROUPBOX "Settings",IDC_MIX_SETTINGS,225,7,133,53
- CONTROL "Don't mix Stereo sources",IDC_UNTOUCHED_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,237,19,100,10
- CONTROL "Normalize Matrix",IDC_NORMALIZE_MATRIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,237,33,100,10
- CONTROL "Clipping Protection",IDC_CLIP_PROTECTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,237,47,100,10
+ GROUPBOX "Settings",IDC_MIX_SETTINGS,225,7,133,56
+ CONTROL "Don't mix Stereo sources",IDC_UNTOUCHED_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,235,19,100,10
+ CONTROL "Normalize Matrix",IDC_NORMALIZE_MATRIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,235,33,100,10
+ CONTROL "Clipping Protection",IDC_CLIP_PROTECTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,235,47,100,10
+ GROUPBOX "Matrix Encoding",IDC_MIXING_MODE,225,67,133,51
+ CONTROL "None",IDC_MIXMODE_NORMAL,"Button",BS_AUTORADIOBUTTON,235,79,116,10
+ CONTROL "Dolby Pro Logic",IDC_MIXMODE_DOLBY,"Button",BS_AUTORADIOBUTTON,235,91,116,10
+ CONTROL "Dolby Pro Logic II",IDC_MIXMODE_DPL2,"Button",BS_AUTORADIOBUTTON,235,103,116,10
END
IDD_PROPPAGE_FORMATS DIALOGEX 0, 0, 369, 215
diff --git a/decoder/LAVAudio/LAVAudioSettings.h b/decoder/LAVAudio/LAVAudioSettings.h
index d8689f74..3bc569e3 100644
--- a/decoder/LAVAudio/LAVAudioSettings.h
+++ b/decoder/LAVAudio/LAVAudioSettings.h
@@ -77,6 +77,14 @@ typedef enum LAVAudioSampleFormat {
SampleFormat_NB // Number of entrys (do not use when dynamically linking)
};
+typedef enum LAVAudioMixingMode {
+ MatrixEncoding_None,
+ MatrixEncoding_Dolby,
+ MatrixEncoding_DPLII,
+
+ MatrixEncoding_NB
+};
+
// LAV Audio configuration interface
[uuid("4158A22B-6553-45D0-8069-24716F8FF171")]
interface ILAVAudioSettings : public IUnknown
@@ -150,9 +158,13 @@ interface ILAVAudioSettings : public IUnknown
#define LAV_MIXING_FLAG_UNTOUCHED_STEREO 0x0001
#define LAV_MIXING_FLAG_NORMALIZE_MATRIX 0x0002
#define LAV_MIXING_FLAG_CLIP_PROTECTION 0x0004
- // Enable/Disable Mixing
+ // Set Mixing Flags
STDMETHOD(SetMixingFlags)(DWORD dwFlags) = 0;
STDMETHOD_(DWORD,GetMixingFlags)() = 0;
+
+ // Set Mixing Mode
+ STDMETHOD(SetMixingMode)(LAVAudioMixingMode mixingMode) = 0;
+ STDMETHOD_(LAVAudioMixingMode,GetMixingMode)() = 0;
};
// LAV Audio Status Interface
diff --git a/decoder/LAVAudio/PostProcessor.cpp b/decoder/LAVAudio/PostProcessor.cpp
index 89f487f1..5bd261d0 100644
--- a/decoder/LAVAudio/PostProcessor.cpp
+++ b/decoder/LAVAudio/PostProcessor.cpp
@@ -592,7 +592,7 @@ HRESULT CLAVAudio::PerformMixing(BufferDetails *buffer)
int out_ch = av_get_channel_layout_nb_channels(m_settings.MixingLayout);
double *matrix_dbl = (double *)av_mallocz(in_ch * out_ch * sizeof(*matrix_dbl));
- ret = avresample_build_matrix(buffer->dwChannelMask, m_settings.MixingLayout, M_SQRT1_2, M_SQRT1_2, 0.0, bNormalize, matrix_dbl, in_ch, AV_MATRIX_ENCODING_NONE);
+ ret = avresample_build_matrix(buffer->dwChannelMask, m_settings.MixingLayout, M_SQRT1_2, M_SQRT1_2, 0.0, bNormalize, matrix_dbl, in_ch, (AVMatrixEncoding)m_settings.MixingMode);
if (ret < 0) {
DbgLog((LOG_ERROR, 10, L"avresample_build_matrix failed, layout in: %x, out: %x, sample fmt in: %d, out: %d", buffer->dwChannelMask, m_settings.MixingLayout, buffer->sfFormat, m_sfRemixFormat));
av_free(matrix_dbl);
diff --git a/decoder/LAVAudio/resource.h b/decoder/LAVAudio/resource.h
index 8e149f36..6574ca23 100644
--- a/decoder/LAVAudio/resource.h
+++ b/decoder/LAVAudio/resource.h
@@ -97,6 +97,10 @@
#define IDC_LBL_MIXING 1112
#define IDC_NORMALIZE_MATRIX 1113
#define IDC_CLIP_PROTECTION 1114
+#define IDC_MIXING_MODE 1115
+#define IDC_MIXMODE_NORMAL 1116
+#define IDC_MIXMODE_DOLBY 1117
+#define IDC_MIXMODE_DPL2 1118
// Next default values for new objects
//
@@ -104,7 +108,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 106
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1115
+#define _APS_NEXT_CONTROL_VALUE 1119
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif