Add channel index mask audio data conversion

Adds memcpy_by_index_array_initialization_dst_index which fills an
index array used by memcpy_by_index_array.

Change-Id: Ice6c23646994acdd934fd817813ef1ee010ba03a
diff --git a/audio_utils/primitives.c b/audio_utils/primitives.c
index f3a5a50..633faab 100644
--- a/audio_utils/primitives.c
+++ b/audio_utils/primitives.c
@@ -457,3 +457,23 @@
     }
     return dst_idx;
 }
+
+size_t memcpy_by_index_array_initialization_dst_index(int8_t *idxary, size_t idxcount,
+        uint32_t dst_mask, uint32_t src_mask) {
+    size_t src_idx, dst_idx;
+    size_t dst_count = __builtin_popcount(dst_mask);
+    size_t src_count = __builtin_popcount(src_mask);
+    if (idxcount == 0) {
+        return dst_count;
+    }
+    if (dst_count > idxcount) {
+        dst_count = idxcount;
+    }
+    for (src_idx = 0, dst_idx = 0; dst_idx < dst_count; ++src_idx) {
+        if (dst_mask & 1) {
+            idxary[dst_idx++] = src_idx < src_count ? (signed)src_idx : -1;
+        }
+        dst_mask >>= 1;
+    }
+    return dst_idx;
+}