aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2019-09-10 13:15:39 +0200
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2019-09-10 13:15:39 +0200
commitc6df00343b512ed4a2c3680689cc99c459681535 (patch)
treeb0dd79be133189f74f5156c79a0769487db91226 /components/script
parent6ed204d692182e58b7b44b5a02cac4e758d70a14 (diff)
downloadservo-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.rs16
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())