Index: media/base/android/media_source_player_with_dedicated_thread.cc |
diff --git a/media/base/android/media_source_player_with_dedicated_thread.cc b/media/base/android/media_source_player_with_dedicated_thread.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..05a9a41e63b45cd7bdfbcf88e9d2a0efd3b35814 |
--- /dev/null |
+++ b/media/base/android/media_source_player_with_dedicated_thread.cc |
@@ -0,0 +1,158 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "media/base/android/media_source_player_with_dedicated_thread.h" |
+ |
+#include "base/bind.h" |
+#include "base/lazy_instance.h" |
+#include "base/logging.h" |
+#include "base/threading/thread.h" |
+ |
+#include "media/base/android/media_player_manager.h" |
+#include "media/base/android/media_source_player_impl.h" |
+ |
+namespace media { |
+ |
+class MediaThread : public base::Thread { |
+ public: |
+ MediaThread() : base::Thread("BrowserMediaThread") { |
+ Start(); |
+ } |
+}; |
+ |
+// Create media thread |
+base::LazyInstance<MediaThread>::Leaky |
+ g_media_thread = LAZY_INSTANCE_INITIALIZER; |
+ |
+ |
+scoped_refptr<base::SingleThreadTaskRunner> GetMediaTaskRunner() { |
+ return g_media_thread.Pointer()->task_runner(); |
+} |
+ |
+MediaSourcePlayerWithDedicatedThread::MediaSourcePlayerWithDedicatedThread( |
+ int player_id, |
+ MediaPlayerManager* manager, |
+ const RequestMediaResourcesCB& request_media_resources_cb, |
+ scoped_ptr<DemuxerAndroid> demuxer, |
+ const GURL& frame_url) |
+ : MediaPlayerAndroid(player_id, |
+ manager, |
+ request_media_resources_cb, |
+ frame_url), |
+ weak_factory_(this) |
+{ |
+ // UI thread |
+ DVLOG(1) << "MediaSourcePlayerWithDedicatedThread: player_id:" << player_id; |
+ |
+ impl_ = new MediaSourcePlayerImpl(demuxer.Pass()); |
+} |
+ |
+MediaSourcePlayerWithDedicatedThread::~MediaSourcePlayerWithDedicatedThread() |
+{ |
+ // UI thread |
+ DVLOG(1) << "~MediaSourcePlayerWithDedicatedThread: player_id:" |
+ << player_id(); |
+ |
+ // Postpone the deletion of |impl_| until it is properly stopped |
+ // on the Media thread. |
+ GetMediaTaskRunner()->PostTask( |
+ FROM_HERE, base::Bind(&MediaSourcePlayerImpl::DestroySelf, |
+ base::Unretained(impl_))); |
+} |
+ |
+// MediaPlayerAndroid implementation. |
+// The methods are called on UI thread |
+ |
+void MediaSourcePlayerWithDedicatedThread::SetVideoSurface( |
+ gfx::ScopedJavaSurface surface) { |
+ DVLOG(1) << __FUNCTION__; |
+ |
+ GetMediaTaskRunner()->PostTask( |
+ FROM_HERE, base::Bind(&MediaSourcePlayerImpl::SetVideoSurface, |
+ base::Unretained(impl_), base::Passed(&surface))); |
+} |
xhwang
2015/05/01 06:55:05
Can you just do something like:
void MediaSourceP
timav
2015/05/01 18:14:10
Sorry, I did not understand your point here.
The
xhwang
2015/05/01 20:26:35
Sorry for the confusion. I was just proposing to m
timav
2015/05/06 06:46:28
Done.
|
+ |
+void MediaSourcePlayerWithDedicatedThread::Start() { |
xhwang
2015/05/01 06:55:05
I am not a fan of the name MediaSourcePlayerImpl a
timav
2015/05/01 18:14:10
I completely agree :-)
I will get in agreement wit
qinmin
2015/05/01 19:12:14
MediaCodecPlayer sgtm
timav
2015/05/06 06:46:29
Done.
|
+ DVLOG(1) << __FUNCTION__; |
+ |
+ GetMediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&MediaSourcePlayerImpl::Start, base::Unretained(impl_))); |
+} |
+ |
+void MediaSourcePlayerWithDedicatedThread::Pause( |
+ bool /* is_media_related_action */) { |
+ DVLOG(1) << __FUNCTION__; |
+ |
+ GetMediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&MediaSourcePlayerImpl::Pause, base::Unretained(impl_))); |
+} |
+ |
+void MediaSourcePlayerWithDedicatedThread::SeekTo(base::TimeDelta timestamp) { |
+ DVLOG(1) << __FUNCTION__ << " " << timestamp; |
+ |
+ GetMediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&MediaSourcePlayerImpl::SeekTo, |
+ base::Unretained(impl_), timestamp)); |
+} |
+ |
+void MediaSourcePlayerWithDedicatedThread::Release() { |
+ DVLOG(1) << __FUNCTION__; |
+ |
+ GetMediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&MediaSourcePlayerImpl::Release, base::Unretained(impl_))); |
+} |
+ |
+void MediaSourcePlayerWithDedicatedThread::SetVolume(double volume) { |
+ DVLOG(1) << __FUNCTION__ << " " << volume; |
+ GetMediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&MediaSourcePlayerImpl::SetVolume, |
+ base::Unretained(impl_), volume)); |
+} |
+ |
+int MediaSourcePlayerWithDedicatedThread::GetVideoWidth() { |
+ return impl_->GetVideoWidth(); |
+} |
+ |
+int MediaSourcePlayerWithDedicatedThread::GetVideoHeight() { |
+ return impl_->GetVideoHeight(); |
+} |
+ |
+base::TimeDelta MediaSourcePlayerWithDedicatedThread::GetCurrentTime() { |
+ return impl_->GetCurrentTime(); |
+} |
+ |
+base::TimeDelta MediaSourcePlayerWithDedicatedThread::GetDuration() { |
+ return impl_->GetDuration(); |
+} |
+ |
+bool MediaSourcePlayerWithDedicatedThread::IsPlaying() { |
+ return impl_->IsPlaying(); |
+} |
+ |
+bool MediaSourcePlayerWithDedicatedThread::CanPause() { |
+ return impl_->CanPause(); |
+} |
+ |
+bool MediaSourcePlayerWithDedicatedThread::CanSeekForward() { |
+ return impl_->CanSeekForward(); |
+} |
+ |
+bool MediaSourcePlayerWithDedicatedThread::CanSeekBackward() { |
+ return impl_->CanSeekBackward(); |
+} |
+ |
+bool MediaSourcePlayerWithDedicatedThread::IsPlayerReady() { |
+ return impl_->IsPlayerReady(); |
+} |
+ |
+void MediaSourcePlayerWithDedicatedThread::SetCdm(BrowserCdm* cdm) { |
+ DVLOG(1) << __FUNCTION__; |
+} |
+ |
+} // namespace media |