diff --git a/common/include/audio_types.h b/common/include/audio_types.h index f9391267b4fa0c68af614b81bf7a75d95522c53c..92072700e3bf170be180924199805de7adae0f6f 100644 --- a/common/include/audio_types.h +++ b/common/include/audio_types.h @@ -119,6 +119,9 @@ enum AudioCategory { AUDIO_IN_CALL, /**< Call */ AUDIO_MMAP_NOIRQ, /**< Mmap mode */ AUDIO_MMAP_VOIP = 8, /**< Mmap Voip mode */ + AUDIO_NOTIFICATION, /**< Notification */ + AUDIO_VOICE_MESSAGE, /**< Voice message */ + AUDIO_VOICE_ASSISTANT, /**< Voice assistant */ }; /** diff --git a/services/audiohdiproxy/src/daudio_manager_callback.cpp b/services/audiohdiproxy/src/daudio_manager_callback.cpp index a9feb9957935042e604524f7bb1a77dc9842a8e6..6c26dec3b69a5a6c0dbea8a3e93e313e3b367aa9 100644 --- a/services/audiohdiproxy/src/daudio_manager_callback.cpp +++ b/services/audiohdiproxy/src/daudio_manager_callback.cpp @@ -55,10 +55,8 @@ int32_t DAudioManagerCallback::DestroyStream(int32_t streamId) return HDF_SUCCESS; } -int32_t DAudioManagerCallback::GetAudioParamHDF(const AudioParameter& param, AudioParamHDF& paramHDF) +int32_t ConvertAudioParamHDF(const AudioParameter& param, AudioParamHDF& paramHDF) { - paramHDF.sampleRate = static_cast(param.sampleRate); - paramHDF.channelMask = static_cast(param.channelCount); switch (static_cast(param.format)) { case AUDIO_FORMAT_TYPE_PCM_8_BIT: paramHDF.bitFormat = AudioSampleFormat::SAMPLE_U8; @@ -87,10 +85,30 @@ int32_t DAudioManagerCallback::GetAudioParamHDF(const AudioParameter& param, Aud case AUDIO_MMAP_NOIRQ: paramHDF.streamUsage = StreamUsage::STREAM_USAGE_MEDIA; break; + case AUDIO_NOTIFICATION: + paramHDF.streamUsage = StreamUsage::STREAM_USAGE_NOTIFICATION; + break; + case AUDIO_VOICE_MESSAGE: + paramHDF.streamUsage = StreamUsage::STREAM_USAGE_VOICE_MESSAGE; + break; + case AUDIO_VOICE_ASSISTANT: + paramHDF.streamUsage = StreamUsage::STREAM_USAGE_VOICE_ASSISTANT; + break; default: DHLOGE("Stream usage [%{public}" PRIu32"] does not support conversion.", param.streamUsage); return HDF_FAILURE; } + return HDF_SUCCESS; +} + +int32_t DAudioManagerCallback::GetAudioParamHDF(const AudioParameter& param, AudioParamHDF& paramHDF) +{ + paramHDF.sampleRate = static_cast(param.sampleRate); + paramHDF.channelMask = static_cast(param.channelCount); + int32_t ret = ConvertAudioParamHDF(param, paramHDF); + if (ret != HDF_SUCCESS) { + return ret; + } paramHDF.frameSize = param.frameSize; paramHDF.period = param.period; paramHDF.ext = param.ext; @@ -122,11 +140,8 @@ int32_t DAudioManagerCallback::SetParameters(int32_t streamId, const AudioParame return HDF_SUCCESS; } -int32_t DAudioManagerCallback::NotifyEvent(int32_t streamId, - const OHOS::HDI::DistributedAudio::Audioext::V2_0::DAudioEvent& event) +AudioEvent ConvertEventType(const OHOS::HDI::DistributedAudio::Audioext::V2_0::DAudioEvent& event) { - DHLOGI("Notify event."); - CHECK_NULL_RETURN(callback_, HDF_FAILURE); AudioEvent newEvent(AudioEventType::EVENT_UNKNOWN, event.content); switch (event.type) { case AudioEventHDF::AUDIO_EVENT_VOLUME_SET: @@ -156,11 +171,31 @@ int32_t DAudioManagerCallback::NotifyEvent(int32_t streamId, case AudioEventHDF::AUDIO_EVENT_STOP: newEvent.type = AudioEventType::AUDIO_STOP; break; + case AudioEventHDF::AUDIO_EVENT_OFFLOAD_BUF_SIZE_CHANGE: + newEvent.type = AudioEventType::AUDIO_OFFLOAD_BUF_SIZE_CHANGE; + break; + case AudioEventHDF::AUDIO_EVENT_FLUSH: + newEvent.type = AudioEventType::AUDIO_FLUSH; + break; + case AudioEventHDF::AUDIO_EVENT_SPEED_CHANGE: + newEvent.type = AudioEventType::AUDIO_SPEED_CHANGE; + break; + case AudioEventHDF::AUDIO_EVENT_VOLUME_CHANGE: + newEvent.type = AudioEventType::AUDIO_VOLUME_CHANGE; + break; default: DHLOGE("Unsupport event tpye."); break; } + return newEvent; +} +int32_t DAudioManagerCallback::NotifyEvent(int32_t streamId, + const OHOS::HDI::DistributedAudio::Audioext::V2_0::DAudioEvent& event) +{ + DHLOGI("Notify event."); + CHECK_NULL_RETURN(callback_, HDF_FAILURE); + AudioEvent newEvent = ConvertEventType(event); int32_t ret = callback_->NotifyEvent(streamId, newEvent); if (ret != DH_SUCCESS) { DHLOGE("Call hdi callback failed."); diff --git a/services/audiohdiproxy/test/unittest/daudio_manager_callback/src/daudio_manager_callback_test.cpp b/services/audiohdiproxy/test/unittest/daudio_manager_callback/src/daudio_manager_callback_test.cpp index 7b3b84417ea67941b5fc2a365aee0184ee5a57ba..965c3c18607234b884e6ed6d9160208ddd9f66f3 100644 --- a/services/audiohdiproxy/test/unittest/daudio_manager_callback/src/daudio_manager_callback_test.cpp +++ b/services/audiohdiproxy/test/unittest/daudio_manager_callback/src/daudio_manager_callback_test.cpp @@ -155,6 +155,16 @@ HWTEST_F(DAudioManagerCallbackTest, SetParameters_002, TestSize.Level1) .ext = "HDF_SUCCESS" }; EXPECT_NE(HDF_SUCCESS, manCallback_->SetParameters(streamId_, param)); + param = { + .format = 2, + .channelCount = 2, + .sampleRate = 192000, + .period = 0, + .frameSize = 0, + .streamUsage = 9, + .ext = "HDF_SUCCESS" + }; + EXPECT_EQ(HDF_SUCCESS, manCallback_->SetParameters(streamId_, param)); EXPECT_EQ(HDF_SUCCESS, manCallback_->DestroyStream(streamId_)); } @@ -214,6 +224,18 @@ HWTEST_F(DAudioManagerCallbackTest, NotifyEvent_002, TestSize.Level1) event.type = AudioEventHDF::AUDIO_EVENT_STOP; event.content = "HDF_SUCCESS"; EXPECT_EQ(HDF_SUCCESS, manCallback_->NotifyEvent(streamId_, event)); + event.type = AudioEventHDF::AUDIO_EVENT_OFFLOAD_BUF_SIZE_CHANGE; + event.content = "HDF_SUCCESS"; + EXPECT_EQ(HDF_SUCCESS, manCallback_->NotifyEvent(streamId_, event)); + event.type = AudioEventHDF::AUDIO_EVENT_FLUSH; + event.content = "HDF_SUCCESS"; + EXPECT_EQ(HDF_SUCCESS, manCallback_->NotifyEvent(streamId_, event)); + event.type = AudioEventHDF::AUDIO_EVENT_SPEED_CHANGE; + event.content = "HDF_SUCCESS"; + EXPECT_EQ(HDF_SUCCESS, manCallback_->NotifyEvent(streamId_, event)); + event.type = AudioEventHDF::AUDIO_EVENT_VOLUME_CHANGE; + event.content = "HDF_SUCCESS"; + EXPECT_EQ(HDF_SUCCESS, manCallback_->NotifyEvent(streamId_, event)); event.type = -1; event.content = "HDF_SUCCESS"; EXPECT_EQ(HDF_SUCCESS, manCallback_->NotifyEvent(streamId_, event)); diff --git a/services/common/audioparam/audio_event.h b/services/common/audioparam/audio_event.h index 469f14dc030a4c33cc50413ed311fb1029c5014d..b9d33775c496bd3020ba83b84fd07f1d06cf9e71 100644 --- a/services/common/audioparam/audio_event.h +++ b/services/common/audioparam/audio_event.h @@ -72,6 +72,11 @@ typedef enum { MMAP_MIC_STOP = 84, AUDIO_START = 85, AUDIO_STOP = 86, + + AUDIO_OFFLOAD_BUF_SIZE_CHANGE = 91, + AUDIO_FLUSH = 92, + AUDIO_SPEED_CHANGE = 93, + AUDIO_VOLUME_CHANGE = 94, } AudioEventType; typedef enum { @@ -97,6 +102,9 @@ typedef enum { AUDIO_EVENT_STOP = 19, AUDIO_EVENT_SPK_DUMP = 20, AUDIO_EVENT_MIC_DUMP = 21, + AUDIO_EVENT_OFFLOAD_BUF_SIZE_CHANGE = 22, + AUDIO_EVENT_FLUSH = 23, + AUDIO_EVENT_SPEED_CHANGE = 24, } AudioEventHDF; class AudioEvent { public: diff --git a/services/common/audioparam/audio_param.h b/services/common/audioparam/audio_param.h index 1b03f4d81065bee02db22677d3522408a7d983c6..5f6fc1738ad56ff1f9786e694a948f7be51b6129 100644 --- a/services/common/audioparam/audio_param.h +++ b/services/common/audioparam/audio_param.h @@ -77,7 +77,9 @@ typedef enum { STREAM_USAGE_VOICE_COMMUNICATION = 2, STREAM_USAGE_VOICE_ASSISTANT = 4, STREAM_USAGE_MMAP = 5, - STREAM_USAGE_NOTIFICATION_RINGTONE = 6 + STREAM_USAGE_NOTIFICATION_RINGTONE = 6, + STREAM_USAGE_NOTIFICATION = 7, + STREAM_USAGE_VOICE_MESSAGE = 8 } StreamUsage; typedef enum {