Commit b78c57f6 authored by Yuchen Liu's avatar Yuchen Liu Committed by Commit Bot

[Chromecast] Delay volume change until media pipeline setup

Now Renderer::SetVolume will be called before Initialize, which allows
some renderers to do optimization.

CastRenderer volume change relies on MediaPipelineImpl, which is only
available after Initialize. Thus we have to cache the value and set
volume after MediaPipelineImpl becomes available.

Bug: internal b/161747143
Test: Build
Change-Id: I913a2fa5bab102543561725f47e0b7ea19289aa2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2314985Reviewed-by: default avatarSergey Volk <servolk@chromium.org>
Reviewed-by: default avatarKenneth MacKay <kmackay@chromium.org>
Commit-Queue: Yuchen Liu <yucliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791136}
parent 5e0dcd89
...@@ -285,6 +285,11 @@ void CastRenderer::OnGetMultiroomInfo( ...@@ -285,6 +285,11 @@ void CastRenderer::OnGetMultiroomInfo(
cast_cdm_context_ = nullptr; cast_cdm_context_ = nullptr;
} }
if (pending_volume_.has_value()) {
pipeline_->SetVolume(pending_volume_.value());
pending_volume_.reset();
}
client_ = client; client_ = client;
if (video_stream && video_mode_switcher_) { if (video_stream && video_mode_switcher_) {
...@@ -341,11 +346,13 @@ void CastRenderer::SetLatencyHint( ...@@ -341,11 +346,13 @@ void CastRenderer::SetLatencyHint(
void CastRenderer::Flush(base::OnceClosure flush_cb) { void CastRenderer::Flush(base::OnceClosure flush_cb) {
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(pipeline_);
pipeline_->Flush(std::move(flush_cb)); pipeline_->Flush(std::move(flush_cb));
} }
void CastRenderer::StartPlayingFrom(base::TimeDelta time) { void CastRenderer::StartPlayingFrom(base::TimeDelta time) {
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(pipeline_);
eos_[STREAM_AUDIO] = !pipeline_->HasAudio(); eos_[STREAM_AUDIO] = !pipeline_->HasAudio();
eos_[STREAM_VIDEO] = !pipeline_->HasVideo(); eos_[STREAM_VIDEO] = !pipeline_->HasVideo();
...@@ -359,11 +366,19 @@ void CastRenderer::SetPlaybackRate(double playback_rate) { ...@@ -359,11 +366,19 @@ void CastRenderer::SetPlaybackRate(double playback_rate) {
void CastRenderer::SetVolume(float volume) { void CastRenderer::SetVolume(float volume) {
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
// If pipeline is not initialized, cache the volume and delay the volume set
// until media pipeline is setup.
if (!pipeline_) {
pending_volume_ = volume;
return;
}
pipeline_->SetVolume(volume); pipeline_->SetVolume(volume);
} }
base::TimeDelta CastRenderer::GetMediaTime() { base::TimeDelta CastRenderer::GetMediaTime() {
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(pipeline_);
return pipeline_->GetMediaTime(); return pipeline_->GetMediaTime();
} }
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "base/optional.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "chromecast/common/mojom/multiroom.mojom.h" #include "chromecast/common/mojom/multiroom.mojom.h"
#include "chromecast/common/mojom/service_connector.mojom.h" #include "chromecast/common/mojom/service_connector.mojom.h"
...@@ -141,6 +142,8 @@ class CastRenderer : public ::media::Renderer, ...@@ -141,6 +142,8 @@ class CastRenderer : public ::media::Renderer,
return *g_overlay_composited_callback; return *g_overlay_composited_callback;
} }
base::Optional<float> pending_volume_;
base::WeakPtrFactory<CastRenderer> weak_factory_; base::WeakPtrFactory<CastRenderer> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(CastRenderer); DISALLOW_COPY_AND_ASSIGN(CastRenderer);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment