video: Moved individual decoders to software video backend
This commit is contained in:
parent
bf242bfb09
commit
f0013bdec8
|
@ -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",
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
//! Video decoder backends
|
||||
|
||||
mod software;
|
||||
|
||||
pub use ruffle_video_software::backend::SoftwareVideoBackend;
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#[cfg(feature = "h263")]
|
||||
pub mod h263;
|
||||
|
||||
#[cfg(feature = "vp6")]
|
||||
pub mod vp6;
|
||||
|
||||
#[cfg(feature = "screenvideo")]
|
||||
pub mod screen;
|
|
@ -1,3 +0,0 @@
|
|||
//! Pure software video decoding backend.
|
||||
|
||||
pub mod decoders;
|
|
@ -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"]
|
||||
|
|
|
@ -10,4 +10,18 @@ ruffle_render = { path = "../../render" }
|
|||
ruffle_video = { path = ".." }
|
||||
swf = { path = "../../swf" }
|
||||
generational-arena = "0.2.8"
|
||||
thiserror = "1.0"
|
||||
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 = []
|
|
@ -39,13 +39,13 @@ impl VideoBackend for SoftwareVideoBackend {
|
|||
) -> Result<VideoStreamHandle, Error> {
|
||||
let decoder: Box<dyn VideoDecoder> = 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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
|
@ -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};
|
|
@ -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;
|
||||
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue