Add texture image in MediaFrameRenderer

This commit is contained in:
Víctor Manuel Jáquez Leal 2019-06-14 12:21:22 +02:00 committed by Fernando Jiménez Moreno
parent 586d3f8da5
commit 65f9e2161c

View file

@ -83,11 +83,12 @@ use std::mem;
use std::rc::Rc; use std::rc::Rc;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use time::{self, Duration, Timespec}; use time::{self, Duration, Timespec};
//use webrender_api::{ExternalImageData, ExternalImageId, ExternalImageType, TextureTarget}; use webrender_api::{ExternalImageData, ExternalImageId, ExternalImageType, TextureTarget};
use webrender_api::{ImageData, ImageDescriptor, ImageFormat, ImageKey, RenderApi}; use webrender_api::{ImageData, ImageDescriptor, ImageFormat, ImageKey, RenderApi};
use webrender_api::{RenderApiSender, Transaction}; use webrender_api::{RenderApiSender, Transaction};
pub struct MediaFrameRenderer { pub struct MediaFrameRenderer {
id: u64,
api: RenderApi, api: RenderApi,
current_frame: Option<(ImageKey, i32, i32)>, current_frame: Option<(ImageKey, i32, i32)>,
old_frame: Option<ImageKey>, old_frame: Option<ImageKey>,
@ -97,6 +98,7 @@ pub struct MediaFrameRenderer {
impl MediaFrameRenderer { impl MediaFrameRenderer {
fn new(render_api_sender: RenderApiSender) -> Self { fn new(render_api_sender: RenderApiSender) -> Self {
Self { Self {
id: 0,
api: render_api_sender.create_api(), api: render_api_sender.create_api(),
current_frame: None, current_frame: None,
old_frame: None, old_frame: None,
@ -156,17 +158,17 @@ impl FrameRenderer for MediaFrameRenderer {
ImageData::Raw(frame.get_data()), ImageData::Raw(frame.get_data()),
None, None,
); );
} else { } else if self.id != 0 {
// txn.add_image( txn.add_image(
// new_image_key, new_image_key,
// descriptor, descriptor,
// ImageData::External(ExternalImageData { ImageData::External(ExternalImageData {
// id: ExternalImageId(0), // let's try to fool webgl id: ExternalImageId(self.id),
// channel_index: 0, channel_index: 0,
// image_type: ExternalImageType::TextureHandle(TextureTarget::Default), image_type: ExternalImageType::TextureHandle(TextureTarget::Default),
// }), }),
// None, None,
// ); );
} }
/* update current_frame */ /* update current_frame */
@ -184,17 +186,17 @@ impl FrameRenderer for MediaFrameRenderer {
ImageData::Raw(frame.get_data()), ImageData::Raw(frame.get_data()),
None, None,
); );
} else { } else if self.id != 0 {
// txn.add_image( txn.add_image(
// image_key, image_key,
// descriptor, descriptor,
// ImageData::External(ExternalImageData { ImageData::External(ExternalImageData {
// id: ExternalImageId(0), // let's try to fool webgl id: ExternalImageId(self.id),
// channel_index: 0, channel_index: 0,
// image_type: ExternalImageType::TextureHandle(TextureTarget::Default), image_type: ExternalImageType::TextureHandle(TextureTarget::Default),
// }), }),
// None, None,
// ); );
} }
self.current_frame = Some((image_key, frame.get_width(), frame.get_height())); self.current_frame = Some((image_key, frame.get_width(), frame.get_height()));
@ -1312,6 +1314,7 @@ impl HTMLMediaElement {
}) })
.unwrap_or(0); .unwrap_or(0);
self.id.set(player_id); self.id.set(player_id);
self.frame_renderer.lock().unwrap().id = player_id;
Ok(()) Ok(())
} }