aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlmediaelement.rs
diff options
context:
space:
mode:
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2019-06-14 21:09:33 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2019-07-04 10:25:47 +0200
commite36c0489bf3eff9b775ebc064fbd1a401d7634a9 (patch)
tree3e9cb9d4701bebd87a48e6e3e662b04058df1704 /components/script/dom/htmlmediaelement.rs
parentda8eb18763e5b0b9bd46ee9f6aa5f50e7c053b19 (diff)
downloadservo-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.rs74
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()));
},
}