core: Change Player::new to take in a SwfMovie, not &[u8]
This commit is contained in:
parent
2331b49ea4
commit
51d9f3ef36
|
@ -148,9 +148,9 @@ impl Player {
|
|||
audio: Audio,
|
||||
navigator: Navigator,
|
||||
input: Input,
|
||||
swf_data: Vec<u8>,
|
||||
movie: SwfMovie,
|
||||
) -> Result<Arc<Mutex<Self>>, Error> {
|
||||
let movie = Arc::new(SwfMovie::from_data(&swf_data)?);
|
||||
let movie = Arc::new(movie);
|
||||
|
||||
info!(
|
||||
"{}x{}",
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
use gc_arena::Collect;
|
||||
use std::path::Path;
|
||||
use std::sync::Arc;
|
||||
use swf::{Header, TagCode};
|
||||
|
||||
|
@ -41,6 +42,12 @@ impl SwfMovie {
|
|||
}
|
||||
}
|
||||
|
||||
/// Utility method to construct a movie from a file on disk.
|
||||
pub fn from_path<P: AsRef<Path>>(path: P) -> Result<Self, Error> {
|
||||
let data = std::fs::read(path)?;
|
||||
Self::from_data(&data)
|
||||
}
|
||||
|
||||
/// Construct a movie based on the contents of the SWF datastream.
|
||||
pub fn from_data(swf_data: &[u8]) -> Result<Self, Error> {
|
||||
let swf_stream = swf::read::read_swf_header(&swf_data[..])?;
|
||||
|
|
|
@ -8,6 +8,7 @@ use ruffle_core::backend::navigator::{NullExecutor, NullNavigatorBackend};
|
|||
use ruffle_core::backend::{
|
||||
audio::NullAudioBackend, input::NullInputBackend, render::NullRenderer,
|
||||
};
|
||||
use ruffle_core::tag_utils::SwfMovie;
|
||||
use ruffle_core::Player;
|
||||
use std::cell::RefCell;
|
||||
use std::path::Path;
|
||||
|
@ -280,14 +281,14 @@ fn run_swf(swf_path: &str, num_frames: u32) -> Result<String, Error> {
|
|||
let _ = log::set_logger(&TRACE_LOGGER).map(|()| log::set_max_level(log::LevelFilter::Info));
|
||||
|
||||
let base_path = Path::new(swf_path).parent().unwrap();
|
||||
let swf_data = std::fs::read(swf_path)?;
|
||||
let (mut executor, channel) = NullExecutor::new();
|
||||
let movie = SwfMovie::from_path(swf_path)?;
|
||||
let player = Player::new(
|
||||
Box::new(NullRenderer),
|
||||
Box::new(NullAudioBackend::new()),
|
||||
Box::new(NullNavigatorBackend::with_base_path(base_path, channel)),
|
||||
Box::new(NullInputBackend::new()),
|
||||
swf_data,
|
||||
movie,
|
||||
)?;
|
||||
|
||||
for _ in 0..num_frames {
|
||||
|
|
|
@ -18,6 +18,7 @@ use std::path::PathBuf;
|
|||
use std::time::Instant;
|
||||
use structopt::StructOpt;
|
||||
|
||||
use ruffle_core::tag_utils::SwfMovie;
|
||||
use std::rc::Rc;
|
||||
use winit::dpi::{LogicalSize, PhysicalPosition};
|
||||
use winit::event::{ElementState, MouseButton, WindowEvent};
|
||||
|
@ -45,7 +46,7 @@ fn main() {
|
|||
}
|
||||
|
||||
fn run_player(input_path: PathBuf) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let swf_data = std::fs::read(&input_path)?;
|
||||
let movie = SwfMovie::from_path(&input_path)?;
|
||||
|
||||
let event_loop: EventLoop<RuffleEvent> = EventLoop::with_user_event();
|
||||
let window = Rc::new(
|
||||
|
@ -78,7 +79,7 @@ fn run_player(input_path: PathBuf) -> Result<(), Box<dyn std::error::Error>> {
|
|||
event_loop.create_proxy(),
|
||||
)); //TODO: actually implement this backend type
|
||||
let input = Box::new(input::WinitInputBackend::new(window.clone()));
|
||||
let player = Player::new(renderer, audio, navigator, input, swf_data)?;
|
||||
let player = Player::new(renderer, audio, navigator, input, movie)?;
|
||||
|
||||
let logical_size: LogicalSize<u32> = {
|
||||
let mut player_lock = player.lock().unwrap();
|
||||
|
|
|
@ -7,6 +7,7 @@ use crate::{audio::WebAudioBackend, input::WebInputBackend, navigator::WebNaviga
|
|||
use generational_arena::{Arena, Index};
|
||||
use js_sys::Uint8Array;
|
||||
use ruffle_core::backend::render::RenderBackend;
|
||||
use ruffle_core::tag_utils::SwfMovie;
|
||||
use ruffle_core::PlayerEvent;
|
||||
use std::mem::drop;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
@ -97,8 +98,11 @@ impl Ruffle {
|
|||
console_error_panic_hook::set_once();
|
||||
let _ = console_log::init_with_level(log::Level::Trace);
|
||||
|
||||
let mut data = vec![0; swf_data.length() as usize];
|
||||
swf_data.copy_to(&mut data[..]);
|
||||
let movie = {
|
||||
let mut data = vec![0; swf_data.length() as usize];
|
||||
swf_data.copy_to(&mut data[..]);
|
||||
SwfMovie::from_data(&data)?
|
||||
};
|
||||
|
||||
let window = web_sys::window().ok_or_else(|| "Expected window")?;
|
||||
let renderer = create_renderer(&canvas)?;
|
||||
|
@ -106,7 +110,7 @@ impl Ruffle {
|
|||
let navigator = Box::new(WebNavigatorBackend::new());
|
||||
let input = Box::new(WebInputBackend::new(&canvas));
|
||||
|
||||
let core = ruffle_core::Player::new(renderer, audio, navigator, input, data)?;
|
||||
let core = ruffle_core::Player::new(renderer, audio, navigator, input, movie)?;
|
||||
let mut core_lock = core.lock().unwrap();
|
||||
let frame_rate = core_lock.frame_rate();
|
||||
core_lock.audio_mut().set_frame_rate(frame_rate);
|
||||
|
|
Loading…
Reference in New Issue