提交 c933ace1 编写于 作者: L ling990

add testcases Signed-off-by: ling990 <liling96@huawei.com>

Signed-off-by: Nling990 <ling990@qq.com>
上级 6a1e0d79
......@@ -14,12 +14,14 @@
import("//test/xts/tools/build/suite.gni")
module_output_path = "acts/ActsAvcodecNdkTest"
MEDIA_ROOT_DIR = "//foundation/multimedia/player_framework/"
ohos_moduletest_suite("ActsAvcodecNdkTest") {
module_out_path = module_output_path
sources = [
"audioDecEncNdk/src/ADecEncNdkSample.cpp",
"audioDecEncNdk/src/ActsAudioDecEncNdkTest.cpp",
"codecFormatNdk/ActsCodecFormatNdkTest.cpp",
"videoDecEncNdk/src/ActsVideoDecEncNdkTest.cpp",
"videoDecEncNdk/src/VDecEncNdkSample.cpp",
]
......@@ -28,13 +30,17 @@ ohos_moduletest_suite("ActsAvcodecNdkTest") {
"audioDecEncNdk/include",
"videoDecEncNdk/include",
"//foundation/multimedia/audio_framework/interfaces/inner_api/native/audiocommon/include",
"//foundation/multimedia/player_framework/interfaces/inner_api/native",
"//foundation/multimedia/player_framework/interfaces/kits/c",
"//foundation/multimedia/player_framework/frameworks/native/capi/common",
"//commonlibrary/c_utils/base/include",
"//foundation/graphic/graphic_2d/frameworks/surface/include",
"//foundation/graphic/graphic_2d/interfaces/inner_api/surface",
"//foundation/graphic/graphic_2d/interfaces/inner_api/common",
"//foundation//window/window_manager/interfaces/innerkits/wm",
"//graphic/graphic_2d/interfaces/kits/surface",
"//graphic/graphic_2d/interfaces/inner_api/surface",
"//foundation/graphic/graphic_2d/frameworks/surface/include",
"$MEDIA_ROOT_DIR/interfaces/inner_api/native",
"$MEDIA_ROOT_DIR/interfaces/kits/c",
"$MEDIA_ROOT_DIR/frameworks/native/capi/common",
"$MEDIA_ROOT_DIR/interfaces/kits/c",
"$MEDIA_ROOT_DIR/interfaces/inner_api/native",
]
cflags = [
......@@ -56,14 +62,17 @@ ohos_moduletest_suite("ActsAvcodecNdkTest") {
]
deps = [
"$MEDIA_ROOT_DIR/interfaces/inner_api/native:media_client",
"$MEDIA_ROOT_DIR/interfaces/kits/c:native_media_adec",
"$MEDIA_ROOT_DIR/interfaces/kits/c:native_media_aenc",
"$MEDIA_ROOT_DIR/interfaces/kits/c:native_media_codecbase",
"$MEDIA_ROOT_DIR/interfaces/kits/c:native_media_core",
"$MEDIA_ROOT_DIR/interfaces/kits/c:native_media_vdec",
"$MEDIA_ROOT_DIR/interfaces/kits/c:native_media_venc",
"//foundation/graphic/graphic_2d:libsurface",
"//foundation/graphic/graphic_2d/frameworks/surface:surface",
"//foundation/multimedia/player_framework/interfaces/kits/c:native_media_adec",
"//foundation/multimedia/player_framework/interfaces/kits/c:native_media_aenc",
"//foundation/multimedia/player_framework/interfaces/kits/c:native_media_codecbase",
"//foundation/multimedia/player_framework/interfaces/kits/c:native_media_core",
"//foundation/multimedia/player_framework/interfaces/kits/c:native_media_vdec",
"//foundation/multimedia/player_framework/interfaces/kits/c:native_media_venc",
"//foundation/graphic/graphic_2d/rosen/modules/render_service_client:librender_service_client",
"//foundation/window/window_manager/wm:libwm",
]
external_deps = [
"c_utils:utils",
......
......@@ -64,8 +64,10 @@ public:
ADecEncNdkSample() = default;
~ADecEncNdkSample();
struct OH_AVCodec* CreateAudioDecoder(std::string mimetype);
struct OH_AVCodec* CreateAudioDecoderByMime(std::string mimetype);
struct OH_AVCodec* CreateAudioDecoderByName(std::string name);
int32_t ConfigureDec(struct OH_AVFormat *format);
int32_t SetParameterDec(struct OH_AVFormat *format);
int32_t PrepareDec();
int32_t StartDec();
int32_t StopDec();
......@@ -73,8 +75,10 @@ public:
int32_t ResetDec();
int32_t ReleaseDec();
struct OH_AVCodec* CreateAudioEncoder(std::string mimetype);
struct OH_AVCodec* CreateAudioEncoderByMime(std::string mimetype);
struct OH_AVCodec* CreateAudioEncoderByName(std::string name);
int32_t ConfigureEnc(struct OH_AVFormat *format);
int32_t SetParameterEnc(struct OH_AVFormat *format);
int32_t PrepareEnc();
int32_t StartEnc();
int32_t StopEnc();
......
......@@ -16,6 +16,8 @@
#include "ADecEncNdkSample.h"
#include "native_avmemory.h"
#include "native_averrors.h"
#include "native_avcodec_base.h"
using namespace OHOS;
using namespace OHOS::Media;
using namespace std;
......@@ -124,9 +126,13 @@ ADecEncNdkSample::~ADecEncNdkSample()
acodecSignal_ = nullptr;
}
struct OH_AVCodec* ADecEncNdkSample::CreateAudioDecoder(std::string mimetype)
struct OH_AVCodec* ADecEncNdkSample::CreateAudioDecoderByMime(std::string mimetype)
{
adec_ = OH_AudioDecoder_CreateByMime(mimetype.c_str());
if (mimetype == "audio/mp4a-latm") {
adec_ = OH_AudioDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
} else {
adec_ = OH_AudioDecoder_CreateByMime(mimetype.c_str());
}
NDK_CHECK_AND_RETURN_RET_LOG(adec_ != nullptr, nullptr, "Fatal: OH_AudioDecoder_CreateByMime");
acodecSignal_ = new ADecEncSignal();
......@@ -141,11 +147,33 @@ struct OH_AVCodec* ADecEncNdkSample::CreateAudioDecoder(std::string mimetype)
return adec_;
}
struct OH_AVCodec* ADecEncNdkSample::CreateAudioDecoderByName(std::string name)
{
adec_ = OH_AudioDecoder_CreateByName(name.c_str());
NDK_CHECK_AND_RETURN_RET_LOG(adec_ != nullptr, nullptr, "Fatal: OH_AudioDecoder_CreateByName");
acodecSignal_ = new ADecEncSignal();
NDK_CHECK_AND_RETURN_RET_LOG(acodecSignal_ != nullptr, nullptr, "Fatal: No Memory");
cbDec_.onError = AdecAsyncError;
cbDec_.onStreamChanged = AdecAsyncStreamChanged;
cbDec_.onNeedInputData = AdecAsyncNeedInputData;
cbDec_.onNeedOutputData = AdecAsyncNewOutputData;
int32_t ret = OH_AudioDecoder_SetCallback(adec_, cbDec_, static_cast<void *>(acodecSignal_));
NDK_CHECK_AND_RETURN_RET_LOG(ret == AV_ERR_OK, NULL, "Fatal: OH_AudioDecoder_SetCallback");
return adec_;
}
int32_t ADecEncNdkSample::ConfigureDec(struct OH_AVFormat *format)
{
return OH_AudioDecoder_Configure(adec_, format);
}
int32_t ADecEncNdkSample::SetParameterDec(struct OH_AVFormat *format)
{
return OH_AudioDecoder_SetParameter(adec_, format);
}
int32_t ADecEncNdkSample::PrepareDec()
{
return OH_AudioDecoder_Prepare(adec_);
......@@ -385,9 +413,13 @@ void ADecEncNdkSample::InputFuncDec()
}
}
struct OH_AVCodec* ADecEncNdkSample::CreateAudioEncoder(std::string mimetype)
struct OH_AVCodec* ADecEncNdkSample::CreateAudioEncoderByMime(std::string mimetype)
{
aenc_ = OH_AudioEncoder_CreateByMime(mimetype.c_str());
if (mimetype == "audio/mp4a-latm") {
aenc_ = OH_AudioEncoder_CreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC);
} else {
aenc_ = OH_AudioEncoder_CreateByMime(mimetype.c_str());
}
NDK_CHECK_AND_RETURN_RET_LOG(aenc_ != nullptr, nullptr, "Fatal: OH_AudioEncoder_CreateByMime");
cbEnc_.onError = AencAsyncError;
cbEnc_.onStreamChanged = AencAsyncStreamChanged;
......@@ -398,11 +430,28 @@ struct OH_AVCodec* ADecEncNdkSample::CreateAudioEncoder(std::string mimetype)
return aenc_;
}
struct OH_AVCodec* ADecEncNdkSample::CreateAudioEncoderByName(std::string name)
{
aenc_ = OH_AudioEncoder_CreateByName(name.c_str());
NDK_CHECK_AND_RETURN_RET_LOG(aenc_ != nullptr, nullptr, "Fatal: OH_AudioEncoder_CreateByName");
cbEnc_.onError = AencAsyncError;
cbEnc_.onStreamChanged = AencAsyncStreamChanged;
cbEnc_.onNeedInputData = AencAsyncNeedInputData;
cbEnc_.onNeedOutputData = AencAsyncNewOutputData;
int32_t ret = OH_AudioEncoder_SetCallback(aenc_, cbEnc_, static_cast<void *>(acodecSignal_));
NDK_CHECK_AND_RETURN_RET_LOG(ret == AV_ERR_OK, NULL, "Fatal: OH_AudioEncoder_SetCallback");
return aenc_;
}
int32_t ADecEncNdkSample::ConfigureEnc(struct OH_AVFormat *format)
{
return OH_AudioEncoder_Configure(aenc_, format);
}
int32_t ADecEncNdkSample::SetParameterEnc(struct OH_AVFormat *format)
{
return OH_AudioEncoder_SetParameter(aenc_, format);
}
int32_t ADecEncNdkSample::PrepareEnc()
{
......
......@@ -48,8 +48,11 @@ uint32_t ES_AAC_48000_32_1[] = {
381, 375, 373, 349, 391, 357, 384, 395, 384, 380, 386, 372, 386, 383, 378, 385, 385,
384, 342, 390, 379, 387, 386, 393, 397, 362, 393, 394, 391, 383, 385, 377, 379, 381,
369, 375, 379, 346, 382, 356, 361, 366, 394, 393, 385, 362, 406, 399, 384, 377, 385};
constexpr uint32_t ES_AAC_48000_32_1_Length = sizeof(ES_AAC_48000_32_1) / sizeof(uint32_t);
const string MIME_TYPE_AAC = "audio/mp4a-latm";
const string DECODER_AAC = "avdec_aac";
const string ENCODER_AAC = "avenc_aac";
constexpr uint32_t DEFAULT_SAMPLE_RATE = 44100;
constexpr uint32_t DEFAULT_CHANNELS = 2;
const char* READPATH = "/data/media/AAC_48000_32_1.aac";
......@@ -107,8 +110,9 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_010
OH_AVFormat *AudioFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, AudioFormat);
ASSERT_EQ(true, SetFormat(AudioFormat, AudioParam));
OH_AVFormat_SetStringValue(AudioFormat, OH_MD_KEY_CODEC_MIME, OH_AVCODEC_MIMETYPE_AUDIO_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoder(MIME_TYPE_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoderByName(DECODER_AAC);
ASSERT_NE(nullptr, audDec);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureDec(AudioFormat));
OH_AVFormat *OutDescDec = OH_AudioDecoder_GetOutputDescription(audDec);
......@@ -116,7 +120,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_010
ASSERT_EQ(true, CheckDecDesc(AudioParam, OutDescDec));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareDec());
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoder(MIME_TYPE_AAC);
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoderByName(ENCODER_AAC);
ASSERT_NE(nullptr, audEnc);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureEnc(AudioFormat));
OH_AVFormat *OutDescEnc = OH_AudioEncoder_GetOutputDescription(audEnc);
......@@ -127,7 +131,9 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_010
aDecEncSample->SetReadPath(READPATH, ES_AAC_48000_32_1, ES_AAC_48000_32_1_Length);
aDecEncSample->SetSavePath("/data/media/AAC_48000_32_1_out1.aac");
ASSERT_EQ(AV_ERR_OK, aDecEncSample->StartEnc());
ASSERT_EQ(AV_ERR_OK, aDecEncSample->SetParameterEnc(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->StartDec());
ASSERT_EQ(AV_ERR_OK, aDecEncSample->SetParameterDec(AudioFormat));
while (!aDecEncSample->GetEncEosState()) {};
ASSERT_EQ(AV_ERR_OK, aDecEncSample->StopDec());
......@@ -150,17 +156,19 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_020
{
ADecEncNdkSample *aDecEncSample = new ADecEncNdkSample();
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoder(MIME_TYPE_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audDec);
OH_AVFormat *AudioFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, AudioFormat);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNELS);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLE_RATE);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, AudioStandard::SAMPLE_S16LE);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_TRACK_TYPE, MEDIA_TYPE_AUD);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureDec(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareDec());
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoder(MIME_TYPE_AAC);
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audEnc);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureEnc(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareEnc());
......@@ -190,17 +198,19 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_030
{
ADecEncNdkSample *aDecEncSample = new ADecEncNdkSample();
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoder(MIME_TYPE_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audDec);
OH_AVFormat *AudioFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, AudioFormat);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_AUD_CHANNEL_COUNT, DEFAULT_CHANNELS);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_AUD_SAMPLE_RATE, DEFAULT_SAMPLE_RATE);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, AudioStandard::SAMPLE_S16LE);
OH_AVFormat_SetIntValue(AudioFormat, OH_MD_KEY_PROFILE, AAC_PROFILE_LC);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureDec(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareDec());
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoder(MIME_TYPE_AAC);
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audEnc);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureEnc(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareEnc());
......@@ -228,7 +238,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_040
{
ADecEncNdkSample *aDecEncSample = new ADecEncNdkSample();
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoder(MIME_TYPE_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audDec);
OH_AVFormat *AudioFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, AudioFormat);
......@@ -238,7 +248,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_040
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureDec(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareDec());
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoder(MIME_TYPE_AAC);
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audEnc);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureEnc(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareEnc());
......@@ -278,7 +288,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_050
{
ADecEncNdkSample *aDecEncSample = new ADecEncNdkSample();
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoder(MIME_TYPE_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audDec);
OH_AVFormat *AudioFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, AudioFormat);
......@@ -288,7 +298,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_050
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureDec(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareDec());
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoder(MIME_TYPE_AAC);
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audEnc);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureEnc(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareEnc());
......@@ -310,8 +320,6 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_050
ASSERT_EQ(AV_ERR_OK, aDecEncSample->StartEnc());
ASSERT_EQ(AV_ERR_OK, aDecEncSample->StartDec());
aDecEncSample->SetEosState(true);
sleep(2);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->CalcuError());
while (!aDecEncSample->GetEncEosState()) {};
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ReleaseDec());
......@@ -333,7 +341,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_060
{
ADecEncNdkSample *aDecEncSample = new ADecEncNdkSample();
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoder(MIME_TYPE_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audDec);
OH_AVFormat *AudioFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, AudioFormat);
......@@ -343,7 +351,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_060
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureDec(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareDec());
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoder(MIME_TYPE_AAC);
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audEnc);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureEnc(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareEnc());
......@@ -385,7 +393,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_070
{
ADecEncNdkSample *aDecEncSample = new ADecEncNdkSample();
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoder(MIME_TYPE_AAC);
struct OH_AVCodec* audDec = aDecEncSample->CreateAudioDecoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audDec);
OH_AVFormat *AudioFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, AudioFormat);
......@@ -395,7 +403,7 @@ HWTEST_F(ActsAudioDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_AUDIO_DEC_ENC_FUNCTION_070
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureDec(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareDec());
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoder(MIME_TYPE_AAC);
struct OH_AVCodec* audEnc = aDecEncSample->CreateAudioEncoderByMime(MIME_TYPE_AAC);
ASSERT_NE(nullptr, audEnc);
ASSERT_EQ(AV_ERR_OK, aDecEncSample->ConfigureEnc(AudioFormat));
ASSERT_EQ(AV_ERR_OK, aDecEncSample->PrepareEnc());
......
/*
* Copyright (C) 2022 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 "securec.h"
#include "gtest/gtest.h"
#include "audio_info.h"
#include "native_avcodec_base.h"
#include "native_avformat.h"
using namespace std;
using namespace testing::ext;
namespace {
class ActsCodecFormatNdkTest : public testing::Test {
public:
static void SetUpTestCase();
static void TearDownTestCase();
void SetUp() override;
void TearDown() override;
};
void ActsCodecFormatNdkTest::SetUpTestCase() {}
void ActsCodecFormatNdkTest::TearDownTestCase() {}
void ActsCodecFormatNdkTest::SetUp() {}
void ActsCodecFormatNdkTest::TearDown() {}
bool CheckDecDesc(map<string, int> InDesc, OH_AVFormat* OutDesc)
{
int32_t out ;
for (const auto& t: InDesc) {
bool res = OH_AVFormat_GetIntValue(OutDesc, t.first.c_str(), &out);
cout << "key: " << t.first << "; out: " << out <<endl;
if (!res) {
cout << "OH_AVFormat_GetIntValue Fail. key:" << t.first << endl;
return false;
}
if (out != t.second) {
cout << "OH_AVFormat_GetIntValue error. key: " << t.first
<< "; expect: "<< t.second
<< ", actual: "<< out << endl;
return false;
}
out = 0;
}
return true;
}
bool SetFormat(struct OH_AVFormat *format, map<string, int> mediaDescription)
{
const char *key;
for (const auto& t: mediaDescription) {
key = t.first.c_str();
if (not OH_AVFormat_SetIntValue(format, key, t.second)) {
cout << "OH_AV_FormatPutIntValue Fail. format key: " << t.first
<< ", value: "<< t.second << endl;
return false;
}
}
return true;
}
}
/**
* @tc.number : SUB_MULTIMEDIA_MEDIA_CODEC_FORMAT_0100
* @tc.name : test codec format set key
* @tc.desc : Basic function test
*/
HWTEST_F(ActsCodecFormatNdkTest, SUB_MULTIMEDIA_MEDIA_CODEC_FORMAT_0100, TestSize.Level1)
{
OH_AVFormat *codecFormatIn = OH_AVFormat_Create();
ASSERT_NE(nullptr, codecFormatIn);
OH_AVFormat *codecFormatOut = OH_AVFormat_Create();
ASSERT_NE(nullptr, codecFormatOut);
map<string, int> CodecParam = {
{OH_ED_KEY_TIME_STAMP, 200}, // set timestamp 200ms
{OH_ED_KEY_EOS, 1}, // set end of stream
{OH_MD_KEY_TRACK_TYPE, 1}, // set track type video
{OH_MD_KEY_DURATION, 200}, // set key duration 200ms
{OH_MD_KEY_BITRATE, 48000}, // set key bitrate 48000
{OH_MD_KEY_MAX_INPUT_SIZE, 2000}, // set key max input size 2000
{OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE, 0}, // set videoencoder bitrate mode CBR
{OH_MD_KEY_PROFILE, 1}, // set encode profile AVC_PROFILE_BASELINE
{OH_MD_KEY_I_FRAME_INTERVAL, 1}, // set key i frame 1ms
{OH_MD_KEY_ROTATION, 90}, // set key rotation 0 degree
};
ASSERT_EQ(true, SetFormat(codecFormatIn, CodecParam));
OH_AVFormat_Copy(codecFormatOut, codecFormatIn);
ASSERT_EQ(true, CheckDecDesc(CodecParam, codecFormatOut));
ASSERT_NE(nullptr, OH_AVFormat_DumpInfo(codecFormatOut));
cout << OH_AVFormat_DumpInfo(codecFormatIn) << endl;
OH_AVFormat_Destroy(codecFormatIn);
codecFormatIn = nullptr;
OH_AVFormat_Destroy(codecFormatOut);
codecFormatIn = nullptr;
}
/**
* @tc.number : SUB_MULTIMEDIA_MEDIA_CODEC_FORMAT_0200
* @tc.name : test codec format set and get value
* @tc.desc : Basic function test
*/
HWTEST_F(ActsCodecFormatNdkTest, SUB_MULTIMEDIA_MEDIA_CODEC_FORMAT_0200, TestSize.Level1)
{
const char *intKey = "int value key";
const char *longKey = "long value key";
const char *floatKey = "float value key";
const char *doubleKey = "double value key";
const char *stringKey = "string value key";
const char *stringValue = "string_value";
int32_t intValue = 1;
int64_t longValue = 1;
float floatValue = 1.0;
double doubleValue = 1.0;
OH_AVFormat *codecFormatIn = OH_AVFormat_Create();
ASSERT_NE(nullptr, codecFormatIn);
OH_AVFormat *codecFormatOut = OH_AVFormat_Create();
ASSERT_NE(nullptr, codecFormatOut);
OH_AVFormat_SetIntValue(codecFormatIn, intKey, intValue);
OH_AVFormat_SetLongValue(codecFormatIn, longKey, longValue);
OH_AVFormat_SetFloatValue(codecFormatIn, floatKey, floatValue);
OH_AVFormat_SetDoubleValue(codecFormatIn, doubleKey, doubleValue);
OH_AVFormat_SetStringValue(codecFormatIn, stringKey, stringValue);
OH_AVFormat_Copy(codecFormatOut, codecFormatIn);
int32_t intValueOut;
OH_AVFormat_GetIntValue(codecFormatOut, intKey, &intValueOut);
ASSERT_EQ(intValueOut, intValue);
int64_t longValueOut;
OH_AVFormat_GetLongValue(codecFormatOut, longKey, &longValueOut);
ASSERT_EQ(longValueOut, longValue);
float floatValueOut;
OH_AVFormat_GetFloatValue(codecFormatOut, floatKey, &floatValueOut);
ASSERT_EQ(floatValueOut, floatValue);
double doubleValueOut;
OH_AVFormat_GetDoubleValue(codecFormatOut, doubleKey, &doubleValueOut);
ASSERT_EQ(doubleValueOut, doubleValue);
const char *stringValueOut;
OH_AVFormat_GetStringValue(codecFormatOut, stringKey, &stringValueOut);
ASSERT_EQ(*stringValueOut, *stringValue);
OH_AVFormat_Destroy(codecFormatIn);
codecFormatIn = nullptr;
OH_AVFormat_Destroy(codecFormatOut);
codecFormatOut = nullptr;
}
/**
* @tc.number : SUB_MULTIMEDIA_MEDIA_CODEC_FORMAT_0300
* @tc.name : test codec format set and get buffer
* @tc.desc : Basic function test
*/
HWTEST_F(ActsCodecFormatNdkTest, SUB_MULTIMEDIA_MEDIA_CODEC_FORMAT_0300, TestSize.Level1)
{
const char *bufferKey = "buffer value key";
OH_AVFormat *codecFormatIn = OH_AVFormat_Create();
ASSERT_NE(nullptr, codecFormatIn);
OH_AVFormat *codecFormatOut = OH_AVFormat_Create();
ASSERT_NE(nullptr, codecFormatOut);
int32_t buffernum = 10;
size_t sizeIn = buffernum * sizeof(uint8_t);
uint8_t *buffer = reinterpret_cast<uint8_t *>(malloc(sizeIn));
(void)memset_s(buffer, sizeIn, 1, sizeIn);
OH_AVFormat_SetBuffer(codecFormatIn, bufferKey, buffer, sizeIn);
OH_AVFormat_Copy(codecFormatOut, codecFormatIn);
uint8_t *addrout;
size_t sizeOut;
OH_AVFormat_GetBuffer(codecFormatOut, bufferKey, &addrout, &sizeOut);
ASSERT_EQ(sizeIn, sizeOut);
for (int32_t i = 0; i < buffernum; i++) {
ASSERT_EQ(buffer[i], addrout[i]);
}
OH_AVFormat_Destroy(codecFormatIn);
codecFormatIn = nullptr;
OH_AVFormat_Destroy(codecFormatOut);
codecFormatOut = nullptr;
}
\ No newline at end of file
......@@ -30,6 +30,7 @@
#include "ndktest_log.h"
#include "native_avmagic.h"
#include "surface.h"
#include "native_avcodec_base.h"
#include "native_avcodec_videodecoder.h"
#include "native_avcodec_videoencoder.h"
......@@ -69,6 +70,7 @@ public:
struct OH_AVCodec* CreateVideoDecoderByMime(std::string mimetype);
struct OH_AVCodec* CreateVideoDecoderByName(std::string name);
int32_t ConfigureDec(struct OH_AVFormat *format);
int32_t SetParameterDec(struct OH_AVFormat *format);
int32_t SetOutputSurface();
int32_t PrepareDec();
int32_t StartDec();
......@@ -80,6 +82,7 @@ public:
struct OH_AVCodec* CreateVideoEncoderByMime(std::string mimetype);
struct OH_AVCodec* CreateVideoEncoderByName(std::string name);
int32_t ConfigureEnc(struct OH_AVFormat *format);
int32_t SetParameterEnc(struct OH_AVFormat *format);
int32_t GetSurface();
int32_t PrepareEnc();
int32_t StartEnc();
......@@ -108,6 +111,7 @@ public:
bool isDecOutputEOS = false;
bool isEncOutputEOS = false;
bool setEos = true;
bool needRender = true;
private:
OHNativeWindow *nativeWindow_;
......
......@@ -89,6 +89,7 @@ struct OH_AVFormat* createFormat()
OH_AVFormat_SetIntValue(DefaultFormat, OH_MD_KEY_HEIGHT, DEFAULT_HEIGHT);
OH_AVFormat_SetIntValue(DefaultFormat, OH_MD_KEY_PIXEL_FORMAT, DEFAULT_PIXELFORMAT);
OH_AVFormat_SetIntValue(DefaultFormat, OH_MD_KEY_FRAME_RATE, DEFAULT_FRAMERATE);
OH_AVFormat_SetStringValue(DefaultFormat, OH_MD_KEY_CODEC_MIME, OH_AVCODEC_MIMETYPE_VIDEO_AVC);
return DefaultFormat;
}
}
......@@ -101,13 +102,13 @@ struct OH_AVFormat* createFormat()
HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_0100, TestSize.Level1)
{
VDecEncNdkSample *vDecEncSample = new VDecEncNdkSample();
struct OH_AVCodec* videoDec = vDecEncSample->CreateVideoDecoderByMime(MIME_TYPE_AVC);
ASSERT_NE(nullptr, videoDec);
struct OH_AVCodec* videoEnc = vDecEncSample->CreateVideoEncoderByMime(MIME_TYPE_MPEG4);
ASSERT_NE(nullptr, videoEnc);
vDecEncSample->SetReadPath(READPATH);
vDecEncSample->SetSavePath("/data/media/video_001.es");
vDecEncSample->SetSavePath("/data/media/video_001.h264");
OH_AVFormat *VideoFormat = OH_AVFormat_Create();
ASSERT_NE(nullptr, VideoFormat);
......@@ -118,6 +119,8 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_010
{OH_MD_KEY_FRAME_RATE, DEFAULT_FRAMERATE},
};
ASSERT_EQ(true, SetFormat(VideoFormat, VideoParam));
OH_AVFormat_SetIntValue(VideoFormat, OH_MD_KEY_TRACK_TYPE, MEDIA_TYPE_VID);
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureDec(VideoFormat));
OH_AVFormat *OutDescDec = OH_VideoDecoder_GetOutputDescription(videoDec);
ASSERT_NE(nullptr, OutDescDec);
......@@ -161,17 +164,20 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_020
struct OH_AVCodec* videoEnc = vDecEncSample->CreateVideoEncoderByMime(MIME_TYPE_AVC);
ASSERT_NE(nullptr, videoEnc);
vDecEncSample->SetReadPath(READPATH);
vDecEncSample->SetSavePath("/data/media/video_002.es");
vDecEncSample->SetSavePath("/data/media/video_002.h264");
OH_AVFormat *VideoFormat = createFormat();
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureDec(VideoFormat));
OH_AVFormat_SetIntValue(VideoFormat, OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE, CBR);
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureEnc(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->GetSurface());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->SetOutputSurface());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->PrepareEnc());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->PrepareDec());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartEnc());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->SetParameterDec(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartDec());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->SetParameterEnc(VideoFormat));
while (!vDecEncSample->GetEncEosState()) {};
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ResetDec());
......@@ -185,7 +191,6 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_020
ASSERT_EQ(AV_ERR_OK, vDecEncSample->CalcuError());
}
/**
* @tc.number : SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_0300
* @tc.name : release at end of stream
......@@ -200,9 +205,11 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_030
struct OH_AVCodec* videoEnc = vDecEncSample->CreateVideoEncoderByMime(MIME_TYPE_AVC);
ASSERT_NE(nullptr, videoEnc);
vDecEncSample->SetReadPath(READPATH);
vDecEncSample->SetSavePath("/data/media/video_003.es");
vDecEncSample->SetSavePath("/data/media/video_003.h264");
OH_AVFormat *VideoFormat = createFormat();
OH_AVFormat_SetIntValue(VideoFormat, OH_MD_KEY_PROFILE, AVC_PROFILE_BASELINE);
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureDec(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureEnc(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->GetSurface());
......@@ -237,9 +244,11 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_040
ASSERT_NE(nullptr, videoEnc);
vDecEncSample->SetReadPath(READPATH);
vDecEncSample->SetEosState(false);
vDecEncSample->SetSavePath("/data/media/video_004.es");
vDecEncSample->SetSavePath("/data/media/video_004.h264");
OH_AVFormat *VideoFormat = createFormat();
OH_AVFormat_SetIntValue(VideoFormat, OH_MD_KEY_PROFILE, AVC_PROFILE_HIGH);
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureDec(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureEnc(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->GetSurface());
......@@ -256,7 +265,7 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_040
vDecEncSample->ResetDecParam();
vDecEncSample->ResetEncParam();
vDecEncSample->SetEosState(true);
vDecEncSample->SetSavePath("/data/media/video_004_2.es");
vDecEncSample->SetSavePath("/data/media/video_004_2.h264");
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartEnc());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartDec());
......@@ -287,9 +296,11 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_050
ASSERT_NE(nullptr, videoEnc);
vDecEncSample->SetReadPath(READPATH);
vDecEncSample->SetEosState(false);
vDecEncSample->SetSavePath("/data/media/video_005.es");
vDecEncSample->SetSavePath("/data/media/video_005.h264");
OH_AVFormat *VideoFormat = createFormat();
OH_AVFormat_SetIntValue(VideoFormat, OH_MD_KEY_PROFILE, AVC_PROFILE_MAIN);
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureDec(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureEnc(VideoFormat));
ASSERT_EQ(AV_ERR_OK, vDecEncSample->GetSurface());
......@@ -306,7 +317,7 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_050
vDecEncSample->ReRead();
vDecEncSample->ResetDecParam();
vDecEncSample->ResetEncParam();
vDecEncSample->SetSavePath("/data/media/video_005_2.es");
vDecEncSample->SetSavePath("/data/media/video_005_2.h264");
vDecEncSample->SetEosState(true);
ASSERT_EQ(AV_ERR_OK, vDecEncSample->CalcuError());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartEnc());
......@@ -338,7 +349,7 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_060
ASSERT_NE(nullptr, videoEnc);
vDecEncSample->SetReadPath(READPATH);
vDecEncSample->SetEosState(false);
vDecEncSample->SetSavePath("/data/media/video_006.es");
vDecEncSample->SetSavePath("/data/media/video_006.h264");
OH_AVFormat *VideoFormat = createFormat();
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureDec(VideoFormat));
......@@ -357,7 +368,7 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_060
vDecEncSample->ResetDecParam();
vDecEncSample->ResetEncParam();
vDecEncSample->SetEosState(true);
vDecEncSample->SetSavePath("/data/media/video_006_2.es");
vDecEncSample->SetSavePath("/data/media/video_006_2.h264");
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartEnc());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartDec());
......@@ -389,7 +400,7 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_070
ASSERT_NE(nullptr, videoEnc);
vDecEncSample->SetReadPath(READPATH);
vDecEncSample->SetEosState(false);
vDecEncSample->SetSavePath("/data/media/video_007.es");
vDecEncSample->SetSavePath("/data/media/video_007.h264");
OH_AVFormat *VideoFormat = createFormat();
ASSERT_EQ(AV_ERR_OK, vDecEncSample->ConfigureDec(VideoFormat));
......@@ -408,7 +419,7 @@ HWTEST_F(ActsVideoDecEncNdkTest, SUB_MULTIMEDIA_MEDIA_VIDEO_DEC_ENC_FUNCTION_070
vDecEncSample->ReRead();
vDecEncSample->ResetDecParam();
vDecEncSample->ResetEncParam();
vDecEncSample->SetSavePath("/data/media/video_007_2.es");
vDecEncSample->SetSavePath("/data/media/video_007_2.h264");
vDecEncSample->SetEosState(true);
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartEnc());
ASSERT_EQ(AV_ERR_OK, vDecEncSample->StartDec());
......
......@@ -16,6 +16,7 @@
#include "gtest/gtest.h"
#include "audio_info.h"
#include "av_common.h"
#include "native_avcodec_base.h"
#include "avcodec_video_encoder.h"
#include "avcodec_video_decoder.h"
#include "native_avmemory.h"
......@@ -196,7 +197,12 @@ void VDecEncNdkSample::ResetEncParam()
struct OH_AVCodec* VDecEncNdkSample::CreateVideoDecoderByMime(std::string mimetype)
{
vdec_ = OH_VideoDecoder_CreateByMime(mimetype.c_str());
if (mimetype == "video/avc") {
cout << "mimetype == 'video/avc'" << endl;
vdec_ = OH_VideoDecoder_CreateByMime(OH_AVCODEC_MIMETYPE_VIDEO_AVC);
} else {
vdec_ = OH_VideoDecoder_CreateByMime(mimetype.c_str());
}
NDK_CHECK_AND_RETURN_RET_LOG(vdec_ != nullptr, nullptr, "Fatal: OH_VideoDecoder_CreateByMime");
if (vcodecSignal_ == nullptr) {
vcodecSignal_ = new VDecEncSignal();
......@@ -233,6 +239,11 @@ int32_t VDecEncNdkSample::ConfigureDec(struct OH_AVFormat *format)
return OH_VideoDecoder_Configure(vdec_, format);
}
int32_t VDecEncNdkSample::SetParameterDec(struct OH_AVFormat *format)
{
return OH_VideoDecoder_SetParameter(vdec_, format);
}
int32_t VDecEncNdkSample::PrepareDec()
{
return OH_VideoDecoder_Prepare(vdec_);
......@@ -485,7 +496,12 @@ void VDecEncNdkSample::OutputFuncDec()
uint32_t index = vcodecSignal_->outQueueDec_.front();
uint32_t outflag = vcodecSignal_->flagQueueDec_.front();
if (outflag == 0) {
uint32_t ret = OH_VideoDecoder_RenderOutputData(vdec_, index);
uint32_t ret;
if (needRender) {
ret = OH_VideoDecoder_RenderOutputData(vdec_, index);
} else {
ret = OH_VideoDecoder_FreeOutputData(vdec_, index);
}
if (ret == 0) {
decOutCnt_ += 1;
cout << "DEC OUT.: render output success, decOutCnt_ is " << decOutCnt_ << endl;
......@@ -505,7 +521,11 @@ void VDecEncNdkSample::OutputFuncDec()
struct OH_AVCodec* VDecEncNdkSample::CreateVideoEncoderByMime(std::string mimetype)
{
venc_ = OH_VideoEncoder_CreateByMime(mimetype.c_str());
if (mimetype == "video/avc") {
venc_ = OH_VideoEncoder_CreateByMime(OH_AVCODEC_MIMETYPE_VIDEO_AVC);
} else {
venc_ = OH_VideoEncoder_CreateByMime(mimetype.c_str());
}
NDK_CHECK_AND_RETURN_RET_LOG(venc_ != nullptr, nullptr, "Fatal: OH_VideoEncoder_CreateByMime");
if (vcodecSignal_ == nullptr) {
......@@ -542,6 +562,11 @@ int32_t VDecEncNdkSample::ConfigureEnc(struct OH_AVFormat *format)
return OH_VideoEncoder_Configure(venc_, format);
}
int32_t VDecEncNdkSample::SetParameterEnc(struct OH_AVFormat *format)
{
return OH_VideoEncoder_SetParameter(venc_, format);
}
struct VEncObject : public OH_AVCodec {
explicit VEncObject(const std::shared_ptr<AVCodecVideoEncoder> &encoder)
: OH_AVCodec(AVMagic::MEDIA_MAGIC_VIDEO_ENCODER), videoEncoder_(encoder) {}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册