Exemplo n.º 1
0
void
test_pcm_unpack_24(void)
{
	enum { N = 256 };
	uint8_t src[N * 3];
	for (unsigned i = 0; i < G_N_ELEMENTS(src); ++i)
		src[i] = g_random_int_range(0, 256);

	int32_t dest[N];

	pcm_unpack_24(dest, src, src + G_N_ELEMENTS(src));

	for (unsigned i = 0; i < N; ++i) {
		int32_t s;
		if (G_BYTE_ORDER == G_BIG_ENDIAN)
			s = (src[i * 3] << 16) | (src[i * 3 + 1] << 8)
				| src[i * 3 + 2];
		else
			s = (src[i * 3 + 2] << 16) | (src[i * 3 + 1] << 8)
				| src[i * 3];
		if (s & 0x800000)
			s |= 0xff000000;

		g_assert_cmpint(s, ==, dest[i]);
	}
}
static int32_t *
pcm_convert_24_to_24p32(struct pcm_buffer *buffer, const uint8_t *src,
			unsigned num_samples)
{
	int32_t *dest = pcm_buffer_get(buffer, num_samples * 4);
	pcm_unpack_24(dest, src, num_samples, false);
	return dest;
}