* Copyright (C) 2026 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <string>
#include <limits>
#include <iostream>
#include <cstdio>
#include <atomic>
#include <fstream>
#include <thread>
#include <mutex>
#include <queue>
#include "meta/format.h"
#include "gtest/gtest.h"
#include "native_avcodec_videoencoder.h"
#include "native_averrors.h"
#include "videoenc_api11_sample.h"
#include "videoenc_sample.h"
#include "native_avcodec_base.h"
#include "avcodec_codec_name.h"
#include "native_avcapability.h"
#include "avcodec_info.h"
#include "avcodec_list.h"
#include "avcodec_common.h"
#include "videotranscode_api11_sample.h"
using namespace std;
using namespace OHOS;
using namespace OHOS::Media;
using namespace testing::ext;
namespace {
OH_AVCapability *cap = nullptr;
OH_AVCapability *cap_hevc = nullptr;
OH_AVCapability *cap_dec = nullptr;
OH_AVCapability *cap_hevc_dec = nullptr;
constexpr uint32_t CODEC_NAME_SIZE = 128;
char g_codecName[CODEC_NAME_SIZE] = {};
char g_codecNameHEVC[CODEC_NAME_SIZE] = {};
char g_codecNameDec[CODEC_NAME_SIZE] = {};
char g_codecNameDecHEVC[CODEC_NAME_SIZE] = {};
typedef struct ConfigParameter {
uint32_t bitRateMode = CBR;
uint32_t bitRate = 5000000;
bool surfSecondaryInput = false;
bool surfPrimaryInput = true;
uint32_t width = 1280;
uint32_t height = 720;
OH_AVPixelFormat pixFmt = AV_PIXEL_FORMAT_NV12;
OH_HEVCProfile hevcProfile = HEVC_PROFILE_MAIN;
uint32_t quality = 30;
int32_t sqrFactor = 32;
int64_t maxBiterate = 6000000;
int32_t enbleBFrame = 0;
bool repeat = false;
bool maxCount = false;
int32_t frameAfter = 73;
int32_t maxCountFrame = 1;
bool roi = false;
const char *roiInfo = "660,1080-720,1280=-51";
bool enableTemporal = false;
bool temporalConfig = false;
int32_t temporalGopSize = 4;
uint32_t frameInterval = 1000;
uint32_t rangeFlag = 0;
bool enableColorSpaceParam = false;
uint32_t colorPrimaries = COLOR_PRIMARY_BT709;
uint32_t transferCharacteristics = TRANSFER_CHARACTERISTIC_BT709;
uint32_t matrixCoefficients = MATRIX_COEFFICIENT_BT709;
bool dualEos = false;
}ConfigParameter;
fileInfo file_640_480_rgba{"/data/test/media/640_480.rgba", NATIVEBUFFER_PIXEL_FMT_RGBA_8888, 640, 480 };
fileInfo file_1280_720_nv{"/data/test/media/1280_720_nv.yuv", NATIVEBUFFER_PIXEL_FMT_YCBCR_420_SP, 1280, 720 };
fileInfo file_1920_1080_nv21{"/data/test/media/1920_1080_nv21.yuv", NATIVEBUFFER_PIXEL_FMT_YCRCB_420_SP, 1920, 1080 };
fileInfo file_1280_536_nv21{"/data/test/media/1280_536_nv21.yuv", NATIVEBUFFER_PIXEL_FMT_YCRCB_420_SP, 1280, 536 };
fileInfo file_3840_2160_nv12{"/data/test/media/3840_2160_nv12.yuv", NATIVEBUFFER_PIXEL_FMT_YCBCR_420_SP, 3840, 2160 };
fileInfo file_1280_720_nv12_10bit{"/data/test/media/1280_720_nv12_10bit.yuv",
NATIVEBUFFER_PIXEL_FMT_YCBCR_P010, 1280, 720 };
fileInfo file_1920_1088_nv12_10bit{"/data/test/media/1920_1088_nv12_10bit.yuv",
NATIVEBUFFER_PIXEL_FMT_YCBCR_P010, 1920, 1088 };
fileInfo file_176_144_rgba1010102{"/data/test/media/176_144_rgba1010102.yuv",
NATIVEBUFFER_PIXEL_FMT_RGBA_1010102, 176, 144 };
}
namespace OHOS {
namespace Media {
class HwEncDualNdkTest : public testing::Test {
public:
static void SetUpTestCase();
static void TearDownTestCase();
void SetUp() override;
void TearDown() override;
void InputFunc();
void OutputFunc();
void Release();
int32_t Stop();
};
}
}
void HwEncDualNdkTest::SetUpTestCase()
{
cap = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
const char *tmpCodecName = OH_AVCapability_GetName(cap);
if (memcpy_s(g_codecName, sizeof(g_codecName), tmpCodecName, strlen(tmpCodecName)) != 0)
cout << "memcpy failed" << endl;
cout << "codecname: " << g_codecName << endl;
cap_hevc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
const char *tmpCodecNameHevc = OH_AVCapability_GetName(cap_hevc);
if (memcpy_s(g_codecNameHEVC, sizeof(g_codecNameHEVC), tmpCodecNameHevc, strlen(tmpCodecNameHevc)) != 0)
cout << "memcpy failed" << endl;
cout << "codecname_hevc: " << g_codecNameHEVC << endl;
cap_dec = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
const char *tmpCodecNameDec = OH_AVCapability_GetName(cap_dec);
if (memcpy_s(g_codecNameDec, sizeof(g_codecNameDec), tmpCodecNameDec, strlen(tmpCodecNameDec)) != 0)
cout << "memcpy failed" << endl;
cout << "codecname_dec: " << g_codecNameDec << endl;
cap_hevc_dec = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
const char *tmpCodecNameDecHevc = OH_AVCapability_GetName(cap_hevc_dec);
if (memcpy_s(g_codecNameDecHEVC, sizeof(g_codecNameDecHEVC), tmpCodecNameDecHevc, strlen(tmpCodecNameDecHevc)) != 0)
cout << "memcpy failed" << endl;
cout << "codecname_hevc_dec: " << g_codecNameDecHEVC << endl;
}
void HwEncDualNdkTest::TearDownTestCase() {}
void HwEncDualNdkTest::SetUp() {}
void HwEncDualNdkTest::TearDown()
{
}
namespace {
void SetParameter(std::shared_ptr<VEncAPI11Sample>& encSample, ConfigParameter &configParameter)
{
encSample->DEFAULT_BITRATE_MODE = configParameter.bitRateMode;
encSample->DEFAULT_BITRATE = configParameter.bitRate;
encSample->DEFAULT_WIDTH = configParameter.width;
encSample->DEFAULT_HEIGHT = configParameter.height;
encSample->DEFAULT_PIX_FMT = configParameter.pixFmt;
encSample->hevcProfile = configParameter.hevcProfile;
encSample->DEFAULT_QUALITY = configParameter.quality;
encSample->DEFAULT_SQR_FACTOR = configParameter.sqrFactor;
encSample->DEFAULT_MAX_BITERATE = configParameter.maxBiterate;
encSample->enableBFrameMode = configParameter.enbleBFrame;
encSample->enableRepeat = configParameter.repeat;
encSample->setMaxCount = configParameter.maxCount;
encSample->DEFAULT_FRAME_AFTER = configParameter.frameAfter;
encSample->DEFAULT_MAX_COUNT = configParameter.maxCountFrame;
encSample->enableDualRoi = configParameter.roi;
encSample->roiInfo = configParameter.roiInfo;
encSample->TEMPORAL_ENABLE = configParameter.enableTemporal;
encSample->TEMPORAL_CONFIG = configParameter.temporalConfig;
}
int32_t SetSecondaryConfig(std::shared_ptr<VEncAPI11Sample>& encSample, ConfigParameter configParameter,
bool callBack = false)
{
encSample->SURF_INPUT = configParameter.surfSecondaryInput;
SetParameter(encSample, configParameter);
int32_t ret = encSample->SwitchSecondaryEncoder();
if (ret != AV_ERR_OK) {
return ret;
}
if (!configParameter.enableTemporal) {
ret = encSample->ConfigureVideoEncoder();
} else {
ret = encSample->ConfigureVideoEncoder_Temporal(configParameter.temporalGopSize);
}
if (ret != AV_ERR_OK) {
return ret;
}
if (!callBack) {
ret = encSample->SetDualCallback();
} else {
ret = encSample->SetCallback();
}
if (ret != AV_ERR_OK) {
return ret;
}
return ret;
}
int32_t SetPrimaryConfig(shared_ptr<VEncAPI11Sample>& encSample, ConfigParameter configParameter, bool isMain10 = false)
{
encSample->SURF_INPUT = configParameter.surfPrimaryInput;
encSample->configMain10 = isMain10;
encSample->DEFAULT_KEY_FRAME_INTERVAL = configParameter.frameInterval;
encSample->DEFAULT_RANGE_FLAG = configParameter.rangeFlag;
encSample->enableColorSpaceParams = configParameter.enableColorSpaceParam;
encSample->DEFAULT_COLOR_PRIMARIES = configParameter.colorPrimaries;
encSample->DEFAULT_TRANSFER_CHARACTERISTICS = configParameter.transferCharacteristics;
encSample->DEFAULT_MATRIX_COEFFICIENTS = configParameter.matrixCoefficients;
encSample->dualEos = configParameter.dualEos;
SetParameter(encSample, configParameter);
int32_t ret = encSample->SwitchPrimaryEncoder();
if (ret != AV_ERR_OK) {
return ret;
}
if (!configParameter.enableTemporal) {
ret = encSample->ConfigureVideoEncoder();
} else {
ret = encSample->ConfigureVideoEncoder_Temporal(configParameter.temporalGopSize);
}
if (ret != AV_ERR_OK) {
return ret;
}
ret = encSample->SetDualCallback();
if (ret != AV_ERR_OK) {
return ret;
}
return ret;
}
int32_t CreateEncoder(std::shared_ptr<VEncAPI11Sample>& encSample, const char *codeMime, vector<fileInfo> fileName)
{
encSample->runDualEncoder = true;
encSample->readMultiFiles = true;
for (size_t i = 0; i < fileName.size(); i++) {
encSample->fileInfos.push_back(fileName[i]);
}
if (codeMime == OH_AVCODEC_MIMETYPE_VIDEO_AVC) {
encSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DUAL_OUTPUT_1.h264";
encSample->OUT_DIR_SEC = "/data/test/media/VIDEO_ENCODE_DUAL_OUTPUT_2.h264";
} else if (codeMime == OH_AVCODEC_MIMETYPE_VIDEO_HEVC) {
encSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DUAL_OUTPUT_1.h265";
encSample->OUT_DIR_SEC = "/data/test/media/VIDEO_ENCODE_DUAL_OUTPUT_2.h265";
}
int32_t ret = encSample->CreatePrimaryEncoder(codeMime);
if (ret != AV_ERR_OK) {
return ret;
}
ret = encSample->CreateSecondaryEncoder();
if (ret != AV_ERR_OK) {
return ret;
}
return ret;
}
int32_t StartEncoder(std::shared_ptr<VEncAPI11Sample>& encSample, bool useSenondary = true, bool usePrimary = true)
{
int32_t ret = AV_ERR_OK;
if (useSenondary) {
ret = encSample->StartSecondaryEncoder();
if (ret != AV_ERR_OK) {
return ret;
}
}
if (usePrimary) {
ret = encSample->StartVideoEncoder();
if (ret != AV_ERR_OK) {
return ret;
}
}
encSample->WaitForEOS();
if (encSample->errCount != AV_ERR_OK) {
return encSample->errCount;
}
return ret;
}
}
namespace {
* @tc.number : VIDEO_ENCODE_DUAL_0010
* @tc.name : OH_VideoEncoder_CreatePrimaryWithPreproc接口参数mime为null
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0010, TestSize.Level2)
{
const char *mime = nullptr;
OH_AVCodec *vencCodec = nullptr;
ASSERT_EQ(AV_ERR_INVALID_VAL, OH_VideoEncoder_CreatePrimaryWithPreproc(mime, &vencCodec));
ASSERT_EQ(nullptr, vencCodec);
}
* @tc.number : VIDEO_ENCODE_DUAL_0020
* @tc.name : OH_VideoEncoder_CreateSecondaryFromPrimary接口参数primary为null
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0020, TestSize.Level2)
{
OH_AVCodec *primaryVencCodec = nullptr;
OH_AVCodec *vencCodec = nullptr;
ASSERT_EQ(AV_ERR_INVALID_VAL, OH_VideoEncoder_CreateSecondaryFromPrimary(primaryVencCodec, &vencCodec));
ASSERT_EQ(nullptr, vencCodec);
}
* @tc.number : VIDEO_ENCODE_DUAL_0030
* @tc.name : OH_VideoEncoder_CreateSecondaryFromPrimary接口参数primary为普通编码器
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0030, TestSize.Level2)
{
if (cap != nullptr) {
OH_AVCodec *primaryVencCodec = OH_VideoEncoder_CreateByName(g_codecName);
ASSERT_NE(nullptr, primaryVencCodec);
OH_AVCodec *vencCodec = nullptr;
ASSERT_EQ(AV_ERR_INVALID_VAL, OH_VideoEncoder_CreateSecondaryFromPrimary(primaryVencCodec, &vencCodec));
ASSERT_EQ(nullptr, vencCodec);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0040
* @tc.name : OH_VideoEncoder_CreateSecondaryFromPrimary重复调用
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0040, TestSize.Level2)
{
if (cap != nullptr) {
OH_AVCodec *primaryVencCodec = nullptr;
OH_VideoEncoder_CreatePrimaryWithPreproc(OH_AVCODEC_MIMETYPE_VIDEO_AVC, &primaryVencCodec);
ASSERT_NE(nullptr, primaryVencCodec);
OH_AVCodec *secondaryVencCodec = nullptr;
ASSERT_EQ(AV_ERR_OK, OH_VideoEncoder_CreateSecondaryFromPrimary(primaryVencCodec, &secondaryVencCodec));
ASSERT_NE(nullptr, secondaryVencCodec);
ASSERT_EQ(AV_ERR_INVALID_VAL, OH_VideoEncoder_CreateSecondaryFromPrimary(primaryVencCodec,
&secondaryVencCodec));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0050
* @tc.name : 编码H264, Primary/Secondary编码器config配置为720P
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0050, TestSize.Level1)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0060
* @tc.name : 硬编H265, Primary/Secondary编码器config配置为1080P
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0060, TestSize.Level0)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1080_nv21}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 1920, .height = 1080,
.pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.width = 1920, .height = 1080,
.pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0070
* @tc.name : 编码h264, Primary/Secondary编码器config配置为4K
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0070, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_3840_2160_nv12}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0080
* @tc.name : 硬编h265, config配置width/height的值为Primary>Secondary>输入的width/height值
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0080, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 1920, .height = 1080}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.width = 3840, .height = 2160}));
vEncSample->DEFAULT_WIDTH = 1280;
vEncSample->DEFAULT_HEIGHT = 720;
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0090
* @tc.name : 编码h264, config配置width/height的值为Primary<Secondary<输入的width/height值, onerror报错
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0090, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_3840_2160_nv12}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 1920, .height = 1080}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.width = 1280, .height = 720}));
vEncSample->DEFAULT_WIDTH = 3840;
vEncSample->DEFAULT_HEIGHT = 2160;
ASSERT_LT(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0100
* @tc.name : 编码h264, Primary/Secondary编码器均配置为CBR, OH_MD_KEY_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0100, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_3840_2160_nv12}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0110
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR, OH_MD_KEY_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0110, TestSize.Level0)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0120
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR, OH_MD_KEY_BITRATE一致, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0120, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0130
* @tc.name : 编码h264, Primary/Secondary编码器均配置为VBR, OH_MD_KEY_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0130, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1920_1080_nv21}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 1920, .height = 1080,
.pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = VBR, .width = 1920, .height = 1080,
.pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0140
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为VBR, OH_MD_KEY_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0140, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0150
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为VBR, OH_MD_KEY_BITRATE一致, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0150, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = VBR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0160
* @tc.name : 编码h264, Primary/Secondary编码器均配置为CQ, OH_MD_KEY_QUALITY一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0160, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1920_1080_nv21}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1920, .height = 1080,
.pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1920, .height = 1080,
.pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0170
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CQ, OH_MD_KEY_QUALITY一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0170, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1280, .height = 720}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1280, .height = 720}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0180
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CQ, OH_MD_KEY_QUALITY一致, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0180, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0190
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为SQR, OH_MD_KEY_SQR_FACTOR/OH_MD_KEY_MAX_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0190, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1280, .height = 720}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1280, .height = 720}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0200
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为SQR, SQR_FACTOR/MAX_BITRATE一致, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0200, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0210
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR_HIGH_QUALITY, OH_MD_KEY_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0210, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0220
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR_HIGH_QUALITY, OH_MD_KEY_BITRATE一致, PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0220, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .width = 1920,
.height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .width = 1920,
.height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0230
* @tc.name : 编码h264, Primary/Secondary编码器均配置为CBR, OH_MD_KEY_BITRATE不一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0230, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_3840_2160_nv12}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRate = 6000000, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRate = 5000000, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0240
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR, OH_MD_KEY_BITRATE不一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0240, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRate = 6000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0250
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR, OH_MD_KEY_BITRATE不一致, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0250, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRate = 6000000, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRate = 5000000, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0260
* @tc.name : 编码h264, Primary/Secondary编码器均配置为CQ, OH_MD_KEY_QUALITY不一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0260, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1920_1080_nv21}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 25, .width = 1920,
.height = 1080, .pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 30, .width = 1920,
.height = 1080, .pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0270
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CQ, OH_MD_KEY_QUALITY不一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0270, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 30}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 25}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0280
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CQ, OH_MD_KEY_QUALITY不一致, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0280, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 25, .width = 1920,
.height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 30, .width = 1920,
.height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0290
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为SQR, OH_MD_KEY_SQR_FACTOR/OH_MD_KEY_MAX_BITRATE不一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0290, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .sqrFactor = 30,
.maxBiterate = 4000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .sqrFactor = 32,
.maxBiterate = 6000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0300
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为SQR, SQR_FACTOR/MAX_BITRATE不一致, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0300, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10, .sqrFactor = 32, .maxBiterate = 6000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10, .sqrFactor = 30, .maxBiterate = 4000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0310
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR_HIGH_QUALITY, OH_MD_KEY_BITRATE不一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0310, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 6000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0320
* @tc.name : 硬编h265, Primary/Secondary编码器均配置为CBR_HIGH_QUALITY, OH_MD_KEY_BITRATE不一致, PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0320, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000,
.width = 1920, .height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 6000000,
.width = 1920, .height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0330
* @tc.name : 编码h264, Primary编码器配置为CBR, Secondary编码器配置为CQ
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0330, TestSize.Level0)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_3840_2160_nv12}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRate = 6000000, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0340
* @tc.name : 硬编h265, Primary编码器配置为CBR, Secondary编码器配置为CQ
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0340, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0350
* @tc.name : 硬编h265, Primary编码器配置为CBR, Secondary编码器配置为CQ, PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0350, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .bitRate = 5000000, .width = 1920,
.height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0360
* @tc.name : 硬编h265, Primary编码器配置为CBR, Secondary编码器配置为SQR, OH_MD_KEY_BITRATE和OH_MD_KEY_MAX_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0360, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .sqrFactor = 30,
.maxBiterate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0370
* @tc.name : 硬编h265, Primary编码器配置为CBR, Secondary编码器配置为SQR, BITRATE和MAX_BITRATE一致, PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0370, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10, .sqrFactor = 30, .maxBiterate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .bitRate = 5000000, .width = 1920,
.height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0380
* @tc.name : 硬编h265, Primary编码器配置为CBR, Secondary编码器配置为CBR_HIGH_QUALITY, OH_MD_KEY_BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0380, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0390
* @tc.name : 硬编h265, Primary编码器配置为CBR, Secondary编码器配置为CBR_HIGH_QUALITY, BITRATE一致, PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0390, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000,
.width = 1920, .height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .bitRate = 5000000, .width = 1920,
.height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0400
* @tc.name : 硬编h265, Primary编码器配置为CQ, Secondary编码器配置为SQR, FACTOR和QUALITY一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0400, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .sqrFactor = 30,
.maxBiterate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 30}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0410
* @tc.name : 硬编h265, Primary编码器配置为CQ, Secondary编码器配置为SQR, FACTOR和QUALITY一致, PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0410, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10, .sqrFactor = 30, .maxBiterate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10, .quality = 30}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0420
* @tc.name : 硬编h265, Primary编码器配置为CQ, Secondary编码器配置为CBR_HIGH_QUALITY
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0420, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .quality = 30}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0430
* @tc.name : 硬编h265, Primary编码器配置为CQ, Secondary编码器配置为CBR_HIGH_QUALITY, OH_MD_KEY_PROFILE配置为10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0430, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000,
.width = 1920, .height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CQ, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10, .quality = 30}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0440
* @tc.name : 硬编h265, Primary编码器配置为SQR, Secondary编码器配置为CBR_HIGH_QUALITY, MAX_BITRATE和BITRATE一致
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0440, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .maxBiterate = 5000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0450
* @tc.name : 硬编h265, Primary编码器配置为SQR, Secondary编码器配置为CBR_HIGH_QUALITY, MAX_BITRATE和BITRATE一致, 10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0450, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 5000000,
.width = 1920, .height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10, .maxBiterate = 5000000}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0460
* @tc.name : 硬编h265, Primary编码器 OH_MD_KEY_PROFILE配置为10bit, Secondary配置为8bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0460, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR, .width = 1920, .height = 1088}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_LT(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0470
* @tc.name : 编码h264, Primary编码器setparameter中模式不变, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0470, TestSize.Level1)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchParame = true,
.bitrateMode = {CBR}, .cbrBitrate = 6000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0480
* @tc.name : 编码h264, Primary编码器setparameter中模式切换CBR->VBR, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0480, TestSize.Level0)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchMode = true, .enableSwitchParame = true,
.bitrateMode = {VBR}, .vbrBitrate = 5000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0490
* @tc.name : 硬编h265, Primary编码器setparameter中模式切换CBR->VBR->SQR->CBR_HIGH_QUALITY, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0490, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchMode = true, .enableSwitchParame = true,
.bitrateMode = {VBR, SQR, CBR_HIGH_QUALITY}, .sqrFactor = 30, .maxBitrate = 6000000,
.vbrBitrate = 5000000, .cbrHighQuality = 5000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0500
* @tc.name : 硬编h265, Primary编码器setparameter中8bit->10bit, 报错
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0500, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchBitParame = true,
.bitrateMode = {CBR}, .hevcProfile = HEVC_PROFILE_MAIN_10};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0510
* @tc.name : 硬编h265, Primary编码器setparameter中10bit->8bit, 报错
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0510, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchBitParame = true,
.bitrateMode = {CBR}, .hevcProfile = HEVC_PROFILE_MAIN};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0520
* @tc.name : 编码h264, Secondary编码器setparameter中模式不变, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0520, TestSize.Level1)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchSecondary = true, .enableSwitchParame = true,
.bitrateMode = {CBR}, .cbrBitrate = 6000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0530
* @tc.name : 编码h264, Secondary编码器setparameter中模式切换CBR->VBR, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0530, TestSize.Level0)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchSecondary = true, .enableSwitchMode = true, .enableSwitchParame = true,
.bitrateMode = {VBR}, .vbrBitrate = 5000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0540
* @tc.name : 硬编h265, Secondary编码器setparameter中模式切换CBR->VBR->SQR->CBR_HIGH_QUALITY, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0540, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchSecondary = true, .enableSwitchMode = true, .enableSwitchParame = true,
.bitrateMode = {VBR, SQR, CBR_HIGH_QUALITY}, .sqrFactor = 30, .maxBitrate = 6000000,
.vbrBitrate = 5000000, .cbrHighQuality = 5000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0550
* @tc.name : 硬编h265, Secondary编码器setparameter中8bit->10bit, 报错
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0550, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchSecondary = true, .enableSwitchBitParame = true,
.bitrateMode = {CBR}, .hevcProfile = HEVC_PROFILE_MAIN_10};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0560
* @tc.name : 硬编h265, Secondary编码器setparameter中10bit->8bit, 报错
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0560, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchSecondary = true, .enableSwitchBitParame = true,
.bitrateMode = {CBR}, .hevcProfile = HEVC_PROFILE_MAIN};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0570
* @tc.name : 编码h264, Primary+Secondary编码器setparameter中模式不变, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0570, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchSecondary = true, .enableSwitchParame = true,
.bitrateMode = {CBR}, .cbrBitrate = 6000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0580
* @tc.name : 编码h264, Primary+Secondary编码器setparameter中模式切换CBR->VBR, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0580, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchSecondary = true, .enableSwitchMode = true,
.enableSwitchParame = true, .bitrateMode = {VBR}, .vbrBitrate = 5000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0590
* @tc.name : 硬编h265, Primary+Secondary编码器setparameter中模式切换CBR->VBR->SQR->CBR_HIGH_QUALITY, 修改参数
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0590, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->parameter = {.enableSwitchPrimary = true, .enableSwitchSecondary = true, .enableSwitchMode = true,
.enableSwitchParame = true, .bitrateMode = {VBR, SQR, CBR_HIGH_QUALITY}, .sqrFactor = 30,
.maxBitrate = 6000000, .vbrBitrate = 5000000, .cbrHighQuality = 5000000};
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
ASSERT_EQ(false, vEncSample->setParameterFail);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0600
* @tc.name : 硬编h265, Primary编码器B帧编码, Secondary普通编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0600, TestSize.Level1)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .enbleBFrame = 1}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0610
* @tc.name : 硬编h265, Primary编码器B帧编码, SecondaryB帧编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0610, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR, .enbleBFrame = 1}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .enbleBFrame = 1}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0620
* @tc.name : 硬编h265, Primary编码器B帧编码, Secondary重复编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0620, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.enbleBFrame = 1}));
vEncSample->enableRepeat = true;
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0630
* @tc.name : 硬编h265, Primary编码器B帧编码, Secondary ROI编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0630, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.enbleBFrame = 1}));
vEncSample->enableDualRoi = true;
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0640
* @tc.name : 硬编h265, Primary编码器B帧编码, Secondary TEMPORAL
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0640, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.enbleBFrame = 1}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0650
* @tc.name : 编码h264, Primary重复编码, Secondary普通编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0650, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0660
* @tc.name : 编码h264, Primary重复编码, Secondary重复编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0660, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0670
* @tc.name : 编码h264, Primary重复编码, Secondary ROI编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0670, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
vEncSample->enableDualRoi = true;
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0680
* @tc.name : 编码h264, Primary重复编码, Secondary TEMPORAL
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0680, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0690
* @tc.name : 硬编h265, Primary重复编码, Secondary普通编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0690, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0700
* @tc.name : 硬编h265, Primary重复编码, Secondary重复编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0700, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0710
* @tc.name : 硬编h265, Primary重复编码, Secondary ROI编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0710, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
vEncSample->enableDualRoi = true;
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0720
* @tc.name : 硬编h265, Primary重复编码, Secondary TEMPORAL
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0720, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.repeat = true, .maxCount = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0730
* @tc.name : 编码h264, Primary ROI编码, Secondary普通编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0730, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0740
* @tc.name : 编码h264, Primary ROI编码, Secondary ROI编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0740, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->enableDualRoi = true;
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0750
* @tc.name : 编码h264, Primary ROI编码, Secondary TEMPORAL
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0750, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0760
* @tc.name : 硬编h265, Primary ROI编码, Secondary普通编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0760, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0770
* @tc.name : 硬编h265, Primary ROI编码, Secondary ROI编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0770, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0780
* @tc.name : 硬编h265, Primary ROI编码, Secondary TEMPORAL
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0780, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.roi = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0790
* @tc.name : 编码h264, Primary TEMPORAL, Secondary 普通编码
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0790, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0800
* @tc.name : 编码h264, Primary TEMPORAL, Secondary TEMPORAL
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0800, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0810
* @tc.name : 硬编h265, Primary TEMPORAL, Secondary 普通编码, 配置SQR
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0810, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .bitRate = 6000000,
.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0820
* @tc.name : 硬编h265, Primary TEMPORAL, Secondary 普通编码, 配置SQR, 10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0820, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = SQR, .width = 1920, .height = 1088,
.hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = SQR, .bitRate = 6000000, .width = 1920,
.height = 1088, .enableTemporal = true, .temporalConfig = true}, true));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0830
* @tc.name : 硬编h265, Primary TEMPORAL, Secondary 普通编码, 配置CBR_HIGH_QUALITY
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0830, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 6000000}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .enableTemporal = true,
.temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0840
* @tc.name : 硬编h265, Primary TEMPORAL, Secondary 普通编码, 配置CBR_HIGH_QUALITY, 10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0840, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1920_1088_nv12_10bit}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .bitRate = 6000000,
.width = 1920, .height = 1088, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR_HIGH_QUALITY, .enableTemporal = true,
.width = 1920, .height = 1088, .temporalConfig = true}, true));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0850
* @tc.name : 硬编h265, Primary TEMPORAL, Secondary TEMPORAL
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0850, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.enableTemporal = true, .temporalConfig = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0860
* @tc.name : 编码h264, Primary变分变率/格式
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0860, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_640_480_rgba,
file_1280_536_nv21, file_1280_720_nv, file_1920_1080_nv21, file_3840_2160_nv12}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0870
* @tc.name : 硬编h265, Primary变分变率/格式,8bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0870, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_640_480_rgba,
file_1280_720_nv, file_1920_1080_nv21, file_1280_536_nv21, file_3840_2160_nv12}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .width = 3840, .height = 2160}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0880
* @tc.name : 硬编H265, Primary 变分变率/格式, 10bit
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0880, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv12_10bit,
file_176_144_rgba1010102}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .hevcProfile = HEVC_PROFILE_MAIN_10}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0890
* @tc.name : 编码H264, Primary I帧请求
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0890, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.frameInterval = 0}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0900
* @tc.name : 硬编H265, Primary I帧请求
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0900, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.frameInterval = 0}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0910
* @tc.name : 编码H264, Primary colorSpace Param
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0910, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.rangeFlag = 1, .enableColorSpaceParam = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0920
* @tc.name : 硬编H265, Primary colorSpace Param
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0920, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.rangeFlag = 1, .enableColorSpaceParam = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0930
* @tc.name : 编码h264, 创建Primary/Secondary编码器, 只启用Primary编码器
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0930, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .dualEos = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample, false, true));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0940
* @tc.name : 硬编h265, 创建Primary/Secondary编码器, 只启用Secondary编码器
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0940, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR, .surfSecondaryInput = true}));
ASSERT_EQ(AV_ERR_OK, vEncSample->SwitchPrimaryEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->CreateSurface());
ASSERT_EQ(AV_ERR_OK, vEncSample->SetDualCallback());
ASSERT_EQ(AV_ERR_OK, vEncSample->SwitchSecondaryEncoder());
vEncSample->isSurface = true;
vEncSample->dualEos = true;
ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
vEncSample->WaitForEOS();
ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0950
* @tc.name : 编码H264, 销毁(destroy)Secondary, 使用Primary
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0950, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .dualEos = true}));
ASSERT_EQ(AV_ERR_OK, vEncSample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->ReleaseSecondary());
vEncSample->WaitForEOS();
ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0960
* @tc.name : 硬编H265, Primary destroy
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0960, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->needStopInLoop = true;
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, vEncSample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->Stop());
ASSERT_EQ(AV_ERR_OK, vEncSample->Release());
vEncSample->WaitForEOS();
ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0970
* @tc.name : 编码h264, Primary过程中flush、NotifyEndOfStream、reset、stop, Secondary不影响
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0970, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->needStopInLoop = true;
vEncSample->noStop = true;
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .dualEos = true}));
ASSERT_EQ(AV_ERR_OK, vEncSample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->NotifyEndOfStream());
vEncSample->enbleSyncMode = 1;
ASSERT_EQ(AV_ERR_OK, vEncSample->Flush());
ASSERT_EQ(AV_ERR_OK, vEncSample->Stop());
ASSERT_EQ(AV_ERR_OK, vEncSample->Reset());
vEncSample->WaitForEOS();
ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0980
* @tc.name : 硬编h265, Secondary过程中flush、NotifyEndOfStream、reset、stop, Primary不影响
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0980, TestSize.Level2)
{
if (cap_hevc != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .dualEos = true}));
ASSERT_EQ(AV_ERR_OK, vEncSample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
ASSERT_EQ(AV_ERR_OK, vEncSample->NotifyEndOfStreamSecondary());
ASSERT_EQ(AV_ERR_OK, vEncSample->FlushSecondary());
ASSERT_EQ(AV_ERR_OK, vEncSample->StopSecondary());
ASSERT_EQ(AV_ERR_OK, vEncSample->ResetSecondary());
vEncSample->WaitForEOS();
ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_0990
* @tc.name : 编码264, 不创建Secondary, Primary不影响
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_0990, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->runDualEncoder = true;
vEncSample->readMultiFiles = true;
vEncSample->fileInfos.push_back(file_1280_720_nv);
vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DUAL_0990_1.h264";
ASSERT_EQ(AV_ERR_OK, vEncSample->CreatePrimaryEncoder(OH_AVCODEC_MIMETYPE_VIDEO_AVC));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR, .dualEos = true}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample, false, true));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1000
* @tc.name : 硬编H265, 创建Primary、Secondary, 销毁Secondary, 重建Secondary
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1000, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->repeatCreateSecondary = true;
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = CBR}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1010
* @tc.name : 编码h264转码(解码+编码surface)
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1010, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto sample = make_unique<VideoTransCodeApi11Sample>();
sample->DEFAULT_PROFILE = AVC_PROFILE_MAIN;
sample->DEFAULT_WIDTH = 1104;
sample->DEFAULT_HEIGHT = 622;
sample->INP_DIR = "/data/test/media/1104x622.h264";
sample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DUAL_1010_1.h264";
sample->OUT_DIR_SEC = "/data/test/media/VIDEO_ENCODE_DUAL_1010_2.h264";
ASSERT_EQ(AV_ERR_OK, sample->CreateVideocoder(g_codecNameDec, OH_AVCODEC_MIMETYPE_VIDEO_AVC));
ASSERT_EQ(AV_ERR_OK, sample->Configure());
ASSERT_EQ(AV_ERR_OK, sample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OK, sample->Start());
sample->WaitForEos();
ASSERT_EQ(0, sample->errorCount);
ASSERT_EQ(300, sample->frameCountDec);
ASSERT_EQ(300, sample->frameCountEnc);
ASSERT_EQ(300, sample->frameCountEncSecondary);
cout << "frameCountDec--" << sample->frameCountDec << endl;
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1020
* @tc.name : 硬编h265转码(解码+编码surface)
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1020, TestSize.Level2)
{
if (cap_hevc_dec != nullptr && !access("/system/lib64/media/", 0)) {
shared_ptr<VideoTransCodeApi11Sample> sample = make_shared<VideoTransCodeApi11Sample>();
sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN;
sample->DEFAULT_WIDTH = 1920;
sample->DEFAULT_HEIGHT = 1080;
sample->INP_DIR = "/data/test/media/1920x1080.h265";
sample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DUAL_1020_1.h265";
sample->OUT_DIR_SEC = "/data/test/media/VIDEO_ENCODE_DUAL_1020_2.h265";
ASSERT_EQ(AV_ERR_OK, sample->CreateVideocoder(g_codecNameDecHEVC, OH_AVCODEC_MIMETYPE_VIDEO_HEVC));
ASSERT_EQ(AV_ERR_OK, sample->Configure());
ASSERT_EQ(AV_ERR_OK, sample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OK, sample->Start());
sample->WaitForEos();
ASSERT_EQ(0, sample->errorCount);
ASSERT_EQ(300, sample->frameCountDec);
ASSERT_EQ(300, sample->frameCountEnc);
ASSERT_EQ(300, sample->frameCountEncSecondary);
cout << "frameCountDec--" << sample->frameCountDec << endl;
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1030
* @tc.name : 硬编h265 hdr转码(解码+编码surface)
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1030, TestSize.Level2)
{
if (cap_hevc_dec != nullptr && !access("/system/lib64/media/", 0)) {
shared_ptr<VideoTransCodeApi11Sample> sample = make_shared<VideoTransCodeApi11Sample>();
sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN_10;
sample->DEFAULT_WIDTH = 3840;
sample->DEFAULT_HEIGHT = 2160;
sample->INP_DIR = "/data/test/media/hdr10.h265";
sample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DUAL_1030_1.h265";
sample->OUT_DIR_SEC = "/data/test/media/VIDEO_ENCODE_DUAL_1030_2.h265";
ASSERT_EQ(AV_ERR_OK, sample->CreateVideocoder(g_codecNameDecHEVC, OH_AVCODEC_MIMETYPE_VIDEO_HEVC));
ASSERT_EQ(AV_ERR_OK, sample->Configure());
ASSERT_EQ(AV_ERR_OK, sample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OK, sample->Start());
sample->WaitForEos();
ASSERT_EQ(0, sample->errorCount);
ASSERT_EQ(600, sample->frameCountDec);
ASSERT_EQ(600, sample->frameCountEnc);
ASSERT_EQ(600, sample->frameCountEncSecondary);
cout << "frameCountDec--" << sample->frameCountDec << endl;
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1040
* @tc.name : 编码H264, Primary/Secondary配置不同的pix_format
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1040, TestSize.Level2)
{
if (cap != nullptr && !access("/system/lib64/media/", 0)) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR, .pixFmt = AV_PIXEL_FORMAT_NV21}));
ASSERT_EQ(AV_ERR_OK, SetPrimaryConfig(vEncSample, {.bitRateMode = VBR, .pixFmt = AV_PIXEL_FORMAT_NV12}));
ASSERT_EQ(AV_ERR_OK, StartEncoder(vEncSample));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1050
* @tc.name : 硬编H265, buffer模式相关接口
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1050, TestSize.Level2)
{
if (cap_hevc != nullptr) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, vEncSample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vEncSample->PushInputBuffer(1));
ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1060
* @tc.name : 编码H264, 配置同步模式
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1060, TestSize.Level3)
{
if (cap != nullptr) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
vEncSample->enbleSyncMode = 1;
ASSERT_EQ(AV_ERR_INVALID_VAL, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1070
* @tc.name : 硬编H265, 同步模式相关接口
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1070, TestSize.Level3)
{
if (cap_hevc != nullptr) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, vEncSample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vEncSample->QueryInputBuffer(0, 0));
ASSERT_EQ(nullptr, vEncSample->GetInputBuffer(0));
ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vEncSample->QueryOutputBuffer(0, 0));
ASSERT_EQ(nullptr, vEncSample->GetOutputBuffer(0));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1080
* @tc.name : 编码264, SetCallback旧通路
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1080, TestSize.Level3)
{
if (cap != nullptr) {
auto vEncSample = make_shared<VEncAPI11Sample>();
vEncSample->runDualEncoder = true;
ASSERT_EQ(AV_ERR_OK, vEncSample->CreatePrimaryEncoder(OH_AVCODEC_MIMETYPE_VIDEO_AVC));
ASSERT_EQ(AV_ERR_OK, vEncSample->CreateSecondaryEncoder());
ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}, true));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1090
* @tc.name : 硬编H265, OH_VideoEncoder_PushInputParameter
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1090, TestSize.Level3)
{
if (cap != nullptr) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_AVC, {file_1280_720_nv}));
ASSERT_EQ(AV_ERR_OK, SetSecondaryConfig(vEncSample, {.bitRateMode = VBR}));
ASSERT_EQ(AV_ERR_OK, vEncSample->StartSecondaryEncoder());
ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vEncSample->PushInputParameter(0));
}
}
* @tc.number : VIDEO_ENCODE_DUAL_1100
* @tc.name : 编码H265, OH_VideoEncoder_RegisterParameterCallback
* @tc.desc : function test
*/
HWTEST_F(HwEncDualNdkTest, VIDEO_ENCODE_DUAL_1100, TestSize.Level3)
{
if (cap_hevc != nullptr) {
auto vEncSample = make_shared<VEncAPI11Sample>();
ASSERT_EQ(AV_ERR_OK, CreateEncoder(vEncSample, OH_AVCODEC_MIMETYPE_VIDEO_HEVC, {file_1280_720_nv}));
vEncSample->DEFAULT_BITRATE_MODE = VBR;
vEncSample->SURF_INPUT = true;
vEncSample->DEFAULT_WIDTH = 1280;
vEncSample->DEFAULT_HEIGHT = 720;
vEncSample->DEFAULT_PIX_FMT = AV_PIXEL_FORMAT_NV12;
ASSERT_EQ(AV_ERR_OK, vEncSample->SwitchPrimaryEncoder());
ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vEncSample->SetVideoEncoderCallback());
}
}
}