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

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: Addressed Dongwon and Yuncheol's comments 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 33ee91726d12e7d652e8a94c774db1156321b72f..cb3cc6edf8cde10ae026afd9aa5e3accd188a1c8 100644
--- a/webkit/media/android/webmediaplayer_android.cc
+++ b/webkit/media/android/webmediaplayer_android.cc
@@ -28,6 +28,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;
@@ -68,7 +70,8 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
video_frame_provider_client_(NULL),
proxy_(proxy),
current_time_(0),
- media_log_(media_log) {
+ media_log_(media_log),
+ media_stream_client_(NULL) {
main_loop_->AddDestructionObserver(this);
if (manager_)
player_id_ = manager_->RegisterMediaPlayer(this);
@@ -78,6 +81,9 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
stream_id_ = stream_texture_factory_->CreateStreamTexture(&texture_id_);
ReallocateVideoFrame();
}
+#if defined(GOOGLE_TV)
+ demuxer_ = NULL;
+#endif
}
WebMediaPlayerAndroid::~WebMediaPlayerAndroid() {
@@ -95,6 +101,11 @@ WebMediaPlayerAndroid::~WebMediaPlayerAndroid() {
if (main_loop_)
main_loop_->RemoveDestructionObserver(this);
+#if defined(GOOGLE_TV)
+ if (demuxer_ && !destroy_demuxer_cb_.is_null()) {
+ destroy_demuxer_cb_.Run();
acolwell GONE FROM CHROMIUM 2013/05/14 18:17:47 You should probably clear the media_source_delegat
wonsik 2013/05/20 14:02:24 Done.
+ }
+#endif
}
void WebMediaPlayerAndroid::load(const WebURL& url, CORSMode cors_mode) {
@@ -107,24 +118,44 @@ void WebMediaPlayerAndroid::load(const WebURL& url,
if (cors_mode != CORSModeUnspecified)
NOTIMPLEMENTED() << "No CORS support";
- scoped_ptr<WebKit::WebMediaSource> scoped_media_source(media_source);
+ MediaPlayerAndroid::MediaSourceType media_source_type =
+ MediaPlayerAndroid::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 = MediaPlayerAndroid::MEDIA_SOURCE_MSE;
+ } else if (media_stream_client_) {
+ media_source_type = MediaPlayerAndroid::MEDIA_SOURCE_STREAM;
+ }
+
+ if (media_source_type != MediaPlayerAndroid::MEDIA_SOURCE_URL) {
// |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))));
+ if (media_source_type == MediaPlayerAndroid::MEDIA_SOURCE_MSE) {
+ media_source_delegate_->InitializeMediaSource(
+ frame_, client_, media_source, media_log_);
+ } else if (media_source_type == MediaPlayerAndroid::MEDIA_SOURCE_STREAM) {
+ media_source_delegate_->InitializeMediaStream(demuxer_);
+ }
}
+#else
+ if (media_source)
acolwell GONE FROM CHROMIUM 2013/05/14 18:17:47 nit: I think this isn't necessary if you move the
wonsik 2013/05/20 14:02:24 Done --- assuming I understood your intention here
+ media_source_type = MediaPlayerAndroid::MEDIA_SOURCE_MSE;
#endif
+ InitializeMediaPlayer(url, media_source_type);
+}
+
+void WebMediaPlayerAndroid::InitializeMediaPlayer(
+ const WebURL& url,
+ MediaPlayerAndroid::MediaSourceType media_source_type) {
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_type, first_party_url);
if (manager_->IsInFullscreen(frame_))
proxy_->EnterFullscreen(player_id_);
}
@@ -140,7 +171,6 @@ 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_, last_computed_rect_);
}
@@ -465,7 +495,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_) {
@@ -655,10 +684,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);
@@ -695,6 +724,16 @@ void WebMediaPlayerAndroid::OnReadFromDemuxer(
else
NOTIMPLEMENTED();
}
+
+bool WebMediaPlayerAndroid::InjectMediaStream(
+ MediaStreamClient* media_stream_client,
+ media::Demuxer* demuxer,
+ const base::Closure& destroy_demuxer_cb) {
+ media_stream_client_ = media_stream_client;
acolwell GONE FROM CHROMIUM 2013/05/14 18:17:47 DCHECK(!demuxer_)?
wonsik 2013/05/20 14:02:24 Done.
+ demuxer_ = demuxer;
+ destroy_demuxer_cb_ = destroy_demuxer_cb;
+ return true;
+}
#endif
void WebMediaPlayerAndroid::enterFullscreen() {

Powered by Google App Engine
This is Rietveld 408576698