Add channel index mask audio data conversion
Adds memcpy_by_index_array_initialization_src_index which fills an
index array used by memcpy_by_index_array.
Change-Id: Id8823a11cad642688ecbc16d9f2d894845d6e9c0
diff --git a/audio_utils/primitives.c b/audio_utils/primitives.c
index ae9b28c..fb4df97 100644
--- a/audio_utils/primitives.c
+++ b/audio_utils/primitives.c
@@ -423,3 +423,25 @@
}
return n + popcount(ormask & dst_mask);
}
+
+size_t memcpy_by_index_array_initialization_src_index(int8_t *idxary, size_t idxcount,
+ uint32_t dst_mask, uint32_t src_mask) {
+ size_t dst_count = popcount(dst_mask);
+ if (idxcount == 0) {
+ return dst_count;
+ }
+ if (dst_count > idxcount) {
+ dst_count = idxcount;
+ }
+
+ size_t src_idx, dst_idx;
+ for (src_idx = 0, dst_idx = 0; dst_idx < dst_count; ++dst_idx) {
+ if (src_mask & 1) {
+ idxary[dst_idx] = src_idx++;
+ } else {
+ idxary[dst_idx] = -1;
+ }
+ src_mask >>= 1;
+ }
+ return dst_idx;
+}