Skip to content

Commit

Permalink
Fix cast-align.
Browse files Browse the repository at this point in the history
  • Loading branch information
HiFiPhile committed Sep 19, 2023
1 parent 9d0251f commit 634df4e
Showing 1 changed file with 90 additions and 106 deletions.
196 changes: 90 additions & 106 deletions src/class/audio/audio_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -631,64 +631,55 @@ static bool audiod_rx_done_cb(uint8_t rhport, audiod_function_t* audio, uint16_t
// Decoding according to 2.3.1.5 Audio Streams

// Helper function
static inline uint8_t * audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesToCopy, uint8_t * dst, uint8_t * dst_end, uint8_t * src, uint8_t const n_ff_used)
static inline void * audiod_interleaved_copy_bytes_fast_decode(uint16_t const nBytesToCopy, void * dst, const void * dst_end, void * src, uint8_t const n_ff_used)
{

// Due to one FIFO contains 2 channels, data always aligned to (nBytesToCopy * 2)

switch (nBytesToCopy)
uint16_t * dst16 = dst;
uint16_t * src16 = src;
const uint16_t * dst_end16 = dst_end;
uint32_t * dst32 = dst;
uint32_t * src32 = src;
const uint32_t * dst_end32 = dst_end;

if (nBytesToCopy == 1)
{
case 1:
while((uint8_t *)dst < dst_end)
{
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
src += 2 * (n_ff_used - 1);
}
break;

case 2:
while((uint8_t *)dst < dst_end)
{
*(uint32_t*)dst = *(uint32_t*)src;
src += 4;
dst += 4;
src += 4 * (n_ff_used - 1);
}
break;

case 3:
while((uint8_t *)dst < dst_end)
{
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
src += 6 * (n_ff_used - 1);
}
break;

case 4:
while((uint8_t *)dst < dst_end)
{
*(uint32_t*)dst++ = *(uint32_t*)src++;
src += 4;
dst += 4;
*(uint32_t*)dst++ = *(uint32_t*)src++;
src += 4;
dst += 4;
src += 8 * (n_ff_used - 1);
}
break;
while(dst16 < dst_end16)
{
*dst16++ = *src16++;
src16 += n_ff_used - 1;
}
return src16;
}
else if (nBytesToCopy == 2)
{
while(dst32 < dst_end32)
{
*dst32++ = *src32++;
src32 += n_ff_used - 1;
}
return src32;
}
else if (nBytesToCopy == 3)
{
while(dst16 < dst_end16)
{
*dst16++ = *src16++;
*dst16++ = *src16++;
*dst16++ = *src16++;
src16 += 3 * (n_ff_used - 1);
}
return src16;
}
else // nBytesToCopy == 4
{
while(dst32 < dst_end32)
{
*dst32++ = *src32++;
*dst32++ = *src32++;
src32 += 2 * (n_ff_used - 1);
}
return src32;
}

return src;
}

static bool audiod_decode_type_I_pcm(uint8_t rhport, audiod_function_t* audio, uint16_t n_bytes_received)
Expand Down Expand Up @@ -935,62 +926,55 @@ range [-1, +1)
* */

// Helper function
static inline uint8_t * audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesToCopy, uint8_t * src, uint8_t * src_end, uint8_t * dst, uint8_t const n_ff_used)
static inline void * audiod_interleaved_copy_bytes_fast_encode(uint16_t const nBytesToCopy, void * src, const void * src_end, void * dst, uint8_t const n_ff_used)
{
// Due to one FIFO contains 2 channels, data always aligned to (nBytesToCopy * 2)
switch (nBytesToCopy)
uint16_t * dst16 = dst;
uint16_t * src16 = src;
const uint16_t * src_end16 = src_end;
uint32_t * dst32 = dst;
uint32_t * src32 = src;
const uint32_t * src_end32 = src_end;

if (nBytesToCopy == 1)
{
case 1:
while(src < src_end)
{
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
dst += 2 * (n_ff_used - 1);
}
break;

case 2:
while(src < src_end)
{
*(uint32_t*)dst = *(uint32_t*)src;
src += 4;
dst += 4;
dst += 4 * (n_ff_used - 1);
}
break;

case 3:
while(src < src_end)
{
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
*(uint16_t*)dst = *(uint16_t*)src;
src += 2;
dst += 2;
dst += 6 * (n_ff_used - 1);
}
break;

case 4:
while(src < src_end)
{
*(uint32_t*)dst++ = *(uint32_t*)src++;
src += 4;
dst += 4;
*(uint32_t*)dst++ = *(uint32_t*)src++;
src += 4;
dst += 4;
dst += 8 * (n_ff_used - 1);
}
break;
while(src16 < src_end16)
{
*dst16++ = *src16++;
dst16 += n_ff_used - 1;
}
return dst16;
}
else if (nBytesToCopy == 2)
{
while(src32 < src_end32)
{
*dst32++ = *src32++;
dst32 += n_ff_used - 1;
}
return dst32;
}
else if (nBytesToCopy == 3)
{
while(src16 < src_end16)
{
*dst16++ = *src16++;
*dst16++ = *src16++;
*dst16++ = *src16++;
dst16 += 3 * (n_ff_used - 1);
}
return dst16;
}
else // nBytesToCopy == 4
{
while(src32 < src_end32)
{
*dst32++ = *src32++;
*dst32++ = *src32++;
dst32 += 2 * (n_ff_used - 1);
}
return dst32;
}

return dst;
}

static uint16_t audiod_encode_type_I_pcm(uint8_t rhport, audiod_function_t* audio)
Expand Down

0 comments on commit 634df4e

Please sign in to comment.