On Tue, Jun 13, 2017 at 04:35:52PM -0500, Zebediah Figura wrote:
+#define PCM_CVT_CHANGE_FUNC(name) static void name(DWORD srcRate, const unsigned char *src, DWORD *nsrc, \
DWORD dstRate, unsigned char *dst, DWORD *ndst) \- { \
- DWORD error = srcRate / 2; \
- DWORD srcUsed = 0, dstUsed = 0; \
- for (srcUsed = 0; srcUsed < *nsrc; srcUsed++) { \
error += dstRate; \while (error > srcRate) { \if (dstUsed == *ndst) { \*nsrc = srcUsed; \*ndst = dstUsed; \return; \}/* conversion is done here */+#define PCM_CVT_CHANGE_FUNC_END(offset) \
dstUsed++; \error -= srcRate; \} \src += offset; \- } \
- *nsrc = srcUsed; \
- *ndst = dstUsed; \
+}
+PCM_CVT_CHANGE_FUNC(cvtSS88C)
- *dst++ = src[0];
- *dst++ = src[1];
+PCM_CVT_CHANGE_FUNC_END(2)
I really dislike complicated preprocessor tricks. Can't this be done in a similar way with real functions? If not, I'd rather have the copy-pasted code than these difficult macros.
Andrew