DO NOT MERGE - Merge QQ1A.200105.003 into stage-aosp-master

Merged-In: Ie5298d1d83de872c5a2eb64c35ca2a8fcfac0c75
Change-Id: Ic65f63d9900f79849c459573818942e7455ebf3f
diff --git a/hal/Android.mk b/hal/Android.mk
index e6be0a6..afb0128 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -224,7 +224,7 @@
     LOCAL_CFLAGS += -DDYNAMIC_ECNS_ENABLED
 endif
 
-LOCAL_SHARED_LIBRARIES += libbase libhidlbase libhwbinder libutils android.hardware.power@1.2 liblog
+LOCAL_SHARED_LIBRARIES += libbase libhidlbase libutils android.hardware.power@1.2 liblog
 
 LOCAL_SRC_FILES += audio_perf.cpp
 
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 1c99066..cba2e10 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -105,6 +105,7 @@
 #define MMAP_PERIOD_COUNT_MIN 32
 #define MMAP_PERIOD_COUNT_MAX 512
 #define MMAP_PERIOD_COUNT_DEFAULT (MMAP_PERIOD_COUNT_MAX)
+#define MMAP_MIN_SIZE_FRAMES_MAX 64 * 1024
 
 /* This constant enables extended precision handling.
  * TODO The flag is off until more testing is done.
@@ -3811,6 +3812,7 @@
     int status = -ENOSYS;
     ALOGV("%s", __func__);
     if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) {
+        status = -ENODATA;
         lock_output_stream(out);
         if (out->compr != NULL && out->offload_state == OFFLOAD_STATE_PLAYING) {
             status = compress_pause(out->compr);
@@ -3827,7 +3829,7 @@
     int status = -ENOSYS;
     ALOGV("%s", __func__);
     if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) {
-        status = 0;
+        status = -ENODATA;
         lock_output_stream(out);
         if (out->compr != NULL && out->offload_state == OFFLOAD_STATE_PAUSED) {
             status = compress_resume(out->compr);
@@ -3952,7 +3954,7 @@
     lock_output_stream(out);
     pthread_mutex_lock(&adev->lock);
 
-    if (info == NULL || min_size_frames == 0) {
+    if (info == NULL || min_size_frames <= 0 || min_size_frames > MMAP_MIN_SIZE_FRAMES_MAX) {
         ALOGE("%s: info = %p, min_size_frames = %d", __func__, info, min_size_frames);
         ret = -EINVAL;
         goto exit;
@@ -4690,7 +4692,7 @@
     pthread_mutex_lock(&adev->lock);
     ALOGV("%s in %p", __func__, in);
 
-    if (info == NULL || min_size_frames == 0) {
+    if (info == NULL || min_size_frames <= 0 || min_size_frames > MMAP_MIN_SIZE_FRAMES_MAX) {
         ALOGE("%s invalid argument info %p min_size_frames %d", __func__, info, min_size_frames);
         ret = -EINVAL;
         goto exit;