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 #include <string>
16 #include "gtest/gtest.h"
17 #include "native_avcodec_videodecoder.h"
18 #include "native_averrors.h"
19 #include "videodec_api11_sample.h"
20 #include "native_avcodec_base.h"
21 #include "avcodec_codec_name.h"
22 #include "native_avcapability.h"
23 #include "native_avformat.h"
24
25 #ifdef SUPPORT_DRM
26 #include "native_mediakeysession.h"
27 #include "native_mediakeysystem.h"
28 #endif
29
30 #define MAX_THREAD 16
31
32 using namespace std;
33 using namespace OHOS;
34 using namespace OHOS::Media;
35 using namespace testing::ext;
36
37 namespace OHOS {
38 namespace Media {
39 class H263SwdecFuncNdkTest : public testing::Test {
40 public:
41 static void SetUpTestCase();
42 static void TearDownTestCase();
43 void SetUp() override;
44 void TearDown() override;
45 void InputFunc();
46 void OutputFunc();
47 void Release();
48 int32_t Stop();
49 };
50 } // namespace Media
51 } // namespace OHOS
52
53 namespace {
54 static OH_AVCapability *cap_263 = nullptr;
55 static string g_codecName263 = "";
56 static OH_AVCapability *cap_264 = nullptr;
57 static string g_codecName264 = "";
58 constexpr uint32_t FRAMESIZE90 = 90;
59 constexpr uint32_t FRAMESIZE75 = 75;
60 } // namespace
61
SetUpTestCase()62 void H263SwdecFuncNdkTest::SetUpTestCase()
63 {
64 cap_263 = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_H263, false, SOFTWARE);
65 g_codecName263 = OH_AVCapability_GetName(cap_263);
66 cout << "g_codecName263: " << g_codecName263 << endl;
67 cap_264 = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
68 g_codecName264 = OH_AVCapability_GetName(cap_264);
69 cout << "g_codecName264: " << g_codecName264 << endl;
70 }
71
TearDownTestCase()72 void H263SwdecFuncNdkTest::TearDownTestCase() {}
SetUp()73 void H263SwdecFuncNdkTest::SetUp() {}
TearDown()74 void H263SwdecFuncNdkTest::TearDown() {}
75
76 namespace {
77 /**
78 * @tc.number : VIDEO_DECODE_SYNC_SW263_FUNC_0010
79 * @tc.name : VIDEO_DECODE_SYNC_SW263_FUNC_0010
80 * @tc.desc : function test
81 */
82 HWTEST_F(H263SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SW263_FUNC_0010, TestSize.Level1)
83 {
84 if (cap_263 != nullptr) {
85 auto vDecSample = make_shared<VDecAPI11Sample>();
86 vDecSample->INP_DIR = "/data/test/media/profile0_level10_I_128x96.h263";
87 vDecSample->DEFAULT_WIDTH = 128;
88 vDecSample->DEFAULT_HEIGHT = 96;
89 vDecSample->DEFAULT_FRAME_RATE = 30;
90 vDecSample->enbleSyncMode = 1;
91 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
92 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName263));
93 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
94 ASSERT_EQ(AV_ERR_OK, vDecSample->StartSyncVideoDecoder());
95 vDecSample->WaitForEOS();
96 ASSERT_EQ(0, vDecSample->errCount);
97 ASSERT_EQ(FRAMESIZE90, vDecSample->outFrameCount);
98 }
99 }
100
101 /**
102 * @tc.number : VIDEO_DECODE_SYNC_SW263_FUNC_0020
103 * @tc.name : VIDEO_DECODE_SYNC_SW263_FUNC_0020
104 * @tc.desc : function test
105 */
106 HWTEST_F(H263SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SW263_FUNC_0020, TestSize.Level0)
107 {
108 if (cap_263 != nullptr) {
109 auto vDecSample = make_shared<VDecAPI11Sample>();
110 vDecSample->INP_DIR = "/data/test/media/profile0_level10_I_128x96.h263";
111 vDecSample->DEFAULT_WIDTH = 128;
112 vDecSample->DEFAULT_HEIGHT = 96;
113 vDecSample->DEFAULT_FRAME_RATE = 30;
114 vDecSample->enbleSyncMode = 1;
115 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
116 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName263));
117 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
118 ASSERT_EQ(AV_ERR_OK, vDecSample->StartSyncVideoDecoder());
119 vDecSample->WaitForEOS();
120 ASSERT_EQ(0, vDecSample->errCount);
121 ASSERT_EQ(FRAMESIZE90, vDecSample->outFrameCount);
122 }
123 }
124
125 /**
126 * @tc.number : VIDEO_DECODE_SYNC_SW263_FUNC_0040
127 * @tc.name : VIDEO_DECODE_SYNC_SW263_FUNC_0040
128 * @tc.desc : function test
129 */
130 HWTEST_F(H263SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SW263_FUNC_0040, TestSize.Level1)
131 {
132 if (cap_263 != nullptr) {
133 auto vDecSample = make_shared<VDecAPI11Sample>();
134 vDecSample->INP_DIR = "/data/test/media/profile0_level10_I_128x96.h263";
135 vDecSample->DEFAULT_WIDTH = 128;
136 vDecSample->DEFAULT_HEIGHT = 96;
137 vDecSample->DEFAULT_FRAME_RATE = 30;
138 vDecSample->enbleSyncMode = 1;
139 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_RGBA;
140 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName263));
141 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
142 ASSERT_EQ(AV_ERR_OK, vDecSample->StartSyncVideoDecoder());
143 vDecSample->WaitForEOS();
144 ASSERT_EQ(0, vDecSample->errCount);
145 ASSERT_EQ(FRAMESIZE90, vDecSample->outFrameCount);
146 }
147 }
148
149 /**
150 * @tc.number : VIDEO_DECODE_SW263_BLANK_FRAME_0010
151 * @tc.name : VIDEO_DECODE_SW263_BLANK_FRAME_0010
152 * @tc.desc : function test
153 */
154 HWTEST_F(H263SwdecFuncNdkTest, VIDEO_DECODE_SW263_BLANK_FRAME_0010, TestSize.Level0)
155 {
156 if (cap_263 != nullptr) {
157 auto vDecSample = make_shared<VDecAPI11Sample>();
158 vDecSample->INP_DIR = "/data/test/media/20x20.h263";
159 vDecSample->DEFAULT_WIDTH = 20;
160 vDecSample->DEFAULT_HEIGHT = 20;
161 vDecSample->DEFAULT_FRAME_RATE = 30;
162 vDecSample->enbleBlankFrame = 1;
163 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.H263"));
164 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
165 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
166 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
167 vDecSample->WaitForEOS();
168 ASSERT_EQ(0, vDecSample->errCount);
169 ASSERT_EQ(FRAMESIZE75, vDecSample->outFrameCount);
170 }
171 }
172 } // namespace