Chromium Code Reviews| 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..8720dc42dd5123a3a68c1f9cdff9aad7c8f43356 100644 |
| --- a/remoting/client/plugin/pepper_video_renderer_3d.cc |
| +++ b/remoting/client/plugin/pepper_video_renderer_3d.cc |
| @@ -91,11 +91,15 @@ 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(); |
| view_size_.set(ceilf(size.width() * scale), ceilf(size.height() * scale)); |
| @@ -106,12 +110,17 @@ 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) { |
| + bool fallback_renderer_initialize_result = |
| + fallback_renderer_.Initialize(context, stats_consumer); |
| + DCHECK(fallback_renderer_initialize_result); |
| + |
| stats_consumer_ = stats_consumer; |
| const int32_t context_attributes[] = { |
| @@ -166,6 +175,8 @@ bool PepperVideoRenderer3D::Initialize( |
| gles2_if_->BindBuffer(graphics_3d, GL_ARRAY_BUFFER, buffer); |
| gles2_if_->BufferData(graphics_3d, GL_ARRAY_BUFFER, sizeof(kVertices), |
| kVertices, GL_STATIC_DRAW); |
| + gles2_if_->GetIntegerv( |
| + graphics_3d, GL_MAX_TEXTURE_SIZE, &gl_max_texture_size_); |
| CheckGLError(); |
| @@ -174,6 +185,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 +225,29 @@ 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().screen_width() > gl_max_texture_size_ || |
| + packet->format().screen_height() > gl_max_texture_size_; |
|
Hzj_jie
2016/07/15 02:30:50
AFAICT, this check won't work for debug build. gle
Sergey Ulanov
2016/07/15 23:39:56
This is concerning. Is it in debug builds of the w
Hzj_jie
2016/07/16 01:19:21
Sorry, I have made a wrong assumption. Actually we
|
| + if (use_fallback_renderer_) { |
| + // 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)); |