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

Side by Side Diff: webkit/media/android/webmediaplayer_android.cc

Issue 10533049: Adding the logic for releasing decoder resources in WebMediaPlayerManagerAndroid (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressing feedbacks Created 8 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « webkit/media/android/webmediaplayer_android.h ('k') | webkit/media/android/webmediaplayer_manager_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698