1 /* 2 * Copyright (c) 2023-2023 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 #include "gtest/gtest.h" 17 #include "plugin/common/plugin_meta.h" 18 #include "pipeline/filters/common/plugin_utils.h" 19 #include "plugin/common/plugin_tags.h" 20 #include "plugin/common/plugin_types.h" 21 #include "plugin/plugins/codec_adapter/codec_utils.h" 22 #include "pipeline/filters/common/plugin_settings.h" 23 #include "pipeline/core/filter_type.h" 24 #include "plugin/convert/ffmpeg_convert.h" 25 #include "hdf_base.h" 26 #include "OMX_Core.h" 27 28 using namespace testing::ext; 29 using namespace OHOS::Media::Plugin; 30 using namespace OHOS::Media::Plugin::CodecAdapter; 31 using namespace OHOS::Media::Pipeline; 32 33 namespace OHOS { 34 namespace Media { 35 namespace Test { 36 HWTEST(TestMeta, find_unavailable_plugins, TestSize.Level1) 37 { 38 Meta meta; 39 std::string artist("abcd"); 40 meta.Set<Tag::MEDIA_TITLE>(artist); 41 auto cap = MetaToCapability(meta); 42 auto plugins = FindAvailablePlugins(*cap, Plugin::PluginType::AUDIO_DECODER); 43 ASSERT_TRUE(plugins.size() == 0); 44 } 45 46 HWTEST(TestMeta, set_para_to_sink_plugins, TestSize.Level1) 47 { 48 std::shared_ptr<Ffmpeg::ResamplePara> resamplePara = std::make_shared<Ffmpeg::ResamplePara>(); 49 resamplePara->channels = 2; 50 resamplePara->sampleRate = 96000; 51 resamplePara->bitsPerSample = 16; 52 resamplePara->channelLayout = 3; 53 resamplePara->srcFfFmt = AVSampleFormat::AV_SAMPLE_FMT_FLTP; 54 resamplePara->destSamplesPerFrame = 2048; 55 resamplePara->destFmt = AVSampleFormat::AV_SAMPLE_FMT_S16; 56 std::shared_ptr<Ffmpeg::Resample> resample = std::make_shared<Ffmpeg::Resample>(); 57 auto src = new uint8_t; 58 size_t srcLength = 16384; 59 auto des = new uint8_t; 60 size_t desLength = 16384; 61 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK); 62 ASSERT_TRUE(resample->Convert(src, srcLength, des, desLength) == Status::OK); 63 resamplePara->destFmt = AVSampleFormat::AV_SAMPLE_FMT_U8P; 64 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK); 65 ASSERT_TRUE(resample->Convert(src, srcLength, des, desLength) == Status::OK); 66 67 resamplePara->bitsPerSample = 8; 68 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK); 69 ASSERT_FALSE(resample->Convert(src, srcLength, des, desLength) == Status::OK); 70 71 resamplePara->bitsPerSample = 24; 72 ASSERT_TRUE(resample->Init(*resamplePara) == Status::OK); 73 ASSERT_FALSE(resample->Convert(src, srcLength, des, desLength) == Status::OK); 74 } 75 76 HWTEST(TestMeta, hdf_status_to_string, TestSize.Level1) 77 { 78 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_SUCCESS) != "null"); 79 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_FAILURE) != "null"); 80 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_NOT_SUPPORT) != "null"); 81 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_INVALID_PARAM) != "null"); 82 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_INVALID_OBJECT) != "null"); 83 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_MALLOC_FAIL) != "null"); 84 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_TIMEOUT) != "null"); 85 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_THREAD_CREATE_FAIL) != "null"); 86 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_QUEUE_FULL) != "null"); 87 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_DEVICE_BUSY) != "null"); 88 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_IO) != "null"); 89 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_BAD_FD) != "null"); 90 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_NOPERM) != "null"); 91 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_BSP_ERR_OP) != "null"); 92 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_ERR_BSP_PLT_API_ERR) != "null"); 93 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_PAL_ERR_DEV_CREATE) != "null"); 94 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_PAL_ERR_INNER) != "null"); 95 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NO_MEMORY) != "null"); 96 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NO_DEVICE) != "null"); 97 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NO_DEVICE_SERVICE) != "null"); 98 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_DEV_INIT_FAIL) != "null"); 99 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_PUBLISH_FAIL) != "null"); 100 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_ATTACHDEV_FAIL) != "null"); 101 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NODATA) != "null"); 102 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_NORANGE) != "null"); 103 ASSERT_TRUE(HdfStatus2String(HDF_STATUS::HDF_DEV_ERR_OP) != "null"); 104 ASSERT_TRUE(HdfStatus2String(100) == "null"); 105 } 106 107 HWTEST(TestMeta, omx_error_type_to_string, TestSize.Level1) 108 { 109 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorNone) == "OMX_ErrorNone"); 110 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorInsufficientResources) == "OMX_ErrorInsufficientResources"); 111 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorUndefined) == "OMX_ErrorUndefined"); 112 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorInvalidComponentName) == "OMX_ErrorInvalidComponentName"); 113 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorComponentNotFound) == "OMX_ErrorComponentNotFound"); 114 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorInvalidComponent) == "OMX_ErrorInvalidComponent"); 115 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorBadParameter) == "OMX_ErrorBadParameter"); 116 ASSERT_TRUE(OmxErrorType2String(OMX_ErrorNotImplemented) == "OMX_ErrorNotImplemented"); 117 ASSERT_TRUE(OmxErrorType2String(100) == "OMX_ErrorNone"); 118 } 119 120 HWTEST(TestMeta, transfor_hdi_ret_value_to_status, TestSize.Level1) 121 { 122 ASSERT_TRUE(TransHdiRetVal2Status(HDF_SUCCESS) == Status::OK); 123 ASSERT_TRUE(TransHdiRetVal2Status(HDF_FAILURE) == Status::ERROR_UNKNOWN); 124 ASSERT_TRUE(TransHdiRetVal2Status(HDF_ERR_NOT_SUPPORT) == Status::ERROR_INVALID_OPERATION); 125 ASSERT_TRUE(TransHdiRetVal2Status(HDF_ERR_INVALID_PARAM) == Status::ERROR_INVALID_PARAMETER); 126 ASSERT_TRUE(TransHdiRetVal2Status(HDF_ERR_MALLOC_FAIL) == Status::ERROR_NO_MEMORY); 127 ASSERT_TRUE(TransHdiRetVal2Status(100) == Status::ERROR_UNKNOWN); 128 } 129 130 HWTEST(TestMeta, translate_to_omx_flag_set, TestSize.Level1) 131 { 132 ASSERT_TRUE(Translate2omxFlagSet(BUFFER_FLAG_EOS) == OMX_BUFFERFLAG_EOS); 133 ASSERT_TRUE(Translate2omxFlagSet(100) == 0); 134 ASSERT_TRUE(Translate2PluginFlagSet(OMX_BUFFERFLAG_EOS) == BUFFER_FLAG_EOS); 135 ASSERT_TRUE(Translate2PluginFlagSet(100) == 0); 136 } 137 138 HWTEST(TestMeta, coding_type_hst_to_hdi, TestSize.Level1) 139 { 140 ASSERT_TRUE(CodingTypeHstToHdi(MEDIA_MIME_VIDEO_H264) == OMX_VIDEO_CodingAVC); 141 ASSERT_TRUE(CodingTypeHstToHdi(MEDIA_MIME_VIDEO_H265) 142 == static_cast<OMX_VIDEO_CODINGTYPE>(CODEC_OMX_VIDEO_CodingHEVC)); 143 ASSERT_TRUE(CodingTypeHstToHdi("NULL") == OMX_VIDEO_CodingUnused); 144 } 145 146 HWTEST(TestMeta, format_hst_to_omx, TestSize.Level1) 147 { 148 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::NV12) == OMX_COLOR_FormatYUV420SemiPlanar); 149 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::NV21) == OMX_COLOR_FormatYUV420SemiPlanar); 150 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::BGRA) == OMX_COLOR_Format32bitBGRA8888); 151 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::RGBA) == OMX_COLOR_Format32bitARGB8888); 152 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::YUV420P) == OMX_COLOR_FormatYUV420Planar); 153 ASSERT_TRUE(FormatHstToOmx(VideoPixelFormat::RGB24) == OMX_COLOR_FormatUnused); 154 } 155 156 HWTEST(TestMeta, omx_state_to_string, TestSize.Level1) 157 { 158 ASSERT_TRUE(OmxStateToString(OMX_StateInvalid) == "OMX_StateInvalid"); 159 ASSERT_TRUE(OmxStateToString(OMX_StateLoaded) == "OMX_StateLoaded"); 160 ASSERT_TRUE(OmxStateToString(OMX_StateLoaded) == "OMX_StateLoaded"); 161 ASSERT_TRUE(OmxStateToString(OMX_StateIdle) == "OMX_StateIdle"); 162 ASSERT_TRUE(OmxStateToString(OMX_StateExecuting) == "OMX_StateExecuting"); 163 ASSERT_TRUE(OmxStateToString(OMX_StatePause) == "OMX_StatePause"); 164 ASSERT_TRUE(OmxStateToString(OMX_StateWaitForResources) == "OMX_StateWaitForResources"); 165 ASSERT_TRUE(OmxStateToString(OMX_StateKhronosExtensions) == "OMX_StateKhronosExtensions"); 166 ASSERT_TRUE(OmxStateToString(OMX_StateVendorStartUnused) == "OMX_StateVendorStartUnused"); 167 ASSERT_TRUE(OmxStateToString(OMX_StateMax) == "OMX_StateMax"); 168 } 169 170 HWTEST(TestMeta, get_omx_buffer_type, TestSize.Level1) 171 { 172 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::SHARE_MEMORY), true) 173 == CODEC_BUFFER_TYPE_AVSHARE_MEM_FD); 174 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::SURFACE_BUFFER), true) 175 == CODEC_BUFFER_TYPE_DYNAMIC_HANDLE); 176 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::SURFACE_BUFFER), false) 177 == CODEC_BUFFER_TYPE_HANDLE); 178 ASSERT_TRUE(GetOmxBufferType(static_cast<const Plugin::MemoryType>(MemoryType::VIRTUAL_ADDR), true) 179 == CODEC_BUFFER_TYPE_INVALID); 180 } 181 182 HWTEST(TestMeta, codec_buffer_pool, TestSize.Level1) 183 { 184 PluginParaAllowedMap map = PluginParameterTable::FindAllowedParameterMap(FilterType::MEDIA_SOURCE); 185 ASSERT_TRUE(map.size() == 0); 186 map = PluginParameterTable::FindAllowedParameterMap(FilterType::CAPTURE_SOURCE); 187 ASSERT_TRUE(map.size() == 0); 188 map = PluginParameterTable::FindAllowedParameterMap(FilterType::DEMUXER); 189 ASSERT_TRUE(map.size() == 0); 190 map = PluginParameterTable::FindAllowedParameterMap(FilterType::MUXER); 191 ASSERT_TRUE(map.size() > 0); 192 map = PluginParameterTable::FindAllowedParameterMap(FilterType::AUDIO_DECODER); 193 ASSERT_TRUE(map.size() > 0); 194 map = PluginParameterTable::FindAllowedParameterMap(FilterType::VIDEO_DECODER); 195 ASSERT_TRUE(map.size() > 0); 196 map = PluginParameterTable::FindAllowedParameterMap(FilterType::AUDIO_ENCODER); 197 ASSERT_TRUE(map.size() > 0); 198 map = PluginParameterTable::FindAllowedParameterMap(FilterType::VIDEO_ENCODER); 199 ASSERT_TRUE(map.size() > 0); 200 map = PluginParameterTable::FindAllowedParameterMap(FilterType::AUDIO_SINK); 201 ASSERT_TRUE(map.size() > 0); 202 map = PluginParameterTable::FindAllowedParameterMap(FilterType::VIDEO_SINK); 203 ASSERT_TRUE(map.size() > 0); 204 map = PluginParameterTable::FindAllowedParameterMap(FilterType::OUTPUT_SINK); 205 ASSERT_TRUE(map.size() == 0); 206 map = PluginParameterTable::FindAllowedParameterMap(FilterType::NONE); 207 ASSERT_TRUE(map.size() == 0); 208 } 209 210 HWTEST(TestMeta, assign_parameter_if_match, TestSize.Level1) 211 { 212 uint32_t value = 0; 213 uint32_t ret; 214 ASSERT_FALSE(AssignParameterIfMatch(Tag::SECTION_REGULAR_START, ret, value)); 215 ASSERT_FALSE(AssignParameterIfMatch(Tag::MIME, value, 0)); 216 ASSERT_TRUE(AssignParameterIfMatch(Tag::TRACK_ID, ret, value)); 217 } 218 219 HWTEST(TestMeta, translate_plugin_status, TestSize.Level1) 220 { 221 auto status = TranslatePluginStatus(Plugin::Status::END_OF_STREAM); 222 ASSERT_TRUE(status == ErrorCode::END_OF_STREAM); 223 status = TranslatePluginStatus(Plugin::Status::OK); 224 ASSERT_TRUE(status == ErrorCode::SUCCESS); 225 status = TranslatePluginStatus(Plugin::Status::NO_ERROR); 226 ASSERT_TRUE(status == ErrorCode::SUCCESS); 227 status = TranslatePluginStatus(Plugin::Status::ERROR_UNKNOWN); 228 ASSERT_TRUE(status == ErrorCode::ERROR_UNKNOWN); 229 status = TranslatePluginStatus(Plugin::Status::ERROR_CLIENT); 230 ASSERT_TRUE(status == ErrorCode::ERROR_UNKNOWN); 231 } 232 233 HWTEST(TestMeta, translate_into_parameter, TestSize.Level1) 234 { 235 Tag tag = Tag::SECTION_REGULAR_START; 236 auto ret = TranslateIntoParameter(-1, tag); 237 ASSERT_FALSE(ret); 238 ASSERT_TRUE(tag == Tag::SECTION_REGULAR_START); 239 ret = TranslateIntoParameter(static_cast<const int>(Tag::SECTION_REGULAR_START), tag); 240 ASSERT_TRUE(ret); 241 ASSERT_TRUE(tag == Tag::SECTION_REGULAR_START); 242 } 243 244 HWTEST(TestMeta, capability_to_string, TestSize.Level1) 245 { 246 std::shared_ptr<Capability> capability = std::make_shared<Capability>(); 247 std::string string = Capability2String(*capability); 248 ASSERT_TRUE(string == "Capability{mime:}"); 249 capability->SetMime("video/avc"); 250 capability->AppendFixedKey(Capability::Key::MEDIA_BITRATE, nullptr); 251 capability->AppendFixedKey(Capability::Key::VIDEO_BIT_STREAM_FORMAT, nullptr); 252 string = Capability2String(*capability); 253 ASSERT_TRUE(string == "Capability{mime:video/avc, "); 254 } 255 256 HWTEST(TestMeta, find_allowed_parameter_map, TestSize.Level1) 257 { 258 FilterType filterType = FilterType::NONE; 259 PluginParaAllowedMap map = PluginParameterTable::FindAllowedParameterMap(filterType); 260 ASSERT_TRUE(map.size() == 0); 261 filterType = FilterType::AUDIO_DECODER; 262 map = PluginParameterTable::FindAllowedParameterMap(filterType); 263 ASSERT_TRUE(map.size() != 0); 264 } 265 } // namespace Test 266 } // namespace Media 267 } // namespace OHOS 268