patch from Alfred to support floats on demod input for FreeDV API
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 21 Oct 2014 19:54:17 +0000 (19:54 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 21 Oct 2014 19:54:17 +0000 (19:54 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1905 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/freedv_api.c
codec2-dev/src/freedv_api.h

index c20f5709b4ec7e02a5abc22c95ee22652b75e61b..db3f72f1e34cc62f67b31cb3e7166a566d23a2c6 100644 (file)
@@ -284,7 +284,23 @@ int freedv_nin(struct freedv *f) {
 
 \*---------------------------------------------------------------------------*/
 
+// short version
+
 int freedv_rx(struct freedv *f, short speech_out[], short demod_in[]) {
+
+float rxdata[FDMDV_MAX_SAMPLES_PER_FRAME];
+int i;
+
+    for(i=0; i<f->nin; i++)  rxdata[i] = (float)demod_in[i]/FDMDV_SCALE;
+
+    return freedv_floatrx(f, speech_out, rxdata);
+    
+}
+
+
+// float version
+
+int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]) {
     COMP                rx_fdm[FDMDV_MAX_SAMPLES_PER_FRAME];
     int                 bits_per_codec_frame, bytes_per_codec_frame, bits_per_fdmdv_frame;
     int                 reliable_sync_bit, i, j, bit, byte, nin_prev, nout;
@@ -297,7 +313,7 @@ int freedv_rx(struct freedv *f, short speech_out[], short demod_in[]) {
     bits_per_fdmdv_frame  = fdmdv_bits_per_frame(f->fdmdv);
 
     for(i=0; i<f->nin; i++) {
-        rx_fdm[i].real = (float)demod_in[i]/FDMDV_SCALE;
+        rx_fdm[i].real = demod_in[i];
         rx_fdm[i].imag = 0;
     }
 
index 909340e28ec2e1af60dee65b487ac9f4e19de532..77a5e3d7957511df72201107d9a5afbeb903c721 100644 (file)
@@ -74,5 +74,6 @@ void freedv_close(struct freedv *freedv);
 void freedv_tx(struct freedv *f, short mod_out[], short speech_in[]);
 int freedv_nin(struct freedv *f);
 int freedv_rx(struct freedv *f, short speech_out[], short demod_in[]);
+int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]);
 
 #endif