post processing: add volume command support

By design of the effect offloading mechanism, offloaded implementations
must have the same behavior as non offloaded implementations.
As the non offloaded effects (EQ, Bass boost, Virtualizer ...) from the
AOSP effect bundle implement the EFFECT_FLAG_VOLUME_CTRL flag and
behavior, offloaded effects should.

In order for volume control to work, EFFECT_CMD_SET_VOLUME must be
implemented and return the received volume in the reply data.

Bug: 37281217
Test: Music playback in offload and non offload mode with and without EQ.
Change-Id: I2425f4dce95c8ab877db19cefbaa6226895b4015
diff --git a/post_proc/bass_boost.c b/post_proc/bass_boost.c
index f303886..a5c6a4a 100644
--- a/post_proc/bass_boost.c
+++ b/post_proc/bass_boost.c
@@ -31,7 +31,8 @@
         {0x0634f220, 0xddd4, 0x11db, 0xa0fc, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b }},
         {0x2c4a8c24, 0x1581, 0x487f, 0x94f6, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // uuid
         EFFECT_CONTROL_API_VERSION,
-        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_DEVICE_IND | EFFECT_FLAG_HW_ACC_TUNNEL),
+        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_DEVICE_IND | EFFECT_FLAG_HW_ACC_TUNNEL |
+                EFFECT_FLAG_VOLUME_CTRL),
         0, /* TODO */
         1,
         "MSM offload bassboost",
diff --git a/post_proc/bundle.c b/post_proc/bundle.c
index 73b9ae5..f83e231 100644
--- a/post_proc/bundle.c
+++ b/post_proc/bundle.c
@@ -668,10 +668,19 @@
         if (context->ops.set_device)
             context->ops.set_device(context, device);
         } break;
-    case EFFECT_CMD_SET_VOLUME:
+    case EFFECT_CMD_SET_VOLUME: {
+        // if pReplyData is NULL, VOL_CTRL is delegated to another effect
+        if (pReplyData == NULL) {
+            break;
+        }
+        if (pCmdData == NULL || cmdSize != 2 * sizeof(uint32_t) ||
+                replySize == NULL || *replySize < 2*sizeof(int32_t)) {
+            return -EINVAL;
+        }
+        memcpy(pReplyData, pCmdData, sizeof(int32_t)*2);
+        } break;
     case EFFECT_CMD_SET_AUDIO_MODE:
         break;
-
     case EFFECT_CMD_OFFLOAD: {
         output_context_t *out_ctxt;
 
@@ -703,8 +712,6 @@
             add_effect_to_output(out_ctxt, context);
 
         } break;
-
-
     default:
         if (cmdCode >= EFFECT_CMD_FIRST_PROPRIETARY && context->ops.command)
             status = context->ops.command(context, cmdCode, cmdSize,
diff --git a/post_proc/equalizer.c b/post_proc/equalizer.c
index c3a438f..a8e5d1f 100644
--- a/post_proc/equalizer.c
+++ b/post_proc/equalizer.c
@@ -31,7 +31,7 @@
         {0x0bed4300, 0xddd6, 0x11db, 0x8f34, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // type
         {0xa0dac280, 0x401c, 0x11e3, 0x9379, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // uuid
         EFFECT_CONTROL_API_VERSION,
-        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_HW_ACC_TUNNEL),
+        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_HW_ACC_TUNNEL | EFFECT_FLAG_VOLUME_CTRL),
         0, /* TODO */
         1,
         "MSM offload equalizer",
diff --git a/post_proc/reverb.c b/post_proc/reverb.c
index e5fc950..be4d566 100644
--- a/post_proc/reverb.c
+++ b/post_proc/reverb.c
@@ -32,7 +32,7 @@
         { 0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, { 0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e } },
         { 0x79a18026, 0x18fd, 0x4185, 0x8233, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } },
         EFFECT_CONTROL_API_VERSION,
-        (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL),
+        (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL | EFFECT_FLAG_VOLUME_CTRL),
         0, /* TODO */
         1,
         "MSM offload Auxiliary Environmental Reverb",
@@ -44,7 +44,8 @@
         {0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac, {0x4e, 0x23, 0x4d, 0x06, 0x83, 0x9e}},
         {0xeb64ea04, 0x973b, 0x43d2, 0x8f5e, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
         EFFECT_CONTROL_API_VERSION,
-        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL),
+        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL |
+                EFFECT_FLAG_VOLUME_CTRL),
         0, /* TODO */
         1,
         "MSM offload Insert Environmental Reverb",
@@ -56,7 +57,7 @@
         {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
         {0x6987be09, 0xb142, 0x4b41, 0x9056, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
         EFFECT_CONTROL_API_VERSION,
-        (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL),
+        (EFFECT_FLAG_TYPE_AUXILIARY | EFFECT_FLAG_HW_ACC_TUNNEL | EFFECT_FLAG_VOLUME_CTRL),
         0, /* TODO */
         1,
         "MSM offload Auxiliary Preset Reverb",
@@ -68,7 +69,8 @@
         {0x47382d60, 0xddd8, 0x11db, 0xbf3a, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
         {0xaa2bebf6, 0x47cf, 0x4613, 0x9bca, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
         EFFECT_CONTROL_API_VERSION,
-        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL),
+        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_INSERT_FIRST | EFFECT_FLAG_HW_ACC_TUNNEL |
+                EFFECT_FLAG_VOLUME_CTRL),
         0, /* TODO */
         1,
         "MSM offload Insert Preset Reverb",
diff --git a/post_proc/virtualizer.c b/post_proc/virtualizer.c
index 40bbf38..b9e4fb9 100644
--- a/post_proc/virtualizer.c
+++ b/post_proc/virtualizer.c
@@ -31,7 +31,8 @@
         {0x37cc2c00, 0xdddd, 0x11db, 0x8577, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}},
         {0x509a4498, 0x561a, 0x4bea, 0xb3b1, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b}}, // uuid
         EFFECT_CONTROL_API_VERSION,
-        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_DEVICE_IND | EFFECT_FLAG_HW_ACC_TUNNEL),
+        (EFFECT_FLAG_TYPE_INSERT | EFFECT_FLAG_DEVICE_IND | EFFECT_FLAG_HW_ACC_TUNNEL |
+                EFFECT_FLAG_VOLUME_CTRL),
         0, /* TODO */
         1,
         "MSM offload virtualizer",