已合并
故障编码-编创 #15564
Cemelia创建于 6月4日
故障编码-编创 #15564
已合并
共 14 个文件变更+1873-250
| @@ -629,7 +629,7 @@ int32_t OHAudioSuiteEngine::CreatePipeline( | |||
| 629 | PipelineWorkMode workMode = static_cast<PipelineWorkMode>(ohWorkMode); | 629 | PipelineWorkMode workMode = static_cast<PipelineWorkMode>(ohWorkMode); |
| 630 | int32_t ret = IAudioSuiteManager::GetAudioSuiteManager().CreatePipeline(pipelineId, workMode); | 630 | int32_t ret = IAudioSuiteManager::GetAudioSuiteManager().CreatePipeline(pipelineId, workMode); |
| 631 | CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CreatePipeline failed, ret = %{public}d.", ret); | 631 | CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "CreatePipeline failed, ret = %{public}d.", ret); |
| 632 | - CHECK_AND_RETURN_RET_LOG(pipelineId != INVALID_PIPELINE_ID, ret, "CreatePipeline failed, pipelineId invailed"); | 632 | + CHECK_AND_RETURN_RET_LOG(pipelineId != INVALID_PIPELINE_ID, ret, "CreatePipeline failed, pipelineId invaild"); |
| 633 | 633 | ||
| 634 | OHAudioSuitePipeline *audioPipeline = new OHAudioSuitePipeline(pipelineId); | 634 | OHAudioSuitePipeline *audioPipeline = new OHAudioSuitePipeline(pipelineId); |
| 635 | CHECK_AND_RETURN_RET_LOG(audioPipeline != nullptr, ERR_MEMORY_ALLOC_FAILED, | 635 | CHECK_AND_RETURN_RET_LOG(audioPipeline != nullptr, ERR_MEMORY_ALLOC_FAILED, |
| @@ -643,8 +643,11 @@ int32_t OHAudioSuiteEngine::DestroyPipeline(OHAudioSuitePipeline *audioPipeline) | |||
| 643 | { | 643 | { |
| 644 | CHECK_AND_RETURN_RET_LOG(audioPipeline != nullptr, ERR_INVALID_PARAM, | 644 | CHECK_AND_RETURN_RET_LOG(audioPipeline != nullptr, ERR_INVALID_PARAM, |
| 645 | "DestroyPipeline failed, audioPipeline is nullptr."); | 645 | "DestroyPipeline failed, audioPipeline is nullptr."); |
| 646 | - CHECK_AND_RETURN_RET_LOG(IsPipelineExists(audioPipeline), ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, | 646 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG(IsPipelineExists(audioPipeline), ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, |
| 647 | - "OHAudioSuiteEngine::The pipeline does not exist."); | 647 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 648 | + static_cast<int32_t>(getuid()), ERR_DESTROY_PIPELINE_NOT_FOUND, | ||
| 649 | + "OHAudioSuiteEngine::The pipeline does not exist.", true), | ||
| 650 | + "OHAudioSuiteEngine::The pipeline does not exist."); | ||
| 648 | uint32_t pipelineId = audioPipeline->GetPipelineId(); | 651 | uint32_t pipelineId = audioPipeline->GetPipelineId(); |
| 649 | int32_t ret = IAudioSuiteManager::GetAudioSuiteManager().DestroyPipeline(pipelineId); | 652 | int32_t ret = IAudioSuiteManager::GetAudioSuiteManager().DestroyPipeline(pipelineId); |
| 650 | CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "DestroyPipeline failed, ret = %{public}d.", ret); | 653 | CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ret, "DestroyPipeline failed, ret = %{public}d.", ret); |
| @@ -867,8 +870,11 @@ int32_t OHAudioSuiteEngine::SetAudioFormat(OHAudioNode *node, OH_AudioFormat *au | |||
| 867 | int32_t OHAudioSuiteEngine::ConnectNodes(OHAudioNode *srcNode, OHAudioNode *destNode) | 870 | int32_t OHAudioSuiteEngine::ConnectNodes(OHAudioNode *srcNode, OHAudioNode *destNode) |
| 868 | { | 871 | { |
| 869 | CHECK_AND_RETURN_RET_LOG(srcNode != nullptr, ERR_INVALID_PARAM, "ConnectNodes failed, srcNode is nullptr."); | 872 | CHECK_AND_RETURN_RET_LOG(srcNode != nullptr, ERR_INVALID_PARAM, "ConnectNodes failed, srcNode is nullptr."); |
| 870 | - CHECK_AND_RETURN_RET_LOG(IsNodeExists(srcNode), ERR_AUDIO_SUITE_NODE_NOT_EXIST, | 873 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( |
| 871 | - "OHAudioSuiteEngine::The sec node does not exist."); | 874 | + IsNodeExists(srcNode), ERR_AUDIO_SUITE_NODE_NOT_EXIST, |
| 875 | + StreamDfxManager::GetInstance().SendAudioErrorEvent(static_cast<int32_t>(getuid()), EDIT_CONNECT_NODES_INVAILD, | ||
CHECK_AND_RETURN_RET_LOG(IsNodeExists(srcNode), ERR_AUDIO_SUITE_NODE_NOT_EXIST, ![]() ![]() | |||
| 876 | + "OHAudioSuiteEngine::The sec node does not exist.", true), | ||
| 877 | + "OHAudioSuiteEngine::The sec node does not exist."); | ||
| 872 | CHECK_AND_RETURN_RET_LOG(destNode != nullptr, ERR_INVALID_PARAM, "ConnectNodes failed, srcNode is nullptr."); | 878 | CHECK_AND_RETURN_RET_LOG(destNode != nullptr, ERR_INVALID_PARAM, "ConnectNodes failed, srcNode is nullptr."); |
| 873 | CHECK_AND_RETURN_RET_LOG(IsNodeExists(destNode), ERR_AUDIO_SUITE_NODE_NOT_EXIST, | 879 | CHECK_AND_RETURN_RET_LOG(IsNodeExists(destNode), ERR_AUDIO_SUITE_NODE_NOT_EXIST, |
| 874 | "OHAudioSuiteEngine::The dest node does not exist."); | 880 | "OHAudioSuiteEngine::The dest node does not exist."); |
| @@ -1028,11 +1034,15 @@ int32_t OHAudioSuiteEngine::SetSpaceRenderPositionParams( | |||
| 1028 | OHAudioNode *node, OH_AudioSuite_SpaceRenderPositionParams position) | 1034 | OHAudioNode *node, OH_AudioSuite_SpaceRenderPositionParams position) |
| 1029 | { | 1035 | { |
| 1030 | auto setter = [](uint32_t nodeId, OH_AudioSuite_SpaceRenderPositionParams value) { | 1036 | auto setter = [](uint32_t nodeId, OH_AudioSuite_SpaceRenderPositionParams value) { |
| 1031 | - CHECK_AND_RETURN_RET_LOG( | 1037 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( |
| 1032 | value.x >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.x <= SPACE_RENDER_MAX_CART_POINT_DISTANCE && | 1038 | value.x >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.x <= SPACE_RENDER_MAX_CART_POINT_DISTANCE && |
| 1033 | value.y >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.y <= SPACE_RENDER_MAX_CART_POINT_DISTANCE && | 1039 | value.y >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.y <= SPACE_RENDER_MAX_CART_POINT_DISTANCE && |
| 1034 | value.z >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.z <= SPACE_RENDER_MAX_CART_POINT_DISTANCE, | 1040 | value.z >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.z <= SPACE_RENDER_MAX_CART_POINT_DISTANCE, |
| 1035 | - ERR_INVALID_PARAM, "SetSpaceRenderPositionParams failed, point distance must be in the -5.0f~5.0f"); | 1041 | + ERR_INVALID_PARAM, |
| 1042 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 1043 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 1044 | + "SetSpaceRenderPositionParams failed, point distance must be in the -5.0f~5.0f", true), | ||
| 1045 | + "SetSpaceRenderPositionParams failed, point distance must be in the -5.0f~5.0f"); | ||
| 1036 | AudioSpaceRenderPositionParams positionParams; | 1046 | AudioSpaceRenderPositionParams positionParams; |
| 1037 | positionParams.x = value.x; | 1047 | positionParams.x = value.x; |
| 1038 | positionParams.y = value.y; | 1048 | positionParams.y = value.y; |
| @@ -1064,22 +1074,30 @@ int32_t OHAudioSuiteEngine::SetSpaceRenderRotationParams( | |||
| 1064 | OHAudioNode *node, OH_AudioSuite_SpaceRenderRotationParams rotation) | 1074 | OHAudioNode *node, OH_AudioSuite_SpaceRenderRotationParams rotation) |
| 1065 | { | 1075 | { |
| 1066 | auto setter = [](uint32_t nodeId, OH_AudioSuite_SpaceRenderRotationParams value) { | 1076 | auto setter = [](uint32_t nodeId, OH_AudioSuite_SpaceRenderRotationParams value) { |
| 1067 | - CHECK_AND_RETURN_RET_LOG( | 1077 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( |
| 1068 | - value.x >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.x <= SPACE_RENDER_MAX_CART_POINT_DISTANCE, | 1078 | + value.x >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.x <= SPACE_RENDER_MAX_CART_POINT_DISTANCE && |
| 1069 | - ERR_INVALID_PARAM, "SetSpaceRenderRotationParams failed, point distance must be in the -5.0f~5.0f"); | 1079 | + value.y >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.y <= SPACE_RENDER_MAX_CART_POINT_DISTANCE && |
| 1070 | - CHECK_AND_RETURN_RET_LOG( | ||
| 1071 | - value.y >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.y <= SPACE_RENDER_MAX_CART_POINT_DISTANCE, | ||
| 1072 | - ERR_INVALID_PARAM, "SetSpaceRenderRotationParams failed, point distance must be in the -5.0f~5.0f"); | ||
| 1073 | - CHECK_AND_RETURN_RET_LOG( | ||
| 1074 | value.z >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.z <= SPACE_RENDER_MAX_CART_POINT_DISTANCE, | 1080 | value.z >= SPACE_RENDER_MIN_CART_POINT_DISTANCE && value.z <= SPACE_RENDER_MAX_CART_POINT_DISTANCE, |
| 1075 | - ERR_INVALID_PARAM, "SetSpaceRenderRotationParams failed, point distance must be in the -5.0f~5.0f"); | 1081 | + ERR_INVALID_PARAM, |
| 1076 | - CHECK_AND_RETURN_RET_LOG( | 1082 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 1083 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 1084 | + "SetSpaceRenderRotationParams failed, point distance must be in the -5.0f~5.0f.", true), | ||
| 1085 | + "SetSpaceRenderRotationParams failed, point distance must be in the -5.0f~5.0f."); | ||
| 1086 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 1077 | value.surroundTime >= SPACE_RENDER_MIN_TIME && value.surroundTime <= SPACE_RENDER_MAX_TIME, | 1087 | value.surroundTime >= SPACE_RENDER_MIN_TIME && value.surroundTime <= SPACE_RENDER_MAX_TIME, |
| 1078 | - ERR_INVALID_PARAM, "SetSpaceRenderRotationParams failed, time must be in the 2.0f~40.0f"); | 1088 | + ERR_INVALID_PARAM, |
| 1079 | - CHECK_AND_RETURN_RET_LOG( | 1089 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 1090 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 1091 | + "SetSpaceRenderRotationParams failed, time must be in the 2.0f~40.0f.", true), | ||
| 1092 | + "SetSpaceRenderRotationParams failed, time must be in the 2.0f~40.0f."); | ||
| 1093 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 1080 | value.surroundDirection == OH_AudioSuite_SurroundDirection::SPACE_RENDER_CCW || | 1094 | value.surroundDirection == OH_AudioSuite_SurroundDirection::SPACE_RENDER_CCW || |
| 1081 | value.surroundDirection == OH_AudioSuite_SurroundDirection::SPACE_RENDER_CW, | 1095 | value.surroundDirection == OH_AudioSuite_SurroundDirection::SPACE_RENDER_CW, |
| 1082 | - ERR_INVALID_PARAM, "SetSpaceRenderRotationParams failed, surround direction must be 0 or 1"); | 1096 | + ERR_INVALID_PARAM, |
| 1097 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 1098 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 1099 | + "SetSpaceRenderRotationParams failed, surround direction must be 0 or 1.", true), | ||
| 1100 | + "SetSpaceRenderRotationParams failed, surround direction must be 0 or 1."); | ||
| 1083 | AudioSpaceRenderRotationParams rotationParams; | 1101 | AudioSpaceRenderRotationParams rotationParams; |
| 1084 | rotationParams.x = value.x; | 1102 | rotationParams.x = value.x; |
| 1085 | rotationParams.y = value.y; | 1103 | rotationParams.y = value.y; |
| @@ -1115,12 +1133,18 @@ int32_t OHAudioSuiteEngine::SetSpaceRenderExtensionParams( | |||
| 1115 | OHAudioNode* node, OH_AudioSuite_SpaceRenderExtensionParams extension) | 1133 | OHAudioNode* node, OH_AudioSuite_SpaceRenderExtensionParams extension) |
| 1116 | { | 1134 | { |
| 1117 | auto setter = [](uint32_t nodeId, OH_AudioSuite_SpaceRenderExtensionParams value) { | 1135 | auto setter = [](uint32_t nodeId, OH_AudioSuite_SpaceRenderExtensionParams value) { |
| 1118 | - CHECK_AND_RETURN_RET_LOG( | 1136 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( |
| 1119 | value.extRadius >= SPACE_RENDER_MIN_EXPAND_RADIUS && value.extRadius <= SPACE_RENDER_MAX_EXPAND_RADIUS, | 1137 | value.extRadius >= SPACE_RENDER_MIN_EXPAND_RADIUS && value.extRadius <= SPACE_RENDER_MAX_EXPAND_RADIUS, |
| 1120 | - ERR_INVALID_PARAM, "SetSpaceRenderExtensionParams failed, Radius must be in the 1.0f~5.0f"); | 1138 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 1121 | - CHECK_AND_RETURN_RET_LOG( | 1139 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, |
| 1140 | + "SetSpaceRenderExtensionParams failed, Radius must be in the 1.0f~5.0f", true), | ||
| 1141 | + "SetSpaceRenderExtensionParams failed, Radius must be in the 1.0f~5.0f"); | ||
| 1142 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 1122 | value.extAngle > SPACE_RENDER_MIN_EXPAND_ANGLE && value.extAngle < SPACE_RENDER_MAX_EXPAND_ANGLE, | 1143 | value.extAngle > SPACE_RENDER_MIN_EXPAND_ANGLE && value.extAngle < SPACE_RENDER_MAX_EXPAND_ANGLE, |
| 1123 | - ERR_INVALID_PARAM, "SetSpaceRenderExtensionParams failed, Angle must be in the (1, 360)."); | 1144 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 1145 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 1146 | + "SetSpaceRenderExtensionParams failed, Angle must be in the (0, 360)", true), | ||
| 1147 | + "SetSpaceRenderExtensionParams failed, Angle must be in the (0, 360)."); | ||
| 1124 | AudioSpaceRenderExtensionParams extensionParams; | 1148 | AudioSpaceRenderExtensionParams extensionParams; |
| 1125 | extensionParams.extAngle = value.extAngle; | 1149 | extensionParams.extAngle = value.extAngle; |
| 1126 | extensionParams.extRadius = value.extRadius; | 1150 | extensionParams.extRadius = value.extRadius; |
| @@ -1148,10 +1172,13 @@ int32_t OHAudioSuiteEngine::GetSpaceRenderExtensionParams( | |||
| 1148 | 1172 | ||
| 1149 | int32_t OHAudioSuiteEngine::SetTempoAndPitch(OHAudioNode* node, float speed, float pitch) | 1173 | int32_t OHAudioSuiteEngine::SetTempoAndPitch(OHAudioNode* node, float speed, float pitch) |
| 1150 | { | 1174 | { |
| 1151 | - CHECK_AND_RETURN_RET_LOG(speed >= SPEED_RATE_MIN && speed <= SPEED_RATE_MAX, | 1175 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( |
| 1152 | - ERR_INVALID_PARAM, "SetTempoAndPitch failed, speed must be in the 0.5~10.0"); | 1176 | + (speed >= SPEED_RATE_MIN && speed <= SPEED_RATE_MAX) && (pitch >= PITCH_RATE_MIN && pitch <= PITCH_RATE_MAX), |
| 1153 | - CHECK_AND_RETURN_RET_LOG(pitch >= PITCH_RATE_MIN && pitch <= PITCH_RATE_MAX, | 1177 | + ERR_INVALID_PARAM, |
| 1154 | - ERR_INVALID_PARAM, "SetTempoAndPitch failed, pitch must be in the 0.1~5.0"); | 1178 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 1179 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 1180 | + "SetTempoAndPitch failed, speed must be in the 0.5~10.0 and pitch must be in the 0.1~5.0.", true), | ||
| 1181 | + "SetTempoAndPitch failed, speed must be in the 0.5~10.0 and pitch must be in the 0.1~5.0."); | ||
| 1155 | struct TempoAndPitch { | 1182 | struct TempoAndPitch { |
| 1156 | float speed; | 1183 | float speed; |
| 1157 | float pitch; | 1184 | float pitch; |
| @@ -1187,11 +1214,14 @@ int32_t OHAudioSuiteEngine::GetTempoAndPitch(OHAudioNode* node, float* speed, fl | |||
| 1187 | int32_t OHAudioSuiteEngine::SetPureVoiceChangeOption( | 1214 | int32_t OHAudioSuiteEngine::SetPureVoiceChangeOption( |
| 1188 | OHAudioNode* node, OH_AudioSuite_PureVoiceChangeOption option) | 1215 | OHAudioNode* node, OH_AudioSuite_PureVoiceChangeOption option) |
| 1189 | { | 1216 | { |
| 1190 | - CHECK_AND_RETURN_RET_LOG( | 1217 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( |
| 1191 | (option.pitch >= AUDIO_VOICE_MORPHING_PITCH_MIN && option.pitch <= AUDIO_VOICE_MORPHING_PITCH_MAX) || | 1218 | (option.pitch >= AUDIO_VOICE_MORPHING_PITCH_MIN && option.pitch <= AUDIO_VOICE_MORPHING_PITCH_MAX) || |
| 1192 | option.pitch == AUDIO_VOICE_MORPHING_PITCH_DEFAULT, | 1219 | option.pitch == AUDIO_VOICE_MORPHING_PITCH_DEFAULT, |
| 1193 | ERR_INVALID_PARAM, | 1220 | ERR_INVALID_PARAM, |
| 1194 | - "SetPureVoicePitch failed, pitch must be in the 0.3f~3.0f and 0.0f"); | 1221 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 1222 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 1223 | + "SetPureVoiceChangeOption failed, pitch must be in the 0.3f~3.0f or 0.0f.", true), | ||
| 1224 | + "SetPureVoiceChangeOption failed, pitch must be in the 0.3f~3.0f or 0.0f."); | ||
【告警类型】安全告警 【告警级别】提示 【告警描述】The == or != operator is used to compare floating point numbers.It's probably better to use a comparison with defined precision: fabs(A - B) <Epsilon or fabs(A - B) > Epsilon. The error is in macros. ![]() ![]() | |||
| 1195 | auto setter = [](uint32_t nodeId, OH_AudioSuite_PureVoiceChangeOption value) { | 1225 | auto setter = [](uint32_t nodeId, OH_AudioSuite_PureVoiceChangeOption value) { |
| 1196 | AudioPureVoiceChangeOption optionParams; | 1226 | AudioPureVoiceChangeOption optionParams; |
| 1197 | optionParams.optionGender = static_cast<AudioPureVoiceChangeGenderOption>(value.optionGender); | 1227 | optionParams.optionGender = static_cast<AudioPureVoiceChangeGenderOption>(value.optionGender); |
Mframeworks/native/ohaudiosuite/test/unittest/oh_audio_suite_test/src/oh_audio_suite_engine_test.cpp+417-0
| @@ -19,6 +19,7 @@ | |||
| 19 | 19 | ||
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | + | ||
| 22 | 23 | ||
| 23 | using namespace testing::ext; | 24 | using namespace testing::ext; |
| 24 | 25 | ||
| @@ -602,6 +603,31 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_StartPipeline_005, TestSize | |||
| 602 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 603 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 603 | } | 604 | } |
| 604 | 605 | ||
| 606 | +/** | ||
| 607 | + * @tc.name : Test OH_AudioSuiteEngine_StartPipeline. | ||
| 608 | + * @tc.number: OH_AudioSuiteEngine_StartPipeline_006 | ||
| 609 | + * @tc.desc : Test pipeline not exist. | ||
| 610 | + */ | ||
| 611 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_StartPipeline_006, TestSize.Level0) | ||
| 612 | +{ | ||
| 613 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 614 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 615 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 616 | + | ||
| 617 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 618 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 619 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 620 | + | ||
| 621 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 622 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 623 | + | ||
| 624 | + ret = OH_AudioSuiteEngine_StartPipeline(pipeline); | ||
| 625 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_PIPELINE_NOT_EXIST); | ||
| 626 | + | ||
| 627 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 628 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 629 | +} | ||
| 630 | + | ||
| 605 | /** | 631 | /** |
| 606 | * @tc.name : Test OH_AudioSuiteEngine_StopPipeline. | 632 | * @tc.name : Test OH_AudioSuiteEngine_StopPipeline. |
| 607 | * @tc.number: OH_AudioSuiteEngine_StopPipeline_001 | 633 | * @tc.number: OH_AudioSuiteEngine_StopPipeline_001 |
| @@ -705,6 +731,31 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_StopPipeline_003, TestSize. | |||
| 705 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 731 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 706 | } | 732 | } |
| 707 | 733 | ||
| 734 | +/** | ||
| 735 | + * @tc.name : Test OH_AudioSuiteEngine_StopPipeline. | ||
| 736 | + * @tc.number: OH_AudioSuiteEngine_StopPipeline_004 | ||
| 737 | + * @tc.desc : Test pipeline not exist. | ||
| 738 | + */ | ||
| 739 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_StopPipeline_004, TestSize.Level0) | ||
| 740 | +{ | ||
| 741 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 742 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 743 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 744 | + | ||
| 745 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 746 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 747 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 748 | + | ||
| 749 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 750 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 751 | + | ||
| 752 | + ret = OH_AudioSuiteEngine_StopPipeline(pipeline); | ||
| 753 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_PIPELINE_NOT_EXIST); | ||
| 754 | + | ||
| 755 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 756 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 757 | +} | ||
| 758 | + | ||
| 708 | /** | 759 | /** |
| 709 | * @tc.name : Test OH_AudioSuiteEngine_GetPipelineState. | 760 | * @tc.name : Test OH_AudioSuiteEngine_GetPipelineState. |
| 710 | * @tc.number: OH_AudioSuiteEngine_GetPipelineState_001 | 761 | * @tc.number: OH_AudioSuiteEngine_GetPipelineState_001 |
| @@ -943,6 +994,35 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_RenderFrame_003, TestSize.L | |||
| 943 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 994 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 944 | } | 995 | } |
| 945 | 996 | ||
| 997 | +/** | ||
| 998 | + * @tc.name : Test OH_AudioSuiteEngine_RenderFrame. | ||
| 999 | + * @tc.number: OH_AudioSuiteEngine_RenderFrame_004 | ||
| 1000 | + * @tc.desc : Test pipeline not exist. | ||
| 1001 | + */ | ||
| 1002 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_RenderFrame_004, TestSize.Level0) | ||
| 1003 | +{ | ||
| 1004 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 1005 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 1006 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 1007 | + | ||
| 1008 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 1009 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 1010 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 1011 | + | ||
| 1012 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 1013 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 1014 | + | ||
| 1015 | + uint32_t audioDdata[10] = {0}; | ||
| 1016 | + int32_t writeSize = 0; | ||
| 1017 | + bool finished = false; | ||
| 1018 | + ret = OH_AudioSuiteEngine_RenderFrame( | ||
| 1019 | + pipeline, (void *)audioDdata, sizeof(audioDdata), &writeSize, &finished); | ||
| 1020 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_PIPELINE_NOT_EXIST); | ||
| 1021 | + | ||
| 1022 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 1023 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 1024 | +} | ||
| 1025 | + | ||
| 946 | /** | 1026 | /** |
| 947 | * @tc.name : Test OH_AudioSuiteEngine_ConnectNodes. | 1027 | * @tc.name : Test OH_AudioSuiteEngine_ConnectNodes. |
| 948 | * @tc.number: OH_AudioSuiteEngine_ConnectNodes_001 | 1028 | * @tc.number: OH_AudioSuiteEngine_ConnectNodes_001 |
| @@ -2384,6 +2464,38 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetSoundFieldType_002, Test | |||
| 2384 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 2464 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 2385 | } | 2465 | } |
| 2386 | 2466 | ||
| 2467 | +/** | ||
| 2468 | + * @tc.name : Test OH_AudioSuiteEngine_SetSoundFieldType. | ||
| 2469 | + * @tc.number: OH_AudioSuiteEngine_SetSoundFieldType_003 | ||
| 2470 | + * @tc.desc : Test invalid enum value. | ||
| 2471 | + */ | ||
| 2472 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetSoundFieldType_003, TestSize.Level0) | ||
| 2473 | +{ | ||
| 2474 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 2475 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 2476 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2477 | + | ||
| 2478 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 2479 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 2480 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2481 | + | ||
| 2482 | + OH_AudioNode *audioNode = nullptr; | ||
| 2483 | + CreateNode(pipeline, EFFECT_NODE_TYPE_SOUND_FIELD, &audioNode); | ||
| 2484 | + | ||
| 2485 | + // Test invalid enum value (10) to test deep layer fault interception | ||
| 2486 | + ret = OH_AudioSuiteEngine_SetSoundFieldType(audioNode, static_cast<OH_SoundFieldType>(10)); | ||
| 2487 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 2488 | + | ||
| 2489 | + ret = OH_AudioSuiteEngine_DestroyNode(audioNode); | ||
| 2490 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2491 | + | ||
| 2492 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 2493 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2494 | + | ||
| 2495 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 2496 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2497 | +} | ||
| 2498 | + | ||
| 2387 | /** | 2499 | /** |
| 2388 | * @tc.name : Test OH_AudioSuiteEngine_SetEnvironmentType. | 2500 | * @tc.name : Test OH_AudioSuiteEngine_SetEnvironmentType. |
| 2389 | * @tc.number: OH_AudioSuiteEngine_SetEnvironmentType_001 | 2501 | * @tc.number: OH_AudioSuiteEngine_SetEnvironmentType_001 |
| @@ -2426,6 +2538,44 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetEnvironmentType_002, Tes | |||
| 2426 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 2538 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 2427 | } | 2539 | } |
| 2428 | 2540 | ||
| 2541 | +/** | ||
| 2542 | + * @tc.name : Test OH_AudioSuiteEngine_SetEnvironmentType. | ||
| 2543 | + * @tc.number: OH_AudioSuiteEngine_SetEnvironmentType_003 | ||
| 2544 | + * @tc.desc : Test invalid parameter range (-1 and 5). | ||
| 2545 | + */ | ||
| 2546 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetEnvironmentType_003, TestSize.Level0) | ||
| 2547 | +{ | ||
| 2548 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 2549 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 2550 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2551 | + | ||
| 2552 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 2553 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 2554 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2555 | + | ||
| 2556 | + OH_AudioNode *envEffectNode = nullptr; | ||
| 2557 | + CreateNode(pipeline, EFFECT_NODE_TYPE_ENVIRONMENT_EFFECT, &envEffectNode); | ||
| 2558 | + | ||
| 2559 | + // Test environmentType out of range (must be in 0~4) | ||
| 2560 | + ret = OH_AudioSuiteEngine_SetEnvironmentType(envEffectNode, static_cast<OH_EnvironmentType>(-1)); | ||
| 2561 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 2562 | + | ||
| 2563 | + ret = OH_AudioSuiteEngine_SetEnvironmentType(envEffectNode, static_cast<OH_EnvironmentType>(5)); | ||
| 2564 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 2565 | + | ||
| 2566 | + ret = OH_AudioSuiteEngine_SetEnvironmentType(envEffectNode, static_cast<OH_EnvironmentType>(10)); | ||
| 2567 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 2568 | + | ||
| 2569 | + ret = OH_AudioSuiteEngine_DestroyNode(envEffectNode); | ||
| 2570 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2571 | + | ||
| 2572 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 2573 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2574 | + | ||
| 2575 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 2576 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2577 | +} | ||
| 2578 | + | ||
| 2429 | /** | 2579 | /** |
| 2430 | * @tc.name : Test OH_AudioSuiteEngine_SetVoiceBeautifierType. | 2580 | * @tc.name : Test OH_AudioSuiteEngine_SetVoiceBeautifierType. |
| 2431 | * @tc.number: OH_AudioSuiteEngine_SetVoiceBeautifierType_001 | 2581 | * @tc.number: OH_AudioSuiteEngine_SetVoiceBeautifierType_001 |
| @@ -2468,6 +2618,44 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetVoiceBeautifierType_002, | |||
| 2468 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 2618 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 2469 | } | 2619 | } |
| 2470 | 2620 | ||
| 2621 | +/** | ||
| 2622 | + * @tc.name : Test OH_AudioSuiteEngine_SetVoiceBeautifierType. | ||
| 2623 | + * @tc.number: OH_AudioSuiteEngine_SetVoiceBeautifierType_003 | ||
| 2624 | + * @tc.desc : Test invalid parameter range (0 and 5). | ||
| 2625 | + */ | ||
| 2626 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetVoiceBeautifierType_003, TestSize.Level0) | ||
| 2627 | +{ | ||
| 2628 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 2629 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 2630 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2631 | + | ||
| 2632 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 2633 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 2634 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2635 | + | ||
| 2636 | + OH_AudioNode *voiceBeautifierNode = nullptr; | ||
| 2637 | + CreateNode(pipeline, EFFECT_NODE_TYPE_VOICE_BEAUTIFIER, &voiceBeautifierNode); | ||
| 2638 | + | ||
| 2639 | + // Test voiceBeautifierType out of range (must be in 1~4) | ||
| 2640 | + ret = OH_AudioSuiteEngine_SetVoiceBeautifierType(voiceBeautifierNode, static_cast<OH_VoiceBeautifierType>(0)); | ||
| 2641 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 2642 | + | ||
| 2643 | + ret = OH_AudioSuiteEngine_SetVoiceBeautifierType(voiceBeautifierNode, static_cast<OH_VoiceBeautifierType>(5)); | ||
| 2644 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 2645 | + | ||
| 2646 | + ret = OH_AudioSuiteEngine_SetVoiceBeautifierType(voiceBeautifierNode, static_cast<OH_VoiceBeautifierType>(10)); | ||
| 2647 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 2648 | + | ||
| 2649 | + ret = OH_AudioSuiteEngine_DestroyNode(voiceBeautifierNode); | ||
| 2650 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2651 | + | ||
| 2652 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 2653 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2654 | + | ||
| 2655 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 2656 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2657 | +} | ||
| 2658 | + | ||
| 2471 | /** | 2659 | /** |
| 2472 | * @tc.name : Test OH_AudioSuiteEngine_SetSpaceRenderPositionParams. | 2660 | * @tc.name : Test OH_AudioSuiteEngine_SetSpaceRenderPositionParams. |
| 2473 | * @tc.number: OH_AudioSuiteEngine_SetSpaceRenderPositionParams_001 | 2661 | * @tc.number: OH_AudioSuiteEngine_SetSpaceRenderPositionParams_001 |
| @@ -2600,6 +2788,64 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetSpaceRenderExtensionPara | |||
| 2600 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 2788 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 2601 | } | 2789 | } |
| 2602 | 2790 | ||
| 2791 | +/** | ||
| 2792 | + * @tc.name : Test OH_AudioSuiteEngine_SetSpaceRenderExtensionParams. | ||
| 2793 | + * @tc.number: OH_AudioSuiteEngine_SetSpaceRenderExtensionParams_003 | ||
| 2794 | + * @tc.desc : Test invalid parameter range. | ||
| 2795 | + */ | ||
| 2796 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetSpaceRenderExtensionParams_003, TestSize.Level0) | ||
| 2797 | +{ | ||
| 2798 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 2799 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 2800 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2801 | + | ||
| 2802 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 2803 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 2804 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2805 | + | ||
| 2806 | + OH_AudioNode *spaceRenderNode = nullptr; | ||
| 2807 | + CreateNode(pipeline, EFFECT_NODE_TYPE_SPACE_RENDER, &spaceRenderNode); | ||
| 2808 | + | ||
| 2809 | + // Test extRadius out of range (must be in 1.0f~5.0f) | ||
| 2810 | + OH_AudioSuite_SpaceRenderExtensionParams extension = {0.9f, 180}; | ||
| 2811 | + ret = OH_AudioSuiteEngine_SetSpaceRenderExtensionParams(spaceRenderNode, extension); | ||
| 2812 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2813 | + | ||
| 2814 | + extension.extRadius = 5.1f; | ||
| 2815 | + ret = OH_AudioSuiteEngine_SetSpaceRenderExtensionParams(spaceRenderNode, extension); | ||
| 2816 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2817 | + | ||
| 2818 | + // Test extAngle out of range (must be in (0,360)) | ||
| 2819 | + extension.extRadius = 3.0f; | ||
| 2820 | + extension.extAngle = 0; | ||
| 2821 | + ret = OH_AudioSuiteEngine_SetSpaceRenderExtensionParams(spaceRenderNode, extension); | ||
| 2822 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2823 | + | ||
| 2824 | + extension.extAngle = 360; | ||
| 2825 | + ret = OH_AudioSuiteEngine_SetSpaceRenderExtensionParams(spaceRenderNode, extension); | ||
| 2826 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2827 | + | ||
| 2828 | + // Test valid parameters | ||
| 2829 | + extension.extRadius = 1.0f; | ||
| 2830 | + extension.extAngle = 1; | ||
| 2831 | + ret = OH_AudioSuiteEngine_SetSpaceRenderExtensionParams(spaceRenderNode, extension); | ||
| 2832 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2833 | + | ||
| 2834 | + extension.extRadius = 5.0f; | ||
| 2835 | + extension.extAngle = 359; | ||
| 2836 | + ret = OH_AudioSuiteEngine_SetSpaceRenderExtensionParams(spaceRenderNode, extension); | ||
| 2837 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2838 | + | ||
| 2839 | + ret = OH_AudioSuiteEngine_DestroyNode(spaceRenderNode); | ||
| 2840 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2841 | + | ||
| 2842 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 2843 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2844 | + | ||
| 2845 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 2846 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2847 | +} | ||
| 2848 | + | ||
| 2603 | /** | 2849 | /** |
| 2604 | * @tc.name : Test OH_AudioSuiteEngine_SetTempoAndPitch. | 2850 | * @tc.name : Test OH_AudioSuiteEngine_SetTempoAndPitch. |
| 2605 | * @tc.number: OH_AudioSuiteEngine_SetTempoAndPitch_001 | 2851 | * @tc.number: OH_AudioSuiteEngine_SetTempoAndPitch_001 |
| @@ -2642,6 +2888,52 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetTempoAndPitch_002, TestS | |||
| 2642 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 2888 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 2643 | } | 2889 | } |
| 2644 | 2890 | ||
| 2891 | +/** | ||
| 2892 | + * @tc.name : Test OH_AudioSuiteEngine_SetTempoAndPitch. | ||
| 2893 | + * @tc.number: OH_AudioSuiteEngine_SetTempoAndPitch_003 | ||
| 2894 | + * @tc.desc : Test invalid speed and pitch range. | ||
| 2895 | + */ | ||
| 2896 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetTempoAndPitch_003, TestSize.Level0) | ||
| 2897 | +{ | ||
| 2898 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 2899 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 2900 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2901 | + | ||
| 2902 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 2903 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 2904 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2905 | + | ||
| 2906 | + OH_AudioNode *tempoPitchNode = nullptr; | ||
| 2907 | + CreateNode(pipeline, EFFECT_NODE_TYPE_TEMPO_PITCH, &tempoPitchNode); | ||
| 2908 | + | ||
| 2909 | + // Test speed out of range (speed must be in 0.5~10.0) | ||
| 2910 | + ret = OH_AudioSuiteEngine_SetTempoAndPitch(tempoPitchNode, 0.4f, 1.0f); | ||
| 2911 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2912 | + | ||
| 2913 | + ret = OH_AudioSuiteEngine_SetTempoAndPitch(tempoPitchNode, 10.1f, 1.0f); | ||
| 2914 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2915 | + | ||
| 2916 | + // Test pitch out of range (pitch must be in 0.1~5.0) | ||
| 2917 | + ret = OH_AudioSuiteEngine_SetTempoAndPitch(tempoPitchNode, 1.0f, 0.09f); | ||
| 2918 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2919 | + | ||
| 2920 | + ret = OH_AudioSuiteEngine_SetTempoAndPitch(tempoPitchNode, 1.0f, 5.1f); | ||
| 2921 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2922 | + | ||
| 2923 | + // Test both speed and pitch out of range | ||
| 2924 | + ret = OH_AudioSuiteEngine_SetTempoAndPitch(tempoPitchNode, 0.4f, 0.09f); | ||
| 2925 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 2926 | + | ||
| 2927 | + ret = OH_AudioSuiteEngine_DestroyNode(tempoPitchNode); | ||
| 2928 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2929 | + | ||
| 2930 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 2931 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2932 | + | ||
| 2933 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 2934 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2935 | +} | ||
| 2936 | + | ||
| 2645 | /** | 2937 | /** |
| 2646 | * @tc.name : Test OH_AudioSuiteEngine_SetPureVoiceChangeOption. | 2938 | * @tc.name : Test OH_AudioSuiteEngine_SetPureVoiceChangeOption. |
| 2647 | * @tc.number: OH_AudioSuiteEngine_SetPureVoiceChangeOption_001 | 2939 | * @tc.number: OH_AudioSuiteEngine_SetPureVoiceChangeOption_001 |
| @@ -2686,6 +2978,57 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetPureVoiceChangeOption_00 | |||
| 2686 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 2978 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 2687 | } | 2979 | } |
| 2688 | 2980 | ||
| 2981 | +/** | ||
| 2982 | + * @tc.name : Test OH_AudioSuiteEngine_SetPureVoiceChangeOption. | ||
| 2983 | + * @tc.number: OH_AudioSuiteEngine_SetPureVoiceChangeOption_003 | ||
| 2984 | + * @tc.desc : Test invalid pitch range. | ||
| 2985 | + */ | ||
| 2986 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetPureVoiceChangeOption_003, TestSize.Level0) | ||
| 2987 | +{ | ||
| 2988 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 2989 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 2990 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2991 | + | ||
| 2992 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 2993 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 2994 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 2995 | + | ||
| 2996 | + OH_AudioNode *pureVoiceChangeNode = nullptr; | ||
| 2997 | + CreateNode(pipeline, EFFECT_NODE_TYPE_PURE_VOICE_CHANGE, &pureVoiceChangeNode); | ||
| 2998 | + | ||
| 2999 | + // Test pitch out of range (pitch must be in 0.3f~3.0f or 0.0f) | ||
| 3000 | + OH_AudioSuite_PureVoiceChangeOption option = {PURE_VOICE_CHANGE_FEMALE, PURE_VOICE_CHANGE_TYPE_SEASONED}; | ||
| 3001 | + option.pitch = 0.29f; | ||
| 3002 | + ret = OH_AudioSuiteEngine_SetPureVoiceChangeOption(pureVoiceChangeNode, option); | ||
| 3003 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 3004 | + | ||
| 3005 | + option.pitch = 3.01f; | ||
| 3006 | + ret = OH_AudioSuiteEngine_SetPureVoiceChangeOption(pureVoiceChangeNode, option); | ||
| 3007 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_INVALID_PARAM); | ||
| 3008 | + | ||
| 3009 | + // Test valid pitch values | ||
| 3010 | + option.pitch = 0.3f; | ||
| 3011 | + ret = OH_AudioSuiteEngine_SetPureVoiceChangeOption(pureVoiceChangeNode, option); | ||
| 3012 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3013 | + | ||
| 3014 | + option.pitch = 3.0f; | ||
| 3015 | + ret = OH_AudioSuiteEngine_SetPureVoiceChangeOption(pureVoiceChangeNode, option); | ||
| 3016 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3017 | + | ||
| 3018 | + option.pitch = 0.0f; | ||
| 3019 | + ret = OH_AudioSuiteEngine_SetPureVoiceChangeOption(pureVoiceChangeNode, option); | ||
| 3020 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3021 | + | ||
| 3022 | + ret = OH_AudioSuiteEngine_DestroyNode(pureVoiceChangeNode); | ||
| 3023 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3024 | + | ||
| 3025 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 3026 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3027 | + | ||
| 3028 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 3029 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3030 | +} | ||
| 3031 | + | ||
| 2689 | /** | 3032 | /** |
| 2690 | * @tc.name : Test OH_AudioSuiteEngine_SetGeneralVoiceChangeType. | 3033 | * @tc.name : Test OH_AudioSuiteEngine_SetGeneralVoiceChangeType. |
| 2691 | * @tc.number: OH_AudioSuiteEngine_SetGeneralVoiceChangeType_001 | 3034 | * @tc.number: OH_AudioSuiteEngine_SetGeneralVoiceChangeType_001 |
| @@ -2730,6 +3073,47 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetGeneralVoiceChangeType_0 | |||
| 2730 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | 3073 | EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); |
| 2731 | } | 3074 | } |
| 2732 | 3075 | ||
| 3076 | +/** | ||
| 3077 | + * @tc.name : Test OH_AudioSuiteEngine_SetGeneralVoiceChangeType. | ||
| 3078 | + * @tc.number: OH_AudioSuiteEngine_SetGeneralVoiceChangeType_003 | ||
| 3079 | + * @tc.desc : Test invalid parameter range (0 and 11). | ||
| 3080 | + */ | ||
| 3081 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_SetGeneralVoiceChangeType_003, TestSize.Level0) | ||
| 3082 | +{ | ||
| 3083 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 3084 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 3085 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3086 | + | ||
| 3087 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 3088 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 3089 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3090 | + | ||
| 3091 | + OH_AudioNode *generalVoiceChangeNode = nullptr; | ||
| 3092 | + CreateNode(pipeline, EFFECT_NODE_TYPE_GENERAL_VOICE_CHANGE, &generalVoiceChangeNode); | ||
| 3093 | + | ||
| 3094 | + // Test generalVoiceChangeType out of range (must be in 1~10) | ||
| 3095 | + ret = OH_AudioSuiteEngine_SetGeneralVoiceChangeType(generalVoiceChangeNode, | ||
| 3096 | + static_cast<OH_AudioSuite_GeneralVoiceChangeType>(0)); | ||
| 3097 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 3098 | + | ||
| 3099 | + ret = OH_AudioSuiteEngine_SetGeneralVoiceChangeType(generalVoiceChangeNode, | ||
| 3100 | + static_cast<OH_AudioSuite_GeneralVoiceChangeType>(11)); | ||
| 3101 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 3102 | + | ||
| 3103 | + ret = OH_AudioSuiteEngine_SetGeneralVoiceChangeType(generalVoiceChangeNode, | ||
| 3104 | + static_cast<OH_AudioSuite_GeneralVoiceChangeType>(20)); | ||
| 3105 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_SYSTEM); | ||
| 3106 | + | ||
| 3107 | + ret = OH_AudioSuiteEngine_DestroyNode(generalVoiceChangeNode); | ||
| 3108 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3109 | + | ||
| 3110 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 3111 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3112 | + | ||
| 3113 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 3114 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 3115 | +} | ||
| 3116 | + | ||
| 2733 | /** | 3117 | /** |
| 2734 | * @tc.name : Test OHAudioSuiteEngine_RemovePipeline. | 3118 | * @tc.name : Test OHAudioSuiteEngine_RemovePipeline. |
| 2735 | * @tc.number: OHAudioSuiteEngine_RemovePipeline_001 | 3119 | * @tc.number: OHAudioSuiteEngine_RemovePipeline_001 |
| @@ -3826,6 +4210,39 @@ HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_IsNodeTypeSupported001, Tes | |||
| 3826 | std::filesystem::rename("/system/lib64/libimedia_sws.z.so.bak", "/system/lib64/libimedia_sws.z.so"); | 4210 | std::filesystem::rename("/system/lib64/libimedia_sws.z.so.bak", "/system/lib64/libimedia_sws.z.so"); |
| 3827 | } | 4211 | } |
| 3828 | 4212 | ||
| 4213 | +/** | ||
| 4214 | + * @tc.name : Test OH_AudioSuiteEngine_CreateNode with empty node type. | ||
| 4215 | + * @tc.number: OH_AudioSuiteEngine_CreateNodeWithEmptyNodeTypeTest | ||
| 4216 | + * @tc.desc : Test create node with empty node type. | ||
| 4217 | + */ | ||
| 4218 | +HWTEST_F(OHAudioSuiteEngineTest, OH_AudioSuiteEngine_CreateNodeWithEmptyNodeTypeTest, TestSize.Level0) | ||
| 4219 | +{ | ||
| 4220 | + OH_AudioSuiteEngine *audioSuiteEngine = nullptr; | ||
| 4221 | + OH_AudioSuite_Result ret = OH_AudioSuiteEngine_Create(&audioSuiteEngine); | ||
| 4222 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 4223 | + | ||
| 4224 | + OH_AudioSuitePipeline *pipeline = nullptr; | ||
| 4225 | + ret = OH_AudioSuiteEngine_CreatePipeline(audioSuiteEngine, &pipeline, AUDIOSUITE_PIPELINE_EDIT_MODE); | ||
| 4226 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 4227 | + | ||
| 4228 | + OH_AudioNodeBuilder *builder = nullptr; | ||
| 4229 | + ret = OH_AudioSuiteNodeBuilder_Create(&builder); | ||
| 4230 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 4231 | + | ||
| 4232 | + OH_AudioNode *audioNode = nullptr; | ||
| 4233 | + ret = OH_AudioSuiteEngine_CreateNode(pipeline, builder, &audioNode); | ||
| 4234 | + EXPECT_EQ(ret, AUDIOSUITE_ERROR_UNSUPPORTED_OPERATION); | ||
| 4235 | + | ||
| 4236 | + ret = OH_AudioSuiteEngine_DestroyPipeline(pipeline); | ||
| 4237 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 4238 | + | ||
| 4239 | + ret = OH_AudioSuiteEngine_Destroy(audioSuiteEngine); | ||
| 4240 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 4241 | + | ||
| 4242 | + ret = OH_AudioSuiteNodeBuilder_Destroy(builder); | ||
| 4243 | + EXPECT_EQ(ret, AUDIOSUITE_SUCCESS); | ||
| 4244 | +} | ||
| 4245 | + | ||
| 3829 | /** | 4246 | /** |
| 3830 | * @tc.name : Test OH_AudioSuiteEngine_HoaRenderNodeConnection. | 4247 | * @tc.name : Test OH_AudioSuiteEngine_HoaRenderNodeConnection. |
| 3831 | * @tc.number: OH_AudioSuiteEngine_HoaRenderNodeConnection_001 | 4248 | * @tc.number: OH_AudioSuiteEngine_HoaRenderNodeConnection_001 |
| @@ -895,6 +895,29 @@ constexpr int32_t AVSESSION_CONTROL_DESKTOPLYRIC_NOT_ENABLE_LOCAL_SET = BuildErr | |||
| 895 | constexpr int32_t AVSESSION_CONTROL_DESKTOPLYRIC_NOT_ENABLE_LOCAL_GET = BuildErrorCode( | 895 | constexpr int32_t AVSESSION_CONTROL_DESKTOPLYRIC_NOT_ENABLE_LOCAL_GET = BuildErrorCode( |
| 896 | ProblemCategory::FAULT_SESSION_LOCAL_GET, OperationType::AVSESSION, | 896 | ProblemCategory::FAULT_SESSION_LOCAL_GET, OperationType::AVSESSION, |
| 897 | BusinessScenario::CONTROL, ERR_DESKTOPLYRIC_NOT_ENABLE); | 897 | BusinessScenario::CONTROL, ERR_DESKTOPLYRIC_NOT_ENABLE); |
| 898 | + | ||
| 899 | +// FAULT_WRONG_AUDIO_EFFECT | ||
| 900 | +constexpr int32_t ERR_DESTROY_PIPELINE_NOT_FOUND = BuildErrorCode( | ||
| 901 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::RELEASE, | ||
| 902 | + ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST); | ||
| 903 | +constexpr int32_t EDIT_CONNECT_NODES_INVAILD = BuildErrorCode( | ||
| 904 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, | ||
| 905 | + ERR_AUDIO_SUITE_NODE_NOT_EXIST); | ||
| 906 | +constexpr int32_t EDIT_CONNECT_NODES_NOT_EXIST = BuildErrorCode( | ||
| 907 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, | ||
| 908 | + ERR_AUDIO_SUITE_NODE_NOT_EXIST); | ||
| 909 | +constexpr int32_t ERR_NODE_PARAM_SET_NODE_NOT_FOUND = BuildErrorCode( | ||
| 910 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, | ||
| 911 | + ERR_AUDIO_SUITE_NODE_NOT_EXIST); | ||
| 912 | +constexpr int32_t ERR_RENDER_PIPELINE_NOT_FOUND = BuildErrorCode( | ||
| 913 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::RENDER, | ||
| 914 | + ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST); | ||
| 915 | +constexpr int32_t ERR_PIPELINE_STATE_INVALID = BuildErrorCode( | ||
| 916 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, ERR_ILLEGAL_STATE); | ||
| 917 | +constexpr int32_t EDIT_NODE_PARAMETERS_INVALID = BuildErrorCode( | ||
| 918 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, ERR_INVALID_PARAM); | ||
| 919 | +constexpr int32_t EDIT_NODE_DISCONNECT_NOT_SUPPORTED = BuildErrorCode( | ||
| 920 | + ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, ERR_NOT_SUPPORTED); | ||
| 898 | } // namespace AudioStandard | 921 | } // namespace AudioStandard |
| 899 | } // namespace OHOS | 922 | } // namespace OHOS |
| 900 | 923 | ||
| @@ -644,8 +644,8 @@ int32_t AudioSuiteEngine::RenderFrame(uint32_t pipelineId, | |||
| 644 | static_cast<int32_t>(getuid()), | 644 | static_cast<int32_t>(getuid()), |
| 645 | BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, | 645 | BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, |
| 646 | BusinessScenario::RENDER, ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST), | 646 | BusinessScenario::RENDER, ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST), |
| 647 | - "engine RenderFrame failed, pipeline id is invailed.", true); | 647 | + "engine RenderFrame failed, pipeline id is invaild.", true); |
| 648 | - AUDIO_ERR_LOG("engine RenderFrame failed, pipeline id is invailed."); | 648 | + AUDIO_ERR_LOG("engine RenderFrame failed, pipeline id is invaild."); |
| 649 | managerCallback_.OnRenderFrame(ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, pipelineId); | 649 | managerCallback_.OnRenderFrame(ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, pipelineId); |
| 650 | return; | 650 | return; |
| 651 | } | 651 | } |
| @@ -695,6 +695,8 @@ int32_t AudioSuiteEngine::SetOptions(uint32_t nodeId, std::string name, std::str | |||
| 695 | auto request = [this, nodeId, name, value]() { | 695 | auto request = [this, nodeId, name, value]() { |
| 696 | AUDIO_DEBUG_LOG("SetOptions enter"); | 696 | AUDIO_DEBUG_LOG("SetOptions enter"); |
| 697 | if (nodeMap_.find(nodeId) == nodeMap_.end()) { | 697 | if (nodeMap_.find(nodeId) == nodeMap_.end()) { |
| 698 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 699 | + static_cast<int32_t>(getuid()), ERR_NODE_PARAM_SET_NODE_NOT_FOUND, "The node does not exist.", true); | ||
| 698 | AUDIO_ERR_LOG("engine SetOptions node failed, node id=%{public}d is invailed.", nodeId); | 700 | AUDIO_ERR_LOG("engine SetOptions node failed, node id=%{public}d is invailed.", nodeId); |
| 699 | managerCallback_.OnSetOptions(ERR_AUDIO_SUITE_NODE_NOT_EXIST); | 701 | managerCallback_.OnSetOptions(ERR_AUDIO_SUITE_NODE_NOT_EXIST); |
| 700 | return; | 702 | return; |
| @@ -731,6 +733,8 @@ int32_t AudioSuiteEngine::GetOptions(uint32_t nodeId, std::string name, std::str | |||
| 731 | auto request = [this, nodeId, name, &value]() { | 733 | auto request = [this, nodeId, name, &value]() { |
| 732 | AUDIO_DEBUG_LOG("GetOptions enter"); | 734 | AUDIO_DEBUG_LOG("GetOptions enter"); |
| 733 | if (nodeMap_.find(nodeId) == nodeMap_.end()) { | 735 | if (nodeMap_.find(nodeId) == nodeMap_.end()) { |
| 736 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 737 | + static_cast<int32_t>(getuid()), ERR_NODE_PARAM_SET_NODE_NOT_FOUND, "The node does not exist.", true); | ||
| 734 | AUDIO_ERR_LOG("engine GetOptions node failed, node id=%{public}d is invailed.", nodeId); | 738 | AUDIO_ERR_LOG("engine GetOptions node failed, node id=%{public}d is invailed.", nodeId); |
| 735 | managerCallback_.OnGetOptions(ERR_AUDIO_SUITE_NODE_NOT_EXIST); | 739 | managerCallback_.OnGetOptions(ERR_AUDIO_SUITE_NODE_NOT_EXIST); |
| 736 | return; | 740 | return; |
| @@ -38,6 +38,23 @@ namespace AudioSuite { | |||
| 38 | 38 | ||
| 39 | namespace { | 39 | namespace { |
| 40 | static const int32_t OPERATION_TIMEOUT_IN_MS = 10000; // 10s | 40 | static const int32_t OPERATION_TIMEOUT_IN_MS = 10000; // 10s |
| 41 | +static constexpr int32_t EQ_FREQUENCY_BAND_GAINS_MIN = -10; | ||
| 42 | +static constexpr int32_t EQ_FREQUENCY_BAND_GAINS_MAX = 10; | ||
| 43 | +static constexpr float SPACE_RENDER_MIN_CART_POINT_DISTANCE = -5.0f; | ||
| 44 | +static constexpr float SPACE_RENDER_MAX_CART_POINT_DISTANCE = 5.0f; | ||
| 45 | +static constexpr float SPACE_RENDER_MIN_TIME = 2.0f; | ||
| 46 | +static constexpr float SPACE_RENDER_MAX_TIME = 40.0f; | ||
| 47 | +static constexpr float SPACE_RENDER_MIN_EXPAND_RADIUS = 1.0f; | ||
| 48 | +static constexpr float SPACE_RENDER_MAX_EXPAND_RADIUS = 5.0f; | ||
| 49 | +static constexpr int32_t SPACE_RENDER_MIN_EXPAND_ANGLE = 0; | ||
| 50 | +static constexpr int32_t SPACE_RENDER_MAX_EXPAND_ANGLE = 360; | ||
| 51 | +static constexpr float AUDIO_VOICE_MORPHING_PITCH_MIN = 0.3f; | ||
| 52 | +static constexpr float AUDIO_VOICE_MORPHING_PITCH_MAX = 3.0f; | ||
| 53 | +static constexpr float AUDIO_VOICE_MORPHING_PITCH_DEFAULT = 0.0f; | ||
| 54 | +static constexpr float SPEED_RATE_MIN = 0.5f; | ||
| 55 | +static constexpr float SPEED_RATE_MAX = 10.0f; | ||
| 56 | +static constexpr float PITCH_RATE_MIN = 0.1f; | ||
| 57 | +static constexpr float PITCH_RATE_MAX = 5.0f; | ||
| 41 | enum ErrorScene : uint32_t { | 58 | enum ErrorScene : uint32_t { |
| 42 | PIPELINE_SCENE = 0, | 59 | PIPELINE_SCENE = 0, |
| 43 | NODE_SCENE = 1, | 60 | NODE_SCENE = 1, |
| @@ -539,6 +556,14 @@ int32_t AudioSuiteManager::SetEqualizerFrequencyBandGains(uint32_t nodeId, Audio | |||
| 539 | std::lock_guard<std::mutex> lock(lock_); | 556 | std::lock_guard<std::mutex> lock(lock_); |
| 540 | CHECK_AND_RETURN_RET_LOG(suiteEngine_ != nullptr, ERR_AUDIO_SUITE_NODE_NOT_EXIST, "suite engine not inited"); | 557 | CHECK_AND_RETURN_RET_LOG(suiteEngine_ != nullptr, ERR_AUDIO_SUITE_NODE_NOT_EXIST, "suite engine not inited"); |
| 541 | 558 | ||
| 559 | + for (size_t idx = 0; idx < sizeof(gains.gains) / sizeof(gains.gains[0]); idx++) { | ||
| 560 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 561 | + (gains.gains[idx] >= EQ_FREQUENCY_BAND_GAINS_MIN) && (gains.gains[idx] <= EQ_FREQUENCY_BAND_GAINS_MAX), | ||
| 562 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
这里要分析,之前报什么错误。 ![]() ![]() | |||
| 563 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 564 | + "SetEqualizerFrequencyBandGains failed, input value not in -10, 10.", true), | ||
| 565 | + "SetEqualizerFrequencyBandGains failed, input value %{public}d not in -10, 10.", gains.gains[idx]); | ||
| 566 | + } | ||
| 542 | std::string name = "AudioEqualizerFrequencyBandGains"; | 567 | std::string name = "AudioEqualizerFrequencyBandGains"; |
| 543 | std::string value = ""; | 568 | std::string value = ""; |
| 544 | for (size_t idx = 0; idx < sizeof(gains.gains) / sizeof(gains.gains[0]); idx++) { | 569 | for (size_t idx = 0; idx < sizeof(gains.gains) / sizeof(gains.gains[0]); idx++) { |
| @@ -565,6 +590,16 @@ int32_t AudioSuiteManager::SetEqualizerFrequencyBandGains(uint32_t nodeId, Audio | |||
| 565 | 590 | ||
| 566 | int32_t AudioSuiteManager::SetSpaceRenderPositionParams(uint32_t nodeId, AudioSpaceRenderPositionParams position) | 591 | int32_t AudioSuiteManager::SetSpaceRenderPositionParams(uint32_t nodeId, AudioSpaceRenderPositionParams position) |
| 567 | { | 592 | { |
| 593 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 594 | + (position.x >= SPACE_RENDER_MIN_CART_POINT_DISTANCE) && (position.x <= SPACE_RENDER_MAX_CART_POINT_DISTANCE) && | ||
| 595 | + (position.y >= SPACE_RENDER_MIN_CART_POINT_DISTANCE) && | ||
| 596 | + (position.y <= SPACE_RENDER_MAX_CART_POINT_DISTANCE) && | ||
| 597 | + (position.z >= SPACE_RENDER_MIN_CART_POINT_DISTANCE) && | ||
| 598 | + (position.z <= SPACE_RENDER_MAX_CART_POINT_DISTANCE), | ||
| 599 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 600 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 601 | + "SetSpaceRenderPositionParams failed, point distance must be in the -5.0f~5.0f", true), | ||
| 602 | + "SetSpaceRenderPositionParams failed, point distance must be in the -5.0f~5.0f"); | ||
| 568 | return SetParamsTemplate(nodeId, "AudioSpaceRenderPositionParams", position); | 603 | return SetParamsTemplate(nodeId, "AudioSpaceRenderPositionParams", position); |
| 569 | } | 604 | } |
| 570 | 605 | ||
| @@ -575,6 +610,35 @@ int32_t AudioSuiteManager::GetSpaceRenderPositionParams(uint32_t nodeId, AudioSp | |||
| 575 | 610 | ||
| 576 | int32_t AudioSuiteManager::SetSpaceRenderRotationParams(uint32_t nodeId, AudioSpaceRenderRotationParams rotation) | 611 | int32_t AudioSuiteManager::SetSpaceRenderRotationParams(uint32_t nodeId, AudioSpaceRenderRotationParams rotation) |
| 577 | { | 612 | { |
| 613 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 614 | + (rotation.x >= SPACE_RENDER_MIN_CART_POINT_DISTANCE) && (rotation.x <= SPACE_RENDER_MAX_CART_POINT_DISTANCE) && | ||
| 615 | + (rotation.y >= SPACE_RENDER_MIN_CART_POINT_DISTANCE) && | ||
| 616 | + (rotation.y <= SPACE_RENDER_MAX_CART_POINT_DISTANCE) && | ||
| 617 | + (rotation.z >= SPACE_RENDER_MIN_CART_POINT_DISTANCE) && | ||
| 618 | + (rotation.z <= SPACE_RENDER_MAX_CART_POINT_DISTANCE), | ||
| 619 | + ERR_INVALID_PARAM, | ||
| 620 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 621 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 622 | + "SetSpaceRenderRotationParams failed, point distance must be in the -5.0f~5.0f", true), | ||
| 623 | + "SetSpaceRenderRotationParams failed, point distance must be in the -5.0f~5.0f"); | ||
| 624 | + | ||
| 625 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 626 | + ((rotation.surroundTime >= SPACE_RENDER_MIN_TIME) && (rotation.surroundTime <= SPACE_RENDER_MAX_TIME)), | ||
| 627 | + ERR_INVALID_PARAM, | ||
| 628 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 629 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 630 | + "SetSpaceRenderRotationParams failed, time must be in the 2.0f~40.0f", true), | ||
| 631 | + "SetSpaceRenderRotationParams failed, time must be in the 2.0f~40.0f"); | ||
| 632 | + | ||
| 633 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 634 | + (rotation.surroundDirection == AudioSurroundDirection::SPACE_RENDER_CCW || | ||
| 635 | + rotation.surroundDirection == AudioSurroundDirection::SPACE_RENDER_CW), | ||
| 636 | + ERR_INVALID_PARAM, | ||
| 637 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 638 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 639 | + "SetSpaceRenderRotationParams failed, surround direction must be 0 or 1", true), | ||
| 640 | + "SetSpaceRenderRotationParams failed, surround direction must be 0 or 1"); | ||
| 641 | + | ||
| 578 | return SetParamsTemplate(nodeId, "AudioSpaceRenderRotationParams", rotation); | 642 | return SetParamsTemplate(nodeId, "AudioSpaceRenderRotationParams", rotation); |
| 579 | } | 643 | } |
| 580 | 644 | ||
| @@ -585,6 +649,19 @@ int32_t AudioSuiteManager::GetSpaceRenderRotationParams(uint32_t nodeId, AudioSp | |||
| 585 | 649 | ||
| 586 | int32_t AudioSuiteManager::SetSpaceRenderExtensionParams(uint32_t nodeId, AudioSpaceRenderExtensionParams extension) | 650 | int32_t AudioSuiteManager::SetSpaceRenderExtensionParams(uint32_t nodeId, AudioSpaceRenderExtensionParams extension) |
| 587 | { | 651 | { |
| 652 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 653 | + extension.extRadius >= SPACE_RENDER_MIN_EXPAND_RADIUS && extension.extRadius <= SPACE_RENDER_MAX_EXPAND_RADIUS, | ||
| 654 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 655 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 656 | + "SetSpaceRenderExtensionParams failed, Radius must be in the 1.0f~5.0f", true), | ||
| 657 | + "SetSpaceRenderExtensionParams failed, Radius must be in the 1.0f~5.0f"); | ||
| 658 | + | ||
| 659 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 660 | + extension.extAngle > SPACE_RENDER_MIN_EXPAND_ANGLE && extension.extAngle < SPACE_RENDER_MAX_EXPAND_ANGLE, | ||
| 661 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 662 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 663 | + "SetSpaceRenderExtensionParams failed, Angle must be in the (0, 360)", true), | ||
| 664 | + "SetSpaceRenderExtensionParams failed, Angle must be in the (0, 360)"); | ||
| 588 | return SetParamsTemplate(nodeId, "AudioSpaceRenderExtensionParams", extension); | 665 | return SetParamsTemplate(nodeId, "AudioSpaceRenderExtensionParams", extension); |
| 589 | } | 666 | } |
| 590 | 667 | ||
| @@ -598,6 +675,13 @@ int32_t AudioSuiteManager::SetTempoAndPitch(uint32_t nodeId, float speed, float | |||
| 598 | TempoPitchParams params; | 675 | TempoPitchParams params; |
| 599 | params.speed = speed; | 676 | params.speed = speed; |
| 600 | params.pitch = pitch; | 677 | params.pitch = pitch; |
| 678 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 679 | + (speed >= SPEED_RATE_MIN && speed <= SPEED_RATE_MAX) && (pitch >= PITCH_RATE_MIN && pitch <= PITCH_RATE_MAX), | ||
| 680 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 681 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 682 | + "SetTempoAndPitch failed, speed must be in the 0.5~10.0 and pitch must be in the 0.1~5.0.", true), | ||
| 683 | + "SetTempoAndPitch failed, speed %{public}f must be in the 0.5~10.0 and pitch %{public}f must be in the " | ||
| 684 | + "0.1~5.0.", speed, pitch); | ||
| 601 | return SetParamsTemplate(nodeId, "speedAndPitch", params); | 685 | return SetParamsTemplate(nodeId, "speedAndPitch", params); |
| 602 | } | 686 | } |
| 603 | 687 | ||
| @@ -614,6 +698,13 @@ int32_t AudioSuiteManager::GetTempoAndPitch(uint32_t nodeId, float &speed, float | |||
| 614 | 698 | ||
| 615 | int32_t AudioSuiteManager::SetPureVoiceChangeOption(uint32_t nodeId, AudioPureVoiceChangeOption option) | 699 | int32_t AudioSuiteManager::SetPureVoiceChangeOption(uint32_t nodeId, AudioPureVoiceChangeOption option) |
| 616 | { | 700 | { |
| 701 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG( | ||
| 702 | + (option.pitch >= AUDIO_VOICE_MORPHING_PITCH_MIN && option.pitch <= AUDIO_VOICE_MORPHING_PITCH_MAX) || | ||
| 703 | + option.pitch == AUDIO_VOICE_MORPHING_PITCH_DEFAULT, | ||
| 704 | + ERR_INVALID_PARAM, StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 705 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 706 | + "SetPureVoiceChangeOption failed, pitch must be in the 0.3f~3.0f or 0.0f.", true), | ||
| 707 | + "SetPureVoiceChangeOption failed, pitch %{public}f must be in the 0.3f~3.0f or 0.0f.", option.pitch); | ||
| 617 | return SetParamsTemplate(nodeId, "AudioPureVoiceChangeOption", option); | 708 | return SetParamsTemplate(nodeId, "AudioPureVoiceChangeOption", option); |
| 618 | } | 709 | } |
| 619 | 710 | ||
| @@ -838,8 +929,11 @@ int32_t AudioSuiteManager::RenderFrame(uint32_t pipelineId, | |||
| 838 | ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, "suite engine not inited"); | 929 | ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, "suite engine not inited"); |
| 839 | 930 | ||
| 840 | auto it = pipelineLockMap_.find(pipelineId); | 931 | auto it = pipelineLockMap_.find(pipelineId); |
| 841 | - CHECK_AND_RETURN_RET_LOG(it != pipelineLockMap_.end(), ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, | 932 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG(it != pipelineLockMap_.end(), ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, |
| 842 | - "pipeline lock not exist"); | 933 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 934 | + static_cast<int32_t>(getuid()), ERR_RENDER_PIPELINE_NOT_FOUND, | ||
| 935 | + "manager RenderFrame failed, pipeline id is invailed.", true), | ||
| 936 | + "pipeline lock not exist"); | ||
| 843 | std::mutex *pipelineLock = it->second.get(); | 937 | std::mutex *pipelineLock = it->second.get(); |
| 844 | CHECK_AND_RETURN_RET_LOG(pipelineLock != nullptr, ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, | 938 | CHECK_AND_RETURN_RET_LOG(pipelineLock != nullptr, ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, |
| 845 | "pipeline lock is null"); | 939 | "pipeline lock is null"); |
| @@ -873,8 +967,11 @@ int32_t AudioSuiteManager::MultiRenderFrame(uint32_t pipelineId, | |||
| 873 | ERR_AUDIO_SUITE_ENGINE_NOT_EXIST, "suite engine not inited"); | 967 | ERR_AUDIO_SUITE_ENGINE_NOT_EXIST, "suite engine not inited"); |
| 874 | 968 | ||
| 875 | auto it = pipelineLockMap_.find(pipelineId); | 969 | auto it = pipelineLockMap_.find(pipelineId); |
| 876 | - CHECK_AND_RETURN_RET_LOG(it != pipelineLockMap_.end(), ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, | 970 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG(it != pipelineLockMap_.end(), ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, |
| 877 | - "pipeline lock not exist"); | 971 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 972 | + static_cast<int32_t>(getuid()), ERR_RENDER_PIPELINE_NOT_FOUND, | ||
| 973 | + "manager RenderFrame failed, pipeline id is invailed.", true), | ||
| 974 | + "pipeline lock not exist"); | ||
| 878 | std::mutex *pipelineLock = it->second.get(); | 975 | std::mutex *pipelineLock = it->second.get(); |
| 879 | CHECK_AND_RETURN_RET_LOG(pipelineLock != nullptr, ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, | 976 | CHECK_AND_RETURN_RET_LOG(pipelineLock != nullptr, ERR_AUDIO_SUITE_PIPELINE_NOT_EXIST, |
| 880 | "pipeline lock is null"); | 977 | "pipeline lock is null"); |
| @@ -770,7 +770,7 @@ int32_t AudioSuitePipeline::ConnectNodesForRun(uint32_t srcNodeId, uint32_t dest | |||
| 770 | static_cast<int32_t>(getuid()), | 770 | static_cast<int32_t>(getuid()), |
| 771 | BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, | 771 | BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, BusinessScenario::CONFIG, |
| 772 | ERR_AUDIO_SUITE_UNSUPPORT_CONNECT), | 772 | ERR_AUDIO_SUITE_UNSUPPORT_CONNECT), |
| 773 | - "onnectNodes failed, pipeline running", true); | 773 | + "ConnectNodes failed, pipeline running", true); |
| 774 | AUDIO_ERR_LOG("ConnectNodes failed, pipeline running srcNode = %{public}d can not is used node.", srcNodeId); | 774 | AUDIO_ERR_LOG("ConnectNodes failed, pipeline running srcNode = %{public}d can not is used node.", srcNodeId); |
| 775 | return ERR_AUDIO_SUITE_UNSUPPORT_CONNECT; | 775 | return ERR_AUDIO_SUITE_UNSUPPORT_CONNECT; |
| 776 | } | 776 | } |
| @@ -864,14 +864,11 @@ int32_t AudioSuitePipeline::DisConnectNodesForRun(uint32_t srcNodeId, uint32_t d | |||
| 864 | { | 864 | { |
| 865 | if (outputNode_ == nullptr) { | 865 | if (outputNode_ == nullptr) { |
| 866 | StreamDfxManager::GetInstance().SendAudioErrorEvent( | 866 | StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 867 | - static_cast<int32_t>(getuid()), | 867 | + static_cast<int32_t>(getuid()), ERR_PIPELINE_STATE_INVALID, |
| 868 | - BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, | ||
| 869 | - BusinessScenario::CONFIG, ERR_ILLEGAL_STATE), | ||
| 870 | "DisConnectNodes failed, pipeline running, can not find output node.", true); | 868 | "DisConnectNodes failed, pipeline running, can not find output node.", true); |
| 871 | AUDIO_ERR_LOG("DisConnectNodes failed, pipeline running, can not find output node."); | 869 | AUDIO_ERR_LOG("DisConnectNodes failed, pipeline running, can not find output node."); |
| 872 | return ERR_ILLEGAL_STATE; | 870 | return ERR_ILLEGAL_STATE; |
| 873 | } | 871 | } |
| 874 | - | ||
| 875 | // destNodeId not in pipline running nodes | 872 | // destNodeId not in pipline running nodes |
| 876 | if (!IsConnected(outputNode_->GetAudioNodeId(), destNodeId)) { | 873 | if (!IsConnected(outputNode_->GetAudioNodeId(), destNodeId)) { |
| 877 | return destNode->DisConnect(srcNode); | 874 | return destNode->DisConnect(srcNode); |
| @@ -879,10 +876,7 @@ int32_t AudioSuitePipeline::DisConnectNodesForRun(uint32_t srcNodeId, uint32_t d | |||
| 879 | 876 | ||
| 880 | if (destNode->GetNodeType() != NODE_TYPE_AUDIO_MIXER) { | 877 | if (destNode->GetNodeType() != NODE_TYPE_AUDIO_MIXER) { |
| 881 | StreamDfxManager::GetInstance().SendAudioErrorEvent( | 878 | StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 882 | - static_cast<int32_t>(getuid()), | 879 | + static_cast<int32_t>(getuid()), EDIT_NODE_DISCONNECT_NOT_SUPPORTED, "destNode not midx node.", true); |
| 883 | - BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, | ||
| 884 | - BusinessScenario::CONFIG, ERR_NOT_SUPPORTED), | ||
| 885 | - "destNode not midx node.", true); | ||
| 886 | return ERR_NOT_SUPPORTED; | 880 | return ERR_NOT_SUPPORTED; |
| 887 | } | 881 | } |
| 888 | 882 | ||
| @@ -897,9 +891,7 @@ int32_t AudioSuitePipeline::DisConnectNodesForRun(uint32_t srcNodeId, uint32_t d | |||
| 897 | 891 | ||
| 898 | if (reverseConnections_[destNodeId].size() <= 1) { | 892 | if (reverseConnections_[destNodeId].size() <= 1) { |
| 899 | StreamDfxManager::GetInstance().SendAudioErrorEvent( | 893 | StreamDfxManager::GetInstance().SendAudioErrorEvent( |
| 900 | - static_cast<int32_t>(getuid()), | 894 | + static_cast<int32_t>(getuid()), EDIT_NODE_DISCONNECT_NOT_SUPPORTED, |
| 901 | - BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, | ||
| 902 | - BusinessScenario::CONFIG, ERR_NOT_SUPPORTED), | ||
| 903 | "midx node only one connected", true); | 895 | "midx node only one connected", true); |
| 904 | return ERR_NOT_SUPPORTED; | 896 | return ERR_NOT_SUPPORTED; |
| 905 | } | 897 | } |
| @@ -1073,8 +1065,8 @@ int32_t AudioSuitePipeline::SetOptions(uint32_t nodeId, std::string name, std::s | |||
| 1073 | static_cast<int32_t>(getuid()), | 1065 | static_cast<int32_t>(getuid()), |
| 1074 | BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, | 1066 | BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, |
| 1075 | BusinessScenario::CONFIG, ERR_INVALID_PARAM), | 1067 | BusinessScenario::CONFIG, ERR_INVALID_PARAM), |
| 1076 | - "SetOptions failed, node id is invailed.", true); | 1068 | + "SetOptions failed, node id is invaild.", true); |
| 1077 | - AUDIO_ERR_LOG("SetOptions failed, node id is invailed."); | 1069 | + AUDIO_ERR_LOG("SetOptions failed, node id is invaild."); |
| 1078 | TriggerCallback(SET_OPTIONS, ERR_INVALID_PARAM); | 1070 | TriggerCallback(SET_OPTIONS, ERR_INVALID_PARAM); |
| 1079 | return; | 1071 | return; |
| 1080 | } | 1072 | } |
| @@ -1083,11 +1075,6 @@ int32_t AudioSuitePipeline::SetOptions(uint32_t nodeId, std::string name, std::s | |||
| 1083 | CHECK_AND_RETURN_LOG(node != nullptr, "SetOptions failed, node is nullptr."); | 1075 | CHECK_AND_RETURN_LOG(node != nullptr, "SetOptions failed, node is nullptr."); |
| 1084 | int32_t ret = node->SetOptions(name, value); | 1076 | int32_t ret = node->SetOptions(name, value); |
| 1085 | if (ret != SUCCESS) { | 1077 | if (ret != SUCCESS) { |
| 1086 | - StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 1087 | - static_cast<int32_t>(getuid()), | ||
| 1088 | - BuildErrorCode(ProblemCategory::FAULT_WRONG_AUDIO_EFFECT, OperationType::EDIT, | ||
| 1089 | - BusinessScenario::CONFIG, ret), | ||
| 1090 | - "The SetOptions node interface reports an error.", true); | ||
| 1091 | AUDIO_ERR_LOG("SetOptions, ret = %{public}d.", ret); | 1078 | AUDIO_ERR_LOG("SetOptions, ret = %{public}d.", ret); |
| 1092 | TriggerCallback(SET_OPTIONS, ret); | 1079 | TriggerCallback(SET_OPTIONS, ret); |
| 1093 | return; | 1080 | return; |
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | + | ||
| 30 | 31 | ||
| 31 | namespace OHOS { | 32 | namespace OHOS { |
| 32 | namespace AudioStandard { | 33 | namespace AudioStandard { |
| @@ -127,6 +128,8 @@ int32_t StringToEnvMode(const std::string &modStr, iMedia_Env_PARA ¶) | |||
| 127 | break; | 128 | break; |
| 128 | default: | 129 | default: |
| 129 | AUDIO_ERR_LOG("Unknown EnvMode %{public}d", modeInt); | 130 | AUDIO_ERR_LOG("Unknown EnvMode %{public}d", modeInt); |
| 131 | + StreamDfxManager::GetInstance().SendAudioErrorEvent(static_cast<int32_t>(getuid()), | ||
| 132 | + EDIT_NODE_PARAMETERS_INVALID, "Environment node passed invalid enum value", true); | ||
| 130 | return ERROR; | 133 | return ERROR; |
| 131 | } | 134 | } |
| 132 | return SUCCESS; | 135 | return SUCCESS; |
| @@ -24,6 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | 26 | ||
| 27 | + | ||
| 27 | 28 | ||
| 28 | namespace OHOS { | 29 | namespace OHOS { |
| 29 | namespace AudioStandard { | 30 | namespace AudioStandard { |
| @@ -147,6 +148,8 @@ int32_t AudioSuiteSoundFieldAlgoInterfaceImpl::SetParameter(const std::string &p | |||
| 147 | return SUCCESS; | 148 | return SUCCESS; |
| 148 | } else { | 149 | } else { |
| 149 | AUDIO_ERR_LOG("SetParameter Unknown value %{public}s", paramValue.c_str()); | 150 | AUDIO_ERR_LOG("SetParameter Unknown value %{public}s", paramValue.c_str()); |
| 151 | + StreamDfxManager::GetInstance().SendAudioErrorEvent(static_cast<int32_t>(getuid()), | ||
| 152 | + EDIT_NODE_PARAMETERS_INVALID, "The value of SetParameter is unknown.", true); | ||
| 150 | return ERROR; | 153 | return ERROR; |
| 151 | } | 154 | } |
| 152 | 155 | ||
| @@ -23,6 +23,7 @@ | |||
| 23 | 23 | ||
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | + | ||
| 26 | 27 | ||
| 27 | namespace OHOS { | 28 | namespace OHOS { |
| 28 | namespace AudioStandard { | 29 | namespace AudioStandard { |
| @@ -167,7 +168,11 @@ int32_t AudioSuiteVoiceMorphingAlgoInterfaceImpl::SetParameter( | |||
| 167 | return ERROR; | 168 | return ERROR; |
| 168 | } | 169 | } |
| 169 | 170 | ||
| 170 | - CHECK_AND_RETURN_RET_LOG(typeIt != typeMap->end(), ERROR, "SetOptions UNKNOWN TYPE"); | 171 | + CHECK_AND_CALL_FUNC_RETURN_RET_LOG(typeIt != typeMap->end(), ERROR, |
| 172 | + StreamDfxManager::GetInstance().SendAudioErrorEvent( | ||
| 173 | + static_cast<int32_t>(getuid()), EDIT_NODE_PARAMETERS_INVALID, | ||
| 174 | + "SetVoiceBeautifierType/SetGeneralVoiceChangeType not match the parameters.", true), | ||
| 175 | + "SetOptions UNKNOWN TYPE"); | ||
| 171 | 176 | ||
| 172 | int32_t ret = vmAlgoApi_.setParam(handle_.data(), typeIt->second); | 177 | int32_t ret = vmAlgoApi_.setParam(handle_.data(), typeIt->second); |
| 173 | CHECK_AND_RETURN_RET_LOG(ret == AUDIO_VMP_EOK, ERROR, "Algo setParam failed with %{public}d", ret); | 178 | CHECK_AND_RETURN_RET_LOG(ret == AUDIO_VMP_EOK, ERROR, "Algo setParam failed with %{public}d", ret); |
| @@ -30,6 +30,7 @@ if (audio_framework_feature_audiosuite_support) { | |||
| 30 | 30 | ||
| 31 | include_dirs = [ | 31 | include_dirs = [ |
| 32 | "./tool", | 32 | "./tool", |
| 33 | + "./manager/include", | ||
| 33 | "../../client/manager/include", | 34 | "../../client/manager/include", |
| 34 | "../../client/converter/include", | 35 | "../../client/converter/include", |
| 35 | "../../client/node/include", | 36 | "../../client/node/include", |
| @@ -51,8 +52,9 @@ if (audio_framework_feature_audiosuite_support) { | |||
| 51 | module_out_path = module_output_path | 52 | module_out_path = module_output_path |
| 52 | sources = [ | 53 | sources = [ |
| 53 | "tool/audio_suite_unittest_tools.cpp", | 54 | "tool/audio_suite_unittest_tools.cpp", |
| 54 | - "manager/audio_suite_engine_manager_test.cpp", | 55 | + "manager/src/audio_suite_manager_dfx_test.cpp", |
| 55 | - "manager/audio_suite_manager_params_template_test.cpp", | 56 | + "manager/src/audio_suite_engine_manager_test.cpp", |
| 57 | + "manager/src/audio_suite_manager_params_template_test.cpp", | ||
| 56 | ] | 58 | ] |
| 57 | 59 | ||
| 58 | sanitize = { | 60 | sanitize = { |
| @@ -0,0 +1,238 @@ | |||
| 1 | +/* | ||
| 2 | + * Copyright (c) 2026 Huawei Device Co., Ltd. | ||
| 3 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 4 | + * you may not use this file except in compliance with the License. | ||
| 5 | + * You may obtain a copy of the License at | ||
| 6 | + * | ||
| 7 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 8 | + * | ||
| 9 | + * Unless required by applicable law or agreed to in writing, software | ||
| 10 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 11 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 12 | + * See the License for the specific language governing permissions and | ||
| 13 | + * limitations under the License. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | +class AudioSuiteManagerCallbackTestImpl : public OHOS::AudioStandard::AudioSuite::AudioSuiteManagerCallback { | ||
| 23 | +public: | ||
| 24 | + AudioSuiteManagerCallbackTestImpl() = default; | ||
| 25 | + ~AudioSuiteManagerCallbackTestImpl() = default; | ||
| 26 | + | ||
| 27 | + void OnCreatePipeline(int32_t result, uint32_t pipelineId) override | ||
| 28 | + { | ||
| 29 | + isFinishCreatePipeline_ = true; | ||
| 30 | + engineCreateResult_ = result; | ||
| 31 | + engineCreatePipelineId_ = pipelineId; | ||
| 32 | + } | ||
| 33 | + void OnDestroyPipeline(int32_t result) override | ||
| 34 | + { | ||
| 35 | + isFinishDestroyPipeline_ = true; | ||
| 36 | + destroyPipelineResult_ = result; | ||
| 37 | + } | ||
| 38 | + void OnStartPipeline(int32_t result) override | ||
| 39 | + { | ||
| 40 | + isFinishStartPipeline_ = true; | ||
| 41 | + startPipelineResult_ = result; | ||
| 42 | + } | ||
| 43 | + void OnStopPipeline(int32_t result) override | ||
| 44 | + { | ||
| 45 | + isFinishStopPipeline_ = true; | ||
| 46 | + stopPipelineResult_ = result; | ||
| 47 | + } | ||
| 48 | + void OnGetPipelineState(OHOS::AudioStandard::AudioSuite::AudioSuitePipelineState state, int32_t result) override | ||
| 49 | + { | ||
| 50 | + isFinishGetPipelineState_ = true; | ||
| 51 | + getPipelineState_ = state; | ||
| 52 | + getPipelineResult_ = result; | ||
| 53 | + } | ||
| 54 | + void OnCreateNode(int32_t result, uint32_t nodeId) override | ||
| 55 | + { | ||
| 56 | + isFinishCreateNode_ = true; | ||
| 57 | + engineCreateNodeResult_ = result; | ||
| 58 | + engineCreateNodeId_ = nodeId; | ||
| 59 | + } | ||
| 60 | + void OnDestroyNode(int32_t result) override | ||
| 61 | + { | ||
| 62 | + isFinishDestroyNode_ = true; | ||
| 63 | + destroyNodeResult_ = result; | ||
| 64 | + } | ||
| 65 | + void OnBypassEffectNode(int32_t result) override | ||
| 66 | + { | ||
| 67 | + isFinishBypassEffectNode_ = true; | ||
| 68 | + bypassEffectNodeResult_ = result; | ||
| 69 | + } | ||
| 70 | + void OnGetNodeBypass(int32_t result, bool bypassStatus) override | ||
| 71 | + { | ||
| 72 | + isFinishGetNodeBypassStatus_ = true; | ||
| 73 | + getNodeBypassResult_ = result; | ||
| 74 | + getNodeBypassState_ = bypassStatus; | ||
| 75 | + } | ||
| 76 | + void OnSetAudioFormat(int32_t result) override | ||
| 77 | + { | ||
| 78 | + isFinishSetFormat_ = true; | ||
| 79 | + setFormatResult_ = result; | ||
| 80 | + } | ||
| 81 | + void OnWriteDataCallback(int32_t result) override | ||
| 82 | + { | ||
| 83 | + isFinishSetWriteData_ = true; | ||
| 84 | + setWriteDataResult_ = result; | ||
| 85 | + } | ||
| 86 | + void OnConnectNodes(int32_t result) override | ||
| 87 | + { | ||
| 88 | + isFinishConnectNodes_ = true; | ||
| 89 | + connectNodesResult_ = result; | ||
| 90 | + } | ||
| 91 | + void OnDisConnectNodes(int32_t result) override | ||
| 92 | + { | ||
| 93 | + isFinishDisConnectNodes_ = true; | ||
| 94 | + disConnectNodesResult_ = result; | ||
| 95 | + } | ||
| 96 | + void OnRenderFrame(int32_t result, uint32_t pipelineId) override | ||
| 97 | + { | ||
| 98 | + isFinishRenderFrameMap_[pipelineId] = true; | ||
| 99 | + renderFrameResultMap_[pipelineId] = result; | ||
| 100 | + } | ||
| 101 | + void OnMultiRenderFrame(int32_t result, uint32_t pipelineId) override | ||
| 102 | + { | ||
| 103 | + isFinishMultiRenderFrameMap_[pipelineId] = true; | ||
| 104 | + multiRenderFrameResultMap_[pipelineId] = result; | ||
| 105 | + } | ||
| 106 | + void OnGetOptions(int32_t result) override | ||
| 107 | + { | ||
| 108 | + isFinishGetOptions_ = true; | ||
| 109 | + getOptionsResult_ = result; | ||
| 110 | + } | ||
| 111 | + void OnSetOptions(int32_t result) override | ||
| 112 | + { | ||
| 113 | + isFinishSetOptions_ = true; | ||
| 114 | + setOptionsResult_ = result; | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + void OnPrintInfo(int32_t result) override | ||
| 118 | + { | ||
| 119 | + isFinishPrintInfo_ = true; | ||
| 120 | + printInfoResult_ = result; | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | +private: | ||
| 124 | + bool isFinishCreatePipeline_ = false; | ||
| 125 | + uint32_t engineCreatePipelineId_ = OHOS::AudioStandard::AudioSuite::INVALID_PIPELINE_ID; | ||
| 126 | + int32_t engineCreateResult_ = 0; | ||
| 127 | + bool isFinishDestroyPipeline_ = false; | ||
| 128 | + int32_t destroyPipelineResult_ = 0; | ||
| 129 | + bool isFinishStartPipeline_ = false; | ||
| 130 | + int32_t startPipelineResult_ = 0; | ||
| 131 | + bool isFinishStopPipeline_ = false; | ||
| 132 | + int32_t stopPipelineResult_ = 0; | ||
| 133 | + bool isFinishGetPipelineState_ = false; | ||
| 134 | + OHOS::AudioStandard::AudioSuite::AudioSuitePipelineState getPipelineState_ = | ||
| 135 | + OHOS::AudioStandard::AudioSuite::PIPELINE_STOPPED; | ||
| 136 | + int32_t getPipelineResult_ = 0; | ||
| 137 | + bool isFinishCreateNode_ = false; | ||
| 138 | + int32_t engineCreateNodeResult_ = 0; | ||
| 139 | + uint32_t engineCreateNodeId_ = OHOS::AudioStandard::AudioSuite::INVALID_NODE_ID; | ||
| 140 | + bool isFinishDestroyNode_ = false; | ||
| 141 | + int32_t destroyNodeResult_ = 0; | ||
| 142 | + bool isFinishBypassEffectNode_ = false; | ||
| 143 | + int32_t bypassEffectNodeResult_ = 0; | ||
| 144 | + bool isFinishGetNodeBypassStatus_ = false; | ||
| 145 | + bool getNodeBypassState_ = false; | ||
| 146 | + int32_t getNodeBypassResult_ = 0; | ||
| 147 | + bool isFinishSetFormat_ = false; | ||
| 148 | + int32_t setFormatResult_ = 0; | ||
| 149 | + bool isFinishSetWriteData_ = false; | ||
| 150 | + int32_t setWriteDataResult_ = 0; | ||
| 151 | + bool isFinishConnectNodes_ = false; | ||
| 152 | + int32_t connectNodesResult_ = 0; | ||
| 153 | + bool isFinishDisConnectNodes_ = false; | ||
| 154 | + int32_t disConnectNodesResult_ = 0; | ||
| 155 | + bool isFinishGetOptions_ = false; | ||
| 156 | + int32_t getOptionsResult_ = 0; | ||
| 157 | + bool isFinishSetOptions_ = false; | ||
| 158 | + int32_t setOptionsResult_ = 0; | ||
| 159 | + bool isFinishPrintInfo_ = false; | ||
| 160 | + int32_t printInfoResult_ = 0; | ||
| 161 | + std::unordered_map<uint32_t, bool> isFinishRenderFrameMap_; | ||
| 162 | + std::unordered_map<uint32_t, int32_t> renderFrameResultMap_; | ||
| 163 | + std::unordered_map<uint32_t, bool> isFinishMultiRenderFrameMap_; | ||
| 164 | + std::unordered_map<uint32_t, int32_t> multiRenderFrameResultMap_; | ||
| 165 | +}; | ||
| 166 | + | ||
| 167 | +class AudioNodeTestImpl : public OHOS::AudioStandard::AudioSuite::AudioNode { | ||
| 168 | +public: | ||
| 169 | + explicit AudioNodeTestImpl(OHOS::AudioStandard::AudioSuite::AudioNodeType nodeType) | ||
| 170 | + : OHOS::AudioStandard::AudioSuite::AudioNode(nodeType) | ||
| 171 | + { | ||
| 172 | + } | ||
| 173 | + virtual ~AudioNodeTestImpl() = default; | ||
| 174 | + int32_t DoProcess(uint32_t needDataLength) override | ||
| 175 | + { | ||
| 176 | + return 0; | ||
| 177 | + } | ||
| 178 | + int32_t Flush() override | ||
| 179 | + { | ||
| 180 | + return 0; | ||
| 181 | + } | ||
| 182 | + int32_t Connect(const std::shared_ptr<OHOS::AudioStandard::AudioSuite::AudioNode> &preNode) override | ||
| 183 | + { | ||
| 184 | + if (!preNode) { | ||
| 185 | + return -1; | ||
| 186 | + } | ||
| 187 | + return 0; | ||
| 188 | + } | ||
| 189 | + int32_t DisConnect(const std::shared_ptr<OHOS::AudioStandard::AudioSuite::AudioNode> &preNode) override | ||
| 190 | + { | ||
| 191 | + if (!preNode) { | ||
| 192 | + return -1; | ||
| 193 | + } | ||
| 194 | + return 0; | ||
| 195 | + } | ||
| 196 | +}; | ||
| 197 | + | ||
| 198 | +class SuiteInputNodeRequestDataCallBackFinishedTestImpl | ||
| 199 | + : public OHOS::AudioStandard::AudioSuite::InputNodeRequestDataCallBack { | ||
| 200 | +public: | ||
| 201 | + ~SuiteInputNodeRequestDataCallBackFinishedTestImpl() = default; | ||
| 202 | + int32_t OnRequestDataCallBack(void *audioData, int32_t audioDataSize, bool *finished) override | ||
| 203 | + | ||
| 204 | + { | ||
| 205 | + (void)audioData; | ||
| 206 | + (void)audioDataSize; | ||
| 207 | + if (finished != nullptr) { | ||
| 208 | + *finished = true; | ||
| 209 | + } | ||
| 210 | + return 0; | ||
| 211 | + } | ||
| 212 | +}; | ||
| 213 | + | ||
| 214 | +class SuiteInputNodeRequestDataCallBackTestImpl | ||
| 215 | + : public SuiteInputNodeRequestDataCallBackFinishedTestImpl::InputNodeRequestDataCallBack { | ||
| 216 | +public: | ||
| 217 | + ~SuiteInputNodeRequestDataCallBackTestImpl() = default; | ||
| 218 | + int32_t OnRequestDataCallBack(void *audioData, int32_t audioDataSize, bool *finished) override | ||
| 219 | + { | ||
| 220 | + (void)audioData; | ||
| 221 | + (void)audioDataSize; | ||
| 222 | + (void)finished; | ||
| 223 | + return 0; | ||
| 224 | + } | ||
| 225 | +}; | ||
| 226 | + | ||
| 227 | +class AudioSuiteEngineManagerUnitTest : public testing::Test { | ||
| 228 | +public: | ||
| 229 | + void SetUp() | ||
| 230 | + { | ||
| 231 | + if (!OHOS::AudioStandard::AudioSuite::AllNodeTypesSupported()) { | ||
| 232 | + GTEST_SKIP() << "not support all node types, skip this test"; | ||
| 233 | + } | ||
| 234 | + }; | ||
| 235 | + void TearDown() {}; | ||
| 236 | +}; | ||
| 237 | + | ||
| 238 | + | ||
Rservices/audio_suite/test/unittest/manager/audio_suite_engine_manager_test.cpp→services/audio_suite/test/unittest/manager/src/audio_suite_engine_manager_test.cpp+2-193
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | - * Copyright (c) 2025 Huawei Device Co., Ltd. | 2 | + * Copyright (c) 2025~2026 Huawei Device Co., Ltd. |
| 3 | * Licensed under the Apache License, Version 2.0 (the "License"); | 3 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | * you may not use this file except in compliance with the License. | 4 | * you may not use this file except in compliance with the License. |
| 5 | * You may obtain a copy of the License at | 5 | * You may obtain a copy of the License at |
| @@ -28,7 +28,7 @@ | |||
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | 30 | ||
| 31 | - | 31 | +#include "audio_suite_manager_test_common.h" |
| 32 | 32 | ||
| 33 | using namespace OHOS; | 33 | using namespace OHOS; |
| 34 | using namespace AudioStandard; | 34 | using namespace AudioStandard; |
| @@ -38,197 +38,6 @@ using namespace testing; | |||
| 38 | 38 | ||
| 39 | namespace { | 39 | namespace { |
| 40 | 40 | ||
| 41 | -class AudioSuiteEngineManagerUnitTest : public testing::Test { | ||
| 42 | -public: | ||
| 43 | - void SetUp() | ||
| 44 | - { | ||
| 45 | - if (!AllNodeTypesSupported()) { | ||
| 46 | - GTEST_SKIP() << "not support all node types, skip this test"; | ||
| 47 | - } | ||
| 48 | - }; | ||
| 49 | - void TearDown() {}; | ||
| 50 | -}; | ||
| 51 | - | ||
| 52 | -class AudioSuiteManagerCallbackTestImpl : public AudioSuiteManagerCallback { | ||
| 53 | -public: | ||
| 54 | - AudioSuiteManagerCallbackTestImpl() = default; | ||
| 55 | - ~AudioSuiteManagerCallbackTestImpl() = default; | ||
| 56 | - | ||
| 57 | - void OnCreatePipeline(int32_t result, uint32_t pipelineId) override | ||
| 58 | - { | ||
| 59 | - isFinishCreatePipeline_ = true; | ||
| 60 | - engineCreateResult_ = result; | ||
| 61 | - engineCreatePipelineId_ = pipelineId; | ||
| 62 | - } | ||
| 63 | - void OnDestroyPipeline(int32_t result) override | ||
| 64 | - { | ||
| 65 | - isFinishDestroyPipeline_ = true; | ||
| 66 | - destroyPipelineResult_ = result; | ||
| 67 | - } | ||
| 68 | - void OnStartPipeline(int32_t result) override | ||
| 69 | - { | ||
| 70 | - isFinishStartPipeline_ = true; | ||
| 71 | - startPipelineResult_ = result; | ||
| 72 | - } | ||
| 73 | - void OnStopPipeline(int32_t result) override | ||
| 74 | - { | ||
| 75 | - isFinishStopPipeline_ = true; | ||
| 76 | - stopPipelineResult_ = result; | ||
| 77 | - } | ||
| 78 | - void OnGetPipelineState(AudioSuitePipelineState state, int32_t result) override | ||
| 79 | - { | ||
| 80 | - isFinishGetPipelineState_ = true; | ||
| 81 | - getPipelineState_ = state; | ||
| 82 | - getPipelineResult_ = result; | ||
| 83 | - } | ||
| 84 | - void OnCreateNode(int32_t result, uint32_t nodeId) override | ||
| 85 | - { | ||
| 86 | - isFinishCreateNode_ = true; | ||
| 87 | - engineCreateNodeResult_ = result; | ||
| 88 | - engineCreateNodeId_ = nodeId; | ||
| 89 | - } | ||
| 90 | - void OnDestroyNode(int32_t result) override | ||
| 91 | - { | ||
| 92 | - isFinishDestroyNode_ = true; | ||
| 93 | - destroyNodeResult_ = result; | ||
| 94 | - } | ||
| 95 | - void OnBypassEffectNode(int32_t result) override | ||
| 96 | - { | ||
| 97 | - isFinishBypassEffectNode_ = true; | ||
| 98 | - bypassEffectNodeResult_ = result; | ||
| 99 | - } | ||
| 100 | - void OnGetNodeBypass(int32_t result, bool bypassStatus) override | ||
| 101 | - { | ||
| 102 | - isFinishGetNodeBypassStatus_ = true; | ||
| 103 | - getNodeBypassResult_ = result; | ||
| 104 | - getNodeBypassState_ = bypassStatus; | ||
| 105 | - } | ||
| 106 | - void OnSetAudioFormat(int32_t result) override | ||
| 107 | - { | ||
| 108 | - isFinishSetFormat_ = true; | ||
| 109 | - setFormatResult_ = result; | ||
| 110 | - } | ||
| 111 | - void OnWriteDataCallback(int32_t result) override | ||
| 112 | - { | ||
| 113 | - isFinishSetWriteData_ = true; | ||
| 114 | - setWriteDataResult_ = result; | ||
| 115 | - } | ||
| 116 | - void OnConnectNodes(int32_t result) override | ||
| 117 | - { | ||
| 118 | - isFinishConnectNodes_ = true; | ||
| 119 | - connectNodesResult_ = result; | ||
| 120 | - } | ||
| 121 | - void OnDisConnectNodes(int32_t result) override | ||
| 122 | - { | ||
| 123 | - isFinishDisConnectNodes_ = true; | ||
| 124 | - disConnectNodesResult_ = result; | ||
| 125 | - } | ||
| 126 | - void OnRenderFrame(int32_t result, uint32_t pipelineId) override | ||
| 127 | - { | ||
| 128 | - isFinishRenderFrameMap_[pipelineId] = true; | ||
| 129 | - renderFrameResultMap_[pipelineId] = result; | ||
| 130 | - } | ||
| 131 | - void OnMultiRenderFrame(int32_t result, uint32_t pipelineId) override | ||
| 132 | - { | ||
| 133 | - isFinishMultiRenderFrameMap_[pipelineId] = true; | ||
| 134 | - multiRenderFrameResultMap_[pipelineId] = result; | ||
| 135 | - } | ||
| 136 | - void OnGetOptions(int32_t result) override | ||
| 137 | - { | ||
| 138 | - isFinishGetOptions_ = true; | ||
| 139 | - getOptionsResult_ = result; | ||
| 140 | - } | ||
| 141 | - void OnSetOptions(int32_t result) override | ||
| 142 | - { | ||
| 143 | - isFinishSetOptions_ = true; | ||
| 144 | - setOptionsResult_ = result; | ||
| 145 | - } | ||
| 146 | - | ||
| 147 | - void OnPrintInfo(int32_t result) override | ||
| 148 | - { | ||
| 149 | - isFinishPrintInfo_ = true; | ||
| 150 | - printInfoResult_ = result; | ||
| 151 | - } | ||
| 152 | - | ||
| 153 | -private: | ||
| 154 | - bool isFinishCreatePipeline_ = false; | ||
| 155 | - uint32_t engineCreatePipelineId_ = INVALID_PIPELINE_ID; | ||
| 156 | - int32_t engineCreateResult_ = 0; | ||
| 157 | - bool isFinishDestroyPipeline_ = false; | ||
| 158 | - int32_t destroyPipelineResult_ = 0; | ||
| 159 | - bool isFinishStartPipeline_ = false; | ||
| 160 | - int32_t startPipelineResult_ = 0; | ||
| 161 | - bool isFinishStopPipeline_ = false; | ||
| 162 | - int32_t stopPipelineResult_ = 0; | ||
| 163 | - bool isFinishGetPipelineState_ = false; | ||
| 164 | - AudioSuitePipelineState getPipelineState_ = PIPELINE_STOPPED; | ||
| 165 | - int32_t getPipelineResult_ = 0; | ||
| 166 | - bool isFinishCreateNode_ = false; | ||
| 167 | - int32_t engineCreateNodeResult_ = 0; | ||
| 168 | - uint32_t engineCreateNodeId_ = INVALID_NODE_ID; | ||
| 169 | - bool isFinishDestroyNode_ = false; | ||
| 170 | - int32_t destroyNodeResult_ = 0; | ||
| 171 | - bool isFinishBypassEffectNode_ = false; | ||
| 172 | - int32_t bypassEffectNodeResult_ = 0; | ||
| 173 | - bool isFinishGetNodeBypassStatus_ = false; | ||
| 174 | - bool getNodeBypassState_ = false; | ||
| 175 | - int32_t getNodeBypassResult_ = 0; | ||
| 176 | - bool isFinishSetFormat_ = false; | ||
| 177 | - int32_t setFormatResult_ = 0; | ||
| 178 | - bool isFinishSetWriteData_ = false; | ||
| 179 | - int32_t setWriteDataResult_ = 0; | ||
| 180 | - bool isFinishConnectNodes_ = false; | ||
| 181 | - int32_t connectNodesResult_ = 0; | ||
| 182 | - bool isFinishDisConnectNodes_ = false; | ||
| 183 | - int32_t disConnectNodesResult_ = 0; | ||
| 184 | - bool isFinishGetOptions_ = false; | ||
| 185 | - int32_t getOptionsResult_ = 0; | ||
| 186 | - bool isFinishSetOptions_ = false; | ||
| 187 | - int32_t setOptionsResult_ = 0; | ||
| 188 | - bool isFinishPrintInfo_ = false; | ||
| 189 | - int32_t printInfoResult_ = 0; | ||
| 190 | - std::unordered_map<uint32_t, bool> isFinishRenderFrameMap_; | ||
| 191 | - std::unordered_map<uint32_t, int32_t> renderFrameResultMap_; | ||
| 192 | - std::unordered_map<uint32_t, bool> isFinishMultiRenderFrameMap_; | ||
| 193 | - std::unordered_map<uint32_t, int32_t> multiRenderFrameResultMap_; | ||
| 194 | -}; | ||
| 195 | - | ||
| 196 | -class SuiteInputNodeRequestDataCallBackTestImpl : public InputNodeRequestDataCallBack { | ||
| 197 | -public: | ||
| 198 | - ~SuiteInputNodeRequestDataCallBackTestImpl() = default; | ||
| 199 | - int32_t OnRequestDataCallBack(void *audioData, int32_t audioDataSize, bool *finished) override | ||
| 200 | - { | ||
| 201 | - (void)audioData; | ||
| 202 | - (void)audioDataSize; | ||
| 203 | - (void)finished; | ||
| 204 | - return 0; | ||
| 205 | - } | ||
| 206 | -}; | ||
| 207 | - | ||
| 208 | -class AudioNodeTestImpl : public AudioNode { | ||
| 209 | -public: | ||
| 210 | - explicit AudioNodeTestImpl(AudioNodeType nodeType):AudioNode(nodeType) | ||
| 211 | - { | ||
| 212 | - } | ||
| 213 | - virtual ~AudioNodeTestImpl() = default; | ||
| 214 | - int32_t DoProcess(uint32_t needDataLength) override | ||
| 215 | - { | ||
| 216 | - return 0; | ||
| 217 | - } | ||
| 218 | - int32_t Flush() override | ||
| 219 | - { | ||
| 220 | - return 0; | ||
| 221 | - } | ||
| 222 | - int32_t Connect(const std::shared_ptr<AudioNode> &preNode) override | ||
| 223 | - { | ||
| 224 | - return 0; | ||
| 225 | - } | ||
| 226 | - int32_t DisConnect(const std::shared_ptr<AudioNode> &preNode) override | ||
| 227 | - { | ||
| 228 | - return 0; | ||
| 229 | - } | ||
| 230 | -}; | ||
| 231 | - | ||
| 232 | HWTEST_F(AudioSuiteEngineManagerUnitTest, constructEngineManagerTest, TestSize.Level0) | 41 | HWTEST_F(AudioSuiteEngineManagerUnitTest, constructEngineManagerTest, TestSize.Level0) |
| 233 | { | 42 | { |
| 234 | AudioSuiteManagerCallbackTestImpl callback; | 43 | AudioSuiteManagerCallbackTestImpl callback; |
| @@ -0,0 +1,1005 @@ | |||
| 1 | +/* | ||
| 2 | + * Copyright (c) 2026 Huawei Device Co., Ltd. | ||
| 3 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 4 | + * you may not use this file except in compliance with the License. | ||
| 5 | + * You may obtain a copy of the License at | ||
| 6 | + * | ||
| 7 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 8 | + * | ||
| 9 | + * Unless required by applicable law or agreed to in writing, software | ||
| 10 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 11 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 12 | + * See the License for the specific language governing permissions and | ||
| 13 | + * limitations under the License. | ||
| 14 | + */ | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + | ||
| 28 | + | ||
| 29 | + | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 34 | +using namespace OHOS; | ||
| 35 | +using namespace AudioStandard; | ||
| 36 | +using namespace AudioSuite; | ||
| 37 | +using namespace testing::ext; | ||
| 38 | + | ||
| 39 | +namespace { | ||
| 40 | +// Test node IDs for DFX tests | ||
| 41 | +static constexpr uint32_t TEST_INPUT_NODE_ID = 1; | ||
| 42 | +static constexpr uint32_t TEST_SPACERENDER_NODE_ID = 2; | ||
| 43 | +static constexpr uint32_t TEST_OUTPUT_NODE_ID = 3; | ||
| 44 | +static constexpr uint32_t TEST_EQUALIZER_NODE_ID = 2; | ||
| 45 | +static constexpr uint32_t TEST_TEMPOPITCH_NODE_ID = 2; | ||
| 46 | +static constexpr uint32_t TEST_AUDIOMIXER_NODE_ID = 4; | ||
| 47 | +static constexpr uint32_t TEST_PIPELINE_ID = 100; | ||
| 48 | +// Invalid node ID for testing non-existent nodes | ||
| 49 | +static constexpr uint32_t TEST_INVALID_NODE_ID = 999; | ||
| 50 | + | ||
| 51 | +// Helper function to create a simple pipeline with space render node | ||
| 52 | +static std::shared_ptr<AudioSuitePipeline> CreateSpaceRenderPipeline(AudioSuiteEngine &engine) | ||
| 53 | +{ | ||
| 54 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 55 | + pipeline->Init(); | ||
| 56 | + | ||
| 57 | + AudioFormat format = {{CH_LAYOUT_STEREO, 2}, SAMPLE_F32LE, SAMPLE_RATE_48000}; | ||
| 58 | + | ||
| 59 | + auto inputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 60 | + inputNode->audioNodeInfo_.nodeId = TEST_INPUT_NODE_ID; | ||
| 61 | + inputNode->SetAudioNodeFormat(format); | ||
| 62 | + | ||
| 63 | + auto spaceRenderNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_SPACE_RENDER); | ||
| 64 | + spaceRenderNode->audioNodeInfo_.nodeId = TEST_SPACERENDER_NODE_ID; | ||
| 65 | + spaceRenderNode->SetAudioNodeFormat(format); | ||
| 66 | + | ||
| 67 | + auto outputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_OUTPUT); | ||
| 68 | + outputNode->audioNodeInfo_.nodeId = TEST_OUTPUT_NODE_ID; | ||
| 69 | + outputNode->SetAudioNodeFormat(format); | ||
| 70 | + | ||
| 71 | + pipeline->nodeMap_[TEST_INPUT_NODE_ID] = inputNode; | ||
| 72 | + pipeline->nodeMap_[TEST_SPACERENDER_NODE_ID] = spaceRenderNode; | ||
| 73 | + pipeline->nodeMap_[TEST_OUTPUT_NODE_ID] = outputNode; | ||
| 74 | + pipeline->connections_[TEST_INPUT_NODE_ID] = TEST_SPACERENDER_NODE_ID; | ||
| 75 | + pipeline->connections_[TEST_SPACERENDER_NODE_ID] = TEST_OUTPUT_NODE_ID; | ||
| 76 | + pipeline->reverseConnections_[TEST_SPACERENDER_NODE_ID] = {TEST_INPUT_NODE_ID}; | ||
| 77 | + pipeline->reverseConnections_[TEST_OUTPUT_NODE_ID] = {TEST_SPACERENDER_NODE_ID}; | ||
| 78 | + | ||
| 79 | + engine.pipelineMap_[TEST_PIPELINE_ID] = pipeline; | ||
| 80 | + return pipeline; | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +// Engine creation: The engine already exists. | ||
| 84 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, duplicateInitTest, TestSize.Level0) | ||
| 85 | +{ | ||
| 86 | + AudioSuiteManager manager; | ||
| 87 | + int32_t result = manager.Init(); | ||
| 88 | + EXPECT_EQ(result, SUCCESS); | ||
| 89 | + | ||
| 90 | + result = manager.Init(); | ||
| 91 | + EXPECT_EQ(result, ERR_ILLEGAL_STATE); | ||
| 92 | + | ||
| 93 | + manager.DeInit(); | ||
| 94 | +} | ||
| 95 | + | ||
| 96 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, duplicateDeInitTest, TestSize.Level0) | ||
| 97 | +{ | ||
| 98 | + AudioSuiteManager manager; | ||
| 99 | + int32_t result = manager.Init(); | ||
| 100 | + EXPECT_EQ(result, SUCCESS); | ||
| 101 | + | ||
| 102 | + result = manager.DeInit(); | ||
| 103 | + EXPECT_EQ(result, SUCCESS); | ||
| 104 | + | ||
| 105 | + result = manager.DeInit(); | ||
| 106 | + EXPECT_EQ(result, ERR_ILLEGAL_STATE); | ||
| 107 | +} | ||
| 108 | + | ||
| 109 | +// Pipeline creation: Engine does not exist. | ||
| 110 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, createPipelineWithoutEngineTest, TestSize.Level0) | ||
| 111 | +{ | ||
| 112 | + AudioSuiteManager manager; | ||
| 113 | + uint32_t pipelineId = INVALID_PIPELINE_ID; | ||
| 114 | + int32_t result = manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 115 | + EXPECT_EQ(result, ERR_AUDIO_SUITE_ENGINE_NOT_EXIST); | ||
| 116 | + | ||
| 117 | + result = manager.Init(); | ||
| 118 | + EXPECT_EQ(result, SUCCESS); | ||
| 119 | + | ||
| 120 | + manager.DeInit(); | ||
| 121 | + result = manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 122 | + EXPECT_EQ(result, ERR_AUDIO_SUITE_ENGINE_NOT_EXIST); | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// Pipeline creation: The number of pipelines exceeds the limit. | ||
| 126 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, createPipelineExceedLimitTest, TestSize.Level0) | ||
| 127 | +{ | ||
| 128 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 129 | + AudioSuiteEngine engineManger(callback); | ||
| 130 | + engineManger.Init(); | ||
| 131 | + EXPECT_EQ(engineManger.IsInit(), true); | ||
| 132 | + engineManger.pipelineMap_.clear(); | ||
| 133 | + | ||
| 134 | + for (uint32_t num = 0; num < engineManger.engineCfg_.maxPipelineNum_ - 1; num++) { | ||
| 135 | + callback.isFinishCreatePipeline_ = false; | ||
| 136 | + callback.engineCreateResult_ = 0; | ||
| 137 | + int32_t result = engineManger.CreatePipeline(PIPELINE_EDIT_MODE); | ||
| 138 | + EXPECT_EQ(result, SUCCESS); | ||
| 139 | + } | ||
| 140 | + callback.isFinishCreatePipeline_ = false; | ||
| 141 | + callback.engineCreateResult_ = 0; | ||
| 142 | + int32_t result = engineManger.CreatePipeline(PIPELINE_REALTIME_MODE); | ||
| 143 | + EXPECT_EQ(result, SUCCESS); | ||
| 144 | + | ||
| 145 | + callback.isFinishCreatePipeline_ = false; | ||
| 146 | + callback.engineCreateResult_ = 0; | ||
| 147 | + result = engineManger.CreatePipeline(PIPELINE_EDIT_MODE); | ||
| 148 | + EXPECT_EQ(result, SUCCESS); | ||
| 149 | + sleep(1); | ||
| 150 | + EXPECT_EQ(callback.isFinishCreatePipeline_, true); | ||
| 151 | + EXPECT_EQ(callback.engineCreateResult_, ERR_AUDIO_SUITE_CREATED_EXCEED_SYSTEM_LIMITS); | ||
| 152 | + | ||
| 153 | + callback.isFinishCreatePipeline_ = false; | ||
| 154 | + callback.engineCreateResult_ = 0; | ||
| 155 | + result = engineManger.CreatePipeline(PIPELINE_REALTIME_MODE); | ||
| 156 | + EXPECT_EQ(result, SUCCESS); | ||
| 157 | + sleep(1); | ||
| 158 | + EXPECT_EQ(callback.isFinishCreatePipeline_, true); | ||
| 159 | + EXPECT_EQ(callback.engineCreateResult_, ERR_AUDIO_SUITE_CREATED_EXCEED_SYSTEM_LIMITS); | ||
| 160 | + | ||
| 161 | + engineManger.DeInit(); | ||
| 162 | +} | ||
| 163 | + | ||
| 164 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, createNodeExceedLimitTest, TestSize.Level0) | ||
| 165 | +{ | ||
| 166 | + AudioSuitePipeline audioSuitePipeline(PIPELINE_EDIT_MODE); | ||
| 167 | + audioSuitePipeline.Init(); | ||
| 168 | + EXPECT_EQ(audioSuitePipeline.IsInit(), true); | ||
| 169 | + | ||
| 170 | + AudioNodeBuilder builder; | ||
| 171 | + builder.nodeType = NODE_TYPE_INPUT; | ||
| 172 | + | ||
| 173 | + for (uint32_t num = 0; num < audioSuitePipeline.pipelineCfg_.maxInputNodeNum_; num++) { | ||
| 174 | + int32_t result = audioSuitePipeline.CreateNodeCheckParme(builder); | ||
| 175 | + EXPECT_EQ(result, SUCCESS); | ||
| 176 | + audioSuitePipeline.nodeCounts_[static_cast<std::size_t>(builder.nodeType)]++; | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + int32_t result = audioSuitePipeline.CreateNodeCheckParme(builder); | ||
| 180 | + EXPECT_EQ(result, ERR_AUDIO_SUITE_CREATED_EXCEED_SYSTEM_LIMITS); | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +// Node parameter setting: The user-defined parameter is invalid or illegal. | ||
| 184 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetEqualizerFrequencyBandGainsInvalidParamTest, TestSize.Level0) | ||
| 185 | +{ | ||
| 186 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 187 | + AudioSuiteEngine engine(callback); | ||
| 188 | + engine.Init(); | ||
| 189 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 190 | + | ||
| 191 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 192 | + pipeline->Init(); | ||
| 193 | + | ||
| 194 | + AudioFormat format = {{CH_LAYOUT_STEREO, 2}, SAMPLE_F32LE, SAMPLE_RATE_48000}; | ||
| 195 | + | ||
| 196 | + auto inputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 197 | + inputNode->audioNodeInfo_.nodeId = TEST_INPUT_NODE_ID; | ||
| 198 | + inputNode->SetAudioNodeFormat(format); | ||
| 199 | + | ||
| 200 | + auto eqNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_EQUALIZER); | ||
| 201 | + eqNode->audioNodeInfo_.nodeId = TEST_EQUALIZER_NODE_ID; | ||
| 202 | + eqNode->SetAudioNodeFormat(format); | ||
| 203 | + | ||
| 204 | + auto outputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_OUTPUT); | ||
| 205 | + outputNode->audioNodeInfo_.nodeId = TEST_OUTPUT_NODE_ID; | ||
| 206 | + outputNode->SetAudioNodeFormat(format); | ||
| 207 | + | ||
| 208 | + pipeline->nodeMap_[TEST_INPUT_NODE_ID] = inputNode; | ||
| 209 | + pipeline->nodeMap_[TEST_EQUALIZER_NODE_ID] = eqNode; | ||
| 210 | + pipeline->nodeMap_[TEST_OUTPUT_NODE_ID] = outputNode; | ||
| 211 | + pipeline->connections_[TEST_INPUT_NODE_ID] = TEST_EQUALIZER_NODE_ID; | ||
| 212 | + pipeline->connections_[TEST_EQUALIZER_NODE_ID] = TEST_OUTPUT_NODE_ID; | ||
| 213 | + pipeline->reverseConnections_[TEST_EQUALIZER_NODE_ID] = {TEST_INPUT_NODE_ID}; | ||
| 214 | + pipeline->reverseConnections_[TEST_OUTPUT_NODE_ID] = {TEST_EQUALIZER_NODE_ID}; | ||
| 215 | + | ||
| 216 | + engine.pipelineMap_[TEST_PIPELINE_ID] = pipeline; | ||
| 217 | + | ||
| 218 | + AudioSuiteManager manager; | ||
| 219 | + manager.Init(); | ||
| 220 | + | ||
| 221 | + AudioEqualizerFrequencyBandGains gains; | ||
| 222 | + gains.gains[0] = 11; | ||
| 223 | + gains.gains[1] = -11; | ||
| 224 | + for (int i = 2; i < EQUALIZER_BAND_NUM; i++) { | ||
| 225 | + gains.gains[i] = 0; | ||
| 226 | + } | ||
| 227 | + | ||
| 228 | + int32_t ret = manager.SetEqualizerFrequencyBandGains(TEST_EQUALIZER_NODE_ID, gains); | ||
| 229 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 230 | + | ||
| 231 | + manager.DeInit(); | ||
| 232 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 233 | + engine.DeInit(); | ||
| 234 | +} | ||
| 235 | + | ||
| 236 | +// The node parameter setting node does not exist. | ||
| 237 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetEqualizerFrequencyBandGainsNodeNotExistTest, TestSize.Level0) | ||
| 238 | +{ | ||
| 239 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 240 | + AudioSuiteEngine engine(callback); | ||
| 241 | + engine.Init(); | ||
| 242 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 243 | + | ||
| 244 | + std::string name = "AudioEqualizerFrequencyBandGains"; | ||
| 245 | + std::string value = "0:0:0:0:0:0:0:0:0:0:"; | ||
| 246 | + | ||
| 247 | + // Test the node ID 999 that does not exist. | ||
| 248 | + int32_t ret = engine.SetOptions(TEST_INVALID_NODE_ID, name, value); | ||
| 249 | + EXPECT_EQ(ret, SUCCESS); | ||
| 250 | + | ||
| 251 | + sleep(1); | ||
| 252 | + EXPECT_EQ(callback.setOptionsResult_, ERR_AUDIO_SUITE_NODE_NOT_EXIST); | ||
| 253 | + engine.DeInit(); | ||
| 254 | +} | ||
| 255 | + | ||
| 256 | +// The node type not support AudioEqualizerFrequencyBandGains. | ||
| 257 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetEqualizerFrequencyBandGainsNodeTypeNotSupportTest, TestSize.Level0) | ||
| 258 | +{ | ||
| 259 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 260 | + AudioSuiteEngine engine(callback); | ||
| 261 | + engine.Init(); | ||
| 262 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 263 | + | ||
| 264 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 265 | + pipeline->Init(); | ||
| 266 | + | ||
| 267 | + // Register the callback to the engine so that TriggerCallback can be correctly triggered. | ||
| 268 | + auto engineSharedPtr = std::shared_ptr<AudioSuiteEngine>(&engine, [](AudioSuiteEngine *) {}); | ||
| 269 | + pipeline->RegisterSendMsgCallback(engineSharedPtr); | ||
| 270 | + | ||
| 271 | + AudioFormat format = {{CH_LAYOUT_STEREO, 2}, SAMPLE_F32LE, SAMPLE_RATE_48000}; | ||
| 272 | + | ||
| 273 | + auto inputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 274 | + inputNode->audioNodeInfo_.nodeId = TEST_INPUT_NODE_ID; | ||
| 275 | + inputNode->SetAudioNodeFormat(format); | ||
| 276 | + | ||
| 277 | + pipeline->nodeMap_[TEST_INPUT_NODE_ID] = inputNode; | ||
| 278 | + | ||
| 279 | + engine.pipelineMap_[TEST_PIPELINE_ID] = pipeline; | ||
| 280 | + engine.nodeMap_[TEST_INPUT_NODE_ID] = TEST_PIPELINE_ID; | ||
| 281 | + std::string name = "AudioEqualizerFrequencyBandGains"; | ||
| 282 | + std::string value = "0:0:0:0:0:0:0:0:0:0:"; | ||
| 283 | + | ||
| 284 | + // Test the INPUT node type does not support AudioEqualizerFrequencyBandGains. | ||
| 285 | + int32_t ret = engine.SetOptions(TEST_INPUT_NODE_ID, name, value); | ||
| 286 | + EXPECT_EQ(ret, SUCCESS); | ||
| 287 | + | ||
| 288 | + sleep(1); | ||
| 289 | + EXPECT_EQ(callback.setOptionsResult_, ERROR); | ||
| 290 | + | ||
| 291 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 292 | + engine.DeInit(); | ||
| 293 | +} | ||
| 294 | + | ||
| 295 | +// Test SetTempoAndPitch with invalid speed and pitch range. | ||
| 296 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetTempoAndPitchInvalidParamTest, TestSize.Level0) | ||
| 297 | +{ | ||
| 298 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 299 | + AudioSuiteEngine engine(callback); | ||
| 300 | + engine.Init(); | ||
| 301 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 302 | + | ||
| 303 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 304 | + pipeline->Init(); | ||
| 305 | + | ||
| 306 | + AudioFormat format = {{CH_LAYOUT_STEREO, 2}, SAMPLE_F32LE, SAMPLE_RATE_48000}; | ||
| 307 | + | ||
| 308 | + auto inputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 309 | + inputNode->audioNodeInfo_.nodeId = TEST_INPUT_NODE_ID; | ||
| 310 | + inputNode->SetAudioNodeFormat(format); | ||
| 311 | + | ||
| 312 | + auto tempoPitchNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_TEMPO_PITCH); | ||
| 313 | + tempoPitchNode->audioNodeInfo_.nodeId = TEST_TEMPOPITCH_NODE_ID; | ||
| 314 | + tempoPitchNode->SetAudioNodeFormat(format); | ||
| 315 | + | ||
| 316 | + auto outputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_OUTPUT); | ||
| 317 | + outputNode->audioNodeInfo_.nodeId = TEST_OUTPUT_NODE_ID; | ||
| 318 | + outputNode->SetAudioNodeFormat(format); | ||
| 319 | + | ||
| 320 | + pipeline->nodeMap_[TEST_INPUT_NODE_ID] = inputNode; | ||
| 321 | + pipeline->nodeMap_[TEST_TEMPOPITCH_NODE_ID] = tempoPitchNode; | ||
| 322 | + pipeline->nodeMap_[TEST_OUTPUT_NODE_ID] = outputNode; | ||
| 323 | + pipeline->connections_[TEST_INPUT_NODE_ID] = TEST_TEMPOPITCH_NODE_ID; | ||
| 324 | + pipeline->connections_[TEST_TEMPOPITCH_NODE_ID] = TEST_OUTPUT_NODE_ID; | ||
| 325 | + pipeline->reverseConnections_[TEST_TEMPOPITCH_NODE_ID] = {TEST_INPUT_NODE_ID}; | ||
| 326 | + pipeline->reverseConnections_[TEST_OUTPUT_NODE_ID] = {TEST_TEMPOPITCH_NODE_ID}; | ||
| 327 | + | ||
| 328 | + engine.pipelineMap_[TEST_PIPELINE_ID] = pipeline; | ||
| 329 | + | ||
| 330 | + AudioSuiteManager manager; | ||
| 331 | + manager.Init(); | ||
| 332 | + | ||
| 333 | + // Test speed out of range (speed must be in 0.5~10.0) | ||
| 334 | + int32_t ret = manager.SetTempoAndPitch(TEST_TEMPOPITCH_NODE_ID, 0.4f, 1.0f); | ||
| 335 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 336 | + | ||
| 337 | + ret = manager.SetTempoAndPitch(TEST_TEMPOPITCH_NODE_ID, 10.1f, 1.0f); | ||
| 338 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 339 | + | ||
| 340 | + // Test pitch out of range (pitch must be in 0.1~5.0) | ||
| 341 | + ret = manager.SetTempoAndPitch(TEST_TEMPOPITCH_NODE_ID, 1.0f, 0.09f); | ||
| 342 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 343 | + | ||
| 344 | + ret = manager.SetTempoAndPitch(TEST_TEMPOPITCH_NODE_ID, 1.0f, 5.1f); | ||
| 345 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 346 | + | ||
| 347 | + // Test both speed and pitch out of range | ||
| 348 | + ret = manager.SetTempoAndPitch(TEST_TEMPOPITCH_NODE_ID, 0.4f, 0.09f); | ||
| 349 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 350 | + | ||
| 351 | + manager.DeInit(); | ||
| 352 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 353 | + engine.DeInit(); | ||
| 354 | +} | ||
| 355 | + | ||
| 356 | +// Test SetPureVoiceChangeOption with invalid pitch range. | ||
| 357 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetPureVoiceChangeOptionInvalidParamTest, TestSize.Level0) | ||
| 358 | +{ | ||
| 359 | + AudioSuiteManager manager; | ||
| 360 | + manager.Init(); | ||
| 361 | + | ||
| 362 | + // Test pitch out of range (pitch must be in 0.3f~3.0f or 0.0f) | ||
| 363 | + AudioPureVoiceChangeOption option; | ||
| 364 | + option.optionGender = PURE_VOICE_CHANGE_FEMALE; | ||
| 365 | + option.optionType = PURE_VOICE_CHANGE_TYPE_SEASONED; | ||
| 366 | + option.pitch = 0.29f; | ||
| 367 | + int32_t ret = manager.SetPureVoiceChangeOption(2, option); | ||
| 368 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 369 | + | ||
| 370 | + option.pitch = 3.01f; | ||
| 371 | + ret = manager.SetPureVoiceChangeOption(2, option); | ||
| 372 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 373 | + | ||
| 374 | + // Test valid pitch values (will fail with node not exist error, but param check should pass) | ||
| 375 | + option.pitch = 0.3f; | ||
| 376 | + ret = manager.SetPureVoiceChangeOption(2, option); | ||
| 377 | + EXPECT_NE(ret, ERR_INVALID_PARAM); | ||
| 378 | + | ||
| 379 | + option.pitch = 3.0f; | ||
| 380 | + ret = manager.SetPureVoiceChangeOption(2, option); | ||
| 381 | + EXPECT_NE(ret, SUCCESS); | ||
| 382 | + | ||
| 383 | + option.pitch = 0.0f; | ||
| 384 | + ret = manager.SetPureVoiceChangeOption(2, option); | ||
| 385 | + EXPECT_NE(ret, ERR_INVALID_PARAM); | ||
| 386 | + | ||
| 387 | + manager.DeInit(); | ||
| 388 | +} | ||
| 389 | + | ||
| 390 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetSpaceRenderExtensionParamsInvalidParamTest, TestSize.Level0) | ||
| 391 | +{ | ||
| 392 | + AudioSuiteManager manager; | ||
| 393 | + manager.Init(); | ||
| 394 | + | ||
| 395 | + // Test extRadius out of range (must be in 1.0f~5.0f) | ||
| 396 | + AudioSpaceRenderExtensionParams extension; | ||
| 397 | + extension.extRadius = 0.9f; | ||
| 398 | + extension.extAngle = 180; | ||
| 399 | + int32_t ret = manager.SetSpaceRenderExtensionParams(2, extension); | ||
| 400 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 401 | + | ||
| 402 | + extension.extRadius = 5.1f; | ||
| 403 | + ret = manager.SetSpaceRenderExtensionParams(2, extension); | ||
| 404 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 405 | + | ||
| 406 | + // Test extAngle out of range (must be in [1, 359]) | ||
| 407 | + extension.extRadius = 3.0f; | ||
| 408 | + extension.extAngle = 0; | ||
| 409 | + ret = manager.SetSpaceRenderExtensionParams(2, extension); | ||
| 410 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 411 | + | ||
| 412 | + extension.extAngle = 361; | ||
| 413 | + ret = manager.SetSpaceRenderExtensionParams(2, extension); | ||
| 414 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 415 | + | ||
| 416 | + extension.extRadius = 5.0f; | ||
| 417 | + extension.extAngle = 360; | ||
| 418 | + ret = manager.SetSpaceRenderExtensionParams(2, extension); | ||
| 419 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 420 | + | ||
| 421 | + manager.DeInit(); | ||
| 422 | +} | ||
| 423 | + | ||
| 424 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetSpaceRenderExtensionParamsParamTest, TestSize.Level0) | ||
| 425 | +{ | ||
| 426 | + AudioSuiteManager manager; | ||
| 427 | + manager.Init(); | ||
| 428 | + uint32_t pipelineId = INVALID_PIPELINE_ID; | ||
| 429 | + int32_t ret = manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 430 | + EXPECT_EQ(ret, SUCCESS); | ||
| 431 | + uint32_t inputNodeId = INVALID_NODE_ID; | ||
| 432 | + AudioNodeBuilder inputBuilder; | ||
| 433 | + inputBuilder.nodeType = NODE_TYPE_INPUT; | ||
| 434 | + ret = manager.CreateNode(pipelineId, inputBuilder, inputNodeId); | ||
| 435 | + EXPECT_EQ(ret, SUCCESS); | ||
| 436 | + | ||
| 437 | + uint32_t spaceRenderNodeId = INVALID_NODE_ID; | ||
| 438 | + AudioNodeBuilder spaceRenderBuilder; | ||
| 439 | + spaceRenderBuilder.nodeType = NODE_TYPE_SPACE_RENDER; | ||
| 440 | + ret = manager.CreateNode(pipelineId, spaceRenderBuilder, spaceRenderNodeId); | ||
| 441 | + EXPECT_EQ(ret, SUCCESS); | ||
| 442 | + | ||
| 443 | + uint32_t outputNodeId = INVALID_NODE_ID; | ||
| 444 | + AudioNodeBuilder outputBuilder; | ||
| 445 | + outputBuilder.nodeType = NODE_TYPE_OUTPUT; | ||
| 446 | + ret = manager.CreateNode(pipelineId, outputBuilder, outputNodeId); | ||
| 447 | + EXPECT_EQ(ret, SUCCESS); | ||
| 448 | + | ||
| 449 | + ret = manager.ConnectNodes(inputNodeId, spaceRenderNodeId); | ||
| 450 | + EXPECT_EQ(ret, SUCCESS); | ||
| 451 | + ret = manager.ConnectNodes(spaceRenderNodeId, outputNodeId); | ||
| 452 | + EXPECT_EQ(ret, SUCCESS); | ||
| 453 | + | ||
| 454 | + AudioSpaceRenderExtensionParams extension; | ||
| 455 | + extension.extRadius = 1.0f; | ||
| 456 | + extension.extAngle = 1; | ||
| 457 | + ret = manager.SetSpaceRenderExtensionParams(spaceRenderNodeId, extension); | ||
| 458 | + EXPECT_EQ(ret, SUCCESS); | ||
| 459 | + | ||
| 460 | + extension.extRadius = 5.0f; | ||
| 461 | + extension.extAngle = 359; | ||
| 462 | + ret = manager.SetSpaceRenderExtensionParams(spaceRenderNodeId, extension); | ||
| 463 | + EXPECT_EQ(ret, SUCCESS); | ||
| 464 | + | ||
| 465 | + extension.extRadius = 3.0f; | ||
| 466 | + extension.extAngle = 180; | ||
| 467 | + ret = manager.SetSpaceRenderExtensionParams(spaceRenderNodeId, extension); | ||
| 468 | + EXPECT_EQ(ret, SUCCESS); | ||
| 469 | + | ||
| 470 | + manager.DestroyPipeline(pipelineId); | ||
| 471 | + manager.DeInit(); | ||
| 472 | +} | ||
| 473 | + | ||
| 474 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetEnvironmentTypeInvalidEnumValueTest, TestSize.Level0) | ||
| 475 | +{ | ||
| 476 | + AudioSuiteManager manager; | ||
| 477 | + manager.Init(); | ||
| 478 | + | ||
| 479 | + // Create pipeline | ||
| 480 | + uint32_t pipelineId = INVALID_PIPELINE_ID; | ||
| 481 | + int32_t ret = manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 482 | + EXPECT_EQ(ret, SUCCESS); | ||
| 483 | + | ||
| 484 | + // Create environment effect node | ||
| 485 | + uint32_t nodeId = INVALID_NODE_ID; | ||
| 486 | + AudioNodeBuilder builder; | ||
| 487 | + builder.nodeType = NODE_TYPE_ENVIRONMENT_EFFECT; | ||
| 488 | + ret = manager.CreateNode(pipelineId, builder, nodeId); | ||
| 489 | + EXPECT_EQ(ret, SUCCESS); | ||
| 490 | + | ||
| 491 | + // Test invalid enum value (10) to test deep layer fault interception | ||
| 492 | + ret = manager.SetEnvironmentType(nodeId, static_cast<EnvironmentType>(10)); | ||
| 493 | + EXPECT_EQ(ret, ERROR); | ||
| 494 | + | ||
| 495 | + // Destroy node and pipeline | ||
| 496 | + ret = manager.DestroyNode(nodeId); | ||
| 497 | + EXPECT_EQ(ret, SUCCESS); | ||
| 498 | + | ||
| 499 | + ret = manager.DestroyPipeline(pipelineId); | ||
| 500 | + EXPECT_EQ(ret, SUCCESS); | ||
| 501 | + | ||
| 502 | + manager.DeInit(); | ||
| 503 | +} | ||
| 504 | + | ||
| 505 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetVoiceBeautifierTypeInvalidEnumValueTest, TestSize.Level0) | ||
| 506 | +{ | ||
| 507 | + AudioSuiteManager manager; | ||
| 508 | + manager.Init(); | ||
| 509 | + | ||
| 510 | + // Create pipeline | ||
| 511 | + uint32_t pipelineId = INVALID_PIPELINE_ID; | ||
| 512 | + int32_t ret = manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 513 | + EXPECT_EQ(ret, SUCCESS); | ||
| 514 | + | ||
| 515 | + // Create voice beautifier node | ||
| 516 | + uint32_t nodeId = INVALID_NODE_ID; | ||
| 517 | + AudioNodeBuilder builder; | ||
| 518 | + builder.nodeType = NODE_TYPE_VOICE_BEAUTIFIER; | ||
| 519 | + ret = manager.CreateNode(pipelineId, builder, nodeId); | ||
| 520 | + EXPECT_EQ(ret, SUCCESS); | ||
| 521 | + | ||
| 522 | + // Test invalid enum value (10) to test deep layer fault interception | ||
| 523 | + ret = manager.SetVoiceBeautifierType(nodeId, static_cast<VoiceBeautifierType>(10)); | ||
| 524 | + EXPECT_EQ(ret, ERROR); | ||
| 525 | + | ||
| 526 | + // Destroy node and pipeline | ||
| 527 | + ret = manager.DestroyNode(nodeId); | ||
| 528 | + EXPECT_EQ(ret, SUCCESS); | ||
| 529 | + | ||
| 530 | + ret = manager.DestroyPipeline(pipelineId); | ||
| 531 | + EXPECT_EQ(ret, SUCCESS); | ||
| 532 | + | ||
| 533 | + manager.DeInit(); | ||
| 534 | +} | ||
| 535 | + | ||
| 536 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetGeneralVoiceChangeTypeInvalidEnumValueTest, TestSize.Level0) | ||
| 537 | +{ | ||
| 538 | + AudioSuiteManager manager; | ||
| 539 | + manager.Init(); | ||
| 540 | + | ||
| 541 | + // Create pipeline | ||
| 542 | + uint32_t pipelineId = INVALID_PIPELINE_ID; | ||
| 543 | + int32_t ret = manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 544 | + EXPECT_EQ(ret, SUCCESS); | ||
| 545 | + | ||
| 546 | + // Create general voice change node | ||
| 547 | + uint32_t nodeId = INVALID_NODE_ID; | ||
| 548 | + AudioNodeBuilder builder; | ||
| 549 | + builder.nodeType = NODE_TYPE_GENERAL_VOICE_CHANGE; | ||
| 550 | + ret = manager.CreateNode(pipelineId, builder, nodeId); | ||
| 551 | + EXPECT_EQ(ret, SUCCESS); | ||
| 552 | + | ||
| 553 | + // Test invalid enum value (20) to test deep layer fault interception | ||
| 554 | + ret = manager.SetGeneralVoiceChangeType(nodeId, static_cast<AudioGeneralVoiceChangeType>(20)); | ||
| 555 | + EXPECT_EQ(ret, ERROR); | ||
| 556 | + | ||
| 557 | + // Destroy node and pipeline | ||
| 558 | + ret = manager.DestroyNode(nodeId); | ||
| 559 | + EXPECT_EQ(ret, SUCCESS); | ||
| 560 | + | ||
| 561 | + ret = manager.DestroyPipeline(pipelineId); | ||
| 562 | + EXPECT_EQ(ret, SUCCESS); | ||
| 563 | + | ||
| 564 | + manager.DeInit(); | ||
| 565 | +} | ||
| 566 | + | ||
| 567 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetSoundFieldTypeInvalidEnumValueTest, TestSize.Level0) | ||
| 568 | +{ | ||
| 569 | + AudioSuiteManager manager; | ||
| 570 | + manager.Init(); | ||
| 571 | + | ||
| 572 | + // Create pipeline | ||
| 573 | + uint32_t pipelineId = INVALID_PIPELINE_ID; | ||
| 574 | + int32_t ret = manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 575 | + EXPECT_EQ(ret, SUCCESS); | ||
| 576 | + | ||
| 577 | + // Create sound field effect node | ||
| 578 | + uint32_t nodeId = INVALID_NODE_ID; | ||
| 579 | + AudioNodeBuilder builder; | ||
| 580 | + builder.nodeType = NODE_TYPE_SOUND_FIELD; | ||
| 581 | + ret = manager.CreateNode(pipelineId, builder, nodeId); | ||
| 582 | + EXPECT_EQ(ret, SUCCESS); | ||
| 583 | + | ||
| 584 | + // Test invalid enum value (10) to test deep layer fault interception | ||
| 585 | + ret = manager.SetSoundFieldType(nodeId, static_cast<SoundFieldType>(10)); | ||
| 586 | + EXPECT_EQ(ret, ERROR); | ||
| 587 | + | ||
| 588 | + // Destroy node and pipeline | ||
| 589 | + ret = manager.DestroyNode(nodeId); | ||
| 590 | + EXPECT_EQ(ret, SUCCESS); | ||
| 591 | + | ||
| 592 | + ret = manager.DestroyPipeline(pipelineId); | ||
| 593 | + EXPECT_EQ(ret, SUCCESS); | ||
| 594 | + | ||
| 595 | + manager.DeInit(); | ||
| 596 | +} | ||
| 597 | + | ||
| 598 | +// The current status of the node connection process pipeline is invalid. | ||
| 599 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, ConnectNodesRunningPipelineTest, TestSize.Level0) | ||
| 600 | +{ | ||
| 601 | + AudioSuitePipeline pipeline(PIPELINE_EDIT_MODE); | ||
| 602 | + pipeline.Init(); | ||
| 603 | + EXPECT_EQ(pipeline.IsInit(), true); | ||
| 604 | + | ||
| 605 | + AudioFormat format = {{CH_LAYOUT_STEREO, 2}, SAMPLE_F32LE, SAMPLE_RATE_48000}; | ||
| 606 | + | ||
| 607 | + auto inputNode1 = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 608 | + inputNode1->audioNodeInfo_.nodeId = TEST_INPUT_NODE_ID; | ||
| 609 | + inputNode1->SetAudioNodeFormat(format); | ||
| 610 | + | ||
| 611 | + auto outputNode = std::make_shared<AudioOutputNode>(format); | ||
| 612 | + outputNode->audioNodeInfo_.nodeId = TEST_OUTPUT_NODE_ID; | ||
| 613 | + outputNode->SetAudioNodeFormat(format); | ||
| 614 | + | ||
| 615 | + auto mixNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_AUDIO_MIXER); | ||
| 616 | + mixNode->audioNodeInfo_.nodeId = TEST_AUDIOMIXER_NODE_ID; | ||
| 617 | + mixNode->SetAudioNodeFormat(format); | ||
| 618 | + | ||
| 619 | + pipeline.nodeMap_[TEST_INPUT_NODE_ID] = inputNode1; | ||
| 620 | + pipeline.nodeMap_[TEST_OUTPUT_NODE_ID] = outputNode; | ||
| 621 | + pipeline.nodeMap_[TEST_AUDIOMIXER_NODE_ID] = mixNode; | ||
| 622 | + | ||
| 623 | + pipeline.connections_[TEST_INPUT_NODE_ID] = TEST_AUDIOMIXER_NODE_ID; | ||
| 624 | + pipeline.connections_[TEST_AUDIOMIXER_NODE_ID] = TEST_OUTPUT_NODE_ID; | ||
| 625 | + pipeline.reverseConnections_[TEST_AUDIOMIXER_NODE_ID] = {TEST_INPUT_NODE_ID}; | ||
| 626 | + pipeline.reverseConnections_[TEST_OUTPUT_NODE_ID] = {TEST_AUDIOMIXER_NODE_ID}; | ||
| 627 | + | ||
| 628 | + pipeline.outputNode_ = outputNode; | ||
| 629 | + pipeline.pipelineState_ = PIPELINE_RUNNING; | ||
| 630 | + | ||
| 631 | + // inputNode1 is already connected to outputNode via mixNode | ||
| 632 | + int32_t ret = pipeline.ConnectNodesForRun(TEST_INPUT_NODE_ID, TEST_AUDIOMIXER_NODE_ID, inputNode1, mixNode); | ||
| 633 | + EXPECT_EQ(ret, ERR_AUDIO_SUITE_UNSUPPORT_CONNECT); | ||
| 634 | +} | ||
| 635 | + | ||
| 636 | +// Test stop pipeline when pipeline is already stopped, expect ERR_ILLEGAL_STATE error. | ||
| 637 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, audioSuitePipelineStopWhenAlreadyStoppedTest, TestSize.Level0) | ||
| 638 | +{ | ||
| 639 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 640 | + AudioSuiteEngine engine(callback); | ||
| 641 | + engine.Init(); | ||
| 642 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 643 | + | ||
| 644 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 645 | + pipeline->Init(); | ||
| 646 | + EXPECT_EQ(pipeline->IsInit(), true); | ||
| 647 | + | ||
| 648 | + // Register the callback to the engine so that TriggerCallback can be correctly triggered. | ||
| 649 | + auto engineSharedPtr = std::shared_ptr<AudioSuiteEngine>(&engine, [](AudioSuiteEngine *) {}); | ||
| 650 | + pipeline->RegisterSendMsgCallback(engineSharedPtr); | ||
| 651 | + | ||
| 652 | + AudioFormat format = {{CH_LAYOUT_STEREO, 2}, SAMPLE_F32LE, SAMPLE_RATE_48000}; | ||
| 653 | + | ||
| 654 | + auto inputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 655 | + inputNode->audioNodeInfo_.nodeId = TEST_INPUT_NODE_ID; | ||
| 656 | + inputNode->SetAudioNodeFormat(format); | ||
| 657 | + | ||
| 658 | + auto outputNode = std::make_shared<AudioOutputNode>(format); | ||
| 659 | + outputNode->audioNodeInfo_.nodeId = TEST_OUTPUT_NODE_ID; | ||
| 660 | + outputNode->SetAudioNodeFormat(format); | ||
| 661 | + | ||
| 662 | + pipeline->nodeMap_[TEST_INPUT_NODE_ID] = inputNode; | ||
| 663 | + pipeline->nodeMap_[TEST_OUTPUT_NODE_ID] = outputNode; | ||
| 664 | + pipeline->outputNode_ = outputNode; | ||
| 665 | + | ||
| 666 | + engine.pipelineMap_[TEST_PIPELINE_ID] = pipeline; | ||
| 667 | + engine.nodeMap_[TEST_INPUT_NODE_ID] = TEST_PIPELINE_ID; | ||
| 668 | + engine.nodeMap_[TEST_OUTPUT_NODE_ID] = TEST_PIPELINE_ID; | ||
| 669 | + | ||
| 670 | + // Pipeline is already in STOPPED state by default | ||
| 671 | + pipeline->pipelineState_ = PIPELINE_STOPPED; | ||
| 672 | + | ||
| 673 | + // Try to stop pipeline when it's already stopped, should trigger ERR_ILLEGAL_STATE | ||
| 674 | + int32_t ret = engine.StopPipeline(100); | ||
| 675 | + EXPECT_EQ(ret, SUCCESS); | ||
| 676 | + | ||
| 677 | + sleep(1); | ||
| 678 | + EXPECT_EQ(callback.stopPipelineResult_, ERR_ILLEGAL_STATE); | ||
| 679 | + | ||
| 680 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 681 | + engine.DeInit(); | ||
| 682 | +} | ||
| 683 | + | ||
| 684 | +// Test SetSpaceRenderPositionParams with invalid parameters. | ||
| 685 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetSpaceRenderPositionParamsInvalidParamTest, TestSize.Level0) | ||
| 686 | +{ | ||
| 687 | + AudioSuiteManager manager; | ||
| 688 | + manager.Init(); | ||
| 689 | + | ||
| 690 | + AudioSpaceRenderPositionParams position; | ||
| 691 | + position.x = 6.0f; | ||
| 692 | + position.y = 6.0f; | ||
| 693 | + position.z = 6.0f; | ||
| 694 | + | ||
| 695 | + int32_t ret = manager.SetSpaceRenderPositionParams(2, position); | ||
| 696 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 697 | + | ||
| 698 | + position.x = -6.0f; | ||
| 699 | + position.y = -6.0f; | ||
| 700 | + position.z = -6.0f; | ||
| 701 | + | ||
| 702 | + ret = manager.SetSpaceRenderPositionParams(2, position); | ||
| 703 | + EXPECT_EQ(ret, ERR_INVALID_PARAM); | ||
| 704 | + | ||
| 705 | + manager.DeInit(); | ||
| 706 | +} | ||
| 707 | + | ||
| 708 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, audioSuitePipelineDisConnectNodesNodeTypeErrorTest, TestSize.Level0) | ||
| 709 | +{ | ||
| 710 | + AudioSuiteManager manager; | ||
| 711 | + manager.Init(); | ||
| 712 | + | ||
| 713 | + uint32_t pipelineId = INVALID_PIPELINE_ID; | ||
| 714 | + manager.CreatePipeline(pipelineId, PIPELINE_EDIT_MODE); | ||
| 715 | + | ||
| 716 | + uint32_t inputNodeId = INVALID_NODE_ID; | ||
| 717 | + uint32_t mixerNodeId = INVALID_NODE_ID; | ||
| 718 | + uint32_t outputNodeId = INVALID_NODE_ID; | ||
| 719 | + | ||
| 720 | + AudioNodeBuilder inputBuilder; | ||
| 721 | + inputBuilder.nodeType = NODE_TYPE_INPUT; | ||
| 722 | + manager.CreateNode(pipelineId, inputBuilder, inputNodeId); | ||
| 723 | + | ||
| 724 | + AudioNodeBuilder mixerBuilder; | ||
| 725 | + mixerBuilder.nodeType = NODE_TYPE_AUDIO_MIXER; | ||
| 726 | + manager.CreateNode(pipelineId, mixerBuilder, mixerNodeId); | ||
| 727 | + | ||
| 728 | + AudioNodeBuilder outputBuilder; | ||
| 729 | + outputBuilder.nodeType = NODE_TYPE_OUTPUT; | ||
| 730 | + manager.CreateNode(pipelineId, outputBuilder, outputNodeId); | ||
| 731 | + | ||
| 732 | + manager.ConnectNodes(inputNodeId, mixerNodeId); | ||
| 733 | + manager.ConnectNodes(mixerNodeId, outputNodeId); | ||
| 734 | + | ||
| 735 | + // Test 1: Try to disconnect OUTPUT node as source (should fail) | ||
| 736 | + int32_t result = manager.DisConnectNodes(outputNodeId, mixerNodeId); | ||
| 737 | + EXPECT_EQ(result, ERR_NOT_SUPPORTED); | ||
| 738 | + | ||
| 739 | + // Test 2: Try to disconnect INPUT node as destination (should fail) | ||
| 740 | + result = manager.DisConnectNodes(mixerNodeId, inputNodeId); | ||
| 741 | + EXPECT_EQ(result, ERR_NOT_SUPPORTED); | ||
| 742 | + | ||
| 743 | + manager.DeInit(); | ||
| 744 | +} | ||
| 745 | + | ||
| 746 | +// Test SetOptions when node does not exist, expect ERR_INVALID_PARAM error report. | ||
| 747 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, audioSuitePipelineSetOptionsErrorReportTest, TestSize.Level0) | ||
| 748 | +{ | ||
| 749 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 750 | + AudioSuiteEngine engine(callback); | ||
| 751 | + engine.Init(); | ||
| 752 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 753 | + | ||
| 754 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 755 | + pipeline->Init(); | ||
| 756 | + EXPECT_EQ(pipeline->IsInit(), true); | ||
| 757 | + | ||
| 758 | + // Register the callback to the engine so that TriggerCallback can be correctly triggered. | ||
| 759 | + auto engineSharedPtr = std::shared_ptr<AudioSuiteEngine>(&engine, [](AudioSuiteEngine *) {}); | ||
| 760 | + pipeline->RegisterSendMsgCallback(engineSharedPtr); | ||
| 761 | + | ||
| 762 | + AudioFormat format = {{CH_LAYOUT_STEREO, 2}, SAMPLE_F32LE, SAMPLE_RATE_48000}; | ||
| 763 | + | ||
| 764 | + auto inputNode = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 765 | + inputNode->audioNodeInfo_.nodeId = TEST_INPUT_NODE_ID; | ||
| 766 | + inputNode->SetAudioNodeFormat(format); | ||
| 767 | + | ||
| 768 | + pipeline->nodeMap_[TEST_INPUT_NODE_ID] = inputNode; | ||
| 769 | + | ||
| 770 | + engine.pipelineMap_[TEST_PIPELINE_ID] = pipeline; | ||
| 771 | + engine.nodeMap_[TEST_INPUT_NODE_ID] = TEST_PIPELINE_ID; | ||
| 772 | + std::string name = "AudioEqualizerFrequencyBandGains"; | ||
| 773 | + std::string value = "0:0:0:0:0:0:0:0:0:0:"; | ||
| 774 | + | ||
| 775 | + // Test SetOptions with node ID 999 that does not exist, should trigger ERR_AUDIO_SUITE_NODE_NOT_EXIST | ||
| 776 | + int32_t ret = engine.SetOptions(TEST_INVALID_NODE_ID, name, value); | ||
| 777 | + EXPECT_EQ(ret, SUCCESS); | ||
| 778 | + | ||
| 779 | + sleep(1); | ||
| 780 | + EXPECT_EQ(callback.setOptionsResult_, ERR_AUDIO_SUITE_NODE_NOT_EXIST); | ||
| 781 | + | ||
| 782 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 783 | + engine.DeInit(); | ||
| 784 | +} | ||
| 785 | + | ||
| 786 | +// Test SetSpaceRenderRotationParams with invalid x, y, z parameters. | ||
| 787 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetSpaceRenderRotationParamsInvalidXYZTest, TestSize.Level0) | ||
| 788 | +{ | ||
| 789 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 790 | + AudioSuiteEngine engine(callback); | ||
| 791 | + engine.Init(); | ||
| 792 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 793 | + | ||
| 794 | + CreateSpaceRenderPipeline(engine); | ||
| 795 | + | ||
| 796 | + AudioSuiteManager manager; | ||
| 797 | + EXPECT_EQ(manager.Init(), 0); | ||
| 798 | + | ||
| 799 | + AudioSpaceRenderRotationParams rotation; | ||
| 800 | + // Test x, y, z upper bound | ||
| 801 | + rotation.x = 6.0f; | ||
| 802 | + rotation.y = 6.0f; | ||
| 803 | + rotation.z = 6.0f; | ||
| 804 | + rotation.surroundTime = 5.0f; | ||
| 805 | + rotation.surroundDirection = AudioSurroundDirection::SPACE_RENDER_CW; | ||
| 806 | + EXPECT_EQ(manager.SetSpaceRenderRotationParams(2, rotation), ERR_INVALID_PARAM); | ||
| 807 | + | ||
| 808 | + // Test x, y, z lower bound | ||
| 809 | + rotation.x = -6.0f; | ||
| 810 | + rotation.y = -6.0f; | ||
| 811 | + rotation.z = -6.0f; | ||
| 812 | + EXPECT_EQ(manager.SetSpaceRenderRotationParams(2, rotation), ERR_INVALID_PARAM); | ||
| 813 | + | ||
| 814 | + manager.DeInit(); | ||
| 815 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 816 | + engine.DeInit(); | ||
| 817 | +} | ||
| 818 | + | ||
| 819 | +// Test SetSpaceRenderRotationParams with invalid surroundTime parameters. | ||
| 820 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetSpaceRenderRotationParamsInvalidSurroundTimeTest, TestSize.Level0) | ||
| 821 | +{ | ||
| 822 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 823 | + AudioSuiteEngine engine(callback); | ||
| 824 | + engine.Init(); | ||
| 825 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 826 | + | ||
| 827 | + CreateSpaceRenderPipeline(engine); | ||
| 828 | + | ||
| 829 | + AudioSuiteManager manager; | ||
| 830 | + EXPECT_EQ(manager.Init(), 0); | ||
| 831 | + | ||
| 832 | + AudioSpaceRenderRotationParams rotation; | ||
| 833 | + rotation.x = 1.0f; | ||
| 834 | + rotation.y = 2.0f; | ||
| 835 | + rotation.z = 3.0f; | ||
| 836 | + rotation.surroundDirection = AudioSurroundDirection::SPACE_RENDER_CW; | ||
| 837 | + | ||
| 838 | + // Test surroundTime lower bound | ||
| 839 | + rotation.surroundTime = 1.0f; | ||
| 840 | + EXPECT_EQ(manager.SetSpaceRenderRotationParams(2, rotation), ERR_INVALID_PARAM); | ||
| 841 | + | ||
| 842 | + // Test surroundTime upper bound | ||
| 843 | + rotation.surroundTime = 41.0f; | ||
| 844 | + EXPECT_EQ(manager.SetSpaceRenderRotationParams(2, rotation), ERR_INVALID_PARAM); | ||
| 845 | + | ||
| 846 | + manager.DeInit(); | ||
| 847 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 848 | + engine.DeInit(); | ||
| 849 | +} | ||
| 850 | + | ||
| 851 | +// Test SetSpaceRenderRotationParams with invalid surroundDirection parameter. | ||
| 852 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, SetSpaceRenderRotationParamsInvalidSurroundDirectionTest, TestSize.Level0) | ||
| 853 | +{ | ||
| 854 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 855 | + AudioSuiteEngine engine(callback); | ||
| 856 | + engine.Init(); | ||
| 857 | + EXPECT_EQ(engine.IsInit(), true); | ||
| 858 | + | ||
| 859 | + CreateSpaceRenderPipeline(engine); | ||
| 860 | + | ||
| 861 | + AudioSuiteManager manager; | ||
| 862 | + EXPECT_EQ(manager.Init(), 0); | ||
| 863 | + | ||
| 864 | + AudioSpaceRenderRotationParams rotation; | ||
| 865 | + rotation.x = 1.0f; | ||
| 866 | + rotation.y = 2.0f; | ||
| 867 | + rotation.z = 3.0f; | ||
| 868 | + rotation.surroundTime = 5.0f; | ||
| 869 | + rotation.surroundDirection = static_cast<AudioSurroundDirection>(2); | ||
| 870 | + EXPECT_EQ(manager.SetSpaceRenderRotationParams(2, rotation), ERR_INVALID_PARAM); | ||
| 871 | + | ||
| 872 | + manager.DeInit(); | ||
| 873 | + engine.pipelineMap_.erase(TEST_PIPELINE_ID); | ||
| 874 | + engine.DeInit(); | ||
| 875 | +} | ||
| 876 | + | ||
| 877 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, startPipelineNoOutputNodeTest, TestSize.Level0) | ||
| 878 | +{ | ||
| 879 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 880 | + AudioSuiteEngine engineManger(callback); | ||
| 881 | + engineManger.Init(); | ||
| 882 | + EXPECT_EQ(engineManger.IsInit(), true); | ||
| 883 | + | ||
| 884 | + std::shared_ptr<AudioSuitePipeline> pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 885 | + pipeline->Init(); | ||
| 886 | + EXPECT_EQ(pipeline->IsInit(), true); | ||
| 887 | + engineManger.pipelineMap_[1] = pipeline; | ||
| 888 | + | ||
| 889 | + int32_t result = engineManger.StartPipeline(1); | ||
| 890 | + EXPECT_EQ(result, SUCCESS); | ||
| 891 | +} | ||
| 892 | + | ||
| 893 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, renderFrameTest_002, TestSize.Level0) | ||
| 894 | +{ | ||
| 895 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 896 | + auto engineMangerPtr = std::make_shared<AudioSuiteEngine>(callback); | ||
| 897 | + engineMangerPtr->Init(); | ||
| 898 | + EXPECT_EQ(engineMangerPtr->IsInit(), true); | ||
| 899 | + | ||
| 900 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 901 | + pipeline->Init(); | ||
| 902 | + uint32_t pipelineId = pipeline->GetPipelineId(); | ||
| 903 | + pipeline->RegisterSendMsgCallback(engineMangerPtr->weak_from_this()); | ||
| 904 | + engineMangerPtr->pipelineMap_[pipelineId] = pipeline; | ||
| 905 | + | ||
| 906 | + uint8_t audioData[10] = {0}; | ||
| 907 | + int32_t writeLen = 0; | ||
| 908 | + bool finished = true; | ||
| 909 | + int32_t result = engineMangerPtr->RenderFrame(pipelineId, audioData, sizeof(audioData), &writeLen, &finished); | ||
| 910 | + | ||
| 911 | + EXPECT_EQ(result, SUCCESS); | ||
| 912 | + | ||
| 913 | + sleep(1); | ||
| 914 | + | ||
| 915 | + EXPECT_EQ(callback.isFinishRenderFrameMap_[pipelineId], true); | ||
| 916 | + EXPECT_EQ(callback.renderFrameResultMap_[pipelineId], ERR_ILLEGAL_STATE); | ||
| 917 | +} | ||
| 918 | + | ||
| 919 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, renderFrameTest_003, TestSize.Level0) | ||
| 920 | +{ | ||
| 921 | + AudioSuiteManagerCallbackTestImpl callback; | ||
| 922 | + auto engineMangerPtr = std::make_shared<AudioSuiteEngine>(callback); | ||
| 923 | + engineMangerPtr->Init(); | ||
| 924 | + auto pipeline = std::make_shared<AudioSuitePipeline>(AudioSuite::PIPELINE_EDIT_MODE); | ||
| 925 | + pipeline->Init(); | ||
| 926 | + uint32_t pipelineId = pipeline->GetPipelineId(); | ||
| 927 | + pipeline->RegisterSendMsgCallback(engineMangerPtr->weak_from_this()); | ||
| 928 | + engineMangerPtr->pipelineMap_[pipelineId] = pipeline; | ||
| 929 | + | ||
| 930 | + AudioNodeBuilder inputBuilder; | ||
| 931 | + inputBuilder.nodeType = NODE_TYPE_INPUT; | ||
| 932 | + AudioFormat inputFormat = {{CH_LAYOUT_STEREO, 2}, SAMPLE_U8, SAMPLE_RATE_48000}; | ||
| 933 | + inputBuilder.nodeFormat = inputFormat; | ||
| 934 | + auto inputNode = pipeline->CreateNodeForType(inputBuilder); | ||
| 935 | + inputNode->Init(); | ||
| 936 | + uint32_t inputNodeId = 1; | ||
| 937 | + inputNode->audioNodeInfo_.nodeId = inputNodeId; | ||
| 938 | + pipeline->nodeMap_[inputNodeId] = inputNode; | ||
| 939 | + | ||
| 940 | + AudioFormat outputFormat = {{CH_LAYOUT_STEREO, 2}, SAMPLE_U8, SAMPLE_RATE_48000}; | ||
| 941 | + auto outputNode = std::make_shared<AudioOutputNode>(outputFormat); | ||
| 942 | + outputNode->Init(); | ||
| 943 | + pipeline->outputNode_ = outputNode; | ||
| 944 | + outputNode->Connect(inputNode); | ||
| 945 | + pipeline->connections_[inputNodeId] = 0; | ||
| 946 | + pipeline->reverseConnections_[0] = {inputNodeId}; | ||
| 947 | + | ||
| 948 | + std::shared_ptr<SuiteInputNodeRequestDataCallBackFinishedTestImpl> requestDataCallback = | ||
| 949 | + std::make_shared<SuiteInputNodeRequestDataCallBackFinishedTestImpl>(); | ||
| 950 | + pipeline->SetRequestDataCallback(inputNodeId, requestDataCallback); | ||
| 951 | + pipeline->pipelineState_ = PIPELINE_RUNNING; | ||
| 952 | + | ||
| 953 | + uint8_t audioData[10000] = {0}; | ||
| 954 | + int32_t writeLen = 0; | ||
| 955 | + bool finished = false; | ||
| 956 | + | ||
| 957 | + int32_t result = engineMangerPtr->RenderFrame(pipelineId, audioData, sizeof(audioData), &writeLen, &finished); | ||
| 958 | + EXPECT_EQ(result, SUCCESS); | ||
| 959 | + sleep(1); | ||
| 960 | + EXPECT_EQ(callback.isFinishRenderFrameMap_[pipelineId], true); | ||
| 961 | + EXPECT_EQ(callback.renderFrameResultMap_[pipelineId], SUCCESS); | ||
| 962 | + EXPECT_EQ(finished, true); | ||
| 963 | + | ||
| 964 | + callback.isFinishRenderFrameMap_[pipelineId] = false; | ||
| 965 | + callback.renderFrameResultMap_[pipelineId] = SUCCESS; | ||
| 966 | + | ||
| 967 | + result = engineMangerPtr->RenderFrame(pipelineId, audioData, sizeof(audioData), &writeLen, &finished); | ||
| 968 | + EXPECT_EQ(result, SUCCESS); | ||
| 969 | + sleep(1); | ||
| 970 | + EXPECT_EQ(callback.isFinishRenderFrameMap_[pipelineId], true); | ||
| 971 | + EXPECT_EQ(callback.renderFrameResultMap_[pipelineId], ERR_NOT_SUPPORTED); | ||
| 972 | +} | ||
| 973 | + | ||
| 974 | +HWTEST_F(AudioSuiteEngineManagerUnitTest, audioSuitePipelineConnectNodesTest_004, TestSize.Level0) | ||
| 975 | +{ | ||
| 976 | + AudioSuitePipeline audioSuitePipeline(PIPELINE_EDIT_MODE); | ||
| 977 | + audioSuitePipeline.Init(); | ||
| 978 | + EXPECT_EQ(audioSuitePipeline.IsInit(), true); | ||
| 979 | + | ||
| 980 | + uint32_t srcNodeId = 23; | ||
| 981 | + uint32_t destNodeId = 24; | ||
| 982 | + | ||
| 983 | + // Test src node is OUTPUT type | ||
| 984 | + audioSuitePipeline.nodeMap_[23] = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_OUTPUT); | ||
| 985 | + audioSuitePipeline.nodeMap_[24] = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_AUDIO_MIXER); | ||
| 986 | + int32_t result = audioSuitePipeline.ConnectNodes(srcNodeId, destNodeId); | ||
| 987 | + EXPECT_EQ(result, SUCCESS); | ||
| 988 | + | ||
| 989 | + // Test dest node is INPUT type | ||
| 990 | + srcNodeId = 25; | ||
| 991 | + destNodeId = 26; | ||
| 992 | + audioSuitePipeline.nodeMap_[25] = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_AUDIO_MIXER); | ||
| 993 | + audioSuitePipeline.nodeMap_[26] = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_INPUT); | ||
| 994 | + result = audioSuitePipeline.ConnectNodes(srcNodeId, destNodeId); | ||
| 995 | + EXPECT_EQ(result, SUCCESS); | ||
| 996 | + | ||
| 997 | + // Test src node is AUDIO_SEPARATION type and dest is not OUTPUT type | ||
| 998 | + srcNodeId = 27; | ||
| 999 | + destNodeId = 28; | ||
| 1000 | + audioSuitePipeline.nodeMap_[27] = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_AUDIO_SEPARATION); | ||
| 1001 | + audioSuitePipeline.nodeMap_[28] = std::make_shared<AudioNodeTestImpl>(NODE_TYPE_AUDIO_MIXER); | ||
| 1002 | + result = audioSuitePipeline.ConnectNodes(srcNodeId, destNodeId); | ||
| 1003 | + EXPECT_EQ(result, SUCCESS); | ||
| 1004 | +} | ||
| 1005 | +} //namespace | ||
Rservices/audio_suite/test/unittest/manager/audio_suite_manager_params_template_test.cpp→services/audio_suite/test/unittest/manager/src/audio_suite_manager_params_template_test.cpp+0-0
文件重命名但无更改。


这个不需要上报。