# HG changeset patch
# User Mychaela Falconia <falcon@freecalypso.org>
# Date 1668908097 0
# Node ID 30d1d0a705c07f6547e7fa1480b755d60b907abb
# Parent  f88817a233fb689b456822411c129938d7626e9c
libtest: add WAV reader helper functions

diff -r f88817a233fb -r 30d1d0a705c0 libtest/Makefile
--- a/libtest/Makefile	Sun Nov 20 00:44:26 2022 +0000
+++ b/libtest/Makefile	Sun Nov 20 01:34:57 2022 +0000
@@ -1,6 +1,6 @@
 CC=	gcc
 CFLAGS=	-O2
-OBJS=	binreader.o pcmwrite.o wavreader.o wavwriter.o
+OBJS=	binreader.o pcmwrite.o wavrdhelp.o wavreader.o wavwriter.o
 LIB=	libtest.a
 
 all:	${LIB}
diff -r f88817a233fb -r 30d1d0a705c0 libtest/wavrdhelp.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtest/wavrdhelp.c	Sun Nov 20 01:34:57 2022 +0000
@@ -0,0 +1,61 @@
+/*
+ * In this module we implement our helper functions
+ * on top of the basic WAV reader.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include "wavreader.h"
+#include "wavrdhelp.h"
+
+int wavrd_check_header(void *wav, const char *filename)
+{
+	int format, sampleRate, channels, bitsPerSample;
+
+	if (!wav_get_header(wav, &format, &channels, &sampleRate,
+	    &bitsPerSample, NULL)) {
+		fprintf(stderr, "error: %s is not a valid WAV file\n",
+			filename);
+		return -1;
+	}
+	if (format != 1) {
+		fprintf(stderr, "error: %s has unsupported WAV format %d\n",
+			filename, format);
+		return -1;
+	}
+	if (bitsPerSample != 16) {
+		fprintf(stderr,
+			"error: %s has unsupported WAV sample depth %d\n",
+			filename, bitsPerSample);
+		return -1;
+	}
+	if (channels != 1) {
+		fprintf(stderr, "error: %s has %d channels, need 1\n",
+			filename, channels);
+		return -1;
+	}
+	if (sampleRate != 8000) {
+		fprintf(stderr,
+			"error: %s has %d Hz sample rate, need 8000 Hz\n",
+			filename, sampleRate);
+		return -1;
+	}
+	return 0;
+}
+
+int wavrd_get_pcm_block(void *wav, int16_t *pcm)
+{
+	uint8_t bytes[320], *dp;
+	int cc, i;
+
+	cc = wav_read_data(wav, bytes, 320);
+	cc >>= 1;
+	dp = bytes;
+	for (i = 0; i < cc; i++) {
+		pcm[i] = dp[0] | (dp[1] << 8);
+		dp += 2;
+	}
+	while (i < 160)
+		pcm[i++] = 0;
+	return cc;
+}
diff -r f88817a233fb -r 30d1d0a705c0 libtest/wavrdhelp.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtest/wavrdhelp.h	Sun Nov 20 01:34:57 2022 +0000
@@ -0,0 +1,8 @@
+/*
+ * We implement a couple of helper functions on top of the WAV reader
+ * which we've lifted out of opencore-amrnb test code; this header file
+ * provides prototype declarations for these functions.
+ */
+
+extern int wavrd_check_header(void *wav, const char *filename);
+extern int wavrd_get_pcm_block(void *wav, int16_t *pcmbuf);