diff options
author | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2019-09-10 13:15:39 +0200 |
---|---|---|
committer | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2019-09-10 13:15:39 +0200 |
commit | c6df00343b512ed4a2c3680689cc99c459681535 (patch) | |
tree | b0dd79be133189f74f5156c79a0769487db91226 /components/script | |
parent | 6ed204d692182e58b7b44b5a02cac4e758d70a14 (diff) | |
download | servo-c6df00343b512ed4a2c3680689cc99c459681535.tar.gz servo-c6df00343b512ed4a2c3680689cc99c459681535.zip |
Enable video frames as OES textures
This patch parametrizes WR to handle OES textures if the incoming
frame wraps one.
It requires the update of servo-media package and the according
WR parametrization.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 8855e0ee578..ac44f43f3fa 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -214,13 +214,19 @@ impl FrameRenderer for MediaFrameRenderer { *height = frame.get_height(); let image_data = if frame.is_gl_texture() && self.player_id.is_some() { + let texture_target = if frame.is_external_oes() { + TextureTarget::External + } else { + TextureTarget::Default + }; + self.current_frame_holder .get_or_insert_with(|| FrameHolder::new(frame.clone())) .set(frame); ImageData::External(ExternalImageData { id: ExternalImageId(self.player_id.unwrap()), channel_index: 0, - image_type: ExternalImageType::TextureHandle(TextureTarget::Default), + image_type: ExternalImageType::TextureHandle(texture_target), }) } else { ImageData::Raw(frame.get_data()) @@ -232,11 +238,17 @@ impl FrameRenderer for MediaFrameRenderer { self.current_frame = Some((image_key, frame.get_width(), frame.get_height())); let image_data = if frame.is_gl_texture() && self.player_id.is_some() { + let texture_target = if frame.is_external_oes() { + TextureTarget::External + } else { + TextureTarget::Default + }; + self.current_frame_holder = Some(FrameHolder::new(frame)); ImageData::External(ExternalImageData { id: ExternalImageId(self.player_id.unwrap()), channel_index: 0, - image_type: ExternalImageType::TextureHandle(TextureTarget::Default), + image_type: ExternalImageType::TextureHandle(texture_target), }) } else { ImageData::Raw(frame.get_data()) |