diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2012-07-02 23:05:18 +0400 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2012-07-02 23:05:18 +0400 |
commit | 8aa64d3a6fe925c284f0795cc9933afda43a87a6 (patch) | |
tree | 8b0a0a047ba1266ba7db8cf0cb2020966b150d42 /decoder/LAVAudio | |
parent | 324d5cb3d90fe57dbc15c24cb7cfa793e22f2f9d (diff) |
mixing: add configuration for matrix encoding
Diffstat (limited to 'decoder/LAVAudio')
-rw-r--r-- | decoder/LAVAudio/AudioSettingsProp.cpp | 25 | ||||
-rw-r--r-- | decoder/LAVAudio/AudioSettingsProp.h | 1 | ||||
-rw-r--r-- | decoder/LAVAudio/LAVAudio.cpp | 20 | ||||
-rw-r--r-- | decoder/LAVAudio/LAVAudio.h | 3 | ||||
-rw-r--r-- | decoder/LAVAudio/LAVAudio.rc | 12 | ||||
-rw-r--r-- | decoder/LAVAudio/LAVAudioSettings.h | 14 | ||||
-rw-r--r-- | decoder/LAVAudio/PostProcessor.cpp | 2 | ||||
-rw-r--r-- | decoder/LAVAudio/resource.h | 6 |
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 |