Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Unified Diff: chromecast/browser/media/cast_renderer.cc

Issue 2277853002: [Chromecast] Support blocking some video resolutions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add TODO on removal plan Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromecast/browser/media/cast_renderer.cc
diff --git a/chromecast/browser/media/cast_renderer.cc b/chromecast/browser/media/cast_renderer.cc
index c6f3ad15d8dba0c269cb5ed8774605d895a37048..b82836fd3761de9b6a72ca1e41aaa9c68dc2177e 100644
--- a/chromecast/browser/media/cast_renderer.cc
+++ b/chromecast/browser/media/cast_renderer.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/single_thread_task_runner.h"
#include "chromecast/base/task_runner_impl.h"
+#include "chromecast/browser/media/video_resolution_policy.h"
#include "chromecast/media/cdm/cast_cdm_context.h"
#include "chromecast/media/cma/base/balanced_media_task_runner_factory.h"
#include "chromecast/media/cma/base/cma_logging.h"
@@ -33,21 +34,29 @@ const base::TimeDelta kMaxDeltaFetcher(base::TimeDelta::FromMilliseconds(2000));
CastRenderer::CastRenderer(
const CreateMediaPipelineBackendCB& create_backend_cb,
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
- const std::string& audio_device_id)
+ const std::string& audio_device_id,
+ VideoResolutionPolicy* video_resolution_policy)
: create_backend_cb_(create_backend_cb),
task_runner_(task_runner),
audio_device_id_(audio_device_id),
+ video_resolution_policy_(video_resolution_policy),
client_(nullptr),
cast_cdm_context_(nullptr),
media_task_runner_factory_(
new BalancedMediaTaskRunnerFactory(kMaxDeltaFetcher)),
weak_factory_(this) {
CMALOG(kLogControl) << __FUNCTION__ << ": " << this;
+
+ if (video_resolution_policy_)
+ video_resolution_policy_->AddObserver(this);
}
CastRenderer::~CastRenderer() {
CMALOG(kLogControl) << __FUNCTION__ << ": " << this;
DCHECK(task_runner_->BelongsToCurrentThread());
+
+ if (video_resolution_policy_)
+ video_resolution_policy_->RemoveObserver(this);
}
void CastRenderer::Initialize(
@@ -206,6 +215,15 @@ bool CastRenderer::HasVideo() {
return pipeline_->HasVideo();
}
+void CastRenderer::OnVideoResolutionPolicyChanged() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ if (!video_resolution_policy_)
+ return;
+
+ if (video_resolution_policy_->ShouldBlock(video_res_))
+ OnError(::media::PIPELINE_ERROR_DECODE);
+}
+
void CastRenderer::OnError(::media::PipelineStatus status) {
DCHECK(task_runner_->BelongsToCurrentThread());
client_->OnError(status);
@@ -240,6 +258,9 @@ void CastRenderer::OnWaitingForDecryptionKey() {
void CastRenderer::OnVideoNaturalSizeChange(const gfx::Size& size) {
DCHECK(task_runner_->BelongsToCurrentThread());
client_->OnVideoNaturalSizeChange(size);
+
+ video_res_ = size;
+ OnVideoResolutionPolicyChanged();
}
void CastRenderer::OnVideoOpacityChange(bool opaque) {

Powered by Google App Engine
This is Rietveld 408576698