From 7ac8c3b320b9fe9494b26e15f4a76e81446d3488 Mon Sep 17 00:00:00 2001 From: FileStream Date: Thu, 26 Sep 2024 06:48:43 +0000 Subject: [PATCH] =?UTF-8?q?=E8=93=9D=E9=BB=84=E5=90=8C=E6=AD=A5=EF=BC=8C?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=87=8D=E5=A4=8D=E4=BD=BF=E7=94=A8meta?= =?UTF-8?q?=E6=97=B6=E5=A4=8D=E7=94=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: FileStream --- .../histreamer/recorder/hirecorder_impl.cpp | 47 ++++++++++--------- .../histreamer/recorder/hirecorder_impl.h | 1 + 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/services/engine/histreamer/recorder/hirecorder_impl.cpp b/services/engine/histreamer/recorder/hirecorder_impl.cpp index 192afcd44..e09093006 100644 --- a/services/engine/histreamer/recorder/hirecorder_impl.cpp +++ b/services/engine/histreamer/recorder/hirecorder_impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2024 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 @@ -16,7 +16,6 @@ #include "meta/audio_types.h" #include "osal/task/pipeline_threadpool.h" #include "sync_fence.h" -#include #include "media_dfx.h" namespace { @@ -86,6 +85,7 @@ HiRecorderImpl::HiRecorderImpl(int32_t appUid, int32_t appPid, uint32_t appToken : appUid_(appUid), appPid_(appPid), appTokenId_(appTokenId), appFullTokenId_(appFullTokenId) { pipeline_ = std::make_shared(); + recorderId_ = std::string("Rec_") + std::to_string(OHOS::Media::Pipeline::Pipeline::GetNextPipelineId()); } HiRecorderImpl::~HiRecorderImpl() @@ -97,10 +97,9 @@ HiRecorderImpl::~HiRecorderImpl() int32_t HiRecorderImpl::Init() { MediaTrace trace("HiRecorderImpl::Init"); - MEDIA_LOG_I("Init enter."); + MEDIA_LOG_I("HiRecorderImpl Init enter."); recorderEventReceiver_ = std::make_shared(this); recorderCallback_ = std::make_shared(this); - recorderId_ = std::string("HiRecorder_") + std::to_string(OHOS::Media::Pipeline::Pipeline::GetNextPipelineId()); pipeline_->Init(recorderEventReceiver_, recorderCallback_, recorderId_); return (int32_t)Status::OK; } @@ -108,7 +107,8 @@ int32_t HiRecorderImpl::Init() int32_t HiRecorderImpl::SetVideoSource(VideoSourceType source, int32_t &sourceId) { MediaTrace trace("HiRecorderImpl::SetVideoSource"); - MEDIA_LOG_I("SetVideoSource enter, sourceType:" PUBLIC_LOG_D32, static_cast(source)); + MEDIA_LOG_I(PUBLIC_LOG_S "SetVideoSource enter, sourceType:" PUBLIC_LOG_D32, avRecorderTag_.c_str(), + static_cast(source)); sourceId = INVALID_SOURCE_ID; FALSE_RETURN_V(source != VideoSourceType::VIDEO_SOURCE_BUTT, (int32_t)Status::ERROR_INVALID_PARAMETER); @@ -163,15 +163,22 @@ int32_t HiRecorderImpl::SetMetaSource(MetaSourceType source, int32_t &sourceId) source > MetaSourceType::VIDEO_META_SOURCE_INVALID && source < MetaSourceType::VIDEO_META_SOURCE_BUTT, (int32_t)Status::ERROR_INVALID_PARAMETER ); + auto tempSourceId = SourceIdGenerator::GenerateMetaSourceId(static_cast(source)); Status ret; - auto filter = Pipeline::FilterFactory::Instance().CreateFilter - ("MetaDataFilter", Pipeline::FilterType::TIMED_METADATA); - ret = pipeline_->AddHeadFilters({filter}); - FALSE_RETURN_V_MSG_E(ret == Status::OK, (int32_t)ret, "AddFilters MetaDataFilter to pipeline fail"); - if (filter && ret == Status::OK) { + if (metaDataFilters_.find(tempSourceId) == metaDataFilters_.end()) { + auto filter = Pipeline::FilterFactory::Instance().CreateFilter + ("MetaDataFilter", Pipeline::FilterType::TIMED_METADATA); + ret = pipeline_->AddHeadFilters({filter}); + FALSE_RETURN_V_MSG_E(ret == Status::OK, (int32_t)ret, "AddFilters MetaDataFilter to pipeline fail"); + if (filter && ret == Status::OK) { + metaDataFilters_.emplace(std::make_pair(tempSourceId, filter)); + } + } else { + ret = pipeline_->AddHeadFilters({metaDataFilters_.at(tempSourceId)}); + } + if (ret == Status::OK) { MEDIA_LOG_I("SetMetaSource success."); - sourceId = SourceIdGenerator::GenerateMetaSourceId(static_cast(source)); - metaDataFilters_.emplace(std::make_pair(sourceId, filter)); + sourceId = tempSourceId; OnStateChanged(StateId::RECORDING_SETTING); } return (int32_t)ret; @@ -180,7 +187,8 @@ int32_t HiRecorderImpl::SetMetaSource(MetaSourceType source, int32_t &sourceId) int32_t HiRecorderImpl::SetAudioSource(AudioSourceType source, int32_t &sourceId) { MediaTrace trace("HiRecorderImpl::SetAudioSource"); - MEDIA_LOG_I("SetAudioSource enter, sourceType:" PUBLIC_LOG_D32, static_cast(source)); + MEDIA_LOG_I(PUBLIC_LOG_S "SetAudioSource enter, sourceType:" PUBLIC_LOG_D32, avRecorderTag_.c_str(), + static_cast(source)); sourceId = INVALID_SOURCE_ID; FALSE_RETURN_V(CheckAudioSourceType(source), (int32_t)Status::ERROR_INVALID_PARAMETER); FALSE_RETURN_V(audioCount_ < static_cast(AUDIO_SOURCE_MAX_COUNT), @@ -207,7 +215,7 @@ int32_t HiRecorderImpl::SetAudioSource(AudioSourceType source, int32_t &sourceId int32_t HiRecorderImpl::SetAudioDataSource(const std::shared_ptr& audioSource, int32_t& sourceId) { - MEDIA_LOG_I("SetAudioDataSource enter."); + MEDIA_LOG_I("HiRecorderImpl SetAudioDataSource enter."); sourceId = INVALID_SOURCE_ID; auto tempSourceId = SourceIdGenerator::GenerateAudioSourceId(audioCount_); audioDataSourceFilter_ = Pipeline::FilterFactory::Instance().CreateFilter @@ -218,7 +226,7 @@ int32_t HiRecorderImpl::SetAudioDataSource(const std::shared_ptrAddHeadFilters({audioDataSourceFilter_}); FALSE_RETURN_V_MSG_E(ret == Status::OK, (int32_t)ret, "AddFilters audioDataSource to pipeline fail"); if (ret == Status::OK) { - MEDIA_LOG_I("SetAudioSource success."); + MEDIA_LOG_I(PUBLIC_LOG_S "SetAudioSource success.", avRecorderTag_.c_str()); audioCount_++; audioSourceId_ = tempSourceId; sourceId = static_cast(audioSourceId_); @@ -290,7 +298,7 @@ int32_t HiRecorderImpl::Configure(int32_t sourceId, const RecorderParam &recPara sptr HiRecorderImpl::GetSurface(int32_t sourceId) { - MEDIA_LOG_I("GetSurface enter."); + MEDIA_LOG_I("HiRecorderImpl GetSurface enter."); if (videoEncoderFilter_) { producerSurface_ = videoEncoderFilter_->GetInputSurface(); } @@ -374,9 +382,6 @@ int32_t HiRecorderImpl::Prepare() ERR_UNKNOWN_REASON, "videoCaptureFilter Configure fail"); } Status ret = pipeline_->Prepare(); - if (ret != Status::OK) { - return (int32_t)ret; - } return (int32_t)ret; } @@ -456,7 +461,6 @@ int32_t HiRecorderImpl::Stop(bool isDrainAll) } pipeline_->RemoveHeadFilter(iter.second); } - metaDataFilters_.clear(); if (videoCaptureFilter_) { pipeline_->RemoveHeadFilter(videoCaptureFilter_); } @@ -552,7 +556,7 @@ Status HiRecorderImpl::OnCallback(std::shared_ptr filter, cons void HiRecorderImpl::OnAudioCaptureChange(const AudioStandard::AudioCapturerChangeInfo &capturerChangeInfo) { - MEDIA_LOG_I("OnAudioCaptureChange enter."); + MEDIA_LOG_I("HiRecorderImpl OnAudioCaptureChange enter."); auto ptr = obs_.lock(); if (ptr != nullptr) { ptr->OnAudioCaptureChange(ConvertCapturerChangeInfo(capturerChangeInfo)); @@ -729,7 +733,6 @@ void HiRecorderImpl::ConfigureVideoEnableTemporalScale(const RecorderParam &recP } } - void HiRecorderImpl::ConfigureVideoEncoderFormat(const RecorderParam &recParam) { VidEnc vidEnc = static_cast(recParam); diff --git a/services/engine/histreamer/recorder/hirecorder_impl.h b/services/engine/histreamer/recorder/hirecorder_impl.h index 2b2dee47f..a0fec2279 100644 --- a/services/engine/histreamer/recorder/hirecorder_impl.h +++ b/services/engine/histreamer/recorder/hirecorder_impl.h @@ -149,6 +149,7 @@ private: static constexpr uint32_t ENCODE_USAGE = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA | BUFFER_USAGE_VIDEO_ENCODER; std::string recorderId_; + std::string avRecorderTag_ = "[AVRecorder]"; std::string bundleName_; uint64_t instanceId_ = 0; }; -- Gitee