From d7e90467ce24d6edaa42dad45186660d6263f1a3 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sun, 25 Nov 2012 06:01:27 +0000 Subject: [PATCH] Filter dialog all hooked up to Codec, still requires testing git-svn-id: https://svn.code.sf.net/p/freetel/code@1063 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/dlg_filter.cpp | 100 +++++++++++++++++++++++++++++-------- fdmdv2/src/dlg_filter.h | 18 ++++++- fdmdv2/src/fdmdv2_main.cpp | 26 ++++++---- 3 files changed, 111 insertions(+), 33 deletions(-) diff --git a/fdmdv2/src/dlg_filter.cpp b/fdmdv2/src/dlg_filter.cpp index 3fcd1220..a1c216fe 100644 --- a/fdmdv2/src/dlg_filter.cpp +++ b/fdmdv2/src/dlg_filter.cpp @@ -22,11 +22,15 @@ #define SLIDER_MAX 100 +extern struct CODEC2 *g_pCodec2; + //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= // Class FilterDlg //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= -FilterDlg::FilterDlg(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) +FilterDlg::FilterDlg(wxWindow* parent, bool running, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style) { + m_running = running; + this->SetSizeHints(wxDefaultSize, wxDefaultSize); this->SetSizeHints(wxDefaultSize, wxDefaultSize); @@ -58,7 +62,6 @@ FilterDlg::FilterDlg(wxWindow* parent, wxWindowID id, const wxString& title, con m_staticTextBeta = new wxStaticText(this, wxID_ANY, _("0.0"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); m_staticTextBeta->Wrap(-1); - //gSizer3->Add(m_staticTextBeta, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL, 2); gSizer3->Add(m_staticTextBeta, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL); m_staticText911 = new wxStaticText(this, wxID_ANY, _("Gamma:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); @@ -74,16 +77,15 @@ FilterDlg::FilterDlg(wxWindow* parent, wxWindowID id, const wxString& title, con bSizer30->Add(gSizer3, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 5); - m_sdbSizer5 = new wxStdDialogButtonSizer(); + wxBoxSizer* bSizer31 = new wxBoxSizer(wxHORIZONTAL); m_sdbSizer5OK = new wxButton(this, wxID_OK); - m_sdbSizer5->AddButton(m_sdbSizer5OK); - m_sdbSizer5Apply = new wxButton(this, wxID_APPLY); - m_sdbSizer5->AddButton(m_sdbSizer5Apply); + bSizer31->Add(m_sdbSizer5OK, 0, wxALL, 5); + m_sdbSizer5Default = new wxButton(this, wxID_ANY, wxT("Default")); + bSizer31->Add(m_sdbSizer5Default, 0, wxALL, 5); m_sdbSizer5Cancel = new wxButton(this, wxID_CANCEL); - m_sdbSizer5->AddButton(m_sdbSizer5Cancel); - m_sdbSizer5->Realize(); + bSizer31->Add(m_sdbSizer5Cancel, 0, wxALL, 5); - bSizer30->Add(m_sdbSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + bSizer30->Add(bSizer31, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); this->SetSizer(bSizer30); this->Layout(); @@ -92,10 +94,16 @@ FilterDlg::FilterDlg(wxWindow* parent, wxWindowID id, const wxString& title, con this->Centre(wxBOTH); // Connect Events + this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(FilterDlg::OnInitDialog)); + + m_codec2LPCPostFilterEnable->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxScrollEventHandler(FilterDlg::OnEnable), NULL, this); + m_codec2LPCPostFilterBassBoost->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxScrollEventHandler(FilterDlg::OnBassBoost), NULL, this); m_codec2LPCPostFilterBeta->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnBetaScroll), NULL, this); m_codec2LPCPostFilterGamma->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnGammaScroll), NULL, this); + m_sdbSizer5Cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnCancel), NULL, this); + m_sdbSizer5Default->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnDefault), NULL, this); m_sdbSizer5OK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnOK), NULL, this); } @@ -109,6 +117,7 @@ FilterDlg::~FilterDlg() m_codec2LPCPostFilterBeta->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnBetaScroll), NULL, this); m_codec2LPCPostFilterGamma->Disconnect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(FilterDlg::OnGammaScroll), NULL, this); m_sdbSizer5Cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnCancel), NULL, this); + m_sdbSizer5Default->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnDefault), NULL, this); m_sdbSizer5OK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FilterDlg::OnOK), NULL, this); } @@ -120,22 +129,24 @@ void FilterDlg::ExchangeData(int inout) wxConfigBase *pConfig = wxConfigBase::Get(); if(inout == EXCHANGE_DATA_IN) { + //printf("EXCHANGE_DATA_IN\n"); m_codec2LPCPostFilterEnable->SetValue(wxGetApp().m_codec2LPCPostFilterEnable); m_codec2LPCPostFilterBassBoost->SetValue(wxGetApp().m_codec2LPCPostFilterBassBoost); - //m_codec2LPCPostFilterBeta->SetValue(wxGetApp().m_codec2LPCPostFilterBeta); - //m_codec2LPCPostFilterGamma->SetValue(wxGetApp().m_codec2LPCPostFilterGamma); + m_beta = wxGetApp().m_codec2LPCPostFilterBeta; setBeta(); + m_gamma = wxGetApp().m_codec2LPCPostFilterGamma; setGamma(); } if(inout == EXCHANGE_DATA_OUT) { + //printf("EXCHANGE_DATA_OUT\n"); wxGetApp().m_codec2LPCPostFilterEnable = m_codec2LPCPostFilterEnable->GetValue(); wxGetApp().m_codec2LPCPostFilterBassBoost = m_codec2LPCPostFilterBassBoost->GetValue(); - //wxGetApp().m_codec2LPCPostFilterBeta = m_codec2LPCPostFilterBeta->GetValue(); - //wxGetApp().m_codec2LPCPostFilterGamma = m_codec2LPCPostFilterGamma->GetValue(); + wxGetApp().m_codec2LPCPostFilterBeta = m_beta; + wxGetApp().m_codec2LPCPostFilterGamma = m_gamma; pConfig->Write(wxT("/Filter/codec2LPCPostFilterEnable"), wxGetApp().m_codec2LPCPostFilterEnable); pConfig->Write(wxT("/Filter/codec2LPCPostFilterBassBoost"), wxGetApp().m_codec2LPCPostFilterBassBoost); - //pConfig->Write(wxT("/Filter/codec2LPCPostFilterBeta"), wxGetApp().m_codec2LPCPostFilterBeta); - //pConfig->Write(wxT("/Filter/codec2LPCPostFilterGamma"), wxGetApp().m_codec2LPCPostFilterGamma); + pConfig->Write(wxT("/Filter/codec2LPCPostFilterBeta"), m_beta*100.0); + pConfig->Write(wxT("/Filter/codec2LPCPostFilterGamma"), m_gamma*100.0); pConfig->Flush(); } @@ -150,11 +161,24 @@ void FilterDlg::OnCancel(wxCommandEvent& event) this->EndModal(wxID_CANCEL); } +//------------------------------------------------------------------------- +// OnDefault() +//------------------------------------------------------------------------- +void FilterDlg::OnDefault(wxCommandEvent& event) +{ + m_beta = CODEC2_LPC_PF_BETA; setBeta(); + m_gamma = CODEC2_LPC_PF_GAMMA; setGamma(); + m_codec2LPCPostFilterEnable->SetValue(true); + m_codec2LPCPostFilterBassBoost->SetValue(true); +} + //------------------------------------------------------------------------- // OnOK() //------------------------------------------------------------------------- void FilterDlg::OnOK(wxCommandEvent& event) { + //printf("FilterDlg::OnOK\n"); + ExchangeData(EXCHANGE_DATA_OUT); this->EndModal(wxID_OK); } @@ -171,20 +195,54 @@ void FilterDlg::OnClose(wxCloseEvent& event) //------------------------------------------------------------------------- void FilterDlg::OnInitDialog(wxInitDialogEvent& event) { + //printf("FilterDlg::OnInitDialog\n"); ExchangeData(EXCHANGE_DATA_IN); + //printf("m_beta: %f\n", m_beta); } -void FilterDlg::OnBetaScroll(wxScrollEvent& event) { - float beta = (float)m_codec2LPCPostFilterBeta->GetValue()/SLIDER_MAX; +void FilterDlg::setBeta(void) { wxString buf; - buf.Printf(wxT("%3.2f"), beta); + buf.Printf(wxT("%3.2f"), m_beta); m_staticTextBeta->SetLabel(buf); + int slider = (int)(m_beta*SLIDER_MAX + 0.5); + m_codec2LPCPostFilterBeta->SetValue(slider); } -void FilterDlg::OnGammaScroll(wxScrollEvent& event) { - float gamma = (float)m_codec2LPCPostFilterGamma->GetValue()/SLIDER_MAX; +void FilterDlg::setCodec2(void) { + if (m_running) { + assert(g_pCodec2 != NULL); + codec2_set_lpc_post_filter(g_pCodec2, + m_codec2LPCPostFilterEnable->GetValue(), + m_codec2LPCPostFilterBassBoost->GetValue(), + m_beta, m_gamma); + } +} + +void FilterDlg::setGamma(void) { wxString buf; - buf.Printf(wxT("%3.2f"), gamma); + buf.Printf(wxT("%3.2f"), m_gamma); m_staticTextGamma->SetLabel(buf); + int slider = (int)(m_gamma*SLIDER_MAX + 0.5); + m_codec2LPCPostFilterGamma->SetValue(slider); +} + +void FilterDlg::OnEnable(wxScrollEvent& event) { + setCodec2(); +} + +void FilterDlg::OnBassBoost(wxScrollEvent& event) { + setCodec2(); +} + +void FilterDlg::OnBetaScroll(wxScrollEvent& event) { + m_beta = (float)m_codec2LPCPostFilterBeta->GetValue()/SLIDER_MAX; + setBeta(); + setCodec2(); +} + +void FilterDlg::OnGammaScroll(wxScrollEvent& event) { + m_gamma = (float)m_codec2LPCPostFilterGamma->GetValue()/SLIDER_MAX; + setGamma(); + setCodec2(); } diff --git a/fdmdv2/src/dlg_filter.h b/fdmdv2/src/dlg_filter.h index d6918cc6..8c354efd 100644 --- a/fdmdv2/src/dlg_filter.h +++ b/fdmdv2/src/dlg_filter.h @@ -30,7 +30,9 @@ class FilterDlg : public wxDialog { public: - FilterDlg( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 400,250 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + FilterDlg( wxWindow* parent, bool running, wxWindowID id = wxID_ANY, const wxString& title = _("Filter"), + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 400,250 ), + long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~FilterDlg(); void ExchangeData(int inout); @@ -39,10 +41,14 @@ class FilterDlg : public wxDialog // Handlers for events. void OnCancel(wxCommandEvent& event); void OnOK(wxCommandEvent& event); + void OnDefault(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnInitDialog(wxInitDialogEvent& event); + void OnBetaScroll(wxScrollEvent& event); void OnGammaScroll(wxScrollEvent& event); + void OnEnable(wxScrollEvent& event); + void OnBassBoost(wxScrollEvent& event); wxStaticText* m_staticText8; wxCheckBox* m_codec2LPCPostFilterEnable; @@ -57,8 +63,16 @@ class FilterDlg : public wxDialog wxStdDialogButtonSizer* m_sdbSizer5; wxButton* m_sdbSizer5OK; - wxButton* m_sdbSizer5Apply; + wxButton* m_sdbSizer5Default; wxButton* m_sdbSizer5Cancel; + + private: + bool m_running; + float m_beta; + float m_gamma; + void setBeta(void); // sets slider and static text from m_beta + void setGamma(void); // sets slider and static text from m_gamma + void setCodec2(void); }; #endif // __FILTER_DIALOG__ diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index b45b652d..2e711273 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -306,9 +306,10 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) bool t = true; // prevents compile error when using default bool wxGetApp().m_codec2LPCPostFilterEnable = pConfig->Read(wxT("/Filter/codec2LPCPostFilterEnable"), t); wxGetApp().m_codec2LPCPostFilterBassBoost = pConfig->Read(wxT("/Filter/codec2LPCPostFilterBassBoost"), t); - wxGetApp().m_codec2LPCPostFilterGamma = pConfig->Read(wxT("/Filter/codec2LPCPostFilterGamma"), CODEC2_LPC_PF_GAMMA); - wxGetApp().m_codec2LPCPostFilterBeta = pConfig->Read(wxT("/Filter/codec2LPCPostFilterBeta"), CODEC2_LPC_PF_BETA); - + wxGetApp().m_codec2LPCPostFilterGamma = (float)pConfig->Read(wxT("/Filter/codec2LPCPostFilterGamma"), CODEC2_LPC_PF_GAMMA*100)/100.0; + wxGetApp().m_codec2LPCPostFilterBeta = (float)pConfig->Read(wxT("/Filter/codec2LPCPostFilterBeta"), CODEC2_LPC_PF_BETA*100)/100.0; + //printf("main(): m_codec2LPCPostFilterBeta: %f\n", wxGetApp().m_codec2LPCPostFilterBeta); + pConfig->SetPath(wxT("/")); // this->Connect(m_menuItemHelpUpdates->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnHelpCheckUpdatesUI)); @@ -379,6 +380,7 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) g_tx = 0; g_split = 0; + } //------------------------------------------------------------------------- @@ -1030,13 +1032,8 @@ void MainFrame::OnToolsAudio(wxCommandEvent& event) void MainFrame::OnToolsFilter(wxCommandEvent& event) { wxUnusedVar(event); - int rv = 0; - FilterDlg *dlg = new FilterDlg(NULL); - rv = dlg->ShowModal(); - if(rv == wxID_OK) - { - dlg->ExchangeData(EXCHANGE_DATA_OUT); - } + FilterDlg *dlg = new FilterDlg(NULL, m_RxRunning); + dlg->ShowModal(); delete dlg; } @@ -1168,6 +1165,15 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) g_pFDMDV = fdmdv_create(); g_pCodec2 = codec2_create(CODEC2_MODE_1400); + + // init Codec 2 LPC Post Filter + + codec2_set_lpc_post_filter(g_pCodec2, + wxGetApp().m_codec2LPCPostFilterEnable, + wxGetApp().m_codec2LPCPostFilterBassBoost, + wxGetApp().m_codec2LPCPostFilterBeta, + wxGetApp().m_codec2LPCPostFilterGamma); + g_State = 0; g_snr = 0.0; -- 2.25.1