Figure out SOXR configuration.
authorbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 30 May 2014 15:22:47 +0000 (15:22 +0000)
committerbruceperens <bruceperens@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 30 May 2014 15:22:47 +0000 (15:22 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1618 01035d8c-6547-0410-b346-abe4f91aad63

freedv-server/source/interpolate.cpp

index ff10a157a5c457eef80d1990007db791a49396f4..0c10128fd067661ddef87fd42cc14a0bbbbfe280 100644 (file)
@@ -12,7 +12,13 @@ namespace FreeDV {
    std::size_t         in_length,
    std::size_t         out_length)
   {
-    std::size_t        out_done = 0;
+    std::size_t                        in_done = 0;
+    std::size_t                        out_done = 0;
+    const unsigned int         number_of_channels = 1;
+    const soxr_io_spec_t       io_spec = soxr_io_spec(SOXR_INT16_S, SOXR_INT16_S);
+    const soxr_quality_spec_t  quality_spec = soxr_quality_spec(
+                                SOXR_QQ, SOXR_NO_DITHER);
+    const soxr_runtime_spec_t  runtime_spec = soxr_runtime_spec(1);
 
     /// The "Gibbs effect" may be seen because I don't save data from the
     /// previous block. Fix this by making the resampler a class,
@@ -21,16 +27,16 @@ namespace FreeDV {
     const soxr_error_t error = soxr_oneshot(
      in_rate,
      out_rate,
-     1, // Number of channels.
+     number_of_channels, // Number of channels.
      in,
      in_length,
-     NULL,
+     &in_done,
      out,
      out_length,
      &out_done,
-     NULL,
-     NULL,
-     NULL);  
+     io_spec,
+     quality_spec,
+     runtime_spec);  
   }
 };
 #endif