Add memcpy_by_index_array_initialization_from_channel_mask
Used for channel index and position mask conversion.
Change-Id: I181302fc4f41de83d48cb634b6e24b42d28b07da
diff --git a/audio_utils/format.c b/audio_utils/format.c
index a6b2033..66b0a6d 100644
--- a/audio_utils/format.c
+++ b/audio_utils/format.c
@@ -140,3 +140,43 @@
LOG_ALWAYS_FATAL("invalid src format %#x for dst format %#x",
src_format, dst_format);
}
+
+size_t memcpy_by_index_array_initialization_from_channel_mask(int8_t *idxary, size_t arysize,
+ audio_channel_mask_t dst_channel_mask, audio_channel_mask_t src_channel_mask)
+{
+ const audio_channel_representation_t src_representation =
+ audio_channel_mask_get_representation(src_channel_mask);
+ const audio_channel_representation_t dst_representation =
+ audio_channel_mask_get_representation(dst_channel_mask);
+ const uint32_t src_bits = audio_channel_mask_get_bits(src_channel_mask);
+ const uint32_t dst_bits = audio_channel_mask_get_bits(dst_channel_mask);
+
+ switch (src_representation) {
+ case AUDIO_CHANNEL_REPRESENTATION_POSITION:
+ switch (dst_representation) {
+ case AUDIO_CHANNEL_REPRESENTATION_POSITION:
+ return memcpy_by_index_array_initialization(idxary, arysize,
+ dst_bits, src_bits);
+ case AUDIO_CHANNEL_REPRESENTATION_INDEX:
+ return memcpy_by_index_array_initialization_dst_index(idxary, arysize,
+ dst_bits, src_bits);
+ default:
+ return 0;
+ }
+ break;
+ case AUDIO_CHANNEL_REPRESENTATION_INDEX:
+ switch (dst_representation) {
+ case AUDIO_CHANNEL_REPRESENTATION_POSITION:
+ return memcpy_by_index_array_initialization_src_index(idxary, arysize,
+ dst_bits, src_bits);
+ case AUDIO_CHANNEL_REPRESENTATION_INDEX:
+ return memcpy_by_index_array_initialization(idxary, arysize,
+ dst_bits, src_bits);
+ default:
+ return 0;
+ }
+ break;
+ default:
+ return 0;
+ }
+}