From 36f769b111a15a7ed85cbca8820a51671c9a1d94 Mon Sep 17 00:00:00 2001 From: jinweiliu Date: Mon, 17 Apr 2023 08:13:24 +0000 Subject: [PATCH] fix video async Signed-off-by: jinweiliu Change-Id: I940fdbc9ceffd2bd692a114d7c89ab9438248c6b --- .../pattern/video/video_pattern.cpp | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/frameworks/core/components_ng/pattern/video/video_pattern.cpp b/frameworks/core/components_ng/pattern/video/video_pattern.cpp index 8080fda31e4..b3eadb0da55 100644 --- a/frameworks/core/components_ng/pattern/video/video_pattern.cpp +++ b/frameworks/core/components_ng/pattern/video/video_pattern.cpp @@ -461,14 +461,34 @@ void VideoPattern::OnVisibleChange(bool isVisible) void VideoPattern::UpdateLooping() { if (mediaPlayer_->IsMediaPlayerValid()) { - mediaPlayer_->SetLooping(loop_); + LOGI("Video media player set the loop."); + auto context = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(context); + auto platformTask = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::BACKGROUND); + platformTask.PostTask([weak = WeakClaim(RawPtr(mediaPlayer_)), loop = loop_] { + auto mediaPlayer = weak.Upgrade(); + CHECK_NULL_VOID(mediaPlayer); + mediaPlayer->SetLooping(loop); + }); + } else { + LOGW("Video media player is invalid."); } } void VideoPattern::SetSpeed() { if (mediaPlayer_->IsMediaPlayerValid()) { - mediaPlayer_->SetPlaybackSpeed(static_cast(progressRate_)); + LOGI("Video media player set the speed."); + auto context = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(context); + auto platformTask = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::BACKGROUND); + platformTask.PostTask([weak = WeakClaim(RawPtr(mediaPlayer_)), progress = progressRate_] { + auto mediaPlayer = weak.Upgrade(); + CHECK_NULL_VOID(mediaPlayer); + mediaPlayer->SetPlaybackSpeed(static_cast(progress)); + }); + } else { + LOGW("Video media player is invalid."); } } @@ -476,7 +496,17 @@ void VideoPattern::UpdateMuted() { if (mediaPlayer_->IsMediaPlayerValid()) { float volume = muted_ ? 0.0f : 1.0f; - mediaPlayer_->SetVolume(volume, volume); + LOGI("Video media player set the volume."); + auto context = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(context); + auto platformTask = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::BACKGROUND); + platformTask.PostTask([weak = WeakClaim(RawPtr(mediaPlayer_)), videoVolume = volume] { + auto mediaPlayer = weak.Upgrade(); + CHECK_NULL_VOID(mediaPlayer); + mediaPlayer->SetVolume(videoVolume, videoVolume); + }); + } else { + LOGW("Video media player is invalid."); } } -- Gitee