video: Moved individual decoders to software video backend
This commit is contained in:
parent
bf242bfb09
commit
f0013bdec8
|
@ -3062,17 +3062,12 @@ dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"gc-arena",
|
"gc-arena",
|
||||||
"generational-arena",
|
"generational-arena",
|
||||||
"h263-rs",
|
|
||||||
"h263-rs-yuv",
|
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"instant",
|
"instant",
|
||||||
"log",
|
"log",
|
||||||
"lzma-rs",
|
"lzma-rs",
|
||||||
"minimp3",
|
"minimp3",
|
||||||
"nellymoser-rs",
|
"nellymoser-rs",
|
||||||
"nihav_codec_support",
|
|
||||||
"nihav_core",
|
|
||||||
"nihav_duck",
|
|
||||||
"num-derive",
|
"num-derive",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
|
@ -3112,6 +3107,7 @@ dependencies = [
|
||||||
"rfd",
|
"rfd",
|
||||||
"ruffle_core",
|
"ruffle_core",
|
||||||
"ruffle_render_wgpu",
|
"ruffle_render_wgpu",
|
||||||
|
"ruffle_video_software",
|
||||||
"url",
|
"url",
|
||||||
"webbrowser",
|
"webbrowser",
|
||||||
"winapi",
|
"winapi",
|
||||||
|
@ -3233,7 +3229,14 @@ dependencies = [
|
||||||
name = "ruffle_video_software"
|
name = "ruffle_video_software"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"flate2",
|
||||||
"generational-arena",
|
"generational-arena",
|
||||||
|
"h263-rs",
|
||||||
|
"h263-rs-yuv",
|
||||||
|
"log",
|
||||||
|
"nihav_codec_support",
|
||||||
|
"nihav_core",
|
||||||
|
"nihav_duck",
|
||||||
"ruffle_render",
|
"ruffle_render",
|
||||||
"ruffle_video",
|
"ruffle_video",
|
||||||
"swf",
|
"swf",
|
||||||
|
@ -3256,6 +3259,7 @@ dependencies = [
|
||||||
"ruffle_render_canvas",
|
"ruffle_render_canvas",
|
||||||
"ruffle_render_webgl",
|
"ruffle_render_webgl",
|
||||||
"ruffle_render_wgpu",
|
"ruffle_render_wgpu",
|
||||||
|
"ruffle_video_software",
|
||||||
"ruffle_web_common",
|
"ruffle_web_common",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
|
|
@ -38,16 +38,11 @@ rand = { version = "0.8.5", features = ["std", "small_rng"], default-features =
|
||||||
serde = { version = "1.0.144", features = ["derive"] }
|
serde = { version = "1.0.144", features = ["derive"] }
|
||||||
serde_json = { version = "1.0", features = ["preserve_order"] }
|
serde_json = { version = "1.0", features = ["preserve_order"] }
|
||||||
nellymoser-rs = { git = "https://github.com/ruffle-rs/nellymoser", rev = "4a33521c29a918950df8ae9fe07e527ac65553f5", optional = true }
|
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"
|
regress = "0.4"
|
||||||
flash-lso = { git = "https://github.com/ruffle-rs/rust-flash-lso", rev = "19fecd07b9888c4bdaa66771c468095783b52bed" }
|
flash-lso = { git = "https://github.com/ruffle-rs/rust-flash-lso", rev = "19fecd07b9888c4bdaa66771c468095783b52bed" }
|
||||||
lzma-rs = {version = "0.2.0", optional = true }
|
lzma-rs = {version = "0.2.0", optional = true }
|
||||||
dasp = { git = "https://github.com/RustAudio/dasp", rev = "f05a703", features = ["interpolate", "interpolate-linear", "signal"], 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 }
|
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]
|
[target.'cfg(not(target_family = "wasm"))'.dependencies.futures]
|
||||||
version = "0.3.24"
|
version = "0.3.24"
|
||||||
|
@ -57,9 +52,6 @@ version = "0.4.32"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
h263 = ["h263-rs", "h263-rs-yuv"]
|
|
||||||
vp6 = ["nihav_core", "nihav_codec_support", "nihav_duck", "h263-rs-yuv"]
|
|
||||||
screenvideo = []
|
|
||||||
lzma = ["lzma-rs", "swf/lzma"]
|
lzma = ["lzma-rs", "swf/lzma"]
|
||||||
wasm-bindgen = [ "instant/wasm-bindgen" ]
|
wasm-bindgen = [ "instant/wasm-bindgen" ]
|
||||||
avm_debug = []
|
avm_debug = []
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
//! Video decoder backends
|
//! Video decoder backends
|
||||||
|
|
||||||
mod software;
|
|
||||||
|
|
||||||
pub use ruffle_video_software::backend::SoftwareVideoBackend;
|
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"
|
cpal = "0.14.0"
|
||||||
ruffle_core = { path = "../core", features = ["audio", "minimp3", "nellymoser"] }
|
ruffle_core = { path = "../core", features = ["audio", "minimp3", "nellymoser"] }
|
||||||
ruffle_render_wgpu = { path = "../render/wgpu", features = ["clap"] }
|
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"] }
|
env_logger = { version = "0.9", default-features = false, features = ["humantime"] }
|
||||||
generational-arena = "0.2.8"
|
generational-arena = "0.2.8"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
@ -30,14 +31,12 @@ winapi = "0.3.9"
|
||||||
embed-resource = "1"
|
embed-resource = "1"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["h263", "vp6", "screenvideo"]
|
default = ["software_video"]
|
||||||
|
|
||||||
# core features
|
# core features
|
||||||
avm_debug = ["ruffle_core/avm_debug"]
|
avm_debug = ["ruffle_core/avm_debug"]
|
||||||
h263 = ["ruffle_core/h263"]
|
|
||||||
lzma = ["ruffle_core/lzma"]
|
lzma = ["ruffle_core/lzma"]
|
||||||
vp6 = ["ruffle_core/vp6"]
|
software_video = ["ruffle_video_software"]
|
||||||
screenvideo = ["ruffle_core/screenvideo"]
|
|
||||||
|
|
||||||
# wgpu features
|
# wgpu features
|
||||||
render_debug_labels = ["ruffle_render_wgpu/render_debug_labels"]
|
render_debug_labels = ["ruffle_render_wgpu/render_debug_labels"]
|
||||||
|
|
|
@ -11,3 +11,17 @@ ruffle_video = { path = ".." }
|
||||||
swf = { path = "../../swf" }
|
swf = { path = "../../swf" }
|
||||||
generational-arena = "0.2.8"
|
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> {
|
) -> Result<VideoStreamHandle, Error> {
|
||||||
let decoder: Box<dyn VideoDecoder> = match codec {
|
let decoder: Box<dyn VideoDecoder> = match codec {
|
||||||
#[cfg(feature = "h263")]
|
#[cfg(feature = "h263")]
|
||||||
VideoCodec::H263 => Box::new(h263::H263Decoder::new()),
|
VideoCodec::H263 => Box::new(crate::decoder::h263::H263Decoder::new()),
|
||||||
#[cfg(feature = "vp6")]
|
#[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")]
|
#[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")]
|
#[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)),
|
other => return Err(Error::UnsupportedCodec(other)),
|
||||||
};
|
};
|
||||||
let stream = VideoStream::new(decoder);
|
let stream = VideoStream::new(decoder);
|
||||||
|
|
|
@ -1,6 +1,15 @@
|
||||||
use ruffle_video::error::Error;
|
use ruffle_video::error::Error;
|
||||||
use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency};
|
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.
|
/// Trait for video decoders.
|
||||||
/// This should be implemented for each video codec.
|
/// This should be implemented for each video codec.
|
||||||
pub trait VideoDecoder {
|
pub trait VideoDecoder {
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
use crate::decoder::VideoDecoder;
|
||||||
use h263_rs::parser::H263Reader;
|
use h263_rs::parser::H263Reader;
|
||||||
use h263_rs::{DecoderOption, H263State, PictureTypeCode};
|
use h263_rs::{DecoderOption, H263State, PictureTypeCode};
|
||||||
use h263_rs_yuv::bt601::yuv420_to_rgba;
|
use h263_rs_yuv::bt601::yuv420_to_rgba;
|
||||||
use ruffle_video::error::Error;
|
use ruffle_video::error::Error;
|
||||||
use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency};
|
use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency};
|
||||||
use ruffle_video_software::decoder::VideoDecoder;
|
|
||||||
|
|
||||||
#[derive(thiserror::Error, Debug)]
|
#[derive(thiserror::Error, Debug)]
|
||||||
pub enum H263Error {
|
pub enum H263Error {
|
|
@ -1,8 +1,8 @@
|
||||||
// This module is heavily based on flashsv.rs from NihAV,
|
// This module is heavily based on flashsv.rs from NihAV,
|
||||||
// written by Kostya Shishkov, with permission.
|
// written by Kostya Shishkov, with permission.
|
||||||
|
|
||||||
|
use crate::decoder::VideoDecoder;
|
||||||
use ruffle_video::error::Error;
|
use ruffle_video::error::Error;
|
||||||
use ruffle_video_software::decoder::VideoDecoder;
|
|
||||||
|
|
||||||
use flate2::Decompress;
|
use flate2::Decompress;
|
||||||
use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency};
|
use ruffle_video::frame::{DecodedFrame, EncodedFrame, FrameDependency};
|
|
@ -1,5 +1,5 @@
|
||||||
|
use crate::decoder::VideoDecoder;
|
||||||
use ruffle_video::error::Error;
|
use ruffle_video::error::Error;
|
||||||
use ruffle_video_software::decoder::VideoDecoder;
|
|
||||||
|
|
||||||
use h263_rs_yuv::bt601::yuv420_to_rgba;
|
use h263_rs_yuv::bt601::yuv420_to_rgba;
|
||||||
|
|
|
@ -18,7 +18,6 @@ default = ["canvas", "console_error_panic_hook", "console_log", "webgl"]
|
||||||
|
|
||||||
# core features
|
# core features
|
||||||
avm_debug = ["ruffle_core/avm_debug"]
|
avm_debug = ["ruffle_core/avm_debug"]
|
||||||
h263 = ["ruffle_core/h263"]
|
|
||||||
lzma = ["ruffle_core/lzma"]
|
lzma = ["ruffle_core/lzma"]
|
||||||
|
|
||||||
# web features
|
# web features
|
||||||
|
@ -36,6 +35,7 @@ ruffle_render_canvas = { path = "../render/canvas", optional = true }
|
||||||
ruffle_web_common = { path = "common" }
|
ruffle_web_common = { path = "common" }
|
||||||
ruffle_render_webgl = { path = "../render/webgl", optional = true }
|
ruffle_render_webgl = { path = "../render/webgl", optional = true }
|
||||||
ruffle_render_wgpu = { path = "../render/wgpu", optional = true }
|
ruffle_render_wgpu = { path = "../render/wgpu", optional = true }
|
||||||
|
ruffle_video_software = { path = "../video/software" }
|
||||||
url = "2.2.2"
|
url = "2.2.2"
|
||||||
wasm-bindgen = { version = "=0.2.82", features = ["serde-serialize"] }
|
wasm-bindgen = { version = "=0.2.82", features = ["serde-serialize"] }
|
||||||
wasm-bindgen-futures = "0.4.32"
|
wasm-bindgen-futures = "0.4.32"
|
||||||
|
@ -48,7 +48,7 @@ base64 = "0.13.0"
|
||||||
[dependencies.ruffle_core]
|
[dependencies.ruffle_core]
|
||||||
path = "../core"
|
path = "../core"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["h263", "vp6", "screenvideo", "symphonia", "wasm-bindgen", "audio", "nellymoser"]
|
features = ["audio", "nellymoser", "symphonia", "wasm-bindgen"]
|
||||||
|
|
||||||
[dependencies.web-sys]
|
[dependencies.web-sys]
|
||||||
version = "0.3.58"
|
version = "0.3.58"
|
||||||
|
|
Loading…
Reference in New Issue