• 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 <cstdio>
18 
19 #include <atomic>
20 #include <fstream>
21 #include <thread>
22 #include <mutex>
23 #include <queue>
24 #include <string>
25 #include "native_avcapability.h"
26 #include "gtest/gtest.h"
27 #include "videodec_sample.h"
28 using namespace std;
29 using namespace OHOS;
30 using namespace OHOS::Media;
31 using namespace testing::ext;
32 namespace OHOS {
33 namespace Media {
34 class Mpeg2SwdecCompNdkTest : public testing::Test {
35 public:
36     // SetUpTestCase: Called before all test cases
37     static void SetUpTestCase(void);
38     // TearDownTestCase: Called after all test case
39     static void TearDownTestCase(void);
40     // SetUp: Called before each test cases
41     void SetUp(void);
42     // TearDown: Called after each test cases
43     void TearDown(void);
44 
45 protected:
46     const ::testing::TestInfo *testInfo_ = nullptr;
47     bool createCodecSuccess_ = false;
48 };
49 
50 namespace {
51     static OH_AVCapability *cap_mpeg2 = nullptr;
52     static string g_codecNameMpeg2 = "";
53 } // namespace
54 
SetUpTestCase(void)55 void Mpeg2SwdecCompNdkTest::SetUpTestCase(void)
56 {
57     cap_mpeg2 = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_MPEG2, false, SOFTWARE);
58     g_codecNameMpeg2 = OH_AVCapability_GetName(cap_mpeg2);
59     cout << "g_codecNameMpeg2: " << g_codecNameMpeg2 << endl;
60 }
TearDownTestCase(void)61 void Mpeg2SwdecCompNdkTest::TearDownTestCase(void) {}
SetUp(void)62 void Mpeg2SwdecCompNdkTest::SetUp(void) {}
TearDown(void)63 void Mpeg2SwdecCompNdkTest::TearDown(void) {}
64 } // namespace Media
65 } // namespace OHOS
66 
67 namespace {
68 /**
69  * @tc.number    : VIDEO_SWDEC_MPEG2_IPB_0100
70  * @tc.name      : software decode all i frame mpeg2 stream
71  * @tc.desc      : function test
72  */
73 HWTEST_F(Mpeg2SwdecCompNdkTest, VIDEO_SWDEC_MPEG2_IPB_0100, TestSize.Level2)
74 {
75     if (cap_mpeg2 != nullptr) {
76         VDecNdkSample *vDecSample = new VDecNdkSample();
77         int32_t ret = vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.MPEG2");
78         ASSERT_EQ(AV_ERR_OK, ret);
79         vDecSample->INP_DIR = "/data/test/media/all_i_main@high14_level_1280_720_30.m2v";
80         vDecSample->DEFAULT_WIDTH = 1280;
81         vDecSample->DEFAULT_HEIGHT = 720;
82         ret = vDecSample->SetVideoDecoderCallback();
83         ASSERT_EQ(AV_ERR_OK, ret);
84         ret = vDecSample->ConfigureVideoDecoder();
85         ASSERT_EQ(AV_ERR_OK, ret);
86         ret = vDecSample->StartVideoDecoder();
87         ASSERT_EQ(AV_ERR_OK, ret);
88         vDecSample->WaitForEOS();
89         ASSERT_EQ(0, vDecSample->errCount);
90     }
91 }
92 
93 /**
94  * @tc.number    : VIDEO_SWDEC_MPEG2_IPB_0200
95  * @tc.name      : software decode i/p frame mpeg2 stream
96  * @tc.desc      : function test
97  */
98 HWTEST_F(Mpeg2SwdecCompNdkTest, VIDEO_SWDEC_MPEG2_IPB_0200, TestSize.Level2)
99 {
100     if (cap_mpeg2 != nullptr) {
101         VDecNdkSample *vDecSample = new VDecNdkSample();
102         int32_t ret = vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.MPEG2");
103         ASSERT_EQ(AV_ERR_OK, ret);
104         vDecSample->INP_DIR = "/data/test/media/ip_main@high14_level_1280_720_30.m2v";
105         vDecSample->DEFAULT_WIDTH = 1280;
106         vDecSample->DEFAULT_HEIGHT = 720;
107         ret = vDecSample->SetVideoDecoderCallback();
108         ASSERT_EQ(AV_ERR_OK, ret);
109         ret = vDecSample->ConfigureVideoDecoder();
110         ASSERT_EQ(AV_ERR_OK, ret);
111         ret = vDecSample->StartVideoDecoder();
112         ASSERT_EQ(AV_ERR_OK, ret);
113         vDecSample->WaitForEOS();
114         ASSERT_EQ(0, vDecSample->errCount);
115     }
116 }
117 
118 /**
119  * @tc.number    : VIDEO_SWDEC_MPEG2_IPB_0300
120  * @tc.name      : software decode i/p/b frame mpeg2 stream
121  * @tc.desc      : function test
122  */
123 HWTEST_F(Mpeg2SwdecCompNdkTest, VIDEO_SWDEC_MPEG2_IPB_0300, TestSize.Level2)
124 {
125     if (cap_mpeg2 != nullptr) {
126         VDecNdkSample *vDecSample = new VDecNdkSample();
127         int32_t ret = vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.MPEG2");
128         ASSERT_EQ(AV_ERR_OK, ret);
129         vDecSample->INP_DIR = "/data/test/media/ipb_main@high14_level_1280_720_30.m2v";
130         vDecSample->DEFAULT_WIDTH = 1280;
131         vDecSample->DEFAULT_HEIGHT = 720;
132         ret = vDecSample->SetVideoDecoderCallback();
133         ASSERT_EQ(AV_ERR_OK, ret);
134         ret = vDecSample->ConfigureVideoDecoder();
135         ASSERT_EQ(AV_ERR_OK, ret);
136         ret = vDecSample->StartVideoDecoder();
137         ASSERT_EQ(AV_ERR_OK, ret);
138         vDecSample->WaitForEOS();
139         ASSERT_EQ(0, vDecSample->errCount);
140     }
141 }
142 } // namespace