1 /*
2 * Copyright (C) 2022 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 "media_errors.h"
18 #include "avcodec_list_unit_test.h"
19
20 using namespace std;
21 using namespace OHOS;
22 using namespace OHOS::Media;
23 using namespace testing::ext;
24
25 namespace OHOS {
26 namespace Media {
SetUpTestCase(void)27 void AVCodecListUnitTest::SetUpTestCase(void) {}
28
TearDownTestCase(void)29 void AVCodecListUnitTest::TearDownTestCase(void) {}
30
SetUp(void)31 void AVCodecListUnitTest::SetUp(void)
32 {
33 avCodecList_ = AVCodecMockFactory::CreateAVCodecList();
34 ASSERT_NE(nullptr, avCodecList_);
35 enum_ = AVCodecMockFactory::CreateEnum();
36 ASSERT_NE(nullptr, enum_);
37 codecMimeKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_CODEC_MIME);
38 bitrateKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_BITRATE);
39 widthKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_WIDTH);
40 heightKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_HEIGHT);
41 pixelFormatKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_PIXEL_FORMAT);
42 frameRateKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_FRAME_RATE);
43 channelCountKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_CHANNEL_COUNT);
44 sampleRateKey_ = enum_->GetMediaDescriptionKey(MediaDescriptionKeyMock::MOCK_MD_KEY_SAMPLE_RATE);
45 }
46
TearDown(void)47 void AVCodecListUnitTest::TearDown(void)
48 {
49 }
50
51 /**
52 * @tc.name: AVCdecList_FindVideoDecoder_0100
53 * @tc.desc: AVCdecList FindVideoDecoder
54 * @tc.type: FUNC
55 * @tc.require:
56 */
57 HWTEST_F(AVCodecListUnitTest, AVCdecList_FindVideoDecoder_0100, TestSize.Level0)
58 {
59 std::string codecName;
60 std::shared_ptr<FormatMock> format = AVCodecMockFactory::CreateFormat();
61 ASSERT_NE(nullptr, format);
62 (void)format->PutStringValue(codecMimeKey_, enum_->GetCodecMimeType(CodecMimeTypeMock::VIDEO_AVC));
63 (void)format->PutIntValue(bitrateKey_, MAX_VIDEO_BITRATE);
64 (void)format->PutIntValue(widthKey_, DEFAULT_WIDTH);
65 (void)format->PutIntValue(heightKey_, DEFAULT_HEIGHT);
66 (void)format->PutIntValue(pixelFormatKey_, enum_->GetVideoPixelFormat(VideoPixelFormatMock::MOCK_NV12));
67 (void)format->PutIntValue(frameRateKey_, MAX_FRAME_RATE_HARD);
68 codecName = avCodecList_->FindVideoDecoder(format);
69 }
70
71 /**
72 * @tc.name: AVCdecList_FindVideoEncoder_0100
73 * @tc.desc: AVCdecList FindVideoEncoder
74 * @tc.type: FUNC
75 * @tc.require:
76 */
77 HWTEST_F(AVCodecListUnitTest, AVCdecList_FindVideoEncoder_0100, TestSize.Level0)
78 {
79 std::string codecName;
80 std::shared_ptr<FormatMock> format = AVCodecMockFactory::CreateFormat();
81 (void)format->PutStringValue(codecMimeKey_, enum_->GetCodecMimeType(CodecMimeTypeMock::VIDEO_MPEG4));
82 (void)format->PutIntValue(bitrateKey_, MAX_VIDEO_BITRATE);
83 (void)format->PutIntValue(widthKey_, DEFAULT_WIDTH);
84 (void)format->PutIntValue(heightKey_, DEFAULT_HEIGHT);
85 (void)format->PutIntValue(pixelFormatKey_, enum_->GetVideoPixelFormat(VideoPixelFormatMock::MOCK_NV21));
86 (void)format->PutIntValue(frameRateKey_, MAX_FRAME_RATE_SOFT);
87 codecName = avCodecList_->FindVideoEncoder(format);
88 EXPECT_NE("", codecName);
89 }
90
91 /**
92 * @tc.name: AVCdecList_FindAudioDecoder_0100
93 * @tc.desc: AVCdecList FindAudioDecoder
94 * @tc.type: FUNC
95 * @tc.require:
96 */
97 HWTEST_F(AVCodecListUnitTest, AVCdecList_FindAudioDecoder_0100, TestSize.Level0)
98 {
99 std::string codecName;
100 std::shared_ptr<FormatMock> format = AVCodecMockFactory::CreateFormat();
101 (void)format->PutStringValue(codecMimeKey_, enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_MPEG));
102 (void)format->PutIntValue(bitrateKey_, MAX_AUDIO_BITRATE);
103 (void)format->PutIntValue(channelCountKey_, MAX_CHANNEL_COUNT);
104 (void)format->PutIntValue(sampleRateKey_, DEFAULT_SAMPLE_RATE);
105 codecName = avCodecList_->FindAudioDecoder(format);
106 EXPECT_EQ("avdec_mp3", codecName);
107 }
108
109 /**
110 * @tc.name: AVCdecList_FindAudioEncoder_0100
111 * @tc.desc: AVCdecList FindAudioEncoder
112 * @tc.type: FUNC
113 * @tc.require:
114 */
115 HWTEST_F(AVCodecListUnitTest, AVCdecList_FindAudioEncoder_0100, TestSize.Level0)
116 {
117 std::string codecName;
118 std::shared_ptr<FormatMock> format = AVCodecMockFactory::CreateFormat();
119 (void)format->PutStringValue(codecMimeKey_, enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_AAC));
120 (void)format->PutIntValue(bitrateKey_, MAX_AUDIO_BITRATE);
121 (void)format->PutIntValue(channelCountKey_, MAX_CHANNEL_COUNT);
122 (void)format->PutIntValue(sampleRateKey_, DEFAULT_SAMPLE_RATE);
123 codecName = avCodecList_->FindAudioEncoder(format);
124 EXPECT_EQ("avenc_aac", codecName);
125 }
126
CheckVideoCapsArray(const std::vector<std::shared_ptr<VideoCapsMock>> & videoCapsArray) const127 void AVCodecListUnitTest::CheckVideoCapsArray(const std::vector<std::shared_ptr<VideoCapsMock>> &videoCapsArray) const
128 {
129 for (auto iter = videoCapsArray.begin(); iter != videoCapsArray.end(); iter++) {
130 std::shared_ptr<VideoCapsMock> pVideoCaps = *iter;
131 if (pVideoCaps == nullptr) {
132 cout << "pVideoCaps is nullptr" << endl;
133 break;
134 }
135 CheckVideoCaps(pVideoCaps);
136 }
137 }
138
CheckVideoCaps(const std::shared_ptr<VideoCapsMock> & videoCaps) const139 void AVCodecListUnitTest::CheckVideoCaps(const std::shared_ptr<VideoCapsMock> &videoCaps) const
140 {
141 std::shared_ptr<AVCodecInfoMock> videoCodecCaps;
142 videoCodecCaps = videoCaps->GetCodecInfo();
143 std::string codecName = videoCodecCaps->GetName();
144 cout << "codecName is : " << codecName << endl;
145 if (codecName.compare("avdec_h264") == 0) {
146 CheckAVDecH264(videoCaps);
147 } else if (codecName.compare("avdec_h263") == 0) {
148 CheckAVDecH263(videoCaps);
149 } else if (codecName.compare("avdec_mpeg2video") == 0) {
150 CheckAVDecMpeg2Video(videoCaps);
151 } else if (codecName.compare("avdec_mpeg4") == 0) {
152 CheckAVDecMpeg4(videoCaps);
153 } else if (codecName.compare("avenc_mpeg4") == 0) {
154 CheckAVEncMpeg4(videoCaps);
155 }
156 }
157
CheckAVDecH264(const std::shared_ptr<VideoCapsMock> & videoCaps) const158 void AVCodecListUnitTest::CheckAVDecH264(const std::shared_ptr<VideoCapsMock> &videoCaps) const
159 {
160 std::shared_ptr<AVCodecInfoMock> videoCodecCaps = videoCaps->GetCodecInfo();
161 EXPECT_EQ(AVCODEC_TYPE_MOCK_VIDEO_DECODER, videoCodecCaps->GetType());
162 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::VIDEO_AVC), videoCodecCaps->GetMimeType());
163 EXPECT_EQ(0, videoCodecCaps->IsHardwareAccelerated());
164 EXPECT_EQ(1, videoCodecCaps->IsSoftwareOnly());
165 EXPECT_EQ(0, videoCodecCaps->IsVendor());
166 EXPECT_EQ(1, videoCaps->GetSupportedBitrate().minVal);
167 EXPECT_EQ(MAX_VIDEO_BITRATE, videoCaps->GetSupportedBitrate().maxVal);
168 EXPECT_EQ(0, videoCaps->GetSupportedWidthAlignment());
169 EXPECT_EQ(MIN_WIDTH, videoCaps->GetSupportedWidth().minVal);
170 EXPECT_EQ(MAX_WIDTH, videoCaps->GetSupportedWidth().maxVal);
171 EXPECT_EQ(MIN_HEIGHT, videoCaps->GetSupportedHeight().minVal);
172 EXPECT_EQ(MAX_HEIGHT, videoCaps->GetSupportedHeight().maxVal);
173 EXPECT_EQ(1, videoCaps->GetSupportedFrameRate().minVal);
174 EXPECT_EQ(MAX_FRAME_RATE_SOFT, videoCaps->GetSupportedFrameRate().maxVal);
175 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().minVal);
176 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().maxVal);
177 EXPECT_EQ(0, videoCaps->GetSupportedQuality().minVal);
178 EXPECT_EQ(0, videoCaps->GetSupportedQuality().maxVal);
179 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().minVal);
180 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().maxVal);
181 EXPECT_EQ(2, videoCaps->GetSupportedFormats().size()); // 2: supported formats count
182 EXPECT_EQ(3, videoCaps->GetSupportedProfiles().size()); // 3: supported profile count
183 EXPECT_EQ(0, videoCaps->GetSupportedBitrateMode().size());
184 EXPECT_EQ(0, videoCaps->GetSupportedLevels().size());
185 EXPECT_EQ(false, videoCaps->IsSupportDynamicIframe());
186 EXPECT_EQ(true, videoCaps->IsSizeSupported(videoCaps->GetSupportedWidth().minVal,
187 videoCaps->GetSupportedHeight().maxVal));
188 }
189
CheckAVDecH263(const std::shared_ptr<VideoCapsMock> & videoCaps) const190 void AVCodecListUnitTest::CheckAVDecH263(const std::shared_ptr<VideoCapsMock> &videoCaps) const
191 {
192 std::shared_ptr<AVCodecInfoMock> videoCodecCaps = videoCaps->GetCodecInfo();
193 EXPECT_EQ(AVCODEC_TYPE_MOCK_VIDEO_DECODER, videoCodecCaps->GetType());
194 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::VIDEO_H263), videoCodecCaps->GetMimeType());
195 EXPECT_EQ(0, videoCodecCaps->IsHardwareAccelerated());
196 EXPECT_EQ(1, videoCodecCaps->IsSoftwareOnly());
197 EXPECT_EQ(0, videoCodecCaps->IsVendor());
198 EXPECT_EQ(1, videoCaps->GetSupportedBitrate().minVal);
199 EXPECT_EQ(MAX_VIDEO_BITRATE, videoCaps->GetSupportedBitrate().maxVal);
200 EXPECT_EQ(0, videoCaps->GetSupportedWidthAlignment());
201 EXPECT_EQ(0, videoCaps->GetSupportedHeightAlignment());
202 EXPECT_EQ(MIN_WIDTH, videoCaps->GetSupportedWidth().minVal);
203 EXPECT_EQ(MAX_WIDTH, videoCaps->GetSupportedWidth().maxVal);
204 EXPECT_EQ(MIN_HEIGHT, videoCaps->GetSupportedHeight().minVal);
205 EXPECT_EQ(MAX_HEIGHT, videoCaps->GetSupportedHeight().maxVal);
206 EXPECT_EQ(1, videoCaps->GetSupportedFrameRate().minVal);
207 EXPECT_EQ(MAX_FRAME_RATE_SOFT, videoCaps->GetSupportedFrameRate().maxVal);
208 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().minVal);
209 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().maxVal);
210 EXPECT_EQ(0, videoCaps->GetSupportedQuality().minVal);
211 EXPECT_EQ(0, videoCaps->GetSupportedQuality().maxVal);
212 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().minVal);
213 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().maxVal);
214 EXPECT_EQ(2, videoCaps->GetSupportedFormats().size()); // 2: supported formats count
215 EXPECT_EQ(1, videoCaps->GetSupportedProfiles().size());
216 EXPECT_EQ(0, videoCaps->GetSupportedBitrateMode().size());
217 EXPECT_EQ(0, videoCaps->GetSupportedLevels().size());
218 EXPECT_EQ(false, videoCaps->IsSupportDynamicIframe());
219 EXPECT_EQ(false, videoCaps->IsSizeSupported(videoCaps->GetSupportedWidth().minVal - 1,
220 videoCaps->GetSupportedHeight().maxVal));
221 }
222
CheckAVDecMpeg2Video(const std::shared_ptr<VideoCapsMock> & videoCaps) const223 void AVCodecListUnitTest::CheckAVDecMpeg2Video(const std::shared_ptr<VideoCapsMock> &videoCaps) const
224 {
225 std::shared_ptr<AVCodecInfoMock> videoCodecCaps = videoCaps->GetCodecInfo();
226 EXPECT_EQ(AVCODEC_TYPE_MOCK_VIDEO_DECODER, videoCodecCaps->GetType());
227 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::VIDEO_MPEG2), videoCodecCaps->GetMimeType());
228 EXPECT_EQ(0, videoCodecCaps->IsHardwareAccelerated());
229 EXPECT_EQ(1, videoCodecCaps->IsSoftwareOnly());
230 EXPECT_EQ(0, videoCodecCaps->IsVendor());
231 EXPECT_EQ(1, videoCaps->GetSupportedBitrate().minVal);
232 EXPECT_EQ(MAX_VIDEO_BITRATE, videoCaps->GetSupportedBitrate().maxVal);
233 EXPECT_EQ(0, videoCaps->GetSupportedWidthAlignment());
234 EXPECT_EQ(0, videoCaps->GetSupportedHeightAlignment());
235 EXPECT_EQ(MIN_WIDTH, videoCaps->GetSupportedWidth().minVal);
236 EXPECT_EQ(MAX_WIDTH, videoCaps->GetSupportedWidth().maxVal);
237 EXPECT_EQ(MIN_HEIGHT, videoCaps->GetSupportedHeight().minVal);
238 EXPECT_EQ(MAX_HEIGHT, videoCaps->GetSupportedHeight().maxVal);
239 EXPECT_EQ(1, videoCaps->GetSupportedFrameRate().minVal);
240 EXPECT_EQ(MAX_FRAME_RATE_SOFT, videoCaps->GetSupportedFrameRate().maxVal);
241 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().minVal);
242 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().maxVal);
243 EXPECT_EQ(0, videoCaps->GetSupportedQuality().minVal);
244 EXPECT_EQ(0, videoCaps->GetSupportedQuality().maxVal);
245 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().minVal);
246 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().maxVal);
247 EXPECT_EQ(2, videoCaps->GetSupportedFormats().size()); // 2: supported formats count
248 EXPECT_EQ(2, videoCaps->GetSupportedProfiles().size()); // 2: supported profile count
249 EXPECT_EQ(0, videoCaps->GetSupportedBitrateMode().size());
250 EXPECT_EQ(0, videoCaps->GetSupportedLevels().size());
251 EXPECT_EQ(false, videoCaps->IsSupportDynamicIframe());
252 EXPECT_EQ(0, videoCaps->IsSizeAndRateSupported(videoCaps->GetSupportedWidth().minVal,
253 videoCaps->GetSupportedHeight().maxVal, videoCaps->GetSupportedFrameRate().maxVal));
254 EXPECT_EQ(false, videoCaps->IsSizeAndRateSupported(videoCaps->GetSupportedWidth().minVal-1,
255 videoCaps->GetSupportedHeight().maxVal + 1, videoCaps->GetSupportedFrameRate().maxVal));
256 }
257
CheckAVDecMpeg4(const std::shared_ptr<VideoCapsMock> & videoCaps) const258 void AVCodecListUnitTest::CheckAVDecMpeg4(const std::shared_ptr<VideoCapsMock> &videoCaps) const
259 {
260 std::shared_ptr<AVCodecInfoMock> videoCodecCaps = videoCaps->GetCodecInfo();
261 EXPECT_EQ(AVCODEC_TYPE_MOCK_VIDEO_DECODER, videoCodecCaps->GetType());
262 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::VIDEO_MPEG4), videoCodecCaps->GetMimeType());
263 EXPECT_EQ(0, videoCodecCaps->IsHardwareAccelerated());
264 EXPECT_EQ(1, videoCodecCaps->IsSoftwareOnly());
265 EXPECT_EQ(0, videoCodecCaps->IsVendor());
266 EXPECT_EQ(1, videoCaps->GetSupportedBitrate().minVal);
267 EXPECT_EQ(MAX_VIDEO_BITRATE, videoCaps->GetSupportedBitrate().maxVal);
268 EXPECT_EQ(0, videoCaps->GetSupportedWidthAlignment());
269 EXPECT_EQ(0, videoCaps->GetSupportedHeightAlignment());
270 EXPECT_EQ(MIN_WIDTH, videoCaps->GetSupportedWidth().minVal);
271 EXPECT_EQ(MAX_WIDTH, videoCaps->GetSupportedWidth().maxVal);
272 EXPECT_EQ(MIN_HEIGHT, videoCaps->GetSupportedHeight().minVal);
273 EXPECT_EQ(MAX_HEIGHT, videoCaps->GetSupportedHeight().maxVal);
274 EXPECT_EQ(1, videoCaps->GetSupportedFrameRate().minVal);
275 EXPECT_EQ(MAX_FRAME_RATE_SOFT, videoCaps->GetSupportedFrameRate().maxVal);
276 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().minVal);
277 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().maxVal);
278 EXPECT_EQ(0, videoCaps->GetSupportedQuality().minVal);
279 EXPECT_EQ(0, videoCaps->GetSupportedQuality().maxVal);
280 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().minVal);
281 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().maxVal);
282 EXPECT_EQ(2, videoCaps->GetSupportedFormats().size()); // 2: supported formats count
283 EXPECT_EQ(2, videoCaps->GetSupportedProfiles().size()); // 2: supported profile count
284 EXPECT_EQ(0, videoCaps->GetSupportedBitrateMode().size());
285 EXPECT_EQ(0, videoCaps->GetSupportedLevels().size());
286 EXPECT_EQ(false, videoCaps->IsSupportDynamicIframe());
287 EXPECT_EQ(false, videoCaps->IsSizeAndRateSupported(videoCaps->GetSupportedWidth().minVal,
288 videoCaps->GetSupportedHeight().maxVal, videoCaps->GetSupportedFrameRate().maxVal + 1));
289 }
290
CheckAVEncMpeg4(const std::shared_ptr<VideoCapsMock> & videoCaps) const291 void AVCodecListUnitTest::CheckAVEncMpeg4(const std::shared_ptr<VideoCapsMock> &videoCaps) const
292 {
293 std::shared_ptr<AVCodecInfoMock> videoCodecCaps = videoCaps->GetCodecInfo();
294 EXPECT_EQ(AVCODEC_TYPE_MOCK_VIDEO_ENCODER, videoCodecCaps->GetType());
295 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::VIDEO_MPEG4), videoCodecCaps->GetMimeType());
296 EXPECT_EQ(0, videoCodecCaps->IsHardwareAccelerated());
297 EXPECT_EQ(1, videoCodecCaps->IsSoftwareOnly());
298 EXPECT_EQ(0, videoCodecCaps->IsVendor());
299 EXPECT_EQ(1, videoCaps->GetSupportedBitrate().minVal);
300 EXPECT_EQ(MAX_VIDEO_BITRATE, videoCaps->GetSupportedBitrate().maxVal);
301 EXPECT_EQ(0, videoCaps->GetSupportedWidthAlignment());
302 EXPECT_EQ(0, videoCaps->GetSupportedHeightAlignment());
303 EXPECT_EQ(MIN_WIDTH, videoCaps->GetSupportedWidth().minVal);
304 EXPECT_EQ(DEFAULT_WIDTH, videoCaps->GetSupportedWidth().maxVal);
305 EXPECT_EQ(MIN_HEIGHT, videoCaps->GetSupportedHeight().minVal);
306 EXPECT_EQ(DEFAULT_HEIGHT, videoCaps->GetSupportedHeight().maxVal);
307 EXPECT_EQ(1, videoCaps->GetSupportedFrameRate().minVal);
308 EXPECT_EQ(MAX_FRAME_RATE_SOFT, videoCaps->GetSupportedFrameRate().maxVal);
309 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().minVal);
310 EXPECT_EQ(0, videoCaps->GetSupportedEncodeQuality().maxVal);
311 EXPECT_EQ(0, videoCaps->GetSupportedQuality().minVal);
312 EXPECT_EQ(0, videoCaps->GetSupportedQuality().maxVal);
313 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().minVal);
314 EXPECT_EQ(0, videoCaps->GetSupportedComplexity().maxVal);
315 EXPECT_EQ(2, videoCaps->GetSupportedFormats().size()); // 2: supported formats count
316 EXPECT_EQ(2, videoCaps->GetSupportedProfiles().size()); // 2: supported profile count
317 EXPECT_EQ(2, videoCaps->GetSupportedBitrateMode().size()); // 2: supported bitretemode count
318 EXPECT_EQ(0, videoCaps->GetSupportedLevels().size());
319 EXPECT_EQ(false, videoCaps->IsSupportDynamicIframe());
320 }
321
CheckAudioCapsArray(const std::vector<std::shared_ptr<AudioCapsMock>> & audioCapsArray) const322 void AVCodecListUnitTest::CheckAudioCapsArray(const std::vector<std::shared_ptr<AudioCapsMock>> &audioCapsArray) const
323 {
324 for (auto iter = audioCapsArray.begin(); iter != audioCapsArray.end(); iter++) {
325 std::shared_ptr<AudioCapsMock> pAudioCaps = *iter;
326 if (pAudioCaps == nullptr) {
327 cout << "pAudioCaps is nullptr" << endl;
328 break;
329 }
330 CheckAudioCaps(pAudioCaps);
331 }
332 }
333
CheckAudioCaps(const std::shared_ptr<AudioCapsMock> & audioCaps) const334 void AVCodecListUnitTest::CheckAudioCaps(const std::shared_ptr<AudioCapsMock> &audioCaps) const
335 {
336 std::shared_ptr<AVCodecInfoMock> audioCodecCaps;
337 audioCodecCaps = audioCaps->GetCodecInfo();
338 std::string codecName = audioCodecCaps->GetName();
339 if (codecName.compare("avdec_mp3") == 0) {
340 CheckAVDecMP3(audioCaps);
341 } else if (codecName.compare("avdec_aac") == 0) {
342 CheckAVDecAAC(audioCaps);
343 } else if (codecName.compare("avdec_vorbis") == 0) {
344 CheckAVDecVorbis(audioCaps);
345 } else if (codecName.compare("avdec_flac") == 0) {
346 CheckAVDecFlac(audioCaps);
347 } else if (codecName.compare("avdec_opus") == 0) {
348 CheckAVDecOpus(audioCaps);
349 } else if (codecName.compare("avenc_aac") == 0) {
350 CheckAVEncAAC(audioCaps);
351 } else if (codecName.compare("avenc_opus") == 0) {
352 CheckAVEncOpus(audioCaps);
353 }
354 }
355
CheckAVDecMP3(const std::shared_ptr<AudioCapsMock> & audioCaps) const356 void AVCodecListUnitTest::CheckAVDecMP3(const std::shared_ptr<AudioCapsMock> &audioCaps) const
357 {
358 std::shared_ptr<AVCodecInfoMock> audioCodecCaps = audioCaps->GetCodecInfo();
359 EXPECT_EQ(AVCODEC_TYPE_MOCK_AUDIO_DECODER, audioCodecCaps->GetType());
360 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_MPEG), audioCodecCaps->GetMimeType());
361 EXPECT_EQ(0, audioCodecCaps->IsHardwareAccelerated());
362 EXPECT_EQ(1, audioCodecCaps->IsSoftwareOnly());
363 EXPECT_EQ(0, audioCodecCaps->IsVendor());
364 EXPECT_EQ(1, audioCaps->GetSupportedBitrate().minVal);
365 EXPECT_EQ(MAX_AUDIO_BITRATE, audioCaps->GetSupportedBitrate().maxVal);
366 EXPECT_EQ(1, audioCaps->GetSupportedChannel().minVal);
367 EXPECT_EQ(MAX_CHANNEL_COUNT, audioCaps->GetSupportedChannel().maxVal);
368 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().minVal);
369 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().maxVal);
370 EXPECT_EQ(1, audioCaps->GetSupportedFormats().size());
371 EXPECT_EQ(12, audioCaps->GetSupportedSampleRates().size()); // 12: supported samplerate count
372 EXPECT_EQ(0, audioCaps->GetSupportedProfiles().size());
373 EXPECT_EQ(0, audioCaps->GetSupportedLevels().size());
374 }
375
CheckAVDecAAC(const std::shared_ptr<AudioCapsMock> & audioCaps) const376 void AVCodecListUnitTest::CheckAVDecAAC(const std::shared_ptr<AudioCapsMock> &audioCaps) const
377 {
378 std::shared_ptr<AVCodecInfoMock> audioCodecCaps = audioCaps->GetCodecInfo();
379 EXPECT_EQ(AVCODEC_TYPE_MOCK_AUDIO_DECODER, audioCodecCaps->GetType());
380 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_AAC), audioCodecCaps->GetMimeType());
381 EXPECT_EQ(0, audioCodecCaps->IsHardwareAccelerated());
382 EXPECT_EQ(1, audioCodecCaps->IsSoftwareOnly());
383 EXPECT_EQ(0, audioCodecCaps->IsVendor());
384 EXPECT_EQ(1, audioCaps->GetSupportedBitrate().minVal);
385 EXPECT_EQ(MAX_AUDIO_BITRATE, audioCaps->GetSupportedBitrate().maxVal);
386 EXPECT_EQ(1, audioCaps->GetSupportedChannel().minVal);
387 EXPECT_EQ(MAX_CHANNEL_COUNT, audioCaps->GetSupportedChannel().maxVal);
388 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().minVal);
389 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().maxVal);
390 EXPECT_EQ(1, audioCaps->GetSupportedFormats().size());
391 EXPECT_EQ(12, audioCaps->GetSupportedSampleRates().size()); // 12: supported samplerate count
392 EXPECT_EQ(1, audioCaps->GetSupportedProfiles().size());
393 EXPECT_EQ(0, audioCaps->GetSupportedLevels().size());
394 }
395
CheckAVDecVorbis(const std::shared_ptr<AudioCapsMock> & audioCaps) const396 void AVCodecListUnitTest::CheckAVDecVorbis(const std::shared_ptr<AudioCapsMock> &audioCaps) const
397 {
398 std::shared_ptr<AVCodecInfoMock> audioCodecCaps = audioCaps->GetCodecInfo();
399 EXPECT_EQ(AVCODEC_TYPE_MOCK_AUDIO_DECODER, audioCodecCaps->GetType());
400 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_VORBIS), audioCodecCaps->GetMimeType());
401 EXPECT_EQ(0, audioCodecCaps->IsHardwareAccelerated());
402 EXPECT_EQ(1, audioCodecCaps->IsSoftwareOnly());
403 EXPECT_EQ(0, audioCodecCaps->IsVendor());
404 EXPECT_EQ(1, audioCaps->GetSupportedBitrate().minVal);
405 EXPECT_EQ(MAX_AUDIO_BITRATE, audioCaps->GetSupportedBitrate().maxVal);
406 EXPECT_EQ(1, audioCaps->GetSupportedChannel().minVal);
407 EXPECT_EQ(MAX_CHANNEL_COUNT_VORBIS, audioCaps->GetSupportedChannel().maxVal);
408 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().minVal);
409 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().maxVal);
410 EXPECT_EQ(1, audioCaps->GetSupportedFormats().size());
411 EXPECT_EQ(14, audioCaps->GetSupportedSampleRates().size()); // 14: supported samplerate count
412 EXPECT_EQ(0, audioCaps->GetSupportedProfiles().size());
413 EXPECT_EQ(0, audioCaps->GetSupportedLevels().size());
414 }
415
CheckAVDecFlac(const std::shared_ptr<AudioCapsMock> & audioCaps) const416 void AVCodecListUnitTest::CheckAVDecFlac(const std::shared_ptr<AudioCapsMock> &audioCaps) const
417 {
418 std::shared_ptr<AVCodecInfoMock> audioCodecCaps = audioCaps->GetCodecInfo();
419 EXPECT_EQ(AVCODEC_TYPE_MOCK_AUDIO_DECODER, audioCodecCaps->GetType());
420 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_FLAC), audioCodecCaps->GetMimeType());
421 EXPECT_EQ(0, audioCodecCaps->IsHardwareAccelerated());
422 EXPECT_EQ(1, audioCodecCaps->IsSoftwareOnly());
423 EXPECT_EQ(0, audioCodecCaps->IsVendor());
424 EXPECT_EQ(1, audioCaps->GetSupportedBitrate().minVal);
425 EXPECT_EQ(MAX_AUDIO_BITRATE, audioCaps->GetSupportedBitrate().maxVal);
426 EXPECT_EQ(1, audioCaps->GetSupportedChannel().minVal);
427 EXPECT_EQ(MAX_CHANNEL_COUNT, audioCaps->GetSupportedChannel().maxVal);
428 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().minVal);
429 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().maxVal);
430 EXPECT_EQ(1, audioCaps->GetSupportedFormats().size());
431 EXPECT_EQ(12, audioCaps->GetSupportedSampleRates().size()); // 12: supported samplerate count
432 EXPECT_EQ(0, audioCaps->GetSupportedProfiles().size());
433 EXPECT_EQ(0, audioCaps->GetSupportedLevels().size());
434 }
435
CheckAVDecOpus(const std::shared_ptr<AudioCapsMock> & audioCaps) const436 void AVCodecListUnitTest::CheckAVDecOpus(const std::shared_ptr<AudioCapsMock> &audioCaps) const
437 {
438 std::shared_ptr<AVCodecInfoMock> audioCodecCaps = audioCaps->GetCodecInfo();
439 EXPECT_EQ(AVCODEC_TYPE_MOCK_AUDIO_DECODER, audioCodecCaps->GetType());
440 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_OPUS), audioCodecCaps->GetMimeType());
441 EXPECT_EQ(0, audioCodecCaps->IsHardwareAccelerated());
442 EXPECT_EQ(1, audioCodecCaps->IsSoftwareOnly());
443 EXPECT_EQ(0, audioCodecCaps->IsVendor());
444 EXPECT_EQ(1, audioCaps->GetSupportedBitrate().minVal);
445 EXPECT_EQ(MAX_AUDIO_BITRATE, audioCaps->GetSupportedBitrate().maxVal);
446 EXPECT_EQ(1, audioCaps->GetSupportedChannel().minVal);
447 EXPECT_EQ(MAX_CHANNEL_COUNT, audioCaps->GetSupportedChannel().maxVal);
448 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().minVal);
449 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().maxVal);
450 EXPECT_EQ(1, audioCaps->GetSupportedFormats().size());
451 EXPECT_EQ(1, audioCaps->GetSupportedSampleRates().size());
452 EXPECT_EQ(0, audioCaps->GetSupportedProfiles().size());
453 EXPECT_EQ(0, audioCaps->GetSupportedLevels().size());
454 }
455
CheckAVEncAAC(const std::shared_ptr<AudioCapsMock> & audioCaps) const456 void AVCodecListUnitTest::CheckAVEncAAC(const std::shared_ptr<AudioCapsMock> &audioCaps) const
457 {
458 std::shared_ptr<AVCodecInfoMock> audioCodecCaps = audioCaps->GetCodecInfo();
459 EXPECT_EQ(AVCODEC_TYPE_MOCK_AUDIO_ENCODER, audioCodecCaps->GetType());
460 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_AAC), audioCodecCaps->GetMimeType());
461 EXPECT_EQ(0, audioCodecCaps->IsHardwareAccelerated());
462 EXPECT_EQ(1, audioCodecCaps->IsSoftwareOnly());
463 EXPECT_EQ(0, audioCodecCaps->IsVendor());
464 EXPECT_EQ(8000, audioCaps->GetSupportedBitrate().minVal); // 8000: supported min bitrate
465 EXPECT_EQ(MAX_AUDIO_BITRATE, audioCaps->GetSupportedBitrate().maxVal);
466 EXPECT_EQ(1, audioCaps->GetSupportedChannel().minVal);
467 EXPECT_EQ(MAX_CHANNEL_COUNT, audioCaps->GetSupportedChannel().maxVal);
468 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().minVal);
469 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().maxVal);
470 EXPECT_EQ(1, audioCaps->GetSupportedFormats().size());
471 EXPECT_EQ(11, audioCaps->GetSupportedSampleRates().size()); // 11: supported samplerate count
472 EXPECT_EQ(0, audioCaps->GetSupportedProfiles().size());
473 EXPECT_EQ(0, audioCaps->GetSupportedLevels().size());
474 }
475
CheckAVEncOpus(const std::shared_ptr<AudioCapsMock> & audioCaps) const476 void AVCodecListUnitTest::CheckAVEncOpus(const std::shared_ptr<AudioCapsMock> &audioCaps) const
477 {
478 std::shared_ptr<AVCodecInfoMock> audioCodecCaps = audioCaps->GetCodecInfo();
479 EXPECT_EQ(AVCODEC_TYPE_MOCK_AUDIO_ENCODER, audioCodecCaps->GetType());
480 EXPECT_EQ(enum_->GetCodecMimeType(CodecMimeTypeMock::AUDIO_OPUS), audioCodecCaps->GetMimeType());
481 EXPECT_EQ(0, audioCodecCaps->IsHardwareAccelerated());
482 EXPECT_EQ(1, audioCodecCaps->IsSoftwareOnly());
483 EXPECT_EQ(0, audioCodecCaps->IsVendor());
484 EXPECT_EQ(1, audioCaps->GetSupportedBitrate().minVal);
485 EXPECT_EQ(MAX_AUDIO_BITRATE, audioCaps->GetSupportedBitrate().maxVal);
486 EXPECT_EQ(1, audioCaps->GetSupportedChannel().minVal);
487 EXPECT_EQ(MAX_CHANNEL_COUNT, audioCaps->GetSupportedChannel().maxVal);
488 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().minVal);
489 EXPECT_EQ(0, audioCaps->GetSupportedComplexity().maxVal);
490 EXPECT_EQ(1, audioCaps->GetSupportedFormats().size());
491 EXPECT_EQ(1, audioCaps->GetSupportedSampleRates().size());
492 EXPECT_EQ(0, audioCaps->GetSupportedProfiles().size());
493 EXPECT_EQ(0, audioCaps->GetSupportedLevels().size());
494 }
495
496 /**
497 * @tc.name: AVCdecList_GetVideoDecoderCaps_0100
498 * @tc.desc: AVCdecList GetVideoDecoderCaps
499 * @tc.type: FUNC
500 * @tc.require:
501 */
502 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetVideoDecoderCaps_0100, TestSize.Level0)
503 {
504 std::vector<std::shared_ptr<VideoCapsMock>> videoDecoderArray;
505 videoDecoderArray = avCodecList_->GetVideoDecoderCaps();
506 CheckVideoCapsArray(videoDecoderArray);
507 }
508
509 /**
510 * @tc.name: AVCdecList_GetVideoEncoderCaps_0100
511 * @tc.desc: AVCdecList GetVideoEncoderCaps
512 * @tc.type: FUNC
513 * @tc.require:
514 */
515 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetVideoEncoderCaps_0100, TestSize.Level0)
516 {
517 std::vector<std::shared_ptr<VideoCapsMock>> videoEncoderArray;
518 videoEncoderArray = avCodecList_->GetVideoEncoderCaps();
519 CheckVideoCapsArray(videoEncoderArray);
520 }
521
522 /**
523 * @tc.name: AVCdecList_GetAudioDecoderCaps_0100
524 * @tc.desc: AVCdecList GetAudioDecoderCaps
525 * @tc.type: FUNC
526 * @tc.require:
527 */
528 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetAudioDecoderCaps_0100, TestSize.Level0)
529 {
530 std::vector<std::shared_ptr<AudioCapsMock>> audioDecoderArray;
531 audioDecoderArray = avCodecList_->GetAudioDecoderCaps();
532 CheckAudioCapsArray(audioDecoderArray);
533 }
534
535 /**
536 * @tc.name: AVCdecList_GetAudioEncoderCaps_0100
537 * @tc.desc: AVCdecList GetAudioEncoderCaps
538 * @tc.type: FUNC
539 * @tc.require:
540 */
541 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetAudioEncoderCaps_0100, TestSize.Level0)
542 {
543 std::vector<std::shared_ptr<AudioCapsMock>> audioEncoderArray;
544 audioEncoderArray = avCodecList_->GetAudioEncoderCaps();
545 CheckAudioCapsArray(audioEncoderArray);
546 }
547
548 /**
549 * @tc.name: AVCdecList_GetSupportedFrameRatesFor_0100
550 * @tc.desc: AVCdecList GetSupportedFrameRatesFor
551 * @tc.type: FUNC
552 * @tc.require:
553 */
554 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetSupportedFrameRatesFor_0100, TestSize.Level0)
555 {
556 RangeMock ret;
557 std::vector<std::shared_ptr<VideoCapsMock>> videoDecoderArray = avCodecList_->GetVideoDecoderCaps();
558 for (auto iter = videoDecoderArray.begin(); iter != videoDecoderArray.end(); iter++) {
559 std::shared_ptr<VideoCapsMock> pVideoCaps = *iter;
560 ret = (*iter)->GetSupportedFrameRatesFor(DEFAULT_WIDTH, DEFAULT_HEIGHT);
561 EXPECT_GE(ret.minVal, 0);
562 EXPECT_LE(ret.maxVal, MAX_FRAME_RATE_HARD);
563 }
564 std::vector<std::shared_ptr<VideoCapsMock>> videoEncoderArray = avCodecList_->GetVideoEncoderCaps();
565 for (auto iter = videoEncoderArray.begin(); iter != videoEncoderArray.end(); iter++) {
566 ret = (*iter)->GetSupportedFrameRatesFor(DEFAULT_WIDTH, DEFAULT_HEIGHT);
567 EXPECT_GE(ret.minVal, 0);
568 EXPECT_LE(ret.maxVal, MAX_FRAME_RATE_HARD);
569 }
570 }
571
572 /**
573 * @tc.name: AVCdecList_GetSupportedFrameRatesFor_0200
574 * @tc.desc: AVCdecList GetSupportedFrameRatesFor not supported size
575 * @tc.type: FUNC
576 * @tc.require:
577 */
578 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetSupportedFrameRatesFor_0200, TestSize.Level0)
579 {
580 RangeMock ret;
581 std::vector<std::shared_ptr<VideoCapsMock>> videoDecoderArray = avCodecList_->GetVideoDecoderCaps();
582 for (auto iter = videoDecoderArray.begin(); iter != videoDecoderArray.end(); iter++) {
583 std::shared_ptr<VideoCapsMock> pVideoCaps = *iter;
584 ret = (*iter)->GetSupportedFrameRatesFor(MAX_WIDTH + 1, MAX_HEIGHT + 1);
585 EXPECT_GE(ret.minVal, 0);
586 EXPECT_LE(ret.maxVal, MAX_FRAME_RATE_HARD);
587 }
588 std::vector<std::shared_ptr<VideoCapsMock>> videoEncoderArray = avCodecList_->GetVideoEncoderCaps();
589 for (auto iter = videoEncoderArray.begin(); iter != videoEncoderArray.end(); iter++) {
590 ret = (*iter)->GetSupportedFrameRatesFor(MIN_WIDTH - 1, MIN_HEIGHT - 1);
591 EXPECT_GE(ret.minVal, 0);
592 EXPECT_LE(ret.maxVal, MAX_FRAME_RATE_HARD);
593 }
594 }
595
596 /**
597 * @tc.name: AVCdecList_GetPreferredFrameRate_0100
598 * @tc.desc: AVCdecList GetPreferredFrameRate
599 * @tc.type: FUNC
600 * @tc.require:
601 */
602 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetPreferredFrameRate_0100, TestSize.Level0)
603 {
604 RangeMock ret;
605 std::vector<std::shared_ptr<VideoCapsMock>> videoEncoderArray = avCodecList_->GetVideoEncoderCaps();
606 for (auto iter = videoEncoderArray.begin(); iter != videoEncoderArray.end(); iter++) {
607 ret = (*iter)->GetPreferredFrameRate(DEFAULT_WIDTH, DEFAULT_HEIGHT);
608 EXPECT_GE(ret.minVal, 0);
609 }
610 std::vector<std::shared_ptr<VideoCapsMock>> videoDecoderArray = avCodecList_->GetVideoDecoderCaps();
611 for (auto iter = videoDecoderArray.begin(); iter != videoDecoderArray.end(); iter++) {
612 ret = (*iter)->GetPreferredFrameRate(DEFAULT_WIDTH, DEFAULT_HEIGHT);
613 EXPECT_GE(ret.minVal, 0);
614 }
615 }
616
617 /**
618 * @tc.name: AVCdecList_GetPreferredFrameRate_0200
619 * @tc.desc: AVCdecList GetPreferredFrameRate for not supported size
620 * @tc.type: FUNC
621 * @tc.require:
622 */
623 HWTEST_F(AVCodecListUnitTest, AVCdecList_GetPreferredFrameRate_0200, TestSize.Level0)
624 {
625 RangeMock ret;
626 std::vector<std::shared_ptr<VideoCapsMock>> videoEncoderArray = avCodecList_->GetVideoEncoderCaps();
627 for (auto iter = videoEncoderArray.begin(); iter != videoEncoderArray.end(); iter++) {
628 ret = (*iter)->GetPreferredFrameRate(MAX_WIDTH + 1, MAX_HEIGHT + 1);
629 EXPECT_GE(ret.minVal, 0);
630 }
631 std::vector<std::shared_ptr<VideoCapsMock>> videoDecoderArray = avCodecList_->GetVideoDecoderCaps();
632 for (auto iter = videoDecoderArray.begin(); iter != videoDecoderArray.end(); iter++) {
633 ret = (*iter)->GetPreferredFrameRate(MIN_WIDTH - 1, MIN_HEIGHT - 1);
634 EXPECT_GE(ret.minVal, 0);
635 }
636 }
637 } // namespace Media
638 } // namespace OHOS
639