• 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 #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