hal: Add support for acquiring inital sink latency

Split a2dp get initial sink latency from BT host ipc.

Change-Id: Ia97f4379f6bd8ae925bc79f7e458383eaabc2bd2
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 868b562..2531b85 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -3269,8 +3269,7 @@
            (out->config.rate);
     }
 
-    if ((AUDIO_DEVICE_OUT_ALL_A2DP & out->devices) &&
-            !(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD))
+    if (AUDIO_DEVICE_OUT_ALL_A2DP & out->devices)
         latency += audio_extn_a2dp_get_encoder_latency();
 
     ALOGV("%s: Latency %d", __func__, latency);
@@ -3708,6 +3707,13 @@
     if (is_offload_usecase(out->usecase) && out->compr != NULL && out->non_blocking) {
         ret = compress_get_tstamp(out->compr, &dsp_frames,
                  &out->sample_rate);
+        // Adjustment accounts for A2dp encoder latency with offload usecases
+        // Note: Encoder latency is returned in ms.
+        if (AUDIO_DEVICE_OUT_ALL_A2DP & out->devices) {
+            unsigned long offset =
+                        (audio_extn_a2dp_get_encoder_latency() * out->sample_rate / 1000);
+            dsp_frames = (dsp_frames > offset) ? (dsp_frames - offset) : 0;
+        }
         ALOGVV("%s rendered frames %ld sample_rate %d",
                __func__, dsp_frames, out->sample_rate);
         *frames = dsp_frames;