| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/media/android/webmediaplayer_android.h" | 5 #include "webkit/media/android/webmediaplayer_android.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 WebMediaPlayerAndroid::WebMediaPlayerAndroid( | 56 WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
| 57 WebKit::WebFrame* frame, | 57 WebKit::WebFrame* frame, |
| 58 WebMediaPlayerClient* client, | 58 WebMediaPlayerClient* client, |
| 59 WebKit::WebCookieJar* cookie_jar, | 59 WebKit::WebCookieJar* cookie_jar, |
| 60 webkit_media::WebMediaPlayerManagerAndroid* manager, | 60 webkit_media::WebMediaPlayerManagerAndroid* manager, |
| 61 webkit_media::StreamTextureFactory* factory) | 61 webkit_media::StreamTextureFactory* factory) |
| 62 : frame_(frame), | 62 : frame_(frame), |
| 63 client_(client), | 63 client_(client), |
| 64 buffered_(1u), | 64 buffered_(1u), |
| 65 video_frame_(new WebVideoFrameImpl(VideoFrame::CreateEmptyFrame())), | 65 video_frame_(new WebVideoFrameImpl(VideoFrame::CreateEmptyFrame())), |
| 66 proxy_(new WebMediaPlayerProxyAndroid(base::MessageLoopProxy::current(), | 66 main_loop_(MessageLoop::current()), |
| 67 proxy_(new WebMediaPlayerProxyAndroid(main_loop_->message_loop_proxy(), |
| 67 AsWeakPtr())), | 68 AsWeakPtr())), |
| 68 prepared_(false), | 69 prepared_(false), |
| 69 duration_(0), | 70 duration_(0), |
| 70 pending_seek_(0), | 71 pending_seek_(0), |
| 71 seeking_(false), | 72 seeking_(false), |
| 72 playback_completed_(false), | 73 playback_completed_(false), |
| 73 buffered_bytes_(0), | 74 buffered_bytes_(0), |
| 74 did_loading_progress_(false), | 75 did_loading_progress_(false), |
| 75 cookie_jar_(cookie_jar), | 76 cookie_jar_(cookie_jar), |
| 76 manager_(manager), | 77 manager_(manager), |
| 77 pending_play_event_(false), | 78 pending_play_event_(false), |
| 78 network_state_(WebMediaPlayer::NetworkStateEmpty), | 79 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 79 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 80 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 80 texture_id_(0), | 81 texture_id_(0), |
| 81 stream_id_(0), | 82 stream_id_(0), |
| 82 needs_establish_peer_(true), | 83 needs_establish_peer_(true), |
| 83 stream_texture_factory_(factory) { | 84 stream_texture_factory_(factory) { |
| 84 player_id_ = manager_->RegisterMediaPlayer(this); | 85 main_loop_->AddDestructionObserver(this); |
| 86 if (manager_) |
| 87 player_id_ = manager_->RegisterMediaPlayer(this); |
| 85 if (stream_texture_factory_.get()) | 88 if (stream_texture_factory_.get()) |
| 86 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy()); | 89 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy()); |
| 87 } | 90 } |
| 88 | 91 |
| 89 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { | 92 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { |
| 90 if (media_player_.get()) { | 93 if (manager_) |
| 91 media_player_->Stop(); | 94 manager_->UnregisterMediaPlayer(player_id_); |
| 92 } | |
| 93 | 95 |
| 94 manager_->UnregisterMediaPlayer(player_id_); | 96 if (main_loop_) |
| 97 main_loop_->RemoveDestructionObserver(this); |
| 95 } | 98 } |
| 96 | 99 |
| 97 void WebMediaPlayerAndroid::InitIncognito(bool incognito_mode) { | 100 void WebMediaPlayerAndroid::InitIncognito(bool incognito_mode) { |
| 98 incognito_mode_ = incognito_mode; | 101 incognito_mode_ = incognito_mode; |
| 99 } | 102 } |
| 100 | 103 |
| 101 void WebMediaPlayerAndroid::load(const WebURL& url) { | 104 void WebMediaPlayerAndroid::load(const WebURL& url) { |
| 102 url_ = url; | 105 url_ = url; |
| 103 | 106 |
| 104 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); | 107 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 // Save the current media player status. | 469 // Save the current media player status. |
| 467 pending_seek_ = currentTime(); | 470 pending_seek_ = currentTime(); |
| 468 duration_ = duration(); | 471 duration_ = duration(); |
| 469 | 472 |
| 470 media_player_.reset(); | 473 media_player_.reset(); |
| 471 needs_establish_peer_ = true; | 474 needs_establish_peer_ = true; |
| 472 } | 475 } |
| 473 prepared_ = false; | 476 prepared_ = false; |
| 474 } | 477 } |
| 475 | 478 |
| 479 bool WebMediaPlayerAndroid::IsInitialized() const { |
| 480 return (media_player_ != NULL); |
| 481 } |
| 482 |
| 476 void WebMediaPlayerAndroid::InitializeMediaPlayer() { | 483 void WebMediaPlayerAndroid::InitializeMediaPlayer() { |
| 477 CHECK(!media_player_.get()); | 484 CHECK(!media_player_.get()); |
| 478 prepared_ = false; | 485 prepared_ = false; |
| 479 media_player_.reset(new MediaPlayerBridge()); | 486 media_player_.reset(new MediaPlayerBridge()); |
| 480 media_player_->SetStayAwakeWhilePlaying(); | 487 media_player_->SetStayAwakeWhilePlaying(); |
| 481 | 488 |
| 482 std::string cookies; | 489 std::string cookies; |
| 483 if (cookie_jar_ != NULL) { | 490 if (cookie_jar_ != NULL) { |
| 484 WebURL first_party_url(frame_->document().firstPartyForCookies()); | 491 WebURL first_party_url(frame_->document().firstPartyForCookies()); |
| 485 cookies = UTF16ToUTF8(cookie_jar_->cookies(url_, first_party_url)); | 492 cookies = UTF16ToUTF8(cookie_jar_->cookies(url_, first_party_url)); |
| 486 } | 493 } |
| 487 media_player_->SetDataSource(url_.spec(), cookies, incognito_mode_); | 494 media_player_->SetDataSource(url_.spec(), cookies, incognito_mode_); |
| 488 | 495 |
| 496 if (manager_) |
| 497 manager_->RequestMediaResources(player_id_); |
| 498 |
| 489 media_player_->Prepare( | 499 media_player_->Prepare( |
| 490 base::Bind(&WebMediaPlayerProxyAndroid::MediaInfoCallback, proxy_), | 500 base::Bind(&WebMediaPlayerProxyAndroid::MediaInfoCallback, proxy_), |
| 491 base::Bind(&WebMediaPlayerProxyAndroid::MediaErrorCallback, proxy_), | 501 base::Bind(&WebMediaPlayerProxyAndroid::MediaErrorCallback, proxy_), |
| 492 base::Bind(&WebMediaPlayerProxyAndroid::VideoSizeChangedCallback, proxy_), | 502 base::Bind(&WebMediaPlayerProxyAndroid::VideoSizeChangedCallback, proxy_), |
| 493 base::Bind(&WebMediaPlayerProxyAndroid::BufferingUpdateCallback, proxy_), | 503 base::Bind(&WebMediaPlayerProxyAndroid::BufferingUpdateCallback, proxy_), |
| 494 base::Bind(&WebMediaPlayerProxyAndroid::MediaPreparedCallback, proxy_)); | 504 base::Bind(&WebMediaPlayerProxyAndroid::MediaPreparedCallback, proxy_)); |
| 495 } | 505 } |
| 496 | 506 |
| 497 void WebMediaPlayerAndroid::PlayInternal() { | 507 void WebMediaPlayerAndroid::PlayInternal() { |
| 498 CHECK(prepared_); | 508 CHECK(prepared_); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 } | 551 } |
| 542 | 552 |
| 543 void WebMediaPlayerAndroid::DestroyStreamTexture() { | 553 void WebMediaPlayerAndroid::DestroyStreamTexture() { |
| 544 DCHECK(stream_id_); | 554 DCHECK(stream_id_); |
| 545 DCHECK(texture_id_); | 555 DCHECK(texture_id_); |
| 546 stream_texture_factory_->DestroyStreamTexture(texture_id_); | 556 stream_texture_factory_->DestroyStreamTexture(texture_id_); |
| 547 texture_id_ = 0; | 557 texture_id_ = 0; |
| 548 stream_id_ = 0; | 558 stream_id_ = 0; |
| 549 } | 559 } |
| 550 | 560 |
| 561 void WebMediaPlayerAndroid::WillDestroyCurrentMessageLoop() { |
| 562 manager_ = NULL; |
| 563 main_loop_ = NULL; |
| 564 } |
| 565 |
| 551 WebVideoFrame* WebMediaPlayerAndroid::getCurrentFrame() { | 566 WebVideoFrame* WebMediaPlayerAndroid::getCurrentFrame() { |
| 552 if (!stream_texture_proxy_->IsInitialized() && stream_id_) { | 567 if (!stream_texture_proxy_->IsInitialized() && stream_id_) { |
| 553 stream_texture_proxy_->Initialize( | 568 stream_texture_proxy_->Initialize( |
| 554 stream_id_, video_frame_->width(), video_frame_->height()); | 569 stream_id_, video_frame_->width(), video_frame_->height()); |
| 555 } | 570 } |
| 556 | 571 |
| 557 return video_frame_.get(); | 572 return video_frame_.get(); |
| 558 } | 573 } |
| 559 | 574 |
| 560 void WebMediaPlayerAndroid::putCurrentFrame( | 575 void WebMediaPlayerAndroid::putCurrentFrame( |
| 561 WebVideoFrame* web_video_frame) { | 576 WebVideoFrame* web_video_frame) { |
| 562 } | 577 } |
| 563 | 578 |
| 564 // This gets called both on compositor and main thread. | 579 // This gets called both on compositor and main thread. |
| 565 void WebMediaPlayerAndroid::setStreamTextureClient( | 580 void WebMediaPlayerAndroid::setStreamTextureClient( |
| 566 WebKit::WebStreamTextureClient* client) { | 581 WebKit::WebStreamTextureClient* client) { |
| 567 if (stream_texture_proxy_.get()) | 582 if (stream_texture_proxy_.get()) |
| 568 stream_texture_proxy_->SetClient(client); | 583 stream_texture_proxy_->SetClient(client); |
| 569 } | 584 } |
| 570 | 585 |
| 571 } // namespace webkit_media | 586 } // namespace webkit_media |
| OLD | NEW |