diff options
author | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2019-06-14 21:09:33 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2019-07-04 10:25:47 +0200 |
commit | e36c0489bf3eff9b775ebc064fbd1a401d7634a9 (patch) | |
tree | 3e9cb9d4701bebd87a48e6e3e662b04058df1704 /components/script/dom/htmlmediaelement.rs | |
parent | da8eb18763e5b0b9bd46ee9f6aa5f50e7c053b19 (diff) | |
download | servo-e36c0489bf3eff9b775ebc064fbd1a401d7634a9.tar.gz servo-e36c0489bf3eff9b775ebc064fbd1a401d7634a9.zip |
Ignore frame if it is a GL texture
And mock what would be if we handle GL textures.
Diffstat (limited to 'components/script/dom/htmlmediaelement.rs')
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 74 |
1 files changed, 58 insertions, 16 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index a1ab6d08e68..b66c5dd42fb 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -82,6 +82,7 @@ use std::mem; use std::rc::Rc; use std::sync::{Arc, Mutex}; use time::{self, Duration, Timespec}; +//use webrender_api::{ExternalImageData, ExternalImageId, ExternalImageType, TextureTarget}; use webrender_api::{ImageData, ImageDescriptor, ImageFormat, ImageKey, RenderApi}; use webrender_api::{RenderApiSender, Transaction}; @@ -111,6 +112,12 @@ impl MediaFrameRenderer { impl FrameRenderer for MediaFrameRenderer { fn render(&mut self, frame: Frame) { + let mut txn = Transaction::new(); + + if let Some(old_image_key) = mem::replace(&mut self.very_old_frame, self.old_frame.take()) { + txn.delete_image(old_image_key); + } + let descriptor = ImageDescriptor::new( frame.get_width(), frame.get_height(), @@ -119,24 +126,18 @@ impl FrameRenderer for MediaFrameRenderer { false, ); - let mut txn = Transaction::new(); - - let image_data = ImageData::Raw(frame.get_data()); - - if let Some(old_image_key) = mem::replace(&mut self.very_old_frame, self.old_frame.take()) { - txn.delete_image(old_image_key); - } - match self.current_frame { Some((ref image_key, ref mut width, ref mut height)) if *width == frame.get_width() && *height == frame.get_height() => { - txn.update_image( - *image_key, - descriptor, - image_data, - &webrender_api::DirtyRect::All, - ); + if !frame.is_gl_texture() { + txn.update_image( + *image_key, + descriptor, + ImageData::Raw(frame.get_data()), + &webrender_api::DirtyRect::All, + ); + } if let Some(old_image_key) = self.old_frame.take() { txn.delete_image(old_image_key); @@ -146,14 +147,55 @@ impl FrameRenderer for MediaFrameRenderer { self.old_frame = Some(*image_key); let new_image_key = self.api.generate_image_key(); - txn.add_image(new_image_key, descriptor, image_data, None); + + if !frame.is_gl_texture() { + txn.add_image( + new_image_key, + descriptor, + ImageData::Raw(frame.get_data()), + None, + ); + } else { + // txn.add_image( + // new_image_key, + // descriptor, + // ImageData::External(ExternalImageData { + // id: ExternalImageId(0), // let's try to fool webgl + // channel_index: 0, + // image_type: ExternalImageType::TextureHandle(TextureTarget::Default), + // }), + // None, + // ); + } + + /* update current_frame */ *image_key = new_image_key; *width = frame.get_width(); *height = frame.get_height(); }, None => { let image_key = self.api.generate_image_key(); - txn.add_image(image_key, descriptor, image_data, None); + + if !frame.is_gl_texture() { + txn.add_image( + image_key, + descriptor, + ImageData::Raw(frame.get_data()), + None, + ); + } else { + // txn.add_image( + // image_key, + // descriptor, + // ImageData::External(ExternalImageData { + // id: ExternalImageId(0), // let's try to fool webgl + // channel_index: 0, + // image_type: ExternalImageType::TextureHandle(TextureTarget::Default), + // }), + // None, + // ); + } + self.current_frame = Some((image_key, frame.get_width(), frame.get_height())); }, } |