diff --git a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c index 966f1393c795998a64f6df6341ae84a3b515b57c..8adbf230c96518fa29f7582eefac45138b8eea26 100644 --- a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c +++ b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c @@ -119,6 +119,7 @@ const char *MCH_SINK_NAME = "MCH_Speaker"; const char *BT_SINK_NAME = "Bt_Speaker"; const char *OFFLOAD_SINK_NAME = "Offload_Speaker"; const char *DP_SINK_NAME = "DP_speaker"; +const char *DP_MCH_SINK_NAME = "DP_MCH_speaker"; const int32_t WAIT_CLOSE_PA_OR_EFFECT_TIME = 4; // secs const int32_t MONITOR_CLOSE_PA_TIME_SEC = 5 * 60; // 5min @@ -206,6 +207,24 @@ static bool IsZeroVolume(float volume); #define BIT_16 16 #define BIT_24 24 #define BIT_32 32 +static bool IsSinkNameDp(const char *sinkName) +{ + if (sinkName == NULL) { + AUDIO_ERR_LOG("ptr is null"); + return false; + } + + if (strcmp(sinkName, DP_SINK_NAME) == 0) { + return true; + } + + if (strcmp(sinkName, DP_MCH_SINK_NAME) == 0) { + return true; + } + + return false; +} + static uint32_t Read24Bit(const uint8_t *p) { return ((uint32_t) p[BIT_DEPTH_TWO] << BIT_16) | ((uint32_t) p[1] << BIT_8) | ((uint32_t) p[0]); @@ -2473,7 +2492,7 @@ static void ProcessRenderUseTiming(struct Userdata *u, pa_usec_t now) AUTO_CTRACE("hdi_sink::SinkRenderPrimary"); // Change from pa_sink_render to pa_sink_render_full for alignment issue in 3516 - if (!strcmp(u->sink->name, DP_SINK_NAME) && u->render_full_enable) { + if (IsSinkNameDp(u->sink->name) && u->render_full_enable) { // dp update volume SetSinkVolumeByDeviceClass(u->sink, u->primary.sinkAdapter->deviceClass); pa_sink_render_full(u->sink, u->sink->thread_info.max_request, &chunk); // only work for dp-96k-8ch @@ -3578,7 +3597,7 @@ static void ProcessNormalData(struct Userdata *u) sleepForUsec = MIN_SLEEP_FOR_USEC; } } else { - if (u->primary.timestamp <= now + u->primary.prewrite || !strcmp(u->sink->name, DP_SINK_NAME)) { + if (u->primary.timestamp <= now + u->primary.prewrite || IsSinkNameDp(u->sink->name)) { pa_atomic_add(&u->primary.dflag, 1); u->primary.lastProcessDataTime = pa_rtclock_now(); ProcessRenderUseTiming(u, now);