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

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

Issue 1814263002: [chromecast] Start deprecating MediaMessageLoop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 4 years, 9 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/cma_message_filter_host.cc
diff --git a/chromecast/browser/media/cma_message_filter_host.cc b/chromecast/browser/media/cma_message_filter_host.cc
index b97f9147a0553efb8ea3ee9d5dd5e9a737f25be1..38ce9206b3266a7d586af507e1164b033f754f2d 100644
--- a/chromecast/browser/media/cma_message_filter_host.cc
+++ b/chromecast/browser/media/cma_message_filter_host.cc
@@ -15,14 +15,11 @@
#include "chromecast/browser/media/cma_media_pipeline_client.h"
#include "chromecast/browser/media/media_pipeline_host.h"
#include "chromecast/common/media/cma_messages.h"
-#include "chromecast/media/base/media_message_loop.h"
#include "chromecast/media/cdm/browser_cdm_cast.h"
#include "chromecast/media/cma/pipeline/av_pipeline_client.h"
#include "chromecast/media/cma/pipeline/media_pipeline_client.h"
#include "chromecast/media/cma/pipeline/video_pipeline_client.h"
-#include "chromecast/public/cast_media_shlib.h"
#include "chromecast/public/graphics_types.h"
-#include "chromecast/public/video_plane.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
#include "media/base/bind_to_current_loop.h"
@@ -53,86 +50,16 @@ uint64_t GetPipelineCmaId(int process_id, int media_id) {
static_cast<uint64_t>(media_id);
}
-MediaPipelineHost* GetMediaPipeline(int process_id, int media_id) {
- DCHECK(MediaMessageLoop::GetTaskRunner()->BelongsToCurrentThread());
- MediaPipelineCmaMap::iterator it =
- g_pipeline_map_cma.Get().find(GetPipelineCmaId(process_id, media_id));
- if (it == g_pipeline_map_cma.Get().end())
- return nullptr;
- return it->second;
-}
-
-void SetMediaPipeline(int process_id, int media_id, MediaPipelineHost* host) {
- DCHECK(MediaMessageLoop::GetTaskRunner()->BelongsToCurrentThread());
- std::pair<MediaPipelineCmaMap::iterator, bool> ret =
- g_pipeline_map_cma.Get().insert(
- std::make_pair(GetPipelineCmaId(process_id, media_id), host));
-
- // Check there is no other entry with the same ID.
- DCHECK(ret.second != false);
-}
-
-void DestroyMediaPipeline(int process_id,
- int media_id,
- scoped_ptr<MediaPipelineHost> media_pipeline) {
- DCHECK(MediaMessageLoop::GetTaskRunner()->BelongsToCurrentThread());
- MediaPipelineCmaMap::iterator it =
- g_pipeline_map_cma.Get().find(GetPipelineCmaId(process_id, media_id));
- if (it != g_pipeline_map_cma.Get().end())
- g_pipeline_map_cma.Get().erase(it);
-}
-
-void SetCdmOnCmaThread(int render_process_id, int media_id,
- BrowserCdmCast* cdm) {
- MediaPipelineHost* pipeline = GetMediaPipeline(render_process_id, media_id);
- if (!pipeline) {
- LOG(WARNING) << "MediaPipelineHost not alive: " << render_process_id << ","
- << media_id;
- return;
- }
-
- pipeline->SetCdm(cdm);
-}
-
-// BrowserCdm instance must be retrieved/accessed on the UI thread, then
-// passed to MediaPipelineHost on CMA thread.
-void SetCdmOnUiThread(
- int render_process_id,
- int render_frame_id,
- int media_id,
- int cdm_id) {
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
- content::RenderProcessHost* host =
- content::RenderProcessHost::FromID(render_process_id);
- if (!host) {
- LOG(ERROR) << "RenderProcessHost not alive for ID: " << render_process_id;
- return;
- }
-
- scoped_refptr<::media::MediaKeys> cdm = host->GetCdm(render_frame_id, cdm_id);
- if (!cdm) {
- LOG(WARNING) << "Could not find BrowserCdm (" << render_frame_id << ","
- << cdm_id << ")";
- return;
- }
-
- BrowserCdmCast* browser_cdm_cast =
- static_cast<BrowserCdmCastUi*>(cdm.get())->browser_cdm_cast();
- MediaMessageLoop::GetTaskRunner()->PostTask(
- FROM_HERE, base::Bind(&SetCdmOnCmaThread, render_process_id, media_id,
- base::Unretained(browser_cdm_cast)));
-}
-
} // namespace
CmaMessageFilterHost::CmaMessageFilterHost(
int render_process_id,
- scoped_refptr<CmaMediaPipelineClient> client)
+ scoped_refptr<CmaMediaPipelineClient> client,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
: content::BrowserMessageFilter(CastMediaMsgStart),
process_id_(render_process_id),
client_(client),
- task_runner_(MediaMessageLoop::GetTaskRunner()),
+ task_runner_(task_runner),
weak_factory_(this) {
weak_this_ = weak_factory_.GetWeakPtr();
}
@@ -181,8 +108,8 @@ void CmaMessageFilterHost::DeleteEntries() {
media_pipelines_.erase(it++);
task_runner_->PostTask(
FROM_HERE,
- base::Bind(&DestroyMediaPipeline, process_id_, media_id,
- base::Passed(&media_pipeline)));
+ base::Bind(&CmaMessageFilterHost::DestroyMediaPipeline, weak_this_,
+ process_id_, media_id, base::Passed(&media_pipeline)));
}
}
@@ -214,9 +141,8 @@ void CmaMessageFilterHost::CreateMedia(int media_id, LoadType load_type) {
&CmaMediaPipelineClient::OnMediaPipelineBackendDestroyed, client_);
task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&SetMediaPipeline,
- process_id_, media_id, media_pipeline_host.get()));
+ FROM_HERE, base::Bind(&CmaMessageFilterHost::SetMediaPipeline, weak_this_,
+ process_id_, media_id, media_pipeline_host.get()));
task_runner_->PostTask(
FROM_HERE,
base::Bind(&MediaPipelineHost::Initialize,
@@ -242,8 +168,8 @@ void CmaMessageFilterHost::DestroyMedia(int media_id) {
media_pipelines_.erase(it);
task_runner_->PostTask(
FROM_HERE,
- base::Bind(&DestroyMediaPipeline, process_id_, media_id,
- base::Passed(&media_pipeline)));
+ base::Bind(&CmaMessageFilterHost::DestroyMediaPipeline, weak_this_,
+ process_id_, media_id, base::Passed(&media_pipeline)));
}
void CmaMessageFilterHost::SetCdm(int media_id,
@@ -256,7 +182,7 @@ void CmaMessageFilterHost::SetCdm(int media_id,
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
- base::Bind(&SetCdmOnUiThread,
+ base::Bind(&CmaMessageFilterHost::SetCdmOnUiThread, weak_this_,
process_id_, render_frame_id, media_id, cdm_id));
}
@@ -530,5 +456,82 @@ void CmaMessageFilterHost::OnNaturalSizeChanged(
Send(new CmaMsg_NaturalSizeChanged(media_id, track_id, size));
}
+// BrowserCdm instance must be retrieved/accessed on the UI thread, then
+// passed to MediaPipelineHost on CMA thread.
+void CmaMessageFilterHost::SetCdmOnUiThread(int render_process_id,
+ int render_frame_id,
+ int media_id,
+ int cdm_id) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ content::RenderProcessHost* host =
+ content::RenderProcessHost::FromID(render_process_id);
+ if (!host) {
+ LOG(ERROR) << "RenderProcessHost not alive for ID: " << render_process_id;
+ return;
+ }
+
+ scoped_refptr<::media::MediaKeys> cdm = host->GetCdm(render_frame_id, cdm_id);
+ if (!cdm) {
+ LOG(WARNING) << "Could not find BrowserCdm (" << render_frame_id << ","
+ << cdm_id << ")";
+ return;
+ }
+
+ BrowserCdmCast* browser_cdm_cast =
+ static_cast<BrowserCdmCastUi*>(cdm.get())->browser_cdm_cast();
+ task_runner_->PostTask(FROM_HERE,
+ base::Bind(&CmaMessageFilterHost::SetCdmOnCmaThread,
+ weak_this_, render_process_id, media_id,
+ base::Unretained(browser_cdm_cast)));
+}
+
+void CmaMessageFilterHost::SetCdmOnCmaThread(int render_process_id,
+ int media_id,
+ BrowserCdmCast* cdm) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ MediaPipelineHost* pipeline = GetMediaPipeline(render_process_id, media_id);
+ if (!pipeline) {
+ LOG(WARNING) << "MediaPipelineHost not alive: " << render_process_id << ","
+ << media_id;
+ return;
+ }
+
+ pipeline->SetCdm(cdm);
+}
+
+MediaPipelineHost* CmaMessageFilterHost::GetMediaPipeline(int process_id,
+ int media_id) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ MediaPipelineCmaMap::iterator it =
+ g_pipeline_map_cma.Get().find(GetPipelineCmaId(process_id, media_id));
+ if (it == g_pipeline_map_cma.Get().end())
+ return nullptr;
+ return it->second;
+}
+
+void CmaMessageFilterHost::SetMediaPipeline(int process_id,
+ int media_id,
+ MediaPipelineHost* host) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ std::pair<MediaPipelineCmaMap::iterator, bool> ret =
+ g_pipeline_map_cma.Get().insert(
+ std::make_pair(GetPipelineCmaId(process_id, media_id), host));
+
+ // Check there is no other entry with the same ID.
+ DCHECK(ret.second != false);
+}
+
+void CmaMessageFilterHost::DestroyMediaPipeline(
+ int process_id,
+ int media_id,
+ scoped_ptr<MediaPipelineHost> media_pipeline) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ MediaPipelineCmaMap::iterator it =
+ g_pipeline_map_cma.Get().find(GetPipelineCmaId(process_id, media_id));
+ if (it != g_pipeline_map_cma.Get().end())
+ g_pipeline_map_cma.Get().erase(it);
+}
+
} // namespace media
} // namespace chromecast

Powered by Google App Engine
This is Rietveld 408576698