diff --git a/services/engine/histreamer/recorder/hirecorder_impl.cpp b/services/engine/histreamer/recorder/hirecorder_impl.cpp index 192afcd44fcf292ec107c8eb415162b616022f2d..e090930061078914d327fc8958fe20beab5f48e3 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 2b2dee47f4154c4ff61265c3bfc09ba57400760a..a0fec22797424f479615146ebc1db9c8b306082d 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; };