• 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 Mpeg2SwdecFuncNdkTest : public testing::Test {
41 public:
42     static void SetUpTestCase();
43     static void TearDownTestCase();
44     void SetUp() override;
45     void TearDown() override;
46     void InputFUNCTION();
47     void OutputFUNCTION();
48     void Release();
49     int32_t Stop();
50 
51 protected:
52     const string CODEC_NAME = "avdec_mpeg2";
53     const char *INP_DIR_6 = "/data/test/media/main@high_level_1920_1080_60.m2v";
54 };
55 } // namespace Media
56 } // namespace OHOS
57 
58 namespace {
59 static OH_AVCapability *cap_mpeg2 = nullptr;
60 static string g_codecNameMpeg2 = "";
61 } // namespace
62 
SetUpTestCase()63 void Mpeg2SwdecFuncNdkTest::SetUpTestCase()
64 {
65     cap_mpeg2 = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_MPEG2, false, SOFTWARE);
66     g_codecNameMpeg2 = OH_AVCapability_GetName(cap_mpeg2);
67     cout << "g_codecNameMpeg2: " << g_codecNameMpeg2 << endl;
68 }
TearDownTestCase()69 void Mpeg2SwdecFuncNdkTest::TearDownTestCase() {}
SetUp()70 void Mpeg2SwdecFuncNdkTest::SetUp() {}
TearDown()71 void Mpeg2SwdecFuncNdkTest::TearDown() {}
72 
73 namespace {
74 /**
75  * @tc.number    : VIDEO_DECODE_SYNC_SWMPEG2_FUNC_0010
76  * @tc.name      : VIDEO_DECODE_SYNC_SWMPEG2_FUNC_0010
77  * @tc.desc      : function test
78  */
79 HWTEST_F(Mpeg2SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SWMPEG2_FUNC_0010, TestSize.Level1)
80 {
81     if (cap_mpeg2 != nullptr) {
82         auto vDecSample = make_shared<VDecAPI11Sample>();
83         vDecSample->INP_DIR = INP_DIR_6;
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_codecNameMpeg2));
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_SWMPEG2_FUNC_0020
99  * @tc.name      : VIDEO_DECODE_SYNC_SWMPEG2_FUNC_0020
100  * @tc.desc      : function test
101  */
102 HWTEST_F(Mpeg2SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SWMPEG2_FUNC_0020, TestSize.Level0)
103 {
104     if (cap_mpeg2 != nullptr) {
105         auto vDecSample = make_shared<VDecAPI11Sample>();
106         vDecSample->INP_DIR = INP_DIR_6;
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_codecNameMpeg2));
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_SWMPEG2_FUNC_0040
122  * @tc.name      : VIDEO_DECODE_SYNC_SWMPEG2_FUNC_0040
123  * @tc.desc      : function test
124  */
125 HWTEST_F(Mpeg2SwdecFuncNdkTest, VIDEO_DECODE_SYNC_SWMPEG2_FUNC_0040, TestSize.Level1)
126 {
127     if (cap_mpeg2 != nullptr) {
128         auto vDecSample = make_shared<VDecAPI11Sample>();
129         vDecSample->INP_DIR = INP_DIR_6;
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_codecNameMpeg2));
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_DECODE_BLANK_FRAME_0010
145  * @tc.name      : VIDEO_DECODE_BLANK_FRAME_0010
146  * @tc.desc      : function test
147  */
148 HWTEST_F(Mpeg2SwdecFuncNdkTest, VIDEO_DECODE_BLANK_FRAME_0010, TestSize.Level1)
149 {
150     if (cap_mpeg2 != nullptr) {
151         auto vDecSample = make_shared<VDecAPI11Sample>();
152         vDecSample->INP_DIR = INP_DIR_6;
153         vDecSample->DEFAULT_WIDTH = 1920;
154         vDecSample->DEFAULT_HEIGHT = 1080;
155         vDecSample->DEFAULT_FRAME_RATE = 30;
156         vDecSample->enbleBlankFrame = 1;
157         ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameMpeg2));
158         vDecSample->WaitForEOS();
159         ASSERT_EQ(0, vDecSample->errCount);
160     }
161 }
162 }