Index: content/renderer/media/android/webmediaplayer_android.cc |
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc |
index e399cdeef6d5649db5377351f1b7e5b9295d8b07..d23206905839416e823191d6d39145988b97d5bc 100644 |
--- a/content/renderer/media/android/webmediaplayer_android.cc |
+++ b/content/renderer/media/android/webmediaplayer_android.cc |
@@ -46,6 +46,7 @@ |
#include "media/base/timestamp_constants.h" |
#include "media/base/video_frame.h" |
#include "media/blink/webcontentdecryptionmodule_impl.h" |
+#include "media/blink/webmediaplayer_cast_android.h" |
#include "media/blink/webmediaplayer_delegate.h" |
#include "media/blink/webmediaplayer_util.h" |
#include "net/base/mime_util.h" |
@@ -1161,106 +1162,12 @@ void WebMediaPlayerAndroid::DrawRemotePlaybackText( |
static_cast<int>(video_size_css_px.width() * device_scale_factor), |
static_cast<int>(video_size_css_px.height() * device_scale_factor)); |
- SkBitmap bitmap; |
- bitmap.allocN32Pixels(canvas_size.width(), canvas_size.height()); |
- |
- // Create the canvas and draw the "Casting to <Chromecast>" text on it. |
- SkCanvas canvas(bitmap); |
- canvas.drawColor(SK_ColorBLACK); |
- |
- const SkScalar kTextSize(40); |
- const SkScalar kMinPadding(40); |
- |
- SkPaint paint; |
- paint.setAntiAlias(true); |
- paint.setFilterQuality(kHigh_SkFilterQuality); |
- paint.setColor(SK_ColorWHITE); |
- paint.setTypeface(SkTypeface::CreateFromName("sans", SkTypeface::kBold)); |
- paint.setTextSize(kTextSize); |
- |
- // Calculate the vertical margin from the top |
- SkPaint::FontMetrics font_metrics; |
- paint.getFontMetrics(&font_metrics); |
- SkScalar sk_vertical_margin = kMinPadding - font_metrics.fAscent; |
- |
- // Measure the width of the entire text to display |
- size_t display_text_width = paint.measureText( |
- remote_playback_message.c_str(), remote_playback_message.size()); |
- std::string display_text(remote_playback_message); |
- |
- if (display_text_width + (kMinPadding * 2) > canvas_size.width()) { |
- // The text is too long to fit in one line, truncate it and append ellipsis |
- // to the end. |
- |
- // First, figure out how much of the canvas the '...' will take up. |
- const std::string kTruncationEllipsis("\xE2\x80\xA6"); |
- SkScalar sk_ellipse_width = paint.measureText( |
- kTruncationEllipsis.c_str(), kTruncationEllipsis.size()); |
- |
- // Then calculate how much of the text can be drawn with the '...' appended |
- // to the end of the string. |
- SkScalar sk_max_original_text_width( |
- canvas_size.width() - (kMinPadding * 2) - sk_ellipse_width); |
- size_t sk_max_original_text_length = paint.breakText( |
- remote_playback_message.c_str(), |
- remote_playback_message.size(), |
- sk_max_original_text_width); |
- |
- // Remove the part of the string that doesn't fit and append '...'. |
- display_text.erase(sk_max_original_text_length, |
- remote_playback_message.size() - sk_max_original_text_length); |
- display_text.append(kTruncationEllipsis); |
- display_text_width = paint.measureText( |
- display_text.c_str(), display_text.size()); |
- } |
- |
- // Center the text horizontally. |
- SkScalar sk_horizontal_margin = |
- (canvas_size.width() - display_text_width) / 2.0; |
- canvas.drawText(display_text.c_str(), |
- display_text.size(), |
- sk_horizontal_margin, |
- sk_vertical_margin, |
- paint); |
- |
- GLES2Interface* gl = stream_texture_factory_->ContextGL(); |
- GLuint remote_playback_texture_id = 0; |
- gl->GenTextures(1, &remote_playback_texture_id); |
- GLuint texture_target = GL_TEXTURE_2D; |
- gl->BindTexture(texture_target, remote_playback_texture_id); |
- gl->TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
- gl->TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
- gl->TexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
- gl->TexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
- |
- { |
- SkAutoLockPixels lock(bitmap); |
- gl->TexImage2D(texture_target, |
- 0 /* level */, |
- GL_RGBA /* internalformat */, |
- bitmap.width(), |
- bitmap.height(), |
- 0 /* border */, |
- GL_RGBA /* format */, |
- GL_UNSIGNED_BYTE /* type */, |
- bitmap.getPixels()); |
- } |
- |
- gpu::Mailbox texture_mailbox; |
- gl->GenMailboxCHROMIUM(texture_mailbox.name); |
- gl->ProduceTextureCHROMIUM(texture_target, texture_mailbox.name); |
- gl->Flush(); |
- gpu::SyncToken texture_mailbox_sync_token(gl->InsertSyncPointCHROMIUM()); |
- |
- scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( |
- media::PIXEL_FORMAT_ARGB, |
- gpu::MailboxHolder(texture_mailbox, texture_mailbox_sync_token, |
- texture_target), |
- media::BindToCurrentLoop(base::Bind(&OnReleaseTexture, |
- stream_texture_factory_, |
- remote_playback_texture_id)), |
- canvas_size /* coded_size */, gfx::Rect(canvas_size) /* visible_rect */, |
- canvas_size /* natural_size */, base::TimeDelta() /* timestamp */); |
+ scoped_refptr<VideoFrame> new_frame(media::MakeTextFrameForCast( |
+ remote_playback_message, |
+ canvas_size, |
+ canvas_size, |
+ base::Bind(&StreamTextureFactory::ContextGL, |
+ stream_texture_factory_))); |
if (!new_frame) |
return; |
SetCurrentFrameInternal(new_frame); |