1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License. 5da853ecaSopenharmony_ci * You may obtain a copy of the License at 6da853ecaSopenharmony_ci * 7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8da853ecaSopenharmony_ci * 9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and 13da853ecaSopenharmony_ci * limitations under the License. 14da853ecaSopenharmony_ci */ 15da853ecaSopenharmony_ci 16da853ecaSopenharmony_ci#include <string> 17da853ecaSopenharmony_ci#include "gtest/gtest.h" 18da853ecaSopenharmony_ci#include "AVMuxerDemo.h" 19da853ecaSopenharmony_ci 20da853ecaSopenharmony_ciusing namespace std; 21da853ecaSopenharmony_ciusing namespace testing::ext; 22da853ecaSopenharmony_ciusing namespace OHOS; 23da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 24da853ecaSopenharmony_ci 25da853ecaSopenharmony_ci 26da853ecaSopenharmony_cinamespace { 27da853ecaSopenharmony_ci constexpr int64_t BIT_RATE = 32000; 28da853ecaSopenharmony_ci constexpr int32_t CODEC_CONFIG = 100; 29da853ecaSopenharmony_ci constexpr int32_t AUDIO_CHANNELS = 1; 30da853ecaSopenharmony_ci constexpr int32_t SAMPLE_RATE = 48000; 31da853ecaSopenharmony_ci constexpr int32_t SAMPLE_PER_FRAME = 480; 32da853ecaSopenharmony_ci constexpr int32_t AAC_PROFILE = 0; 33da853ecaSopenharmony_ci 34da853ecaSopenharmony_ci class InnerAVMuxerDemo : public testing::Test { 35da853ecaSopenharmony_ci public: 36da853ecaSopenharmony_ci static void SetUpTestCase(); 37da853ecaSopenharmony_ci static void TearDownTestCase(); 38da853ecaSopenharmony_ci void SetUp() override; 39da853ecaSopenharmony_ci void TearDown() override; 40da853ecaSopenharmony_ci }; 41da853ecaSopenharmony_ci 42da853ecaSopenharmony_ci void InnerAVMuxerDemo::SetUpTestCase() {} 43da853ecaSopenharmony_ci void InnerAVMuxerDemo::TearDownTestCase() {} 44da853ecaSopenharmony_ci void InnerAVMuxerDemo::SetUp() {} 45da853ecaSopenharmony_ci void InnerAVMuxerDemo::TearDown() {} 46da853ecaSopenharmony_ci 47da853ecaSopenharmony_ci 48da853ecaSopenharmony_ci void Create(AVMuxerDemo* muxerDemo) 49da853ecaSopenharmony_ci { 50da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 51da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByMode(format); 52da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 53da853ecaSopenharmony_ci } 54da853ecaSopenharmony_ci 55da853ecaSopenharmony_ci int32_t SetRotation(AVMuxerDemo* muxerDemo) 56da853ecaSopenharmony_ci { 57da853ecaSopenharmony_ci int32_t rotation = 0; 58da853ecaSopenharmony_ci return muxerDemo->InnerSetRotation(rotation); 59da853ecaSopenharmony_ci } 60da853ecaSopenharmony_ci 61da853ecaSopenharmony_ci int32_t AddTrack(AVMuxerDemo* muxerDemo) 62da853ecaSopenharmony_ci { 63da853ecaSopenharmony_ci std::shared_ptr<Meta> trackFormat = std::make_shared<Meta>(); 64da853ecaSopenharmony_ci std::vector<uint8_t> a(CODEC_CONFIG); 65da853ecaSopenharmony_ci trackFormat->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 66da853ecaSopenharmony_ci trackFormat->Set<Tag::MEDIA_BITRATE>(BIT_RATE); 67da853ecaSopenharmony_ci trackFormat->Set<Tag::MEDIA_CODEC_CONFIG>(a); 68da853ecaSopenharmony_ci trackFormat->Set<Tag::AUDIO_CHANNEL_COUNT>(AUDIO_CHANNELS); 69da853ecaSopenharmony_ci trackFormat->Set<Tag::AUDIO_SAMPLE_RATE>(SAMPLE_RATE); 70da853ecaSopenharmony_ci trackFormat->Set<Tag::AUDIO_SAMPLE_PER_FRAME>(SAMPLE_PER_FRAME); 71da853ecaSopenharmony_ci return muxerDemo->InnerAddTrack(trackFormat); 72da853ecaSopenharmony_ci } 73da853ecaSopenharmony_ci 74da853ecaSopenharmony_ci int32_t Start(AVMuxerDemo* muxerDemo) 75da853ecaSopenharmony_ci { 76da853ecaSopenharmony_ci return muxerDemo->InnerStart(); 77da853ecaSopenharmony_ci } 78da853ecaSopenharmony_ci 79da853ecaSopenharmony_ci int32_t WriteSampleBuffer(AVMuxerDemo* muxerDemo, uint32_t trackIndex) 80da853ecaSopenharmony_ci { 81da853ecaSopenharmony_ci uint8_t data[100]; 82da853ecaSopenharmony_ci 83da853ecaSopenharmony_ci AVCodecBufferInfo info; 84da853ecaSopenharmony_ci constexpr uint32_t INFO_SIZE = 100; 85da853ecaSopenharmony_ci info.size = INFO_SIZE; 86da853ecaSopenharmony_ci info.pts = 0; 87da853ecaSopenharmony_ci info.offset = 0; 88da853ecaSopenharmony_ci info.flags = 0; 89da853ecaSopenharmony_ci 90da853ecaSopenharmony_ci return muxerDemo->InnerWriteSampleBuffer(trackIndex, data, info); 91da853ecaSopenharmony_ci } 92da853ecaSopenharmony_ci 93da853ecaSopenharmony_ci int32_t Stop(AVMuxerDemo* muxerDemo) 94da853ecaSopenharmony_ci { 95da853ecaSopenharmony_ci return muxerDemo->InnerStop(); 96da853ecaSopenharmony_ci } 97da853ecaSopenharmony_ci 98da853ecaSopenharmony_ci int32_t Destroy(AVMuxerDemo* muxerDemo) 99da853ecaSopenharmony_ci { 100da853ecaSopenharmony_ci return muxerDemo->InnerDestroy(); 101da853ecaSopenharmony_ci } 102da853ecaSopenharmony_ci} 103da853ecaSopenharmony_ci 104da853ecaSopenharmony_ci/** 105da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_INTERFACE_DEPEND_CHECK_001 106da853ecaSopenharmony_ci * @tc.name : Create -> SetLocation -> SetRotation -> SetParameter -> AddTrack -> Start -> 107da853ecaSopenharmony_ci * WriteSampleBuffer -> Stop -> Destroy 108da853ecaSopenharmony_ci * @tc.desc : interface depend check 109da853ecaSopenharmony_ci */ 110da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerDemo, SUB_MULTIMEDIA_MEDIA_MUXER_INTERFACE_DEPEND_CHECK_001, TestSize.Level2) 111da853ecaSopenharmony_ci{ 112da853ecaSopenharmony_ci AVMuxerDemo* muxerDemo = new AVMuxerDemo(); 113da853ecaSopenharmony_ci Create(muxerDemo); 114da853ecaSopenharmony_ci 115da853ecaSopenharmony_ci int32_t ret; 116da853ecaSopenharmony_ci int32_t trackId; 117da853ecaSopenharmony_ci 118da853ecaSopenharmony_ci ret = SetLocation(muxerDemo); 119da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 120da853ecaSopenharmony_ci 121da853ecaSopenharmony_ci ret = SetRotation(muxerDemo); 122da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 123da853ecaSopenharmony_ci 124da853ecaSopenharmony_ci trackId = AddTrack(muxerDemo); 125da853ecaSopenharmony_ci ASSERT_EQ(0, trackId); 126da853ecaSopenharmony_ci 127da853ecaSopenharmony_ci ret = Start(muxerDemo); 128da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 129da853ecaSopenharmony_ci 130da853ecaSopenharmony_ci ret = WriteSampleBuffer(muxerDemo, trackId); 131da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 132da853ecaSopenharmony_ci 133da853ecaSopenharmony_ci ret = Stop(muxerDemo); 134da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 135da853ecaSopenharmony_ci 136da853ecaSopenharmony_ci ret = Destroy(muxerDemo); 137da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 138da853ecaSopenharmony_ci 139da853ecaSopenharmony_ci delete muxerDemo; 140da853ecaSopenharmony_ci}