From f0013bdec846a976aaec1f08624a27686901e0b5 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 26 Aug 2022 00:46:54 +0200 Subject: [PATCH] video: Moved individual decoders to software video backend --- Cargo.lock | 14 +++++++++----- core/Cargo.toml | 8 -------- core/src/backend/video.rs | 2 -- core/src/backend/video/software/decoders/mod.rs | 8 -------- core/src/backend/video/software/mod.rs | 3 --- desktop/Cargo.toml | 7 +++---- video/software/Cargo.toml | 16 +++++++++++++++- video/software/src/backend.rs | 8 ++++---- video/software/src/decoder.rs | 9 +++++++++ .../software/src/decoder}/h263.rs | 2 +- .../software/src/decoder}/screen.rs | 2 +- .../software/src/decoder}/vp6.rs | 2 +- web/Cargo.toml | 4 ++-- 13 files changed, 45 insertions(+), 40 deletions(-) delete mode 100644 core/src/backend/video/software/decoders/mod.rs delete mode 100644 core/src/backend/video/software/mod.rs rename {core/src/backend/video/software/decoders => video/software/src/decoder}/h263.rs (98%) rename {core/src/backend/video/software/decoders => video/software/src/decoder}/screen.rs (99%) rename {core/src/backend/video/software/decoders => video/software/src/decoder}/vp6.rs (99%) diff --git a/Cargo.lock b/Cargo.lock index 732c26fe6..894cf9aa5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3062,17 +3062,12 @@ dependencies = [ "futures", "gc-arena", "generational-arena", - "h263-rs", - "h263-rs-yuv", "indexmap", "instant", "log", "lzma-rs", "minimp3", "nellymoser-rs", - "nihav_codec_support", - "nihav_core", - "nihav_duck", "num-derive", "num-traits", "percent-encoding", @@ -3112,6 +3107,7 @@ dependencies = [ "rfd", "ruffle_core", "ruffle_render_wgpu", + "ruffle_video_software", "url", "webbrowser", "winapi", @@ -3233,7 +3229,14 @@ dependencies = [ name = "ruffle_video_software" version = "0.1.0" dependencies = [ + "flate2", "generational-arena", + "h263-rs", + "h263-rs-yuv", + "log", + "nihav_codec_support", + "nihav_core", + "nihav_duck", "ruffle_render", "ruffle_video", "swf", @@ -3256,6 +3259,7 @@ dependencies = [ "ruffle_render_canvas", "ruffle_render_webgl", "ruffle_render_wgpu", + "ruffle_video_software", "ruffle_web_common", "serde", "thiserror", diff --git a/core/Cargo.toml b/core/Cargo.toml index bdc1bcb45..4636ba1a8 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -38,16 +38,11 @@ rand = { version = "0.8.5", features = ["std", "small_rng"], default-features = serde = { version = "1.0.144", features = ["derive"] } serde_json = { version = "1.0", features = ["preserve_order"] } nellymoser-rs = { git = "https://github.com/ruffle-rs/nellymoser", rev = "4a33521c29a918950df8ae9fe07e527ac65553f5", optional = true } -h263-rs = { git = "https://github.com/ruffle-rs/h263-rs", rev = "023e14c73e565c4c778d41f66cfbac5ece6419b2", optional = true } -h263-rs-yuv = { git = "https://github.com/ruffle-rs/h263-rs", rev = "023e14c73e565c4c778d41f66cfbac5ece6419b2", optional = true } regress = "0.4" flash-lso = { git = "https://github.com/ruffle-rs/rust-flash-lso", rev = "19fecd07b9888c4bdaa66771c468095783b52bed" } lzma-rs = {version = "0.2.0", optional = true } dasp = { git = "https://github.com/RustAudio/dasp", rev = "f05a703", features = ["interpolate", "interpolate-linear", "signal"], optional = true } symphonia = { version = "0.5.1", default-features = false, features = ["mp3"], optional = true } -nihav_core = { git = "https://github.com/ruffle-rs/nihav-vp6", rev = "9416fcc9fc8aab8f4681aa9093b42922214abbd3", optional = true } -nihav_codec_support = { git = "https://github.com/ruffle-rs/nihav-vp6", rev = "9416fcc9fc8aab8f4681aa9093b42922214abbd3", optional = true } -nihav_duck = { git = "https://github.com/ruffle-rs/nihav-vp6", rev = "9416fcc9fc8aab8f4681aa9093b42922214abbd3", optional = true } [target.'cfg(not(target_family = "wasm"))'.dependencies.futures] version = "0.3.24" @@ -57,9 +52,6 @@ version = "0.4.32" [features] default = [] -h263 = ["h263-rs", "h263-rs-yuv"] -vp6 = ["nihav_core", "nihav_codec_support", "nihav_duck", "h263-rs-yuv"] -screenvideo = [] lzma = ["lzma-rs", "swf/lzma"] wasm-bindgen = [ "instant/wasm-bindgen" ] avm_debug = [] diff --git a/core/src/backend/video.rs b/core/src/backend/video.rs index 5acd8fd7f..99fe32816 100644 --- a/core/src/backend/video.rs +++ b/core/src/backend/video.rs @@ -1,5 +1,3 @@ //! Video decoder backends -mod software; - pub use ruffle_video_software::backend::SoftwareVideoBackend; diff --git a/core/src/backend/video/software/decoders/mod.rs b/core/src/backend/video/software/decoders/mod.rs deleted file mode 100644 index 83a6cc97e..000000000 --- a/core/src/backend/video/software/decoders/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -#[cfg(feature = "h263")] -pub mod h263; - -#[cfg(feature = "vp6")] -pub mod vp6; - -#[cfg(feature = "screenvideo")] -pub mod screen; diff --git a/core/src/backend/video/software/mod.rs b/core/src/backend/video/software/mod.rs deleted file mode 100644 index 5af9b965c..000000000 --- a/core/src/backend/video/software/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -//! Pure software video decoding backend. - -pub mod decoders; diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index 8734c8acd..71244bf3d 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -11,6 +11,7 @@ clap = { version = "3.2.18", features = ["derive"] } cpal = "0.14.0" ruffle_core = { path = "../core", features = ["audio", "minimp3", "nellymoser"] } ruffle_render_wgpu = { path = "../render/wgpu", features = ["clap"] } +ruffle_video_software = { path = "../video/software", optional = true } env_logger = { version = "0.9", default-features = false, features = ["humantime"] } generational-arena = "0.2.8" log = "0.4" @@ -30,14 +31,12 @@ winapi = "0.3.9" embed-resource = "1" [features] -default = ["h263", "vp6", "screenvideo"] +default = ["software_video"] # core features avm_debug = ["ruffle_core/avm_debug"] -h263 = ["ruffle_core/h263"] lzma = ["ruffle_core/lzma"] -vp6 = ["ruffle_core/vp6"] -screenvideo = ["ruffle_core/screenvideo"] +software_video = ["ruffle_video_software"] # wgpu features render_debug_labels = ["ruffle_render_wgpu/render_debug_labels"] diff --git a/video/software/Cargo.toml b/video/software/Cargo.toml index 13ecdfc84..2c48c6e51 100644 --- a/video/software/Cargo.toml +++ b/video/software/Cargo.toml @@ -10,4 +10,18 @@ ruffle_render = { path = "../../render" } ruffle_video = { path = ".." } swf = { path = "../../swf" } generational-arena = "0.2.8" -thiserror = "1.0" \ No newline at end of file +thiserror = "1.0" +flate2 = "1.0.24" +log = "0.4" + +h263-rs = { git = "https://github.com/ruffle-rs/h263-rs", rev = "023e14c73e565c4c778d41f66cfbac5ece6419b2", optional = true } +h263-rs-yuv = { git = "https://github.com/ruffle-rs/h263-rs", rev = "023e14c73e565c4c778d41f66cfbac5ece6419b2", optional = true } +nihav_core = { git = "https://github.com/ruffle-rs/nihav-vp6", rev = "9416fcc9fc8aab8f4681aa9093b42922214abbd3", optional = true } +nihav_codec_support = { git = "https://github.com/ruffle-rs/nihav-vp6", rev = "9416fcc9fc8aab8f4681aa9093b42922214abbd3", optional = true } +nihav_duck = { git = "https://github.com/ruffle-rs/nihav-vp6", rev = "9416fcc9fc8aab8f4681aa9093b42922214abbd3", optional = true } + +[features] +default = ["h263", "vp6", "screenvideo"] +h263 = ["h263-rs", "h263-rs-yuv"] +vp6 = ["nihav_core", "nihav_codec_support", "nihav_duck", "h263-rs-yuv"] +screenvideo = [] \ No newline at end of file diff --git a/video/software/src/backend.rs b/video/software/src/backend.rs index d113cee78..efd083f22 100644 --- a/video/software/src/backend.rs +++ b/video/software/src/backend.rs @@ -39,13 +39,13 @@ impl VideoBackend for SoftwareVideoBackend { ) -> Result { let decoder: Box = match codec { #[cfg(feature = "h263")] - VideoCodec::H263 => Box::new(h263::H263Decoder::new()), + VideoCodec::H263 => Box::new(crate::decoder::h263::H263Decoder::new()), #[cfg(feature = "vp6")] - VideoCodec::Vp6 => Box::new(vp6::Vp6Decoder::new(false, size)), + VideoCodec::Vp6 => Box::new(crate::decoder::vp6::Vp6Decoder::new(false, size)), #[cfg(feature = "vp6")] - VideoCodec::Vp6WithAlpha => Box::new(vp6::Vp6Decoder::new(true, size)), + VideoCodec::Vp6WithAlpha => Box::new(crate::decoder::vp6::Vp6Decoder::new(true, size)), #[cfg(feature = "screenvideo")] - VideoCodec::ScreenVideo => Box::new(screen::ScreenVideoDecoder::new()), + VideoCodec::ScreenVideo => Box::new(crate::decoder::screen::ScreenVideoDecoder::new()), other => return Err(Error::UnsupportedCodec(other)), }; let stream = VideoStream::new(decoder); diff --git a/video/software/src/decoder.rs b/video/software/src/decoder.rs index df3cfa909..109ff06a2 100644 --- a/video/software/src/decoder.rs +++ b/video/software/src/decoder.rs @@ -1,6 +1,15 @@ use ruffle_video::error::Error; use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency}; +#[cfg(feature = "h263")] +pub mod h263; + +#[cfg(feature = "vp6")] +pub mod vp6; + +#[cfg(feature = "screenvideo")] +pub mod screen; + /// Trait for video decoders. /// This should be implemented for each video codec. pub trait VideoDecoder { diff --git a/core/src/backend/video/software/decoders/h263.rs b/video/software/src/decoder/h263.rs similarity index 98% rename from core/src/backend/video/software/decoders/h263.rs rename to video/software/src/decoder/h263.rs index ed717282d..6ef49e0c9 100644 --- a/core/src/backend/video/software/decoders/h263.rs +++ b/video/software/src/decoder/h263.rs @@ -1,9 +1,9 @@ +use crate::decoder::VideoDecoder; use h263_rs::parser::H263Reader; use h263_rs::{DecoderOption, H263State, PictureTypeCode}; use h263_rs_yuv::bt601::yuv420_to_rgba; use ruffle_video::error::Error; use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency}; -use ruffle_video_software::decoder::VideoDecoder; #[derive(thiserror::Error, Debug)] pub enum H263Error { diff --git a/core/src/backend/video/software/decoders/screen.rs b/video/software/src/decoder/screen.rs similarity index 99% rename from core/src/backend/video/software/decoders/screen.rs rename to video/software/src/decoder/screen.rs index e52a42afa..b4bd491ad 100644 --- a/core/src/backend/video/software/decoders/screen.rs +++ b/video/software/src/decoder/screen.rs @@ -1,8 +1,8 @@ // This module is heavily based on flashsv.rs from NihAV, // written by Kostya Shishkov, with permission. +use crate::decoder::VideoDecoder; use ruffle_video::error::Error; -use ruffle_video_software::decoder::VideoDecoder; use flate2::Decompress; use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency}; diff --git a/core/src/backend/video/software/decoders/vp6.rs b/video/software/src/decoder/vp6.rs similarity index 99% rename from core/src/backend/video/software/decoders/vp6.rs rename to video/software/src/decoder/vp6.rs index 6ee0a2b13..97cf01ea5 100644 --- a/core/src/backend/video/software/decoders/vp6.rs +++ b/video/software/src/decoder/vp6.rs @@ -1,5 +1,5 @@ +use crate::decoder::VideoDecoder; use ruffle_video::error::Error; -use ruffle_video_software::decoder::VideoDecoder; use h263_rs_yuv::bt601::yuv420_to_rgba; diff --git a/web/Cargo.toml b/web/Cargo.toml index 4ccdb8b18..c9b6d061a 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -18,7 +18,6 @@ default = ["canvas", "console_error_panic_hook", "console_log", "webgl"] # core features avm_debug = ["ruffle_core/avm_debug"] -h263 = ["ruffle_core/h263"] lzma = ["ruffle_core/lzma"] # web features @@ -36,6 +35,7 @@ ruffle_render_canvas = { path = "../render/canvas", optional = true } ruffle_web_common = { path = "common" } ruffle_render_webgl = { path = "../render/webgl", optional = true } ruffle_render_wgpu = { path = "../render/wgpu", optional = true } +ruffle_video_software = { path = "../video/software" } url = "2.2.2" wasm-bindgen = { version = "=0.2.82", features = ["serde-serialize"] } wasm-bindgen-futures = "0.4.32" @@ -48,7 +48,7 @@ base64 = "0.13.0" [dependencies.ruffle_core] path = "../core" default-features = false -features = ["h263", "vp6", "screenvideo", "symphonia", "wasm-bindgen", "audio", "nellymoser"] +features = ["audio", "nellymoser", "symphonia", "wasm-bindgen"] [dependencies.web-sys] version = "0.3.58"