[PATCHv2 12/21] android/hal-sco: Skip resampling for input of 8k

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Andrei Emeltchenko <andrei.emeltchenko@xxxxxxxxx>

---
 android/hal-sco.c | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/android/hal-sco.c b/android/hal-sco.c
index 97cab84..2c1aeed 100644
--- a/android/hal-sco.c
+++ b/android/hal-sco.c
@@ -979,7 +979,7 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,
 	size_t frame_num = bytes / frame_size;
 	size_t input_frame_num = frame_num;
 	void *read_buf = buffer;
-	size_t total, read_frames;
+	size_t total = bytes;
 	int ret;
 
 	DBG("Read from fd %d bytes %zu", sco_fd, bytes);
@@ -1000,27 +1000,29 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,
 		}
 
 		read_buf = in->resample_buf;
-	}
 
-	total = input_frame_num * sizeof(int16_t) * 1;
+		total = input_frame_num * sizeof(int16_t) * 1;
+	}
 
 	if(!read_data(in, read_buf, total))
 		return -1;
 
-	read_frames = input_frame_num;
-
-	ret = in->resampler->resample_from_input(in->resampler,
+	if (in->resampler) {
+		ret = in->resampler->resample_from_input(in->resampler,
 							in->resample_buf,
-							&read_frames,
+							&input_frame_num,
 							(int16_t *) buffer,
 							&frame_num);
-	if (ret) {
-		error("Failed to resample frames: %zd input %zd (%s)",
-				frame_num, input_frame_num, strerror(ret));
-		return -1;
-	}
+		if (ret) {
+			error("Failed to resample frames: %zd input %zd (%s)",
+					frame_num, input_frame_num,
+					strerror(ret));
+			return -1;
+		}
 
-        DBG("resampler: remain %zd output %zd frames", read_frames, frame_num);
+		DBG("resampler: remain %zd output %zd frames", input_frame_num,
+								frame_num);
+	}
 
 	return bytes;
 }
@@ -1081,6 +1083,9 @@ static int sco_open_input_stream(struct audio_hw_device *dev,
 
 	in->cfg.frame_num = IN_STREAM_FRAMES;
 
+	if (in->cfg.rate == AUDIO_STREAM_SCO_RATE)
+		goto skip_resampler;
+
 	/* Channel numbers for resampler */
 	chan_num = 1;
 
@@ -1108,7 +1113,7 @@ static int sco_open_input_stream(struct audio_hw_device *dev,
 	DBG("Resampler: input %d output %d chan %d frames %u size %zd",
 				AUDIO_STREAM_SCO_RATE, in->cfg.rate, chan_num,
 				in->resample_frame_num, resample_size);
-
+skip_resampler:
 	*stream_in = &in->stream;
 	sco_dev->in = in;
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux