Fix in-place audio format conversion issues
memcpy_by_audio_format() corner case of same format in-place.
memcpy_to_p24_from_i16() for the first sample in buffer for in-place.
Update memcpy_by_audio_format() documentation.
Test: added native unit test format_tests
Bug: 78598192
Change-Id: I9e538ed4ef233b319b846f4a91c27a86eb605a20
diff --git a/audio_utils/format.c b/audio_utils/format.c
index 1803e3c..50872fc 100644
--- a/audio_utils/format.c
+++ b/audio_utils/format.c
@@ -34,7 +34,10 @@
case AUDIO_FORMAT_PCM_24_BIT_PACKED:
case AUDIO_FORMAT_PCM_32_BIT:
case AUDIO_FORMAT_PCM_8_24_BIT:
- memcpy(dst, src, count * audio_bytes_per_sample(dst_format));
+ if (dst != src) {
+ // TODO: should assert if memory regions overlap.
+ memcpy(dst, src, count * audio_bytes_per_sample(dst_format));
+ }
return;
default:
break;