aboutsummaryrefslogtreecommitdiff
path: root/lib/vgmstream/src/util.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vgmstream/src/util.h')
-rw-r--r--lib/vgmstream/src/util.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/vgmstream/src/util.h b/lib/vgmstream/src/util.h
new file mode 100644
index 0000000000..57fcca0313
--- /dev/null
+++ b/lib/vgmstream/src/util.h
@@ -0,0 +1,66 @@
+/*
+ * util.h - utility functions
+ */
+
+#include "streamtypes.h"
+
+#ifndef _UTIL_H
+#define _UTIL_H
+
+/* host endian independent multi-byte integer reading */
+
+static inline int16_t get_16bitBE(uint8_t * p) {
+ return (p[0]<<8) | (p[1]);
+}
+
+static inline int16_t get_16bitLE(uint8_t * p) {
+ return (p[0]) | (p[1]<<8);
+}
+
+static inline int32_t get_32bitBE(uint8_t * p) {
+ return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | (p[3]);
+}
+
+static inline int32_t get_32bitLE(uint8_t * p) {
+ return (p[0]) | (p[1]<<8) | (p[2]<<16) | (p[3]<<24);
+}
+
+void put_16bitLE(uint8_t * buf, int16_t i);
+
+void put_32bitLE(uint8_t * buf, int32_t i);
+
+/* signed nibbles come up a lot */
+static int nibble_to_int[16] = {0,1,2,3,4,5,6,7,-8,-7,-6,-5,-4,-3,-2,-1};
+
+static inline int get_high_nibble_signed(uint8_t n) {
+ /*return ((n&0x70)-(n&0x80))>>4;*/
+ return nibble_to_int[n>>4];
+}
+
+static inline int get_low_nibble_signed(uint8_t n) {
+ /*return (n&7)-(n&8);*/
+ return nibble_to_int[n&0xf];
+}
+
+/* return true for a good sample rate */
+int check_sample_rate(int32_t sr);
+
+/* return a file's extension (a pointer to the first character of the
+ * extension in the original filename or the ending null byte if no extension
+ */
+const char * filename_extension(const char * filename);
+
+static inline int clamp16(int32_t val) {
+ if (val>32767) return 32767;
+ if (val<-32768) return -32768;
+ return val;
+}
+
+/* make a header for PCM .wav */
+/* buffer must be 0x2c bytes */
+void make_wav_header(uint8_t * buf, int32_t sample_count, int32_t sample_rate, int channels);
+
+void concatn(int length, char * dst, const char * src);
+void concatn_doublenull(int length, char * dst, const char * src);
+
+#endif