audio: NTS LLP-* case fail. [1/1]

PD#TV-134889

Problem:
Audio HAL did not report pipeline latency, which will cause NRDP to
continue sending data even when the buffer water level is high.So the
delay will be too large.

Solution:
report the pipeline lantency.

Verify:
u-linux

Change-Id: I4511531320fad281dbbbfb5e83bfdd21f2c8d4a0
Signed-off-by: dongyang.zhang <dongyang.zhang@amlogic.com>
diff --git a/audio_hal/audio_hw.c b/audio_hal/audio_hw.c
index ae5d225..16eef9a 100644
--- a/audio_hal/audio_hw.c
+++ b/audio_hal/audio_hw.c
@@ -7467,11 +7467,17 @@
 {
     struct audio_stream_out *out = (struct audio_stream_out *)data;
     struct aml_stream_out *aml_out = (struct aml_stream_out *)out;
+    struct aml_audio_device *adev = aml_out->dev;
     uint64_t rp = 0;
+    int app_input_level = 0;
+    int is_alsa_delay_valid = false;
     unsigned char zero[5*6*2*48];
     unsigned char *in = IpcBuffer_get_ptr(LLP_BUFFER_NAME);
     void *ipc_buffer = IpcBuffer_get_by_name(LLP_BUFFER_NAME);
 
+    prctl(PR_SET_NAME, (unsigned long)"LLP_INPUT");
+    //aml_set_thread_priority("LLP_INPUT", out->llp_input_threadID, 5);
+
     memset(zero, 0, sizeof(zero));
     /*coverity[missing_lock]:aml_out->llp_input_thread_exit does not need to be lock*/
     while (!aml_out->llp_input_thread_exit) {
@@ -7501,6 +7507,7 @@
                     aml_out->app_underrun_cnt = 0;
 
                 if (aml_out->app_underrun_cnt > 10) {
+                    is_alsa_delay_valid = false;
                     IpcBuffer_add_silence(ipc_buffer, sizeof(zero) / nChannel / 2);
                     IpcBuffer_inc_underrun(ipc_buffer);
                     aml_out->app_underrun_cnt = 0;
@@ -7519,10 +7526,20 @@
         rp += level;
 
         alsa_level = aml_audio_out_get_ms12_latency_frames((struct audio_stream_out *)aml_out);
-        //main_input_level = dolby_ms12_get_main_buffer_avail(NULL) / nChannel / 2;
-        //IpcBuffer_set_water_level(ipc_buffer, alsa_level + main_input_level);
+        if (is_alsa_delay_valid == false) {
+            alsa_level = 0;
+            if (wp != 0) {
+                is_alsa_delay_valid = true;
+            }
+        }
+        app_input_level = dolby_ms12_get_app_buffer_avail(NULL) / nChannel / 2;
+        IpcBuffer_setMeta(aml_out->llp_buf, wp / nChannel / 2, alsa_level + dolby_ms12_get_app_buffer_avail(NULL) / nChannel / 2);
 
-        AM_LOGI("llp wp = %" PRIu64 "llp rp = %" PRIu64 ", alsa_level = %d ms, app input level = %d", wp, rp, alsa_level / 48, dolby_ms12_get_app_buffer_avail(NULL));
+        if (adev->debug_flag > 0) {
+            AM_LOGI("llp wp:%"PRIu64" (%"PRIu64" ms)    hal_delay:%d (%d ms)", wp / nChannel / 2, wp / nChannel / 2 / 48,
+                alsa_level + dolby_ms12_get_app_buffer_avail(NULL) / nChannel / 2, (alsa_level + dolby_ms12_get_app_buffer_avail(NULL) / nChannel / 2) / 48);
+            AM_LOGI("llp wp = %" PRIu64 " llp rp = %" PRIu64 ", alsa_level = %d ms, app input level = %d", wp, rp, alsa_level / 48, dolby_ms12_get_app_buffer_avail(NULL));
+        }
 
         aml_audio_sleep(5000);
     }