video: Made ruffle_video crate, moved core video Error to it

This commit is contained in:
= 2022-08-26 00:03:09 +02:00 committed by Mike Welsh
parent 72da1535b7
commit b7cf800f88
12 changed files with 64 additions and 27 deletions

11
Cargo.lock generated
View File

@ -3081,6 +3081,7 @@ dependencies = [
"regress",
"ruffle_macros",
"ruffle_render",
"ruffle_video",
"ruffle_wstr",
"serde",
"serde_json",
@ -3217,6 +3218,16 @@ dependencies = [
"walkdir",
]
[[package]]
name = "ruffle_video"
version = "0.1.0"
dependencies = [
"gc-arena",
"ruffle_render",
"swf",
"thiserror",
]
[[package]]
name = "ruffle_web"
version = "0.1.0"

View File

@ -16,6 +16,8 @@ members = [
"render/wgpu",
"render/webgl",
"video",
"tests",
"tests/input-format",
]

View File

@ -16,6 +16,7 @@ indexmap = "1.9.1"
log = "0.4"
minimp3 = { version = "0.5.1", optional = true }
ruffle_render = { path = "../render" }
ruffle_video = { path = "../video" }
ruffle_macros = { path = "macros" }
ruffle_wstr = { path = "../wstr" }
swf = { path = "../swf" }

View File

@ -3,8 +3,8 @@
use generational_arena::{Arena, Index};
use ruffle_render::backend::RenderBackend;
use ruffle_render::bitmap::BitmapInfo;
use ruffle_video::error::Error;
use swf::{VideoCodec, VideoDeblocking};
use thiserror::Error;
mod software;
@ -12,27 +12,6 @@ pub use crate::backend::video::software::SoftwareVideoBackend;
pub type VideoStreamHandle = Index;
#[derive(Error, Debug)]
pub enum Error {
#[error("Attempted to seek to omitted frame {0} without prior decoded frame")]
SeekingBeforeDecoding(u32),
#[error("Unsupported video codec type: {0:?}")]
UnsupportedCodec(VideoCodec),
#[error("Video stream is not registered")]
VideoStreamIsNotRegistered,
#[error("Couldn't create bitmap for video frame")]
BitmapError(#[from] ruffle_render::error::Error),
#[error("Video decoding isn't supported")]
DecodingNotSupported,
#[error(transparent)]
DecoderError(Box<dyn std::error::Error + Send + Sync>),
}
/// An encoded video frame of some video codec.
pub struct EncodedFrame<'a> {
/// The codec used to encode the frame.

View File

@ -1,8 +1,9 @@
use crate::backend::video::software::VideoDecoder;
use crate::backend::video::{DecodedFrame, EncodedFrame, Error, FrameDependency};
use crate::backend::video::{DecodedFrame, EncodedFrame, FrameDependency};
use h263_rs::parser::H263Reader;
use h263_rs::{DecoderOption, H263State, PictureTypeCode};
use h263_rs_yuv::bt601::yuv420_to_rgba;
use ruffle_video::error::Error;
#[derive(thiserror::Error, Debug)]
pub enum H263Error {

View File

@ -2,7 +2,8 @@
// written by Kostya Shishkov, with permission.
use crate::backend::video::software::VideoDecoder;
use crate::backend::video::{DecodedFrame, EncodedFrame, Error, FrameDependency};
use crate::backend::video::{DecodedFrame, EncodedFrame, FrameDependency};
use ruffle_video::error::Error;
use flate2::Decompress;

View File

@ -1,5 +1,6 @@
use crate::backend::video::software::VideoDecoder;
use crate::backend::video::{DecodedFrame, EncodedFrame, Error, FrameDependency};
use crate::backend::video::{DecodedFrame, EncodedFrame, FrameDependency};
use ruffle_video::error::Error;
use h263_rs_yuv::bt601::yuv420_to_rgba;

View File

@ -1,11 +1,12 @@
//! Pure software video decoding backend.
use crate::backend::video::{
DecodedFrame, EncodedFrame, Error, FrameDependency, VideoBackend, VideoStreamHandle,
DecodedFrame, EncodedFrame, FrameDependency, VideoBackend, VideoStreamHandle,
};
use generational_arena::Arena;
use ruffle_render::backend::RenderBackend;
use ruffle_render::bitmap::{Bitmap, BitmapFormat, BitmapHandle, BitmapInfo};
use ruffle_video::error::Error;
use swf::{VideoCodec, VideoDeblocking};
pub mod decoders;

View File

@ -4,7 +4,7 @@ use crate::avm1::{Object as Avm1Object, StageObject as Avm1StageObject};
use crate::avm2::{
Activation as Avm2Activation, Object as Avm2Object, StageObject as Avm2StageObject,
};
use crate::backend::video::{EncodedFrame, Error, VideoStreamHandle};
use crate::backend::video::{EncodedFrame, VideoStreamHandle};
use crate::context::{RenderContext, UpdateContext};
use crate::display_object::{DisplayObjectBase, DisplayObjectPtr, TDisplayObject};
use crate::prelude::*;
@ -13,6 +13,7 @@ use crate::vminterface::{AvmObject, Instantiator};
use gc_arena::{Collect, GcCell, MutationContext};
use ruffle_render::bitmap::BitmapInfo;
use ruffle_render::bounding_box::BoundingBox;
use ruffle_video::error::Error;
use std::borrow::{Borrow, BorrowMut};
use std::cell::{Ref, RefMut};
use std::collections::{BTreeMap, BTreeSet};

15
video/Cargo.toml Normal file
View File

@ -0,0 +1,15 @@
[package]
name = "ruffle_video"
version = "0.1.0"
authors = ["Ruffle LLC <ruffle@ruffle.rs>"]
edition = "2021"
license = "MIT OR Apache-2.0"
[dependencies]
swf = { path = "../swf" }
ruffle_render = { path = "../render" }
generational-arena = "0.2.8"
thiserror = "1.0"
[features]
default = []

23
video/src/error.rs Normal file
View File

@ -0,0 +1,23 @@
use swf::VideoCodec;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error("Attempted to seek to omitted frame {0} without prior decoded frame")]
SeekingBeforeDecoding(u32),
#[error("Unsupported video codec type: {0:?}")]
UnsupportedCodec(VideoCodec),
#[error("Video stream is not registered")]
VideoStreamIsNotRegistered,
#[error("Couldn't create bitmap for video frame")]
BitmapError(#[from] ruffle_render::error::Error),
#[error("Video decoding isn't supported")]
DecodingNotSupported,
#[error(transparent)]
DecoderError(Box<dyn std::error::Error + Send + Sync>),
}

1
video/src/lib.rs Normal file
View File

@ -0,0 +1 @@
pub mod error;