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

Unified Diff: remoting/client/plugin/pepper_video_renderer_3d.cc

Issue 2150833002: [Chromoting] Fallback to use software renderer if desktop image size is larger than GPU limitaiton (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use scaled gl limitation Created 4 years, 2 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
« no previous file with comments | « remoting/client/plugin/pepper_video_renderer_3d.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/client/plugin/pepper_video_renderer_3d.cc
diff --git a/remoting/client/plugin/pepper_video_renderer_3d.cc b/remoting/client/plugin/pepper_video_renderer_3d.cc
index b60f9bd72bb9e99d3745093ef73a7b674226b289..eb9b2e33d15a81d153521041a393b574d5641fe4 100644
--- a/remoting/client/plugin/pepper_video_renderer_3d.cc
+++ b/remoting/client/plugin/pepper_video_renderer_3d.cc
@@ -91,13 +91,24 @@ void PepperVideoRenderer3D::SetPepperContext(
DCHECK(event_handler);
DCHECK(!event_handler_);
+ fallback_renderer_.SetPepperContext(instance, event_handler);
+
event_handler_ = event_handler;
pp_instance_ = instance;
}
void PepperVideoRenderer3D::OnViewChanged(const pp::View& view) {
+ fallback_renderer_.OnViewChanged(view);
+
pp::Size size = view.GetRect().size();
float scale = view.GetDeviceScale();
+ if (scale == 0) {
Sergey Ulanov 2016/10/12 21:53:31 scale is never expected to be 0. maybe replace it
Hzj_jie 2016/10/12 23:42:46 Done.
+ LOG(WARNING) << "Unexpected device scale factor received.";
+ scale = 1;
+ }
+ gl_scaled_limits_.texture_size = gl_limits_.texture_size / scale;
Sergey Ulanov 2016/10/12 21:53:31 I'm not sure this is correct. textures should not
Hzj_jie 2016/10/12 23:42:46 Yes, the GetDeviceScale returns a scale factor to
+ gl_scaled_limits_.viewport_size[0] = gl_limits_.viewport_size[0] / scale;
+ gl_scaled_limits_.viewport_size[1] = gl_limits_.viewport_size[1] / scale;
view_size_.set(ceilf(size.width() * scale), ceilf(size.height() * scale));
graphics_.ResizeBuffers(view_size_.width(), view_size_.height());
@@ -106,12 +117,15 @@ void PepperVideoRenderer3D::OnViewChanged(const pp::View& view) {
}
void PepperVideoRenderer3D::EnableDebugDirtyRegion(bool enable) {
+ fallback_renderer_.EnableDebugDirtyRegion(enable);
debug_dirty_region_ = enable;
}
bool PepperVideoRenderer3D::Initialize(
const ClientContext& context,
protocol::FrameStatsConsumer* stats_consumer) {
+ CHECK(fallback_renderer_.Initialize(context, stats_consumer));
Sergey Ulanov 2016/10/12 21:53:31 Please change this to if (!fallback_renderer_.I
Hzj_jie 2016/10/12 23:42:46 Done.
+
stats_consumer_ = stats_consumer;
const int32_t context_attributes[] = {
@@ -167,6 +181,11 @@ bool PepperVideoRenderer3D::Initialize(
gles2_if_->BufferData(graphics_3d, GL_ARRAY_BUFFER, sizeof(kVertices),
kVertices, GL_STATIC_DRAW);
+ gles2_if_->GetIntegerv(
+ graphics_3d, GL_MAX_TEXTURE_SIZE, &gl_limits_.texture_size);
+ gles2_if_->GetIntegerv(
+ graphics_3d, GL_MAX_VIEWPORT_DIMS, gl_limits_.viewport_size);
+
CheckGLError();
return true;
@@ -174,6 +193,8 @@ bool PepperVideoRenderer3D::Initialize(
void PepperVideoRenderer3D::OnSessionConfig(
const protocol::SessionConfig& config) {
+ fallback_renderer_.OnSessionConfig(config);
+
PP_VideoProfile video_profile = PP_VIDEOPROFILE_VP8_ANY;
switch (config.video_config().codec) {
case protocol::ChannelConfig::CODEC_VP8:
@@ -212,6 +233,33 @@ protocol::FrameStatsConsumer* PepperVideoRenderer3D::GetFrameStatsConsumer() {
void PepperVideoRenderer3D::ProcessVideoPacket(
std::unique_ptr<VideoPacket> packet,
const base::Closure& done) {
+ if (!use_fallback_renderer_) {
+ use_fallback_renderer_ =
+ packet->format().has_screen_width() &&
+ packet->format().has_screen_height() &&
+ (packet->format().screen_width() > gl_scaled_limits_.texture_size ||
Sergey Ulanov 2016/10/12 21:53:31 We only want to initialize fallback when resolutio
Hzj_jie 2016/10/12 23:42:46 Sorry, I cannot quite get the point of your commen
+ packet->format().screen_height() > gl_scaled_limits_.texture_size ||
+ packet->format().screen_width() > gl_scaled_limits_.viewport_size[0] ||
Sergey Ulanov 2016/10/12 21:53:31 It seems strange to compare host screen size with
Hzj_jie 2016/10/12 23:42:46 Have I made a misunderstanding here? I believe the
+ packet->format().screen_height() > gl_scaled_limits_.viewport_size[1]);
+ if (use_fallback_renderer_) {
Sergey Ulanov 2016/10/12 21:53:31 It would be easier to understand this code if it w
Hzj_jie 2016/10/12 23:42:46 Done.
+ // Clear current instance and use fallback_renderer_.
+ current_picture_frames_.clear();
+ current_picture_.reset();
+ next_picture_frames_.clear();
+ next_picture_.reset();
+ decoded_frames_.clear();
+ pending_frames_.clear();
+ graphics_ = pp::Graphics3D();
+ video_decoder_ = pp::VideoDecoder();
+ }
+ }
+
+ if (use_fallback_renderer_) {
+ fallback_renderer_.GetVideoStub()->ProcessVideoPacket(
+ std::move(packet), done);
+ return;
+ }
+
VideoPacket* packet_ptr = packet.get();
std::unique_ptr<FrameTracker> frame_tracker(
new FrameTracker(std::move(packet), stats_consumer_, done));
« no previous file with comments | « remoting/client/plugin/pepper_video_renderer_3d.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698