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

Unified Diff: media/base/android/media_codec_player.cc

Issue 1076013002: Added stub MediaSourcePlayer for developing behind the flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Eliminated proxy player class as suggested by Xiaohan Created 5 years, 7 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: media/base/android/media_codec_player.cc
diff --git a/media/base/android/media_codec_player.cc b/media/base/android/media_codec_player.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5e7b6b536ec7f23c6b723bb5afa7e46cdb9cb6f5
--- /dev/null
+++ b/media/base/android/media_codec_player.cc
@@ -0,0 +1,213 @@
+#include "media/base/android/media_codec_player.h"
+
+#include "base/bind.h"
+#include "base/lazy_instance.h"
+#include "base/logging.h"
+
+#define POST_TO_MEDIA_THREAD(closure) \
xhwang 2015/05/06 17:42:44 This doesn't always "post". How about POST_TO_MEDI
Tima Vaisburd 2015/05/08 07:30:54 I tried to make it better. Please see the comments
+ do { \
+ if (!GetMediaTaskRunner()->BelongsToCurrentThread()) { \
+ GetMediaTaskRunner()->PostTask(FROM_HERE, closure); \
+ return; \
+ } \
+ } while(0)
+
+
+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();
+}
+
+// MediaCodecPlayer implementation.
+
+MediaCodecPlayer::MediaCodecPlayer(
+ 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),
+ ui_task_runner_(base::MessageLoopProxy::current()),
+ demuxer_(demuxer.Pass()),
+ weak_factory_(this) {
+ // UI thread
+ DVLOG(1) << "MediaCodecPlayer::MediaCodecPlayer: player_id:" << player_id;
+
+ weak_this_ = weak_factory_.GetWeakPtr();
+
+ // Finish initializaton on Media thread
+ GetMediaTaskRunner()->PostTask(
+ FROM_HERE, base::Bind(&MediaCodecPlayer::Initialize, weak_this_));
+}
+
+MediaCodecPlayer::~MediaCodecPlayer()
+{
+ // Media thread
+ DVLOG(1) << "MediaCodecPlayer::~MediaCodecPlayer";
+}
+
+void MediaCodecPlayer::Initialize() {
+ // Media thread
+ DVLOG(1) << __FUNCTION__;
+
+ demuxer_->Initialize(this);
+}
+
+// MediaPlayerAndroid implementation.
+
+void MediaCodecPlayer::DeleteOnCorrectThread() {
+ DVLOG(1) << __FUNCTION__;
+
+ if (ui_task_runner_->BelongsToCurrentThread()) {
+ DetachListener();
+ DestroyListener();
+ }
+
+ if (GetMediaTaskRunner()->BelongsToCurrentThread())
+ delete this;
+ else
+ GetMediaTaskRunner()->DeleteSoon(FROM_HERE, this);
+}
+
+void MediaCodecPlayer::SetVideoSurface(gfx::ScopedJavaSurface surface) {
xhwang 2015/05/06 17:42:44 Use NOTIMPLEMENTED() in these functions.
Tima Vaisburd 2015/05/08 07:30:54 Done.
+ POST_TO_MEDIA_THREAD(
xhwang 2015/05/06 17:42:44 I don't find this macro very readable, maybe becau
Tima Vaisburd 2015/05/08 07:30:54 Yes. I pulled the base::Bind into the macro, and u
+ base::Bind(&MediaCodecPlayer::SetVideoSurface, weak_this_,
+ base::Passed(&surface)));
+
+ // Media thread
+ DVLOG(1) << __FUNCTION__;
+}
+
+void MediaCodecPlayer::Start() {
+ if (ui_task_runner_->BelongsToCurrentThread())
+ AttachListener(NULL);
xhwang 2015/05/06 17:42:44 Seems to worth a comment.
Tima Vaisburd 2015/05/08 07:30:54 A closer look at the AttachListener/DetachListener
+
+ POST_TO_MEDIA_THREAD(base::Bind(&MediaCodecPlayer::Start, weak_this_));
+
+ // Media thread
+ DVLOG(1) << __FUNCTION__;
+}
+
+void MediaCodecPlayer::Pause(bool is_media_related_action) {
+ POST_TO_MEDIA_THREAD(
+ base::Bind(&MediaCodecPlayer::Pause, weak_this_,
+ is_media_related_action));
+
+ // Media thread
+ DVLOG(1) << __FUNCTION__;
+}
+
+void MediaCodecPlayer::SeekTo(base::TimeDelta timestamp) {
+ POST_TO_MEDIA_THREAD(
+ base::Bind(&MediaCodecPlayer::SeekTo, weak_this_, timestamp));
+
+ // Media thread
+ DVLOG(1) << __FUNCTION__ << " " << timestamp;
+}
+
+void MediaCodecPlayer::Release() {
+ POST_TO_MEDIA_THREAD(base::Bind(&MediaCodecPlayer::Release, weak_this_));
+
+ // Media thread
+ DVLOG(1) << __FUNCTION__;
+}
+
+void MediaCodecPlayer::SetVolume(double volume) {
+ POST_TO_MEDIA_THREAD(
+ base::Bind(&MediaCodecPlayer::SetVolume, weak_this_, volume));
+
+ // Media thread
+ DVLOG(1) << __FUNCTION__ << " " << volume;
+}
+
+int MediaCodecPlayer::GetVideoWidth() {
+ // UI thread
xhwang 2015/05/06 17:42:44 Here and below, DCHECK it's called on the correct
Tima Vaisburd 2015/05/08 07:30:54 Done.
+ return 320;
+}
+
+int MediaCodecPlayer::GetVideoHeight() {
+ // UI thread
+ return 240;
+}
+
+base::TimeDelta MediaCodecPlayer::GetCurrentTime() {
+ // UI thread, Media thread
+ return base::TimeDelta();
+}
+
+base::TimeDelta MediaCodecPlayer::GetDuration() {
+ // UI thread
+ return base::TimeDelta();
+}
+
+bool MediaCodecPlayer::IsPlaying() {
+ // UI thread
+ return false;
+}
+
+bool MediaCodecPlayer::CanPause() {
+ // UI thread
+ return false;
+}
+
+bool MediaCodecPlayer::CanSeekForward() {
+ // UI thread
+ return false;
+}
+
+bool MediaCodecPlayer::CanSeekBackward() {
+ // UI thread
+ return false;
+}
+
+bool MediaCodecPlayer::IsPlayerReady() {
+ // UI thread
+ DVLOG(1) << __FUNCTION__;
+ return true;
+}
+
+void MediaCodecPlayer::SetCdm(BrowserCdm* cdm) {
+ DVLOG(1) << __FUNCTION__;
+}
+
+// Callbacks from Demuxer.
+
+void MediaCodecPlayer::OnDemuxerConfigsAvailable(
+ const DemuxerConfigs& configs) {
+ // Media thread
+ DVLOG(1) << __FUNCTION__;
+}
+
+void MediaCodecPlayer::OnDemuxerDataAvailable(const DemuxerData& data) {
+ // Media thread
+}
+
+void MediaCodecPlayer::OnDemuxerSeekDone(
+ base::TimeDelta actual_browser_seek_time) {
+ // Media thread
+ DVLOG(1) << __FUNCTION__ << " actual_time:" << actual_browser_seek_time;
+}
+
+void MediaCodecPlayer::OnDemuxerDurationChanged(
+ base::TimeDelta duration) {
+ // Media thread
+ DVLOG(1) << __FUNCTION__ << " duration:" << duration;
+}
+
+} // namespace media

Powered by Google App Engine
This is Rietveld 408576698