Filter dialog all hooked up to Codec, still requires testing
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 25 Nov 2012 06:01:27 +0000 (06:01 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 25 Nov 2012 06:01:27 +0000 (06:01 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1063 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/src/dlg_filter.cpp
fdmdv2/src/dlg_filter.h
fdmdv2/src/fdmdv2_main.cpp

index 3fcd1220c9d0f3265fc57a4c75eff5f1d0b2e10a..a1c216fedf4d907d10c887b0bc74b713e5a00941 100644 (file)
 
 #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();
 }
 
index d6918cc673eeff1477a776c76e1e40ea22e86be0..8c354efd14339348f60c2464f64ab09fc4dbaa18 100644 (file)
@@ -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__
index b45b652dfe3b8b7fa78f576faf33d588dbf9e54e..2e71127384c2615c84620e16fb1b2a4d3b7dda17 100644 (file)
@@ -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;