hal: fix sub-overflow defect

Fix sub-overflow defect.

CRs-Fixed: 2518187
Change-Id: I164c3c785e295d3d797d003e9b96332355cfac92
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index bc2f159..f720968 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -5872,25 +5872,24 @@
                 size_t kernel_buffer_size = out->config.period_size * out->config.period_count;
 
                 uint64_t signed_frames = 0;
+                uint64_t frames_temp = 0;
 
-                if (avail > kernel_buffer_size)
-                    avail = kernel_buffer_size;
-
-                if (out->written >= (kernel_buffer_size - avail))
-                    signed_frames = out->written - kernel_buffer_size + avail;
+                frames_temp = (kernel_buffer_size > avail) ? (kernel_buffer_size - avail) : 0;
+                if (out->written >= frames_temp)
+                    signed_frames = out->written - frames_temp;
 
                 // This adjustment accounts for buffering after app processor.
                 // It is based on estimated DSP latency per use case, rather than exact.
-                if (signed_frames >= (platform_render_latency(out->usecase) * out->sample_rate / 1000000LL))
-                    signed_frames -=
-                        (platform_render_latency(out->usecase) * out->sample_rate / 1000000LL);
+                frames_temp = platform_render_latency(out->usecase) * out->sample_rate / 1000000LL;
+                if (signed_frames >= frames_temp)
+                    signed_frames -= frames_temp;
 
                 // Adjustment accounts for A2dp encoder latency with non offload usecases
                 // Note: Encoder latency is returned in ms, while platform_render_latency in us.
                 if (AUDIO_DEVICE_OUT_ALL_A2DP & out->devices) {
-                    if (signed_frames >= (audio_extn_a2dp_get_encoder_latency() * out->sample_rate / 1000))
-                        signed_frames -=
-                            (audio_extn_a2dp_get_encoder_latency() * out->sample_rate / 1000);
+                    frames_temp = audio_extn_a2dp_get_encoder_latency() * out->sample_rate / 1000;
+                    if (signed_frames >= frames_temp)
+                        signed_frames -= frames_temp;
                 }
 
                 // It would be unusual for this value to be negative, but check just in case ...