Module: sems
Branch: master
Commit: 080773bc0820dbed23f2753e31d62b0d1713c075
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=080773bc0820dbed23f2753e31d62b0d1713c075

Author: Raphael Coeffic <[email protected]>
Committer: Raphael Coeffic <[email protected]>
Date:   Mon Mar  5 09:32:52 2012 +0100

b/f: fix bytes-to-fetch calculation

In case input and output sample rate where not multiple of each other, WAV 
files would play badly. For example, WAV files with 44.1 KHz would play slower.

---

 core/AmAudio.cpp |   58 ++++-------------------------------------------------
 1 files changed, 5 insertions(+), 53 deletions(-)

diff --git a/core/AmAudio.cpp b/core/AmAudio.cpp
index e9f4e0f..4975bc7 100644
--- a/core/AmAudio.cpp
+++ b/core/AmAudio.cpp
@@ -341,11 +341,11 @@ int AmAudio::get(unsigned int user_ts, unsigned char* 
buffer, int output_sample_
 {
   int size = 0;
   if (output_sample_rate < fmt->rate) {
-    int rfactor = fmt->rate / output_sample_rate;
-    size = calcBytesToRead(nb_samples * rfactor);
+    float rfactor = (float)fmt->rate / (float)output_sample_rate;
+    size = calcBytesToRead((int)((float)nb_samples * rfactor));
   } else {
-    int rdivisor = output_sample_rate / fmt->rate;
-    size = calcBytesToRead(nb_samples / rdivisor);
+    float rdivisor = (float)output_sample_rate / (float)fmt->rate;
+    size = calcBytesToRead((int)((float)nb_samples / rdivisor));
   }
 
   size = read(user_ts,size);
@@ -465,55 +465,7 @@ unsigned int AmAudio::downMix(unsigned int size)
   if(fmt->channels == 2){
     stereo2mono(samples.back_buffer(),(unsigned char*)samples,s);
     samples.swap();
-  }
-
-#if 0
-  if (fmt->rate != SYSTEM_SAMPLERATE) {
-    if (!resample_state) {
-      int src_error;
-      // for better quality but more CPU usage, use SRC_SINC_ converters
-      resample_state = src_new(SRC_LINEAR, 1, &src_error);
-      if (!resample_state) {
-       ERROR("samplerate initialization error: ");
-      }
-    }
-
-    if (resample_state) {
-      if (resample_buf_samples + PCM16_B2S(s) > PCM16_B2S(AUDIO_BUFFER_SIZE) * 
2) {
-       WARN("resample input buffer overflow! (%d)\n",
-            resample_buf_samples + PCM16_B2S(s));
-      } else {
-       signed short* samples_s = (signed short*)(unsigned char*)samples;
-       src_short_to_float_array(samples_s, &resample_in[resample_buf_samples], 
PCM16_B2S(s));
-       resample_buf_samples += PCM16_B2S(s);
-      }
-      
-      SRC_DATA src_data;
-      src_data.data_in = resample_in;
-      src_data.input_frames = resample_buf_samples;
-      src_data.data_out = resample_out;
-      src_data.output_frames = PCM16_B2S(AUDIO_BUFFER_SIZE);
-      src_data.src_ratio = (double)SYSTEM_SAMPLERATE / (double)fmt->rate;
-      src_data.end_of_input = 0;
-
-      int src_err = src_process(resample_state, &src_data);
-      if (src_err) {
-       DBG("resample error: '%s'\n", src_strerror(src_err));
-      }else {
-       signed short* samples_s = (signed short*)(unsigned char*)samples;
-       src_float_to_short_array(resample_out, samples_s, 
src_data.output_frames_gen);
-       s = PCM16_S2B(src_data.output_frames_gen);
-
-       if (resample_buf_samples !=  (unsigned int)src_data.input_frames_used) {
-         memmove(resample_in, &resample_in[src_data.input_frames_used], 
-                 (resample_buf_samples - src_data.input_frames_used) * 
sizeof(float));
-       }
-       resample_buf_samples = resample_buf_samples - 
src_data.input_frames_used;
-      }
-    }
-  }
-#endif
- 
+  } 
 
   return s;
 }

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to