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;