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

Unified Diff: webkit/media/android/webmediaplayer_android.cc

Issue 14247018: Implement WebRTC in Chrome for TV (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: combined KeyHandlingDemxuer w/ KeyHandlingChunkDemuxer Created 7 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: webkit/media/android/webmediaplayer_android.cc
diff --git a/webkit/media/android/webmediaplayer_android.cc b/webkit/media/android/webmediaplayer_android.cc
index 7907512455e0e5b6df6a52541cd88f92d6843774..3333d1685611fd4c31ff50105cd56e1c98cb8509 100644
--- a/webkit/media/android/webmediaplayer_android.cc
+++ b/webkit/media/android/webmediaplayer_android.cc
@@ -27,6 +27,8 @@
#if defined(GOOGLE_TV)
#include "webkit/media/android/media_source_delegate.h"
+#include "webkit/media/media_stream_audio_renderer.h"
+#include "webkit/media/media_stream_client.h"
#endif
static const uint32 kGLTextureExternalOES = 0x8D65;
@@ -48,7 +50,9 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
WebMediaPlayerManagerAndroid* manager,
WebMediaPlayerProxyAndroid* proxy,
StreamTextureFactory* factory,
- media::MediaLog* media_log)
+ media::MediaLog* media_log,
+ MediaStreamClient* media_stream_client,
+ media::Demuxer* demuxer)
: frame_(frame),
client_(client),
buffered_(1u),
@@ -67,7 +71,9 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
video_frame_provider_client_(NULL),
proxy_(proxy),
current_time_(0),
- media_log_(media_log) {
+ media_log_(media_log),
+ media_stream_client_(media_stream_client),
+ demuxer_(demuxer) {
main_loop_->AddDestructionObserver(this);
if (manager_)
player_id_ = manager_->RegisterMediaPlayer(this);
@@ -94,6 +100,19 @@ WebMediaPlayerAndroid::~WebMediaPlayerAndroid() {
if (main_loop_)
main_loop_->RemoveDestructionObserver(this);
+#if defined(GOOGLE_TV)
+ if (audio_renderer_) {
+ if (audio_renderer_->IsLocalRenderer()) {
+ audio_renderer_->Stop();
+ } else if (!paused()) {
+ // The |audio_renderer_| can be shared by multiple remote streams, and
Ami GONE FROM CHROMIUM 2013/05/08 20:26:44 Does this not also apply to multiple local streams
wonsik 2013/05/13 14:03:48 applied s/multipe remote streams/multiple streams/
+ // it will be stopped when WebRtcAudioDeviceImpl goes away. So we simply
+ // pause the |audio_renderer_| here to avoid re-creating the
+ // |audio_renderer_|.
+ audio_renderer_->Pause();
+ }
+ }
+#endif
}
void WebMediaPlayerAndroid::load(const WebURL& url, CORSMode cors_mode) {
@@ -106,24 +125,48 @@ void WebMediaPlayerAndroid::load(const WebURL& url,
if (cors_mode != CORSModeUnspecified)
NOTIMPLEMENTED() << "No CORS support";
- scoped_ptr<WebKit::WebMediaSource> scoped_media_source(media_source);
+ MediaPlayerBridge::MediaSource media_source_type =
+ MediaPlayerBridge::MEDIA_SOURCE_URL;
#if defined(GOOGLE_TV)
if (media_source) {
- media_source_delegate_.reset(
- new MediaSourceDelegate(
- frame_, client_, proxy_, player_id_, media_log_));
+ media_source_type = MediaPlayerBridge::MEDIA_SOURCE_MSE;
+
// |media_source_delegate_| is owned, so Unretained() is safe here.
- media_source_delegate_->Initialize(
- scoped_media_source.Pass(),
+ media_source_delegate_.reset(new MediaSourceDelegate(
+ proxy_, player_id_,
base::Bind(&WebMediaPlayerAndroid::UpdateNetworkState,
- base::Unretained(this)));
+ base::Unretained(this))));
+ media_source_delegate_->InitializeMediaSource(
+ frame_, client_, media_source, media_log_);
+ } else if (media_stream_client_) {
+ media_source_type = MediaPlayerBridge::MEDIA_SOURCE_STREAM;
+
+ media_source_delegate_.reset(new MediaSourceDelegate(
+ proxy_, player_id_,
+ base::Bind(&WebMediaPlayerAndroid::UpdateNetworkState,
+ base::Unretained(this))));
Ami GONE FROM CHROMIUM 2013/05/08 20:26:44 Comment about Unretained() from above applies here
wonsik 2013/05/13 14:03:48 Done.
+ media_source_delegate_->InitializeMediaStream(
+ demuxer_, destroy_demuxer_cb_);
+
+ audio_renderer_ = media_stream_client_->GetAudioRenderer(url);
+ if (audio_renderer_)
+ audio_renderer_->Start();
}
+#else
+ if (media_source)
+ media_source_type = MediaPlayerBridge::MEDIA_SOURCE_MSE;
#endif
+ InitializeMediaPlayer(url, media_source_type);
+}
+
+void WebMediaPlayerAndroid::InitializeMediaPlayer(
+ const WebURL& url,
+ MediaPlayerBridge::MediaSource media_source) {
url_ = url;
GURL first_party_url = frame_->document().firstPartyForCookies();
if (proxy_) {
- proxy_->Initialize(player_id_, url_, media_source != NULL, first_party_url);
+ proxy_->Initialize(player_id_, url, media_source, first_party_url);
if (manager_->IsInFullscreen(frame_))
proxy_->EnterFullscreen(player_id_);
}
@@ -139,10 +182,11 @@ void WebMediaPlayerAndroid::cancelLoad() {
void WebMediaPlayerAndroid::play() {
#if defined(GOOGLE_TV)
if (hasVideo() && needs_external_surface_) {
- DCHECK(!needs_establish_peer_);
if (proxy_)
proxy_->RequestExternalSurface(player_id_);
}
+ if (audio_renderer_ && paused())
Ami GONE FROM CHROMIUM 2013/05/08 20:26:44 Can these changes to the audio_renderer_'s play/pa
wonsik 2013/05/13 14:03:48 Done.
+ audio_renderer_->Play();
#endif
if (hasVideo() && needs_establish_peer_)
EstablishSurfaceTexturePeer();
@@ -153,6 +197,10 @@ void WebMediaPlayerAndroid::play() {
}
void WebMediaPlayerAndroid::pause() {
+#if defined(GOOGLE_TV)
+ if (audio_renderer_ && !paused())
+ audio_renderer_->Pause();
+#endif
if (proxy_)
proxy_->Pause(player_id_);
is_playing_ = false;
@@ -464,7 +512,6 @@ void WebMediaPlayerAndroid::OnVideoSizeChanged(int width, int height) {
CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kUseExternalVideoSurfaceThresholdInPixels),
&threshold);
-
if ((parsed_arg && threshold <= width * height) ||
// Use H/W surface for MSE as the content is protected.
media_source_delegate_) {
@@ -654,10 +701,10 @@ bool WebMediaPlayerAndroid::RetrieveGeometryChange(gfx::RectF* rect) {
return true;
}
-WebMediaPlayer::MediaKeyException
-WebMediaPlayerAndroid::generateKeyRequest(const WebString& key_system,
- const unsigned char* init_data,
- unsigned init_data_length) {
+WebMediaPlayer::MediaKeyException WebMediaPlayerAndroid::generateKeyRequest(
+ const WebString& key_system,
+ const unsigned char* init_data,
+ unsigned init_data_length) {
if (media_source_delegate_) {
return media_source_delegate_->GenerateKeyRequest(
key_system, init_data, init_data_length);
@@ -694,6 +741,11 @@ void WebMediaPlayerAndroid::OnReadFromDemuxer(
else
NOTIMPLEMENTED();
}
+
+void WebMediaPlayerAndroid::SetDestroyDemuxerCB(
+ const MediaSourceDelegate::DestroyDemuxerCB& destroy_demuxer_cb) {
+ destroy_demuxer_cb_ = destroy_demuxer_cb;
+}
#endif
void WebMediaPlayerAndroid::enterFullscreen() {

Powered by Google App Engine
This is Rietveld 408576698