1fa7767c5Sopenharmony_ci/* 2fa7767c5Sopenharmony_ci * Copyright (c) 2021-2021 Huawei Device Co., Ltd. 3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License. 5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at 6fa7767c5Sopenharmony_ci * 7fa7767c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fa7767c5Sopenharmony_ci * 9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and 13fa7767c5Sopenharmony_ci * limitations under the License. 14fa7767c5Sopenharmony_ci */ 15fa7767c5Sopenharmony_ci 16fa7767c5Sopenharmony_ci#include <gtest/gtest.h> 17fa7767c5Sopenharmony_ci 18fa7767c5Sopenharmony_ci#define private public 19fa7767c5Sopenharmony_ci#define protected public 20fa7767c5Sopenharmony_ci#define UNIT_TEST 1 21fa7767c5Sopenharmony_ci#include "foundation/utils/constants.h" 22fa7767c5Sopenharmony_ci#include "pipeline/core/compatible_check.h" 23fa7767c5Sopenharmony_ci#include "plugin/common/any.h" 24fa7767c5Sopenharmony_ci#include "plugin/common/plugin_audio_tags.h" 25fa7767c5Sopenharmony_ci#include "plugin/common/plugin_meta.h" 26fa7767c5Sopenharmony_ci 27fa7767c5Sopenharmony_ciusing namespace testing::ext; 28fa7767c5Sopenharmony_ci 29fa7767c5Sopenharmony_ciusing namespace std; 30fa7767c5Sopenharmony_ciusing namespace OHOS::Media::Plugin; 31fa7767c5Sopenharmony_ci 32fa7767c5Sopenharmony_cinamespace OHOS::Media::Test { 33fa7767c5Sopenharmony_ciHWTEST(TestApplyCapability, mime_Test, TestSize.Level1) 34fa7767c5Sopenharmony_ci{ 35fa7767c5Sopenharmony_ci Capability wildcard {"*"}; 36fa7767c5Sopenharmony_ci Capability audioWildcard {"audio/*"}; 37fa7767c5Sopenharmony_ci Capability testWildcard {"test/*"}; 38fa7767c5Sopenharmony_ci Capability wrongWildcard {"/audio*"}; 39fa7767c5Sopenharmony_ci Capability wrongCapability {"wrong"}; 40fa7767c5Sopenharmony_ci Capability rawMimeCapability {"audio/raw"}; 41fa7767c5Sopenharmony_ci Capability mpegMimeCapability {"audio/mpeg"}; 42fa7767c5Sopenharmony_ci 43fa7767c5Sopenharmony_ci Capability out; 44fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(audioWildcard, wildcard, out)); 45fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == audioWildcard.mime); 46fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 47fa7767c5Sopenharmony_ci 48fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(wrongWildcard, wildcard, out)); 49fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 50fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 51fa7767c5Sopenharmony_ci 52fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(wrongCapability, wildcard, out)); 53fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 54fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 55fa7767c5Sopenharmony_ci 56fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(wrongCapability, audioWildcard, out)); 57fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 58fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 59fa7767c5Sopenharmony_ci 60fa7767c5Sopenharmony_ci 61fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawMimeCapability, wildcard, out)); 62fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawMimeCapability.mime); 63fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 64fa7767c5Sopenharmony_ci 65fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawMimeCapability, audioWildcard, out)); 66fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawMimeCapability.mime); 67fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 68fa7767c5Sopenharmony_ci 69fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawMimeCapability, testWildcard, out)); 70fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 71fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 72fa7767c5Sopenharmony_ci 73fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawMimeCapability, mpegMimeCapability, out)); 74fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 75fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 76fa7767c5Sopenharmony_ci 77fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawMimeCapability, wrongWildcard, out)); 78fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 79fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 80fa7767c5Sopenharmony_ci} 81fa7767c5Sopenharmony_ci 82fa7767c5Sopenharmony_ciHWTEST(TestMergeCapabilityKeys, SingleType1_Test, TestSize.Level1) 83fa7767c5Sopenharmony_ci{ 84fa7767c5Sopenharmony_ci Capability wildMimeCapability("*"); 85fa7767c5Sopenharmony_ci Capability out; 86fa7767c5Sopenharmony_ci 87fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability (MEDIA_MIME_AUDIO_RAW); 88fa7767c5Sopenharmony_ci rawFixedMimeCapability.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 89fa7767c5Sopenharmony_ci 90fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawFixedMimeCapability, wildMimeCapability, out)); 91fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 92fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 93fa7767c5Sopenharmony_ci 94fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability2 (MEDIA_MIME_AUDIO_MPEG); 95fa7767c5Sopenharmony_ci rawFixedMimeCapability2.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 96fa7767c5Sopenharmony_ci 97fa7767c5Sopenharmony_ci // fix apply with fix 98fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawFixedMimeCapability, rawFixedMimeCapability2, out)); 99fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 100fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 101fa7767c5Sopenharmony_ci 102fa7767c5Sopenharmony_ci // apply failed 103fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability3 (MEDIA_MIME_AUDIO_RAW); 104fa7767c5Sopenharmony_ci rawFixedMimeCapability3.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 4000); 105fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapabilityKeys(rawFixedMimeCapability, rawFixedMimeCapability3, out)); 106fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 107fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 108fa7767c5Sopenharmony_ci 109fa7767c5Sopenharmony_ci Capability rawListMimeCapability {MEDIA_MIME_AUDIO_RAW}; 110fa7767c5Sopenharmony_ci rawListMimeCapability.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {8000, 32000, 48000, 44100}); 111fa7767c5Sopenharmony_ci 112fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawListMimeCapability, wildMimeCapability, out)); 113fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 114fa7767c5Sopenharmony_ci auto disCaps = Plugin::AnyCast<Plugin::DiscreteCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 115fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[0] == 8000); 116fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[1] == 32000); 117fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[2] == 48000); 118fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[3] == 44100); 119fa7767c5Sopenharmony_ci 120fa7767c5Sopenharmony_ci // fix apply with discrete 121fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawFixedMimeCapability, rawListMimeCapability, out)); 122fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 123fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 124fa7767c5Sopenharmony_ci 125fa7767c5Sopenharmony_ci // apply failed 126fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability4 (MEDIA_MIME_AUDIO_RAW); 127fa7767c5Sopenharmony_ci rawFixedMimeCapability4.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 4000); 128fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapabilityKeys(rawFixedMimeCapability4, rawListMimeCapability, out)); 129fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 130fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 131fa7767c5Sopenharmony_ci} 132fa7767c5Sopenharmony_ci 133fa7767c5Sopenharmony_ciHWTEST(TestMergeCapabilityKeys, SingleType2_Test, TestSize.Level1) 134fa7767c5Sopenharmony_ci{ 135fa7767c5Sopenharmony_ci Capability wildMimeCapability("*"); 136fa7767c5Sopenharmony_ci Capability out; 137fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability (MEDIA_MIME_AUDIO_RAW); 138fa7767c5Sopenharmony_ci rawFixedMimeCapability.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 139fa7767c5Sopenharmony_ci Capability rawListMimeCapability {MEDIA_MIME_AUDIO_RAW}; 140fa7767c5Sopenharmony_ci rawListMimeCapability.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {8000, 32000, 48000, 44100}); 141fa7767c5Sopenharmony_ci // discrete apply with discrete 142fa7767c5Sopenharmony_ci Capability rawListMimeCapability2 {MEDIA_MIME_AUDIO_RAW}; 143fa7767c5Sopenharmony_ci rawListMimeCapability2.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 48000, 44100}); 144fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawListMimeCapability2, rawListMimeCapability, out)); 145fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 146fa7767c5Sopenharmony_ci auto tmp1 = Plugin::AnyCast<Plugin::DiscreteCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 147fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp1.size() == 2); 148fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp1[0] == 48000); 149fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp1[1] == 44100); 150fa7767c5Sopenharmony_ci // discrete apply with discrete 151fa7767c5Sopenharmony_ci Capability rawListMimeCapability3 {MEDIA_MIME_AUDIO_RAW}; 152fa7767c5Sopenharmony_ci rawListMimeCapability3.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 44100}); 153fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawListMimeCapability3, rawListMimeCapability, out)); 154fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 155fa7767c5Sopenharmony_ci auto tmp2 = Plugin::AnyCast<Plugin::FixedCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 156fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp2 == 44100); 157fa7767c5Sopenharmony_ci // discrete apply with discrete failed 158fa7767c5Sopenharmony_ci Capability rawListMimeCapability4 {MEDIA_MIME_AUDIO_RAW}; 159fa7767c5Sopenharmony_ci rawListMimeCapability4.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 4100}); 160fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapabilityKeys(rawListMimeCapability4, rawListMimeCapability, out)); 161fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 162fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 163fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability {MEDIA_MIME_AUDIO_RAW}; 164fa7767c5Sopenharmony_ci rawIntervalMimeCapability.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000, 48000); 165fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability, wildMimeCapability, out)); 166fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 167fa7767c5Sopenharmony_ci auto intCaps = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 168fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.first == 8000); 169fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.second == 48000); 170fa7767c5Sopenharmony_ci // inter apply with fix 171fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawFixedMimeCapability, rawIntervalMimeCapability, out)); 172fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 173fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 174fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability, rawFixedMimeCapability, out)); 175fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 176fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 177fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability5 (MEDIA_MIME_AUDIO_RAW); 178fa7767c5Sopenharmony_ci rawFixedMimeCapability5.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 4000); 179fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapabilityKeys(rawFixedMimeCapability5, rawIntervalMimeCapability, out)); 180fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 181fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 182fa7767c5Sopenharmony_ci} 183fa7767c5Sopenharmony_ci 184fa7767c5Sopenharmony_ciHWTEST(TestMergeCapabilityKeys, SingleType3_Test, TestSize.Level1) 185fa7767c5Sopenharmony_ci{ 186fa7767c5Sopenharmony_ci Capability wildMimeCapability("*"); 187fa7767c5Sopenharmony_ci Capability out; 188fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability {MEDIA_MIME_AUDIO_RAW}; 189fa7767c5Sopenharmony_ci rawIntervalMimeCapability.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000, 48000); 190fa7767c5Sopenharmony_ci // inter apply with inter 191fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability2 {MEDIA_MIME_AUDIO_RAW}; 192fa7767c5Sopenharmony_ci rawIntervalMimeCapability2.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 3000, 9000); 193fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability2, rawIntervalMimeCapability, out)); 194fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 195fa7767c5Sopenharmony_ci auto intCaps2 = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 196fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps2.first == 8000); 197fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps2.second == 9000); 198fa7767c5Sopenharmony_ci 199fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability, rawIntervalMimeCapability2, out)); 200fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 201fa7767c5Sopenharmony_ci auto intCaps3 = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 202fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps3.first == 8000); 203fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps3.second == 9000); 204fa7767c5Sopenharmony_ci 205fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability3 {MEDIA_MIME_AUDIO_RAW}; 206fa7767c5Sopenharmony_ci rawIntervalMimeCapability3.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 3000, 4000); 207fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability3, rawIntervalMimeCapability, out)); 208fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 209fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 210fa7767c5Sopenharmony_ci 211fa7767c5Sopenharmony_ci // inter apply with discrete 212fa7767c5Sopenharmony_ci Capability rawListMimeCapability5 {MEDIA_MIME_AUDIO_RAW}; 213fa7767c5Sopenharmony_ci rawListMimeCapability5.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 4100}); 214fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability, rawListMimeCapability5, out)); 215fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 216fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 217fa7767c5Sopenharmony_ci 218fa7767c5Sopenharmony_ci Capability rawListMimeCapability6 {MEDIA_MIME_AUDIO_RAW}; 219fa7767c5Sopenharmony_ci rawListMimeCapability6.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 44100}); 220fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability, rawListMimeCapability6, out)); 221fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 222fa7767c5Sopenharmony_ci auto intCaps4 = Plugin::AnyCast<Plugin::FixedCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 223fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps4 == 44100); 224fa7767c5Sopenharmony_ci 225fa7767c5Sopenharmony_ci Capability rawListMimeCapability7 {MEDIA_MIME_AUDIO_RAW}; 226fa7767c5Sopenharmony_ci rawListMimeCapability7.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 40000, 44100}); 227fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapabilityKeys(rawIntervalMimeCapability, rawListMimeCapability7, out)); 228fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 229fa7767c5Sopenharmony_ci auto intCaps5 = Plugin::AnyCast<Plugin::DiscreteCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 230fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps5.size() == 2); 231fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps5[0] == 40000); 232fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps5[1] == 44100); 233fa7767c5Sopenharmony_ci} 234fa7767c5Sopenharmony_ci 235fa7767c5Sopenharmony_ciHWTEST(TestMergeCapability, SingleType1_Test, TestSize.Level1) 236fa7767c5Sopenharmony_ci{ 237fa7767c5Sopenharmony_ci Capability wildMimeCapability("*"); 238fa7767c5Sopenharmony_ci Capability out; 239fa7767c5Sopenharmony_ci 240fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability (MEDIA_MIME_AUDIO_RAW); 241fa7767c5Sopenharmony_ci rawFixedMimeCapability.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 242fa7767c5Sopenharmony_ci 243fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawFixedMimeCapability, wildMimeCapability, out)); 244fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawFixedMimeCapability.mime); 245fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 246fa7767c5Sopenharmony_ci 247fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability2 (MEDIA_MIME_AUDIO_RAW); 248fa7767c5Sopenharmony_ci rawFixedMimeCapability2.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 249fa7767c5Sopenharmony_ci 250fa7767c5Sopenharmony_ci // fix apply with fix 251fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawFixedMimeCapability, rawFixedMimeCapability2, out)); 252fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawFixedMimeCapability.mime); 253fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 254fa7767c5Sopenharmony_ci 255fa7767c5Sopenharmony_ci // apply failed 256fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability3 (MEDIA_MIME_AUDIO_RAW); 257fa7767c5Sopenharmony_ci rawFixedMimeCapability3.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 4000); 258fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawFixedMimeCapability, rawFixedMimeCapability3, out)); 259fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 260fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 261fa7767c5Sopenharmony_ci 262fa7767c5Sopenharmony_ci Capability rawListMimeCapability {MEDIA_MIME_AUDIO_RAW}; 263fa7767c5Sopenharmony_ci rawListMimeCapability.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {8000, 32000, 48000, 44100}); 264fa7767c5Sopenharmony_ci 265fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawListMimeCapability, wildMimeCapability, out)); 266fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawListMimeCapability.mime); 267fa7767c5Sopenharmony_ci auto disCaps = Plugin::AnyCast<Plugin::DiscreteCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 268fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[0] == 8000); 269fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[1] == 32000); 270fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[2] == 48000); 271fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[3] == 44100); 272fa7767c5Sopenharmony_ci 273fa7767c5Sopenharmony_ci // fix apply with discrete 274fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawFixedMimeCapability, rawListMimeCapability, out)); 275fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawFixedMimeCapability.mime); 276fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 277fa7767c5Sopenharmony_ci 278fa7767c5Sopenharmony_ci // apply failed 279fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability4 (MEDIA_MIME_AUDIO_RAW); 280fa7767c5Sopenharmony_ci rawFixedMimeCapability4.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 4000); 281fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawFixedMimeCapability4, rawListMimeCapability, out)); 282fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 283fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 284fa7767c5Sopenharmony_ci} 285fa7767c5Sopenharmony_ci 286fa7767c5Sopenharmony_ciHWTEST(TestMergeCapability, SingleType2_Test, TestSize.Level1) 287fa7767c5Sopenharmony_ci{ 288fa7767c5Sopenharmony_ci Capability wildMimeCapability("*"); 289fa7767c5Sopenharmony_ci Capability out; 290fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability (MEDIA_MIME_AUDIO_RAW); 291fa7767c5Sopenharmony_ci rawFixedMimeCapability.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 292fa7767c5Sopenharmony_ci Capability rawListMimeCapability {MEDIA_MIME_AUDIO_RAW}; 293fa7767c5Sopenharmony_ci rawListMimeCapability.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {8000, 32000, 48000, 44100}); 294fa7767c5Sopenharmony_ci // discrete apply with discrete 295fa7767c5Sopenharmony_ci Capability rawListMimeCapability2 {MEDIA_MIME_AUDIO_RAW}; 296fa7767c5Sopenharmony_ci rawListMimeCapability2.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 48000, 44100}); 297fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawListMimeCapability2, rawListMimeCapability, out)); 298fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawListMimeCapability2.mime); 299fa7767c5Sopenharmony_ci auto tmp1 = Plugin::AnyCast<Plugin::DiscreteCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 300fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp1.size() == 2); 301fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp1[0] == 48000); 302fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp1[1] == 44100); 303fa7767c5Sopenharmony_ci // discrete apply with discrete 304fa7767c5Sopenharmony_ci Capability rawListMimeCapability3 {MEDIA_MIME_AUDIO_RAW}; 305fa7767c5Sopenharmony_ci rawListMimeCapability3.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 44100}); 306fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawListMimeCapability3, rawListMimeCapability, out)); 307fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawListMimeCapability3.mime); 308fa7767c5Sopenharmony_ci auto tmp2 = Plugin::AnyCast<Plugin::FixedCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 309fa7767c5Sopenharmony_ci ASSERT_TRUE(tmp2 == 44100); 310fa7767c5Sopenharmony_ci // discrete apply with discrete failed 311fa7767c5Sopenharmony_ci Capability rawListMimeCapability4 {MEDIA_MIME_AUDIO_RAW}; 312fa7767c5Sopenharmony_ci rawListMimeCapability4.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 4100}); 313fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawListMimeCapability4, rawListMimeCapability, out)); 314fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 315fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 316fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability {MEDIA_MIME_AUDIO_RAW}; 317fa7767c5Sopenharmony_ci rawIntervalMimeCapability.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000, 48000); 318fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawIntervalMimeCapability, wildMimeCapability, out)); 319fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawIntervalMimeCapability.mime); 320fa7767c5Sopenharmony_ci auto intCaps = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 321fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.first == 8000); 322fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.second == 48000); 323fa7767c5Sopenharmony_ci // inter apply with fix 324fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawFixedMimeCapability, rawIntervalMimeCapability, out)); 325fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawFixedMimeCapability.mime); 326fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 327fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawIntervalMimeCapability, rawFixedMimeCapability, out)); 328fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawIntervalMimeCapability.mime); 329fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 330fa7767c5Sopenharmony_ci Capability rawFixedMimeCapability5 (MEDIA_MIME_AUDIO_RAW); 331fa7767c5Sopenharmony_ci rawFixedMimeCapability5.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 4000); 332fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawFixedMimeCapability5, rawIntervalMimeCapability, out)); 333fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 334fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 335fa7767c5Sopenharmony_ci} 336fa7767c5Sopenharmony_ci 337fa7767c5Sopenharmony_ciHWTEST(TestMergeCapability, SingleType3_Test, TestSize.Level1) 338fa7767c5Sopenharmony_ci{ 339fa7767c5Sopenharmony_ci Capability wildMimeCapability("*"); 340fa7767c5Sopenharmony_ci Capability out; 341fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability {MEDIA_MIME_AUDIO_RAW}; 342fa7767c5Sopenharmony_ci rawIntervalMimeCapability.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000, 48000); 343fa7767c5Sopenharmony_ci // inter apply with inter 344fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability2 {MEDIA_MIME_AUDIO_RAW}; 345fa7767c5Sopenharmony_ci rawIntervalMimeCapability2.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 3000, 9000); 346fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawIntervalMimeCapability2, rawIntervalMimeCapability, out)); 347fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawIntervalMimeCapability2.mime); 348fa7767c5Sopenharmony_ci auto intCaps2 = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 349fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps2.first == 8000); 350fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps2.second == 9000); 351fa7767c5Sopenharmony_ci 352fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawIntervalMimeCapability, rawIntervalMimeCapability2, out)); 353fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawIntervalMimeCapability.mime); 354fa7767c5Sopenharmony_ci auto intCaps3 = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 355fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps3.first == 8000); 356fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps3.second == 9000); 357fa7767c5Sopenharmony_ci 358fa7767c5Sopenharmony_ci Capability rawIntervalMimeCapability3 {MEDIA_MIME_AUDIO_RAW}; 359fa7767c5Sopenharmony_ci rawIntervalMimeCapability3.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 3000, 4000); 360fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawIntervalMimeCapability3, rawIntervalMimeCapability, out)); 361fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 362fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 363fa7767c5Sopenharmony_ci 364fa7767c5Sopenharmony_ci // inter apply with discrete 365fa7767c5Sopenharmony_ci Capability rawListMimeCapability5 {MEDIA_MIME_AUDIO_RAW}; 366fa7767c5Sopenharmony_ci rawListMimeCapability5.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 4100}); 367fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(rawIntervalMimeCapability, rawListMimeCapability5, out)); 368fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 369fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 370fa7767c5Sopenharmony_ci 371fa7767c5Sopenharmony_ci Capability rawListMimeCapability6 {MEDIA_MIME_AUDIO_RAW}; 372fa7767c5Sopenharmony_ci rawListMimeCapability6.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 4000, 44100}); 373fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawIntervalMimeCapability, rawListMimeCapability6, out)); 374fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawIntervalMimeCapability.mime); 375fa7767c5Sopenharmony_ci auto intCaps4 = Plugin::AnyCast<Plugin::FixedCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 376fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps4 == 44100); 377fa7767c5Sopenharmony_ci 378fa7767c5Sopenharmony_ci Capability rawListMimeCapability7 {MEDIA_MIME_AUDIO_RAW}; 379fa7767c5Sopenharmony_ci rawListMimeCapability7.AppendDiscreteKeys<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, {1000, 2000, 40000, 44100}); 380fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(rawIntervalMimeCapability, rawListMimeCapability7, out)); 381fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime == rawIntervalMimeCapability.mime); 382fa7767c5Sopenharmony_ci auto intCaps5 = Plugin::AnyCast<Plugin::DiscreteCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]); 383fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps5.size() == 2); 384fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps5[0] == 40000); 385fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps5[1] == 44100); 386fa7767c5Sopenharmony_ci} 387fa7767c5Sopenharmony_ci 388fa7767c5Sopenharmony_ciHWTEST(TestMergeCapability, ComplexType_Test1, TestSize.Level1) 389fa7767c5Sopenharmony_ci{ 390fa7767c5Sopenharmony_ci Capability wildMimeCapability("*"); 391fa7767c5Sopenharmony_ci Capability out; 392fa7767c5Sopenharmony_ci 393fa7767c5Sopenharmony_ci Capability cap1 (MEDIA_MIME_AUDIO_RAW); 394fa7767c5Sopenharmony_ci cap1.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 395fa7767c5Sopenharmony_ci cap1.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_CHANNELS, 2, 8); 396fa7767c5Sopenharmony_ci cap1.AppendDiscreteKeys<Plugin::AudioSampleFormat>(CapabilityID::AUDIO_SAMPLE_FORMAT, { 397fa7767c5Sopenharmony_ci Plugin::AudioSampleFormat::S64, Plugin::AudioSampleFormat::S64P, Plugin::AudioSampleFormat::U64, 398fa7767c5Sopenharmony_ci Plugin::AudioSampleFormat::U64P, Plugin::AudioSampleFormat::F64, 399fa7767c5Sopenharmony_ci }); 400fa7767c5Sopenharmony_ci 401fa7767c5Sopenharmony_ci Capability cap2(MEDIA_MIME_AUDIO_APE); 402fa7767c5Sopenharmony_ci 403fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeCapability(cap1, cap2, out)); 404fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 405fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 406fa7767c5Sopenharmony_ci 407fa7767c5Sopenharmony_ci Capability cap3(MEDIA_MIME_AUDIO_RAW); 408fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeCapability(cap1, cap3, out)); 409fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 410fa7767c5Sopenharmony_ci auto intCaps = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_CHANNELS]); 411fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.first == 2); 412fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.second == 8); 413fa7767c5Sopenharmony_ci auto disCaps = Plugin::AnyCast<Plugin::DiscreteCapability<Plugin::AudioSampleFormat>>( 414fa7767c5Sopenharmony_ci out.keys[CapabilityID::AUDIO_SAMPLE_FORMAT]); 415fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps.size() == 5); 416fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[0] == Plugin::AudioSampleFormat::S64); 417fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[1] == Plugin::AudioSampleFormat::S64P); 418fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[2] == Plugin::AudioSampleFormat::U64); 419fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[3] == Plugin::AudioSampleFormat::U64P); 420fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[4] == Plugin::AudioSampleFormat::F64); 421fa7767c5Sopenharmony_ci} 422fa7767c5Sopenharmony_ci 423fa7767c5Sopenharmony_ciHWTEST(TestApplyCapabilitySet, ComplexType_Test3, TestSize.Level1) 424fa7767c5Sopenharmony_ci{ 425fa7767c5Sopenharmony_ci Capability out; 426fa7767c5Sopenharmony_ci 427fa7767c5Sopenharmony_ci Capability cap1 (MEDIA_MIME_AUDIO_RAW); 428fa7767c5Sopenharmony_ci cap1.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000); 429fa7767c5Sopenharmony_ci cap1.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_CHANNELS, 2, 8); 430fa7767c5Sopenharmony_ci cap1.AppendDiscreteKeys<Plugin::AudioSampleFormat>(CapabilityID::AUDIO_SAMPLE_FORMAT, { 431fa7767c5Sopenharmony_ci Plugin::AudioSampleFormat::S64, Plugin::AudioSampleFormat::S64P, Plugin::AudioSampleFormat::U64, 432fa7767c5Sopenharmony_ci Plugin::AudioSampleFormat::U64P, Plugin::AudioSampleFormat::F64, 433fa7767c5Sopenharmony_ci }); 434fa7767c5Sopenharmony_ci 435fa7767c5Sopenharmony_ci Capability cap2(MEDIA_MIME_AUDIO_APE); 436fa7767c5Sopenharmony_ci Capability cap3(MEDIA_MIME_AUDIO_RAW); 437fa7767c5Sopenharmony_ci 438fa7767c5Sopenharmony_ci Capability cap4(MEDIA_MIME_AUDIO_RAW); 439fa7767c5Sopenharmony_ci cap4.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000, 96000); 440fa7767c5Sopenharmony_ci cap4.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_CHANNELS, 4); 441fa7767c5Sopenharmony_ci cap4.AppendDiscreteKeys<Plugin::AudioChannelLayout>(CapabilityID::AUDIO_CHANNEL_LAYOUT, { 442fa7767c5Sopenharmony_ci Plugin::AudioChannelLayout::STEREO, Plugin::AudioChannelLayout::SURROUND, 443fa7767c5Sopenharmony_ci Plugin::AudioChannelLayout::CH_5POINT1, Plugin::AudioChannelLayout::CH_7POINT1, 444fa7767c5Sopenharmony_ci }); 445fa7767c5Sopenharmony_ci 446fa7767c5Sopenharmony_ci Capability cap5(MEDIA_MIME_AUDIO_RAW); 447fa7767c5Sopenharmony_ci cap5.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 8000, 96000); 448fa7767c5Sopenharmony_ci cap5.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_CHANNELS, 10); 449fa7767c5Sopenharmony_ci cap5.AppendDiscreteKeys<Plugin::AudioChannelLayout>(CapabilityID::AUDIO_CHANNEL_LAYOUT, { 450fa7767c5Sopenharmony_ci Plugin::AudioChannelLayout::STEREO, Plugin::AudioChannelLayout::SURROUND, 451fa7767c5Sopenharmony_ci Plugin::AudioChannelLayout::CH_5POINT1, Plugin::AudioChannelLayout::CH_7POINT1, 452fa7767c5Sopenharmony_ci }); 453fa7767c5Sopenharmony_ci 454fa7767c5Sopenharmony_ci CapabilitySet capSet1 = {cap2, cap3}; 455fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::ApplyCapabilitySet(cap1, capSet1, out)); 456fa7767c5Sopenharmony_ci ASSERT_TRUE(Plugin::AnyCast<uint32_t>(out.keys[CapabilityID::AUDIO_SAMPLE_RATE]) == 8000); 457fa7767c5Sopenharmony_ci auto intCaps = Plugin::AnyCast<Plugin::IntervalCapability<uint32_t>>(out.keys[CapabilityID::AUDIO_CHANNELS]); 458fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.first == 2); 459fa7767c5Sopenharmony_ci ASSERT_TRUE(intCaps.second == 8); 460fa7767c5Sopenharmony_ci auto disCaps = Plugin::AnyCast<Plugin::DiscreteCapability<Plugin::AudioSampleFormat>>( 461fa7767c5Sopenharmony_ci out.keys[CapabilityID::AUDIO_SAMPLE_FORMAT]); 462fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps.size() == 5); 463fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[0] == Plugin::AudioSampleFormat::S64); 464fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[1] == Plugin::AudioSampleFormat::S64P); 465fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[2] == Plugin::AudioSampleFormat::U64); 466fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[3] == Plugin::AudioSampleFormat::U64P); 467fa7767c5Sopenharmony_ci ASSERT_TRUE(disCaps[4] == Plugin::AudioSampleFormat::F64); 468fa7767c5Sopenharmony_ci 469fa7767c5Sopenharmony_ci CapabilitySet capSet2 = {cap2, cap5}; 470fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::ApplyCapabilitySet(cap1, capSet2, out)); 471fa7767c5Sopenharmony_ci ASSERT_TRUE(out.mime.empty()); 472fa7767c5Sopenharmony_ci ASSERT_TRUE(out.keys.empty()); 473fa7767c5Sopenharmony_ci} 474fa7767c5Sopenharmony_ci 475fa7767c5Sopenharmony_ciHWTEST(TestMetaToCap, MetaToCap_Test, TestSize.Level1) 476fa7767c5Sopenharmony_ci{ 477fa7767c5Sopenharmony_ci Meta meta; 478fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::MIME>(MEDIA_MIME_AUDIO_RAW); 479fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_MPEG_VERSION>(1); 480fa7767c5Sopenharmony_ci meta.Set<Tag::AUDIO_CHANNEL_LAYOUT>(AudioChannelLayout::STEREO); 481fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_CHANNELS>(2); 482fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_SAMPLE_RATE>(48000); 483fa7767c5Sopenharmony_ci auto cap = Pipeline::MetaToCapability(meta); 484fa7767c5Sopenharmony_ci ASSERT_STREQ(MEDIA_MIME_AUDIO_RAW, cap->mime.c_str()); 485fa7767c5Sopenharmony_ci auto mpegVersion = Plugin::AnyCast<uint32_t>(cap->keys[CapabilityID::AUDIO_MPEG_VERSION]); 486fa7767c5Sopenharmony_ci ASSERT_TRUE(mpegVersion == 1); 487fa7767c5Sopenharmony_ci 488fa7767c5Sopenharmony_ci auto channelLayout = Plugin::AnyCast<AudioChannelLayout>(cap->keys[CapabilityID::AUDIO_CHANNEL_LAYOUT]); 489fa7767c5Sopenharmony_ci ASSERT_TRUE(channelLayout == AudioChannelLayout::STEREO); 490fa7767c5Sopenharmony_ci 491fa7767c5Sopenharmony_ci auto channels = Plugin::AnyCast<uint32_t>(cap->keys[CapabilityID::AUDIO_CHANNELS]); 492fa7767c5Sopenharmony_ci ASSERT_TRUE(channels == 2); 493fa7767c5Sopenharmony_ci 494fa7767c5Sopenharmony_ci auto sampleRate = Plugin::AnyCast<uint32_t>(cap->keys[CapabilityID::AUDIO_SAMPLE_RATE]); 495fa7767c5Sopenharmony_ci ASSERT_TRUE(sampleRate == 48000); 496fa7767c5Sopenharmony_ci} 497fa7767c5Sopenharmony_ci 498fa7767c5Sopenharmony_ciHWTEST(TestMergeMetaWithCapability, MergeMetaWithEmptyKeyCapability_Test, TestSize.Level1) 499fa7767c5Sopenharmony_ci{ 500fa7767c5Sopenharmony_ci Meta meta; 501fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::MIME>(MEDIA_MIME_AUDIO_MPEG); 502fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_MPEG_VERSION>(1); 503fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_CHANNEL_LAYOUT>(AudioChannelLayout::STEREO); 504fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_CHANNELS>(2); 505fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_SAMPLE_RATE>(48000); 506fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_SAMPLE_FORMAT>(AudioSampleFormat::U16P); 507fa7767c5Sopenharmony_ci 508fa7767c5Sopenharmony_ci Capability cap0(MEDIA_MIME_AUDIO_RAW); 509fa7767c5Sopenharmony_ci Meta out1; 510fa7767c5Sopenharmony_ci std::string outMime1; 511fa7767c5Sopenharmony_ci uint32_t outMpegVersion1 = 0; 512fa7767c5Sopenharmony_ci AudioChannelLayout outAudioChannelLayout1; 513fa7767c5Sopenharmony_ci uint32_t outChannels1 = 0; 514fa7767c5Sopenharmony_ci uint32_t outSampleRate1 = 0; 515fa7767c5Sopenharmony_ci AudioSampleFormat outSampleFormat1 = AudioSampleFormat::U8; 516fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeMetaWithCapability(meta, cap0, out1)); 517fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::MIME>(outMime1)); 518fa7767c5Sopenharmony_ci ASSERT_STREQ(outMime1.c_str(), MEDIA_MIME_AUDIO_RAW); 519fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_MPEG_VERSION>(outMpegVersion1)); 520fa7767c5Sopenharmony_ci ASSERT_TRUE(outMpegVersion1 == 1); 521fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_CHANNEL_LAYOUT>(outAudioChannelLayout1)); 522fa7767c5Sopenharmony_ci ASSERT_TRUE(outAudioChannelLayout1 == AudioChannelLayout::STEREO); 523fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_CHANNELS>(outChannels1)); 524fa7767c5Sopenharmony_ci ASSERT_TRUE(outChannels1 == 2); 525fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_SAMPLE_RATE>(outSampleRate1)); 526fa7767c5Sopenharmony_ci ASSERT_TRUE(outSampleRate1 == 48000); 527fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_SAMPLE_FORMAT>(outSampleFormat1)); 528fa7767c5Sopenharmony_ci ASSERT_TRUE(outSampleFormat1 == AudioSampleFormat::U16P); 529fa7767c5Sopenharmony_ci} 530fa7767c5Sopenharmony_ci 531fa7767c5Sopenharmony_ciHWTEST(TestMergeMetaWithCapability, Merge_meta_contains_meta_ony_key_capability_Test, TestSize.Level1) 532fa7767c5Sopenharmony_ci{ 533fa7767c5Sopenharmony_ci Meta meta; 534fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::MIME>(MEDIA_MIME_AUDIO_MPEG); 535fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_MPEG_VERSION>(1); 536fa7767c5Sopenharmony_ci meta.Set<Tag::AUDIO_CHANNEL_LAYOUT>(AudioChannelLayout::STEREO); 537fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_CHANNELS>(2); 538fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_SAMPLE_RATE>(48000); 539fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::MEDIA_BITRATE>(128000); 540fa7767c5Sopenharmony_ci 541fa7767c5Sopenharmony_ci Capability cap0(MEDIA_MIME_AUDIO_RAW); 542fa7767c5Sopenharmony_ci cap0.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_MPEG_VERSION, 1); 543fa7767c5Sopenharmony_ci cap0.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_SAMPLE_RATE, 48000); 544fa7767c5Sopenharmony_ci cap0.AppendDiscreteKeys<AudioChannelLayout>(CapabilityID::AUDIO_CHANNEL_LAYOUT, 545fa7767c5Sopenharmony_ci {AudioChannelLayout::STEREO, AudioChannelLayout::SURROUND}); 546fa7767c5Sopenharmony_ci cap0.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_CHANNELS, 1, 8); 547fa7767c5Sopenharmony_ci cap0.AppendDiscreteKeys<AudioSampleFormat>(CapabilityID::AUDIO_SAMPLE_FORMAT, 548fa7767c5Sopenharmony_ci {AudioSampleFormat::U16P, AudioSampleFormat::U8}); 549fa7767c5Sopenharmony_ci cap0.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_MPEG_LAYER, 3, 7); 550fa7767c5Sopenharmony_ci 551fa7767c5Sopenharmony_ci Meta out1; 552fa7767c5Sopenharmony_ci std::string outMime1; 553fa7767c5Sopenharmony_ci uint32_t outMpegVersion1 = 0; 554fa7767c5Sopenharmony_ci AudioChannelLayout outAudioChannelLayout1; 555fa7767c5Sopenharmony_ci uint32_t outChannels1 = 0; 556fa7767c5Sopenharmony_ci uint32_t outSampleRate1 = 0; 557fa7767c5Sopenharmony_ci AudioSampleFormat outSampleFormat1 = AudioSampleFormat::U8; 558fa7767c5Sopenharmony_ci uint32_t outMpegLayer = 0; 559fa7767c5Sopenharmony_ci int64_t outBitRate = 0; 560fa7767c5Sopenharmony_ci 561fa7767c5Sopenharmony_ci ASSERT_TRUE(Pipeline::MergeMetaWithCapability(meta, cap0, out1)); 562fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::MIME>(outMime1)); 563fa7767c5Sopenharmony_ci ASSERT_STREQ(outMime1.c_str(), MEDIA_MIME_AUDIO_RAW); 564fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_MPEG_VERSION>(outMpegVersion1)); 565fa7767c5Sopenharmony_ci ASSERT_TRUE(outMpegVersion1 == 1); 566fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_CHANNEL_LAYOUT>(outAudioChannelLayout1)); 567fa7767c5Sopenharmony_ci ASSERT_TRUE(outAudioChannelLayout1 == AudioChannelLayout::STEREO); 568fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_CHANNELS>(outChannels1)); 569fa7767c5Sopenharmony_ci ASSERT_TRUE(outChannels1 == 2); 570fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_SAMPLE_RATE>(outSampleRate1)); 571fa7767c5Sopenharmony_ci ASSERT_TRUE(outSampleRate1 == 48000); 572fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_SAMPLE_FORMAT>(outSampleFormat1)); 573fa7767c5Sopenharmony_ci ASSERT_TRUE(outSampleFormat1 == AudioSampleFormat::U16P); 574fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::AUDIO_MPEG_LAYER>(outMpegLayer)); 575fa7767c5Sopenharmony_ci ASSERT_TRUE(outMpegLayer == 3); 576fa7767c5Sopenharmony_ci ASSERT_TRUE(out1.Get<Tag::MEDIA_BITRATE>(outBitRate)); 577fa7767c5Sopenharmony_ci ASSERT_TRUE(outBitRate == 128000); 578fa7767c5Sopenharmony_ci} 579fa7767c5Sopenharmony_ci 580fa7767c5Sopenharmony_ciHWTEST(TestMergeMetaWithCapability, Merge_meta_with_capability_failed_Test, TestSize.Level1) 581fa7767c5Sopenharmony_ci{ 582fa7767c5Sopenharmony_ci Meta meta; 583fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::MIME>(MEDIA_MIME_AUDIO_MPEG); 584fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_MPEG_VERSION>(1); 585fa7767c5Sopenharmony_ci meta.Set<Tag::AUDIO_CHANNEL_LAYOUT>(AudioChannelLayout::STEREO); 586fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_CHANNELS>(2); 587fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::AUDIO_SAMPLE_RATE>(48000); 588fa7767c5Sopenharmony_ci meta.Set<Plugin::Tag::MEDIA_BITRATE>(128000); 589fa7767c5Sopenharmony_ci 590fa7767c5Sopenharmony_ci Capability cap0(MEDIA_MIME_AUDIO_RAW); 591fa7767c5Sopenharmony_ci cap0.AppendFixedKey<uint32_t>(CapabilityID::AUDIO_MPEG_VERSION, 2); 592fa7767c5Sopenharmony_ci Meta out1; 593fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeMetaWithCapability(meta, cap0, out1)); 594fa7767c5Sopenharmony_ci 595fa7767c5Sopenharmony_ci Capability cap1(MEDIA_MIME_AUDIO_RAW); 596fa7767c5Sopenharmony_ci cap1.AppendDiscreteKeys<AudioChannelLayout>(CapabilityID::AUDIO_CHANNEL_LAYOUT, 597fa7767c5Sopenharmony_ci {AudioChannelLayout::CH_5POINT1, AudioChannelLayout::SURROUND}); 598fa7767c5Sopenharmony_ci Meta out2; 599fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeMetaWithCapability(meta, cap1, out2)); 600fa7767c5Sopenharmony_ci 601fa7767c5Sopenharmony_ci 602fa7767c5Sopenharmony_ci Capability cap2(MEDIA_MIME_AUDIO_RAW); 603fa7767c5Sopenharmony_ci cap2.AppendIntervalKey<uint32_t>(CapabilityID::AUDIO_CHANNELS, 3, 8); 604fa7767c5Sopenharmony_ci Meta out3; 605fa7767c5Sopenharmony_ci ASSERT_FALSE(Pipeline::MergeMetaWithCapability(meta, cap2, out3)); 606fa7767c5Sopenharmony_ci} 607fa7767c5Sopenharmony_ci}