Chromium Code Reviews| 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 "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 36 StreamTextureFactory* factory) | 36 StreamTextureFactory* factory) |
| 37 : client_(client), | 37 : client_(client), |
| 38 buffered_(1u), | 38 buffered_(1u), |
| 39 main_loop_(MessageLoop::current()), | 39 main_loop_(MessageLoop::current()), |
| 40 pending_seek_(0), | 40 pending_seek_(0), |
| 41 seeking_(false), | 41 seeking_(false), |
| 42 did_loading_progress_(false), | 42 did_loading_progress_(false), |
| 43 manager_(manager), | 43 manager_(manager), |
| 44 network_state_(WebMediaPlayer::NetworkStateEmpty), | 44 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 45 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 45 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 46 texture_id_(0), | |
| 47 texture_mailbox_sync_point_(0), | |
| 48 stream_id_(0), | |
| 46 is_playing_(false), | 49 is_playing_(false), |
| 47 needs_establish_peer_(true), | 50 needs_establish_peer_(true), |
| 48 has_size_info_(false), | 51 has_size_info_(false), |
| 49 stream_texture_factory_(factory), | 52 stream_texture_factory_(factory), |
| 50 needs_external_surface_(false), | 53 needs_external_surface_(false), |
| 51 video_frame_provider_client_(NULL) { | 54 video_frame_provider_client_(NULL) { |
| 52 main_loop_->AddDestructionObserver(this); | 55 main_loop_->AddDestructionObserver(this); |
| 53 if (manager_) | 56 if (manager_) |
| 54 player_id_ = manager_->RegisterMediaPlayer(this); | 57 player_id_ = manager_->RegisterMediaPlayer(this); |
| 55 | 58 |
| 56 if (stream_texture_factory_.get()) { | 59 if (stream_texture_factory_.get()) { |
| 57 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy()); | 60 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy()); |
| 58 stream_id_ = stream_texture_factory_->CreateStreamTexture(&texture_id_); | 61 stream_id_ = stream_texture_factory_->CreateStreamTexture( |
| 62 kGLTextureExternalOES, | |
| 63 &texture_id_, | |
| 64 &texture_mailbox_, | |
| 65 &texture_mailbox_sync_point_); | |
| 59 ReallocateVideoFrame(); | 66 ReallocateVideoFrame(); |
| 60 } | 67 } |
| 61 } | 68 } |
| 62 | 69 |
| 63 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { | 70 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { |
| 64 SetVideoFrameProviderClient(NULL); | 71 SetVideoFrameProviderClient(NULL); |
| 65 client_->setWebLayer(NULL); | 72 client_->setWebLayer(NULL); |
| 66 | 73 |
| 67 if (stream_id_) | 74 if (stream_id_) { |
| 68 stream_texture_factory_->DestroyStreamTexture(texture_id_); | 75 stream_texture_factory_->DestroyStreamTexture( |
| 76 kGLTextureExternalOES, | |
| 77 texture_id_, | |
| 78 texture_mailbox_, | |
| 79 0); // TODO(danakj): How do I get this sync point? | |
|
danakj
2013/04/18 02:38:34
Daniel/Antoine, besides "things I did horribly wro
piman
2013/04/18 04:11:19
Reading the code, my interpretation of how StreamT
no sievers
2013/04/18 17:37:08
Yep, and notice that deleting the client texture (
danakj
2013/04/19 18:03:52
Oh, I have it just deleting the client texture and
| |
| 80 } | |
| 69 | 81 |
| 70 if (manager_) | 82 if (manager_) |
| 71 manager_->UnregisterMediaPlayer(player_id_); | 83 manager_->UnregisterMediaPlayer(player_id_); |
| 72 | 84 |
| 73 if (main_loop_) | 85 if (main_loop_) |
| 74 main_loop_->RemoveDestructionObserver(this); | 86 main_loop_->RemoveDestructionObserver(this); |
| 75 } | 87 } |
| 76 | 88 |
| 77 void WebMediaPlayerAndroid::load(const WebURL& url, CORSMode cors_mode) { | 89 void WebMediaPlayerAndroid::load(const WebURL& url, CORSMode cors_mode) { |
| 78 if (cors_mode != CORSModeUnspecified) | 90 if (cors_mode != CORSModeUnspecified) |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 450 if (manager_) | 462 if (manager_) |
| 451 manager_->UnregisterMediaPlayer(player_id_); | 463 manager_->UnregisterMediaPlayer(player_id_); |
| 452 Detach(); | 464 Detach(); |
| 453 main_loop_ = NULL; | 465 main_loop_ = NULL; |
| 454 } | 466 } |
| 455 | 467 |
| 456 void WebMediaPlayerAndroid::Detach() { | 468 void WebMediaPlayerAndroid::Detach() { |
| 457 Destroy(); | 469 Destroy(); |
| 458 | 470 |
| 459 if (stream_id_) { | 471 if (stream_id_) { |
| 460 stream_texture_factory_->DestroyStreamTexture(texture_id_); | 472 stream_texture_factory_->DestroyStreamTexture( |
| 473 kGLTextureExternalOES, | |
| 474 texture_id_, | |
| 475 texture_mailbox_, | |
| 476 0); // TODO(danakj): How do I get this sync point? | |
| 461 stream_id_ = 0; | 477 stream_id_ = 0; |
| 462 } | 478 } |
| 463 | 479 |
| 464 current_frame_ = NULL; | 480 current_frame_ = NULL; |
| 465 | 481 |
| 466 manager_ = NULL; | 482 manager_ = NULL; |
| 467 } | 483 } |
| 468 | 484 |
| 469 void WebMediaPlayerAndroid::ReallocateVideoFrame() { | 485 void WebMediaPlayerAndroid::ReallocateVideoFrame() { |
| 470 if (needs_external_surface_) { | 486 if (needs_external_surface_) { |
| 471 // VideoFrame::CreateHoleFrame is only defined under GOOGLE_TV. | 487 // VideoFrame::CreateHoleFrame is only defined under GOOGLE_TV. |
| 472 #if defined(GOOGLE_TV) | 488 #if defined(GOOGLE_TV) |
| 473 if (!natural_size_.isEmpty()) | 489 if (!natural_size_.isEmpty()) |
| 474 current_frame_ = VideoFrame::CreateHoleFrame(natural_size_); | 490 current_frame_ = VideoFrame::CreateHoleFrame(natural_size_); |
| 475 #else | 491 #else |
| 476 NOTIMPLEMENTED() << "Hole punching not supported outside of Google TV"; | 492 NOTIMPLEMENTED() << "Hole punching not supported outside of Google TV"; |
| 477 #endif | 493 #endif |
| 478 } else if (texture_id_) { | 494 } else if (texture_id_) { |
| 479 current_frame_ = VideoFrame::WrapNativeTexture( | 495 current_frame_ = VideoFrame::WrapNativeTexture( |
| 480 texture_id_, kGLTextureExternalOES, natural_size_, | 496 texture_mailbox_, texture_mailbox_sync_point_, |
| 497 kGLTextureExternalOES, natural_size_, | |
| 481 gfx::Rect(natural_size_), natural_size_, base::TimeDelta(), | 498 gfx::Rect(natural_size_), natural_size_, base::TimeDelta(), |
| 482 VideoFrame::ReadPixelsCB(), | 499 VideoFrame::ReadPixelsCB(), |
| 500 VideoFrame::TextureNoLongerNeededCallback(), | |
| 483 base::Closure()); | 501 base::Closure()); |
| 484 } | 502 } |
| 485 } | 503 } |
| 486 | 504 |
| 487 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( | 505 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( |
| 488 cc::VideoFrameProvider::Client* client) { | 506 cc::VideoFrameProvider::Client* client) { |
| 489 // This is called from both the main renderer thread and the compositor | 507 // This is called from both the main renderer thread and the compositor |
| 490 // thread (when the main thread is blocked). | 508 // thread (when the main thread is blocked). |
| 491 if (video_frame_provider_client_) | 509 if (video_frame_provider_client_) |
| 492 video_frame_provider_client_->StopUsingProvider(); | 510 video_frame_provider_client_->StopUsingProvider(); |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 519 | 537 |
| 520 void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) { | 538 void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) { |
| 521 needs_establish_peer_ = needs_establish_peer; | 539 needs_establish_peer_ = needs_establish_peer; |
| 522 } | 540 } |
| 523 | 541 |
| 524 void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) { | 542 void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) { |
| 525 is_playing_ = is_playing; | 543 is_playing_ = is_playing; |
| 526 } | 544 } |
| 527 | 545 |
| 528 } // namespace webkit_media | 546 } // namespace webkit_media |
| OLD | NEW |