• 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 #include "openssl/sha.h"
25 
26 #ifdef SUPPORT_DRM
27 #include "native_mediakeysession.h"
28 #include "native_mediakeysystem.h"
29 #endif
30 
31 #define MAX_THREAD 16
32 
33 using namespace std;
34 using namespace OHOS;
35 using namespace OHOS::Media;
36 using namespace testing::ext;
37 
38 namespace OHOS {
39 namespace Media {
40 class Mpeg4SwdecFuncNdkTest : public testing::Test {
41 public:
42     static void SetUpTestCase();
43     static void TearDownTestCase();
44     void SetUp() override;
45     void TearDown() override;
46     void InputFunc();
47     void OutputFunc();
48     void Release();
49     int32_t Stop();
50 
51 protected:
52     const char *INP_DIR_1080_30 = "/data/test/media/mpeg4_main@level4_1920x1080_30.m4v";
53 };
54 } // namespace Media
55 } // namespace OHOS
56 
57 namespace {
58 static OH_AVCapability *cap_mpeg4 = nullptr;
59 static string g_codecNameMpeg4 = "";
60 } // namespace
61 
SetUpTestCase()62 void Mpeg4SwdecFuncNdkTest::SetUpTestCase()
63 {
64     cap_mpeg4 = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_MPEG4_PART2, false, SOFTWARE);
65     g_codecNameMpeg4 = OH_AVCapability_GetName(cap_mpeg4);
66     cout << "g_codecNameMpeg4: " << g_codecNameMpeg4 << endl;
67 }
68 
TearDownTestCase()69 void Mpeg4SwdecFuncNdkTest::TearDownTestCase() {}
SetUp()70 void Mpeg4SwdecFuncNdkTest::SetUp() {}
TearDown()71 void Mpeg4SwdecFuncNdkTest::TearDown() {}
72 
73 namespace {
74 /**
75  * @tc.number    : VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0010
76  * @tc.name      : VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0010
77  * @tc.desc      : function test
78  */
79 HWTEST_F(Mpeg4SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0010, TestSize.Level1)
80 {
81     if (cap_mpeg4 != nullptr) {
82         auto vDecSample = make_shared<VDecAPI11Sample>();
83         vDecSample->INP_DIR = INP_DIR_1080_30;
84         vDecSample->DEFAULT_WIDTH = 1920;
85         vDecSample->DEFAULT_HEIGHT = 1080;
86         vDecSample->DEFAULT_FRAME_RATE = 30;
87         vDecSample->enbleSyncMode = 1;
88         vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
89         ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameMpeg4));
90         ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
91         ASSERT_EQ(AV_ERR_OK, vDecSample->StartSyncVideoDecoder());
92         vDecSample->WaitForEOS();
93         ASSERT_EQ(0, vDecSample->errCount);
94     }
95 }
96 
97 /**
98  * @tc.number    : VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0020
99  * @tc.name      : VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0020
100  * @tc.desc      : function test
101  */
102 HWTEST_F(Mpeg4SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0020, TestSize.Level0)
103 {
104     if (cap_mpeg4 != nullptr) {
105         auto vDecSample = make_shared<VDecAPI11Sample>();
106         vDecSample->INP_DIR = INP_DIR_1080_30;
107         vDecSample->DEFAULT_WIDTH = 1920;
108         vDecSample->DEFAULT_HEIGHT = 1080;
109         vDecSample->DEFAULT_FRAME_RATE = 30;
110         vDecSample->enbleSyncMode = 1;
111         vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
112         ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameMpeg4));
113         ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
114         ASSERT_EQ(AV_ERR_OK, vDecSample->StartSyncVideoDecoder());
115         vDecSample->WaitForEOS();
116         ASSERT_EQ(0, vDecSample->errCount);
117     }
118 }
119 
120 /**
121  * @tc.number    : VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0040
122  * @tc.name      : VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0040
123  * @tc.desc      : function test
124  */
125 HWTEST_F(Mpeg4SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SWMPEG4_FUNC_0040, TestSize.Level1)
126 {
127     if (cap_mpeg4 != nullptr) {
128         auto vDecSample = make_shared<VDecAPI11Sample>();
129         vDecSample->INP_DIR = INP_DIR_1080_30;
130         vDecSample->DEFAULT_WIDTH = 1920;
131         vDecSample->DEFAULT_HEIGHT = 1080;
132         vDecSample->DEFAULT_FRAME_RATE = 30;
133         vDecSample->enbleSyncMode = 1;
134         vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_RGBA;
135         ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameMpeg4));
136         ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
137         ASSERT_EQ(AV_ERR_OK, vDecSample->StartSyncVideoDecoder());
138         vDecSample->WaitForEOS();
139         ASSERT_EQ(0, vDecSample->errCount);
140     }
141 }
142 
143 /**
144  * @tc.number    : VIDEO_MPEG4SWDEC_BLANK_FRAME_0010
145  * @tc.name      : VIDEO_MPEG4SWDEC_BLANK_FRAME_0010
146  * @tc.desc      : function test
147  */
148 HWTEST_F(Mpeg4SwdecFuncNdkTest, VIDEO_MPEG4SWDEC_BLANK_FRAME_0010, TestSize.Level1)
149 {
150     if (cap_mpeg4 != nullptr) {
151         if (!access("/system/lib64/media/", 0)) {
152             auto vDecSample = make_shared<VDecAPI11Sample>();
153             vDecSample->INP_DIR = INP_DIR_1080_30;
154             vDecSample->DEFAULT_WIDTH = 1920;
155             vDecSample->DEFAULT_HEIGHT = 1080;
156             vDecSample->DEFAULT_FRAME_RATE = 30;
157             vDecSample->enbleBlankFrame = 1;
158             vDecSample->SF_OUTPUT = false;
159             ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecNameMpeg4));
160             vDecSample->WaitForEOS();
161             ASSERT_EQ(0, vDecSample->errCount);
162         }
163     }
164 }
165 } // namespace