• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 <iostream>
17 #include <gtest/gtest.h>
18 #include <gmock/gmock.h>
19 #include "audio_utils.h"
20 #include "audio_primary_source_clock.h"
21 #include "capturer_clock_manager.h"
22 
23 using namespace testing::ext;
24 using namespace std;
25 
26 namespace OHOS {
27 namespace AudioStandard {
28 
29 constexpr uint64_t MOCK_FIRST_TIMESTAMP = 1000'000;
30 constexpr uint64_t MOCK_POSITION_INC = 960 * 2 * 2;
31 constexpr size_t REGULAR_TIME_DETLA = 20'000;
32 constexpr uint32_t MOCK_SAMPLE_RATE = 48'000;
33 constexpr AudioSampleFormat MOCK_FORMAT = AudioSampleFormat::SAMPLE_S16LE;
34 constexpr uint32_t MOCK_CHANNEL = 2;
35 
36 class AudioPrimarySourceClockUnitTest : public testing::Test {
37 public:
38     static void SetUpTestCase();
39     static void TearDownTestCase();
40     virtual void SetUp();
TearDown()41     virtual void TearDown() {}
42 private:
43     static std::shared_ptr<AudioCapturerSourceClock> srcClock_;
44 };
45 
46 std::shared_ptr<AudioCapturerSourceClock> AudioPrimarySourceClockUnitTest::srcClock_ = nullptr;
47 
SetUpTestCase()48 void AudioPrimarySourceClockUnitTest::SetUpTestCase()
49 {
50     srcClock_ = std::make_shared<AudioCapturerSourceClock>();
51     CapturerClockManager::GetInstance().RegisterAudioSourceClock(1, srcClock_);
52     srcClock_->Init(MOCK_SAMPLE_RATE, MOCK_FORMAT, MOCK_CHANNEL);
53 }
54 
TearDownTestCase()55 void AudioPrimarySourceClockUnitTest::TearDownTestCase()
56 {
57     CapturerClockManager::GetInstance().DeleteAudioSourceClock(1);
58 }
59 
SetUp()60 void AudioPrimarySourceClockUnitTest::SetUp()
61 {
62     if (srcClock_ == nullptr) {
63         return;
64     }
65     srcClock_->Reset();
66 }
67 
68 /**
69  * @tc.name   : Test Audio primary source clock
70  * @tc.number : AudioPrimarySourceClockUnitTest_001
71  * @tc.desc   : Test Audio primary source clock normal case
72  */
73 HWTEST_F(AudioPrimarySourceClockUnitTest, AudioPrimarySourceClockUnitTest_001, TestSize.Level1)
74 {
75     EXPECT_EQ(srcClock_->GetFrameCnt(), 0);
76     srcClock_->SetFirstTimestampFromHdi(MOCK_FIRST_TIMESTAMP);
77     srcClock_->Renew(0);
78     EXPECT_EQ(srcClock_->lastTs_, 0);
79     EXPECT_EQ(srcClock_->firstTimeStamp_, MOCK_FIRST_TIMESTAMP);
80     srcClock_->Renew(MOCK_POSITION_INC);
81     EXPECT_EQ(srcClock_->GetFrameCnt(), 1);
82     EXPECT_TRUE(srcClock_->lastTs_ > 0);
83 }
84 
85 /**
86  * @tc.name   : Test Audio primary source clock
87  * @tc.number : AudioPrimarySourceClockUnitTest_002
88  * @tc.desc   : Test Audio primary source clock normal case 2
89  */
90 HWTEST_F(AudioPrimarySourceClockUnitTest, AudioPrimarySourceClockUnitTest_002, TestSize.Level1)
91 {
92     EXPECT_EQ(srcClock_->GetFrameCnt(), 0);
93     srcClock_->SetFirstTimestampFromHdi(MOCK_FIRST_TIMESTAMP);
94     EXPECT_FALSE(srcClock_->isGetTimeStampFromSystemClock_);
95     // 10 : loop cnt
96     for (size_t i = 0; i < 10; i++) {
97         srcClock_->Renew(MOCK_POSITION_INC);
98     }
99     EXPECT_FALSE(srcClock_->isGetTimeStampFromSystemClock_);
100     // 20 : loop cnt
101     for (size_t i = 0; i < 20; i++) {
102         srcClock_->Renew(MOCK_POSITION_INC);
103     }
104     // 21: 20 frames from first ts and 1 for last one
105     EXPECT_EQ(srcClock_->GetFrameCnt(), 21);
106     EXPECT_TRUE(srcClock_->isGetTimeStampFromSystemClock_);
107 }
108 
109 /**
110  * @tc.name   : Test Audio primary source clock
111  * @tc.number : AudioPrimarySourceClockUnitTest_003
112  * @tc.desc   : Test get timestamp when first timestamp set 0
113  */
114 HWTEST_F(AudioPrimarySourceClockUnitTest, AudioPrimarySourceClockUnitTest_003, TestSize.Level1)
115 {
116     EXPECT_EQ(srcClock_->GetFrameCnt(), 0);
117     srcClock_->SetFirstTimestampFromHdi(0);
118     srcClock_->Renew(MOCK_POSITION_INC);
119     EXPECT_TRUE(srcClock_->isGetTimeStampFromSystemClock_);
120 }
121 
122 /**
123  * @tc.name   : Test Audio primary source clock
124  * @tc.number : AudioPrimarySourceClockUnitTest_004
125  * @tc.desc   : Test Audio primary source clock normal case 4
126  */
127 HWTEST_F(AudioPrimarySourceClockUnitTest, AudioPrimarySourceClockUnitTest_004, TestSize.Level1)
128 {
129     EXPECT_EQ(srcClock_->GetFrameCnt(), 0);
130     srcClock_->SetFirstTimestampFromHdi(MOCK_FIRST_TIMESTAMP);
131     EXPECT_FALSE(srcClock_->isGetTimeStampFromSystemClock_);
132     srcClock_->Renew(MOCK_POSITION_INC);
133     usleep(REGULAR_TIME_DETLA);
134     srcClock_->Renew(MOCK_POSITION_INC);
135     EXPECT_TRUE(srcClock_->isGetTimeStampFromSystemClock_);
136 }
137 
138 } // namespace AudioStandard
139 } // namespace OHOS
140