hal: Update VOIP playback/record usecase handling

Existing handling for VOIP playback checks for flags
DIRECT|VOIP_RX to set up VOIP usecase. This handling
needs to be updated to consider client opening
stream with VOIP_RX only.
On input stream open, selected channel count and sample
rate need to be updated in hidl stream ptr.

Change-Id: I676d3e5a34f32b8996c95ddaf5db01725b225b58
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index c53fa31..71b18b6 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -6710,6 +6710,7 @@
            audio_feature_manager_is_feature_enabled(USE_DEEP_BUFFER_AS_PRIMARY_OUTPUT);
     bool force_haptic_path =
             property_get_bool("vendor.audio.test_haptic", false);
+    bool is_voip_rx = flags & AUDIO_OUTPUT_FLAG_VOIP_RX;
 
     if (is_usb_dev && (!audio_extn_usb_connected(NULL))) {
         is_usb_dev = false;
@@ -6848,7 +6849,7 @@
     }
 
     /* Check for VOIP usecase */
-    if(out->flags == (AUDIO_OUTPUT_FLAG_DIRECT | AUDIO_OUTPUT_FLAG_VOIP_RX)) {
+    if (is_voip_rx) {
         if (!voice_extn_is_compress_voip_supported()) {
             if (out->sample_rate == 8000 || out->sample_rate == 16000 ||
              out->sample_rate == 32000 || out->sample_rate == 48000) {
@@ -8241,18 +8242,14 @@
         in->usecase = USECASE_AUDIO_RECORD_MMAP;
         in->config = pcm_config_mmap_capture;
         in->config.format = pcm_format_from_audio_format(config->format);
-        in->config.channels = channel_count;
         in->stream.start = in_start;
         in->stream.stop = in_stop;
         in->stream.create_mmap_buffer = in_create_mmap_buffer;
         in->stream.get_mmap_position = in_get_mmap_position;
-        in->sample_rate = in->config.rate;
         ALOGV("%s: USECASE_AUDIO_RECORD_MMAP", __func__);
     } else if (in->realtime) {
         in->config = pcm_config_audio_capture_rt;
         in->config.format = pcm_format_from_audio_format(config->format);
-        in->config.channels = channel_count;
-        in->sample_rate = in->config.rate;
         in->af_period_multiplier = af_period_multiplier;
     } else if (is_usb_dev && may_use_hifi_record) {
         in->usecase = USECASE_AUDIO_RECORD_HIFI;
@@ -8276,8 +8273,6 @@
         default:
             in->bit_width = 16;
         }
-        in->config.channels = channel_count;
-        in->sample_rate = in->config.rate;
     } else if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) ||
              (in->device == AUDIO_DEVICE_IN_PROXY)) {
         if (config->sample_rate == 0)
@@ -8298,9 +8293,7 @@
 
         in->usecase = USECASE_AUDIO_RECORD_AFE_PROXY;
         in->config = pcm_config_afe_proxy_record;
-        in->config.channels = channel_count;
         in->config.rate = config->sample_rate;
-        in->sample_rate = config->sample_rate;
         in->af_period_multiplier = 1;
     } else if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION &&
                in->flags & AUDIO_INPUT_FLAG_VOIP_TX &&
@@ -8340,7 +8333,6 @@
                    (in->dev->mode != AUDIO_MODE_IN_COMMUNICATION)) {
             audio_extn_compr_cap_init(in);
         } else if (audio_extn_cin_applicable_stream(in)) {
-            in->sample_rate = config->sample_rate;
             ret = audio_extn_cin_configure_input_stream(in);
             if (ret)
                 goto err_open;
@@ -8348,8 +8340,6 @@
             in->config = pcm_config_audio_capture;
             in->config.rate = config->sample_rate;
             in->config.format = pcm_format_from_audio_format(config->format);
-            in->config.channels = channel_count;
-            in->sample_rate = config->sample_rate;
             in->format = config->format;
             frame_size = audio_stream_in_frame_size(&in->stream);
             buffer_size = get_input_buffer_size(config->sample_rate,
@@ -8395,6 +8385,10 @@
         pthread_mutex_unlock(&adev->lock);
 #endif
     }
+
+    in->config.channels = channel_count;
+    in->sample_rate  = in->config.rate;
+
     audio_extn_utils_update_stream_input_app_type_cfg(adev->platform,
                                                 &adev->streams_input_cfg_list,
                                                 devices, flags, in->format,