Pure-rust implementation of legacy H.263 video codec and associated color transforms

Related tags

Video h263-rs
Overview

Rust Build Status Web Build Status Ruffle Discord
website | demo | nightly builds | wiki

h263-rs

h263-rs is a pure-Rust implementation of ITU-T Recommendation H.263 (2005/08), a video codec commonly used in early VoIP telephony and multimedia systems including Sorenson Spark and Adobe Flash Player. It is used primarily in Ruffle to provide H.263 video decoding capability.

Project status

h263-rs correctly decodes most Sorenson-flavor video streams. No attempt has yet been made to test other flavors of H.263, or any of the additional features in later versions of H.263.

There is currently no support for encoding H.263 video of any flavor.

Using h263-rs

Currently, this only ships as a library, which must be integrated in another project to play video.

Building from source

Follow the official guide to install Rust for your platform.

Structure

  • h263 contains the core codec library
  • yuv contains BT.601 YUV colorspace conversions needed for decoding H.263 video

Sponsors

This project is maintained by the developers of Ruffle. You can support the development of Ruffle via GitHub Sponsors. Your sponsorship will help to ensure the accessibility of Flash content for the future. Thank you!

Sincere thanks to the diamond level sponsors of Ruffle:

Newgrounds.com CPMStar Sébastien Bénard Crazy Games Cool Math Games The New York Times Armor Games Onda Educa TwoPlayerGames.org wowgame.jp Matt Roszak

License

h263-rs is licensed under either of

at your option.

h263-rs depends on third-party libraries under compatible licenses. See LICENSE.md for full information.

Contribution

h263-rs welcomes contribution from everyone. See CONTRIBUTING.md for help getting started.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.

The entire h263-rs community, including the chat room and GitHub project, is expected to abide by the Code of Conduct that the Rust project itself follows.

Comments
  • Speed up YUV->RGBA conversion by utilizing iterators, and processing 2x2 group of pixels at once

    Speed up YUV->RGBA conversion by utilizing iterators, and processing 2x2 group of pixels at once

    Instead of iterating on plain numbers and computing array indices manually (hence forcing continuous bounds checks everywhere), a parallel iteration scheme is set up on two consecutive lines of all three input, and the output array, at once. Each of these iterators yields two neighboring samples/pixels to work with (in a nice, symmetric, square arrangement), so with each iteration we have 4 of every operand.

    There is no clipping of coordinates anywhere, as they are not needed - the pixels are split into 3 different "classes" (bulk, edge, corner; with bilinear, linear, and no interpolation; in this order), and indexing for them is always handled appropriately. There is also not a single unsafe in sight, yay!

    The two-stage bilinear interpolation (with wider intermediates) results in only one division per pixel, instead of two, which is nice.

    ~~Please don't look at the commit history just yet, I'll squash it neatly once everything works well. Benchmark numbers and fancy explainer diagrams will follow. I expect around an overall 15% speedup yet again, as measured on three hand-picked z0r loops.~~ EDIT: Commit history cleaned up, benchmarks and explainers added.

    ~~Note that the indexing in process_edge_col is simply WRONG right now, so the left and right (one or two) columns of pixels are incorrect in the output.~~ EDIT: This is fixed.

    The processing of 4 pixels at a time in an identical manner (just in different "directions") also lends itself nicely to SIMD in the future (perhaps even to autovectorization right now, but I haven't checked that), although 16 bit operands on 4 parallel lanes is still only 64 bits total, which is half of the 128 bits available in WASM SIMD.

    This supersedes #6.

    opened by torokati44 7
  • yuv: Use more accurate BT.601 coefficients

    yuv: Use more accurate BT.601 coefficients

    In the spirit of preferring bite-sized PRs instead of comprehensive rewrites, I split this out of https://github.com/ruffle-rs/h263-rs/pull/9, as it is a relatively independent change.

    Quoting https://github.com/ruffle-rs/h263-rs/pull/9#issuecomment-918663459 as explanation:

    While adding tests, I also discovered some off-by-one errors in the results. These were caused by rounding more than necessary.

    So I switched to a more precise formula to precompute the linear functions, with coefficients taken exactly from the BT.601 standard. (I'm much happier with these, instead of those 5 float literals just copied from a random piece of code somewhere.)

    Now that all of this goes into a lookup table anyway, the cost of all of these additional computations shouldn't matter that much. (They are only done once, and only on the 256 values of a u8.)

    opened by torokati44 5
  • Eliminating bounds checks in the YUV->RGBA conversion

    Eliminating bounds checks in the YUV->RGBA conversion

    ~These changes together yield an overall ∼21% reduction of the time run_frame() takes, on average.~ (outdated) Measured on the self-hosted web build, running the first 100 frames of z0r loops 3664, 4449, and 7081; but discarding the first 20 frame times of each loop before averaging - to let the WASM JIT warm up, and the numbers stabilize a little.

    The results: image The first and last rows are about the current state, the middle rows are some "milestone" commits of this PR. The X axis is milliseconds. Every measurement was done four times. The benchmarks were done in Chromium 94, on a Ryzen 2700X (using playwright and the temci tool).

    ~The first two commits I'm fairly confident in being "good", the middle one is just "okay", and the last two "should be fine, I think".~ (outdated)

    More details about the changes in the added comments.

    opened by torokati44 3
  • yuv: Drop the LUTs, do integer-only (fixed-point), SIMD-capable arithmetic instead

    yuv: Drop the LUTs, do integer-only (fixed-point), SIMD-capable arithmetic instead

    This, somewhat surprisingly, already speeds up the conversion function by a factor of about 10% on the web target in itself. But the more important thing is that it's SIMD-capable. And that target feature (SSE2) is enabled by default on desktop targets, AFAIK. All the tests still pass (in fact I had to add a couple more), and the sample videos I tested still look completely fine to me.

    Once https://github.com/ruffle-rs/ruffle/pull/5834 is merged, it should speed it up (on web, in capable browsers) by an additional factor of 2x. Why only 2x, and not 4x, you ask? Well, I don't know. Maybe we should ask our friend, Amdahl. I'm not complaining though, it's still a nice uplift.

    I've also experimented with 16-bit intermediate precision, but it's just barely not accurate enough for my taste, and isn't any faster. And using i32x4 also allows the neat transpose trick at the end.

    Nor is doing a 2x2 group of pixels together faster, even though the chroma samples can be just splatted across all lanes, the additional shuffling in memory and more complicated iteration most probably negate that.

    Additionally, if we were really serious about performance, we could also use bytemuck::pod_align_to, but since the h.263 decoder chops off the luma samples to odd widths in some cases, it would make lining up the chroma samples to it kinda awkward. And the WASM VM might also not even JIT these loads into the faster aligned versions of the native instructions...

    opened by torokati44 2
  • build(deps): bump bytemuck from 1.7.2 to 1.12.2

    build(deps): bump bytemuck from 1.7.2 to 1.12.2

    Bumps bytemuck from 1.7.2 to 1.12.2.

    Changelog

    Sourced from bytemuck's changelog.

    1.12.2

    • Fixes try_pod_read_unaligned bug that made it always fail unless the target type was exactly pointer sized in which case UB could happen. The CheckedBitPattern::is_valid_bit_pattern was being asked to check that a reference to the pod value was a valid bit pattern, rather than the actual bit pattern itself, and so the check could in some cases be illegally bypassed.

    1.12.1

    • Patch bumped the required bytemuck_derive version because of a regression in how it handled align(N) attributes.

    1.12

    • This minor version bump is caused by a version bump in our bytemuck_derive dependency, which is in turn caused by a mixup in the minimum version of syn that bytemuck_derive uses. See Issue 122. There's not any specific "new" API as you might normally expect from a minor version bump.
    • pali fixed a problem with SPIR-V builds being broken. The error handling functions were trying to be generic over Display, which the error types normally support, except on SPIR-V targets (which run on the GPU and don't have text formatting).

    1.11

    • WaffleLapkin added wrap_box and peel_box to the TransparentWrapperAlloc trait. Default impls of these functions are provided, and (as usual with the transparent trait stuff) you should not override the default versions.

    1.10

    • TheEdward162 added the ZeroableInOption and PodInOption traits. These are for types that are Zeroable or Pod when in an option, but not on their own. We provide impls for the various "NonZeroINTEGER" types in core, and if you need to newtype a NonZero value then you can impl these traits when you use repr(transparent).

    1.9.1

    • Bumped the minimum bytemuck_derive dependency version from 1.0 to 1.1. The fact that bytemuck and bytemuck_derive are separate crates at all is an unfortunate technical limit of current Rust, woe and calamity.

    1.9.0

    • fu5ha added the NoUninit, AnyBitPattern, and

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump thiserror from 1.0.30 to 1.0.37

    build(deps): bump thiserror from 1.0.30 to 1.0.37

    Bumps thiserror from 1.0.30 to 1.0.37.

    Release notes

    Sourced from thiserror's releases.

    1.0.37

    • Documentation improvements

    1.0.36

    1.0.35

    • More work on integrating std::any::Provider for backtrace support
    • Fix "Multiple applicable provide methods in scope" error when the caller has both std::error::Error and std::any::Provide traits in scope (#185)

    1.0.34

    • Tweak "generic member access" based Backtrace implementation (#184)

    1.0.33

    1.0.32

    • Add keywords to crates.io metadata

    1.0.31

    • Improve diagnostic when there is an enum variant containing #[from] #[backtrace] Error, Backtrace (#163)
    Commits
    • 8a996a5 Release 1.0.37
    • 3a0bac2 Merge pull request #197 from dtolnay/backtracedoc
    • c2759ce Fix documentation mentioning 'backtrace()' method
    • 7b226e3 Release 1.0.36
    • f062061 Copy docs on struct error(transparent) into readme
    • 5271eb3 Touch up PR 195
    • 8e8e41d Merge pull request #195 from matklad/error-transparent
    • c79b023 Update ui test suite to nightly-2022-09-25
    • 765cd2a document that error(transparent) works with structs
    • b37dc36 Raise minimum tested toolchain to rust 1.56
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump thiserror from 1.0.30 to 1.0.36

    build(deps): bump thiserror from 1.0.30 to 1.0.36

    Bumps thiserror from 1.0.30 to 1.0.36.

    Release notes

    Sourced from thiserror's releases.

    1.0.36

    1.0.35

    • More work on integrating std::any::Provider for backtrace support
    • Fix "Multiple applicable provide methods in scope" error when the caller has both std::error::Error and std::any::Provide traits in scope (#185)

    1.0.34

    • Tweak "generic member access" based Backtrace implementation (#184)

    1.0.33

    1.0.32

    • Add keywords to crates.io metadata

    1.0.31

    • Improve diagnostic when there is an enum variant containing #[from] #[backtrace] Error, Backtrace (#163)
    Commits
    • 7b226e3 Release 1.0.36
    • f062061 Copy docs on struct error(transparent) into readme
    • 5271eb3 Touch up PR 195
    • 8e8e41d Merge pull request #195 from matklad/error-transparent
    • c79b023 Update ui test suite to nightly-2022-09-25
    • 765cd2a document that error(transparent) works with structs
    • b37dc36 Raise minimum tested toolchain to rust 1.56
    • 31dfd4c Remove default package.readme metadata from Cargo.toml
    • 10ffe03 Release 1.0.35
    • 9be0f41 Merge pull request #191 from dtolnay/anyhowprovider
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump thiserror from 1.0.30 to 1.0.35

    build(deps): bump thiserror from 1.0.30 to 1.0.35

    Bumps thiserror from 1.0.30 to 1.0.35.

    Release notes

    Sourced from thiserror's releases.

    1.0.35

    • More work on integrating std::any::Provider for backtrace support
    • Fix "Multiple applicable provide methods in scope" error when the caller has both std::error::Error and std::any::Provide traits in scope (#185)

    1.0.34

    • Tweak "generic member access" based Backtrace implementation (#184)

    1.0.33

    1.0.32

    • Add keywords to crates.io metadata

    1.0.31

    • Improve diagnostic when there is an enum variant containing #[from] #[backtrace] Error, Backtrace (#163)
    Commits
    • 10ffe03 Release 1.0.35
    • 9be0f41 Merge pull request #191 from dtolnay/anyhowprovider
    • 1a90b77 Pull in Provider impl from anyhow 1.0.65
    • 2ca76ed Merge pull request #190 from dtolnay/provider
    • 01e7c18 Temporarily disable AnyhowBacktrace test
    • aaf8449 Use ThiserrorProvide to disambiguate 'provide' method calls
    • 460396e Add trait with method that won't collide between Provider and Error
    • 293b127 Add build script to detect Provider support
    • 3bcad59 Revert "Directly call source.provide instead of going through dyn error"
    • 21198c9 Move multiple-provide test into test_backtrace
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump thiserror from 1.0.30 to 1.0.34

    build(deps): bump thiserror from 1.0.30 to 1.0.34

    Bumps thiserror from 1.0.30 to 1.0.34.

    Release notes

    Sourced from thiserror's releases.

    1.0.34

    • Tweak "generic member access" based Backtrace implementation (#184)

    1.0.33

    1.0.32

    • Add keywords to crates.io metadata

    1.0.31

    • Improve diagnostic when there is an enum variant containing #[from] #[backtrace] Error, Backtrace (#163)
    Commits
    • 48f697a Release 1.0.34
    • 76c5568 Merge pull request #184 from dtolnay/provide
    • f924c25 Directly call source.provide instead of going through dyn error
    • 2f093b5 GitHub Workflows security hardening
    • 63420ea Merge pull request #183 from dtolnay/deprecated
    • 8adf113 Revert "Delete broken #[deprecated] test"
    • fdb266a Release 1.0.33
    • 905680e Merge pull request #182 from dtolnay/provider
    • e11c97b Update backtrace test to provider API
    • 986e106 Revert "Disable nightly backtrace testing until converted to provider API"
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump bytemuck from 1.7.2 to 1.12.1

    build(deps): bump bytemuck from 1.7.2 to 1.12.1

    Bumps bytemuck from 1.7.2 to 1.12.1.

    Changelog

    Sourced from bytemuck's changelog.

    1.12.1

    • Patch bumped the required bytemuck_derive version because of a regression in how it handled align(N) attributes.

    1.12

    • This minor version bump is caused by a version bump in our bytemuck_derive dependency, which is in turn caused by a mixup in the minimum version of syn that bytemuck_derive uses. See Issue 122. There's not any specific "new" API as you might normally expect from a minor version bump.
    • pali fixed a problem with SPIR-V builds being broken. The error handling functions were trying to be generic over Display, which the error types normally support, except on SPIR-V targets (which run on the GPU and don't have text formatting).

    1.11

    • WaffleLapkin added wrap_box and peel_box to the TransparentWrapperAlloc trait. Default impls of these functions are provided, and (as usual with the transparent trait stuff) you should not override the default versions.

    1.10

    • TheEdward162 added the ZeroableInOption and PodInOption traits. These are for types that are Zeroable or Pod when in an option, but not on their own. We provide impls for the various "NonZeroINTEGER" types in core, and if you need to newtype a NonZero value then you can impl these traits when you use repr(transparent).

    1.9.1

    • Bumped the minimum bytemuck_derive dependency version from 1.0 to 1.1. The fact that bytemuck and bytemuck_derive are separate crates at all is an unfortunate technical limit of current Rust, woe and calamity.

    1.9.0

    • fu5ha added the NoUninit, AnyBitPattern, and CheckedBitPattern traits. This allows for a more fine-grained level of detail in what casting operations are allowed for a type. Types that already implement Zeroable and Pod will have a blanket impl for these new traits. This is a "preview" of the direction that the crate will probably go in the eventual 2.0 version. We're still waiting on Project Safe Transmute for an actual 2.0 version of the crate, but until then please enjoy this preview.
    • Also Fusha added better support for union types in the derive macros. I still don't know how any of the proc-macro stuff works at all, so please

    ... (truncated)

    Commits
    • 950a3ed use the new derive updates.
    • 3f2e91d (cargo-release) version 1.2.1
    • b7b4380 derive changlog.
    • d47d527 Fix regression #127: support align in reprs again (#128)
    • 995205d version bump
    • fd6b212 Update the readme to reflect the project status as of 2022-august
    • 9ea5f65 add a note about intended MSRV of the derives (none!)
    • f053800 bump bytemuck_derive version with changelog
    • 1ebf7c2 Cleanup: use a macro for reprs, use syn errors & fix cfg-target-arch (#124)
    • bbd6a92 fix something_went_wrong on spirv (#125)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump bytemuck from 1.7.2 to 1.12.0

    build(deps): bump bytemuck from 1.7.2 to 1.12.0

    Bumps bytemuck from 1.7.2 to 1.12.0.

    Changelog

    Sourced from bytemuck's changelog.

    bytemuck changelog

    1.12

    • This minor version bump is caused by a version bump in our bytemuck_derive dependency, which is in turn caused by a mixup in the minimum version of syn that bytemuck_derive uses. See Issue 122. There's not any specific "new" API as you might normally expect from a minor version bump.
    • pali fixed a problem with SPIR-V builds being broken. The error handling functions were trying to be generic over Display, which the error types normally support, except on SPIR-V targets (which run on the GPU and don't have text formatting).

    1.11

    • WaffleLapkin added wrap_box and peel_box to the TransparentWrapperAlloc trait. Default impls of these functions are provided, and (as usual with the transparent trait stuff) you should not override the default versions.

    1.10

    • TheEdward162 added the ZeroableInOption and PodInOption traits. These are for types that are Zeroable or Pod when in an option, but not on their own. We provide impls for the various "NonZeroINTEGER" types in core, and if you need to newtype a NonZero value then you can impl these traits when you use repr(transparent).

    1.9.1

    • Bumped the minimum bytemuck_derive dependency version from 1.0 to 1.1. The fact that bytemuck and bytemuck_derive are separate crates at all is an unfortunate technical limit of current Rust, woe and calamity.

    1.9.0

    • fu5ha added the NoUninit, AnyBitPattern, and CheckedBitPattern traits. This allows for a more fine-grained level of detail in what casting operations are allowed for a type. Types that already implement Zeroable and Pod will have a blanket impl for these new traits. This is a "preview" of the direction that the crate will probably go in the eventual 2.0 version. We're still waiting on Project Safe Transmute for an actual 2.0 version of the crate, but until then please enjoy this preview.
    • Also Fusha added better support for union types in the derive macros. I still don't know how any of the proc-macro stuff works at all, so please direct questions to her.

    1.8.0

    ... (truncated)

    Commits
    • 995205d version bump
    • fd6b212 Update the readme to reflect the project status as of 2022-august
    • 9ea5f65 add a note about intended MSRV of the derives (none!)
    • f053800 bump bytemuck_derive version with changelog
    • 1ebf7c2 Cleanup: use a macro for reprs, use syn errors & fix cfg-target-arch (#124)
    • bbd6a92 fix something_went_wrong on spirv (#125)
    • 2c97676 support deriving Pod for packed generic types. (#123)
    • 331762b run cargo fmt (#120)
    • d75942c (cargo-release) version 1.11.0
    • 5ed7a7f Update changelog.md
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump thiserror from 1.0.30 to 1.0.38

    build(deps): bump thiserror from 1.0.30 to 1.0.38

    Bumps thiserror from 1.0.30 to 1.0.38.

    Release notes

    Sourced from thiserror's releases.

    1.0.38

    • Documentation improvements

    1.0.37

    • Documentation improvements

    1.0.36

    1.0.35

    • More work on integrating std::any::Provider for backtrace support
    • Fix "Multiple applicable provide methods in scope" error when the caller has both std::error::Error and std::any::Provide traits in scope (#185)

    1.0.34

    • Tweak "generic member access" based Backtrace implementation (#184)

    1.0.33

    1.0.32

    • Add keywords to crates.io metadata

    1.0.31

    • Improve diagnostic when there is an enum variant containing #[from] #[backtrace] Error, Backtrace (#163)
    Commits
    • 74bfe75 Release 1.0.38
    • cfc7d8c Update build status badge
    • db78fa2 Update ui test suite to nightly-2022-12-15
    • c25a710 Time out workflows after 45 minutes
    • 464e2e7 Merge pull request #200 from dtolnay/displayattr
    • 4b06a3e Add test of Display impl nested inside display attribute
    • 29ee95e Ui test changes for trybuild 1.0.66
    • 8a996a5 Release 1.0.37
    • 3a0bac2 Merge pull request #197 from dtolnay/backtracedoc
    • c2759ce Fix documentation mentioning 'backtrace()' method
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump bytemuck from 1.7.2 to 1.12.3

    build(deps): bump bytemuck from 1.7.2 to 1.12.3

    Bumps bytemuck from 1.7.2 to 1.12.3.

    Changelog

    Sourced from bytemuck's changelog.

    1.12.3

    • This bugfix makes the crate do stuff with Arc or not based on the target_has_atomic config. Previously, some targets that have allocation but not atomics were getting errors. This raises the MSRV of the extern_crate_alloc feature to 1.60, but opt-in features are not considered to be hard locked to 1.34 like the basic build of the crate is.

    1.12.2

    • Fixes try_pod_read_unaligned bug that made it always fail unless the target type was exactly pointer sized in which case UB could happen. The CheckedBitPattern::is_valid_bit_pattern was being asked to check that a reference to the pod value was a valid bit pattern, rather than the actual bit pattern itself, and so the check could in some cases be illegally bypassed.

    1.12.1

    • Patch bumped the required bytemuck_derive version because of a regression in how it handled align(N) attributes.

    1.12

    • This minor version bump is caused by a version bump in our bytemuck_derive dependency, which is in turn caused by a mixup in the minimum version of syn that bytemuck_derive uses. See Issue 122. There's not any specific "new" API as you might normally expect from a minor version bump.
    • pali fixed a problem with SPIR-V builds being broken. The error handling functions were trying to be generic over Display, which the error types normally support, except on SPIR-V targets (which run on the GPU and don't have text formatting).

    1.11

    • WaffleLapkin added wrap_box and peel_box to the TransparentWrapperAlloc trait. Default impls of these functions are provided, and (as usual with the transparent trait stuff) you should not override the default versions.

    1.10

    • TheEdward162 added the ZeroableInOption and PodInOption traits. These are for types that are Zeroable or Pod when in an option, but not on their own. We provide impls for the various "NonZeroINTEGER" types in core, and if you need to newtype a NonZero value then you can impl these traits when you use repr(transparent).

    1.9.1

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump wide from 0.7.4 to 0.7.5

    build(deps): bump wide from 0.7.4 to 0.7.5

    Bumps wide from 0.7.4 to 0.7.5.

    Commits
    • efb05d3 (cargo-release) version 0.7.5
    • ae1be20 much more inline!
    • 7d586f9 join all tests into a single test binary. this makes them run much faster
    • 9d1c40b adjust comments for clarity.
    • 2e722ae Add inline attribute to array casts (#116)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump num-traits from 0.2.14 to 0.2.15

    build(deps): bump num-traits from 0.2.14 to 0.2.15

    Bumps num-traits from 0.2.14 to 0.2.15.

    Changelog

    Sourced from num-traits's changelog.

    Release 0.2.15 (2022-05-02)

    Contributors: @​alion02, @​clarfonthey, @​cuviper, @​ElectronicRU, @​ibraheemdev, @​SparrowLii, @​sshilovsky, @​tspiteri, @​XAMPPRocky, @​Xiretza

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Deblocking filter is missing

    Deblocking filter is missing

    This is not an essential feature, even the SWF spec itself states that the deblocking hint might be ignored by Flash Player too.

    It could still slightly improve the appearance of https://z0r.de/4145 for example - look at the top corner of the white case of the alarm clock, and the rose next to it. Or the sky in https://z0r.de/3711. I think, at least, that this movie has that hint set.

    enhancement 
    opened by torokati44 0
Owner
Ruffle
Flash Player emulator written in Rust
Ruffle
Lumiere is a proof-of-concept/example video player built with the Slint UI framework and libmpv

Lumiere is a proof-of-concept/example video player built with the Slint UI framework and libmpv. This was built quickly to try out Slint and it's new OpenGL underlay feature.

Valerian G. 25 Nov 21, 2022
Rust-based video player for astrophotography

Astro Video Player Rust-based video player for astrophotography videos in SER and AVI format. Supports debayering of RAW color images. Status: Works w

Andy Grove 6 May 7, 2022
Yet another video to ASCII animation (in Rust)

Yet another video to ASCII tool (in Rust) Requirements opencv Installation cargo install video2ascii You may also want to add

jwnhy 42 Dec 28, 2022
Detect timestamp of all scene changes in video

detect-scene-change detect timestamp of all scene changes in video Usage

soruly 6 Feb 26, 2022
A small utility to cast video files from a desktop to a chromecast.

μCaster (mucaster) Once completed, μCaster is a cross-platform Chromecast controller that can play files directly from a host computer. This project i

Jayden Dumouchel 4 Oct 10, 2022
Xiu - A simple and secure live media server in pure Rust (RTMP/HTTP-FLV/HLS/Relay).🦀

Xiu is a simple and secure live media server written by pure Rust, it now supports popular live protocols like RTMP/HLS/HTTP-FLV (and maybe other protocols in the future), you can deploy it as a stand-alone server or a cluster using the relay feature.

HarlanC 602 Jan 2, 2023
Media Cleaner is a simple CLI tool to clean up your media library based on your Overseerr requests and Tautulli history, written in Rust.

Media Cleaner Media Cleaner is a simple CLI tool to clean up your media library based on your Overseerr requests and Tautulli history, written in Rust

Felix Bjerhem Aronsson 21 Mar 22, 2023
The fastest and safest AV1 encoder.

rav1e The fastest and safest AV1 encoder. Table of Content Overview Features Documentation Releases Building Dependency: NASM Release binary Unstable

Xiph.Org Foundation 3k Jan 3, 2023
Plays back videos in your terminal in an insanely slow and inefficient way.

term-video I guess this is usable now... Compilation Since this project is built using Rust, install its toolchain first, for example using rustup. gi

Pascal Puffke 7 Feb 23, 2022
A CLI tool that converts videos to ASCII and displays them to the terminal on the fly

A CLI tool that converts videos to ASCII and displays them to the terminal on the fly

Luke T 19 Nov 15, 2022
ffmpeg libraries precompiled for WebAsembly/WASI, as a Rust crate.

FFMPEG crate for WebAssembly/WASI This crate bundles FFMPEG's libraries, precompiled for WebAssembly. No native installation required. Compatible with

Frank Denis 45 Dec 14, 2022
Rust high level RTSP client

RRTSP Client Currently works, but a lot of work to do. PRs welcome! Examples, crates.io, better Readme.md and other things coming soon.

Lucas Zanela 13 Dec 26, 2022
rsmpeg is a thin&safe layer above the FFmpeg's Rust bindings

A Rust crate that exposes FFmpeg's power as much as possible.

Lark Technologies Pte. Ltd. 384 Jan 2, 2023
High-level RTSP multimedia streaming library, in Rust

High-level RTSP multimedia streaming library, in Rust. Good support for ONVIF RTSP/1.0 IP surveillance cameras, as needed by Moonfire NVR. Works around brokenness in cheap closed-source cameras.

Scott Lamb 108 Jan 8, 2023
A ffmpeg/rust based HLS stream generator

hls-streamer Stream your heart's content with HLS. Movtivation I've got a CCTV camera from AliExpress, I know I can use ffmpeg hls demuxer to split up

null 16 Jan 9, 2023
A not well-named youtube's videos downloader written in Rust 🦀

ytdl-rs A not well-named youtube's videos downloader written in Rust ?? For information about how to use, legal section, next steps in the project, co

Alejandro Lopez 6 Jun 17, 2022
A CLI tool to convet Hex color code or RGB to color code, RGB, HSL and color name(if exists)

iro -色- A CLI tool to convert the hex color code or RGB to color code, RGB, HSL, color name(if exists, according to jonathantneal/color-names). Usage

Kyohei Uto 3 Dec 9, 2022
Designed as successor to Pretty-Good-Video for improved codec structure, API design & performance

Pretty Fast Video Minimal video codec designed as a successor to Pretty Good Video Goals are to improve: Quality API design Codec structure (Hopefully

Hazel Stagner 36 Jun 5, 2023
A safe implementation of the secure remote password authentication and key-exchange protocol (SRP), SRP6a and legacy are as features available.

Secure Remote Password (SRP 6 / 6a) A safe implementation of the secure remote password authentication and key-exchange protocol (SRP version 6a). Ver

Sven Assmann 10 Nov 3, 2022
This is a lightweight audio-video player built in Rust using FFmpeg libraries. It demonstrates the usage of FFmpeg with Rust to play back video files.

FFmpeg Rust Video Player This is a lightweight audio-video player built in Rust using FFmpeg libraries. It demonstrates the usage of FFmpeg with Rust

Jenin Sutradhar 3 Apr 10, 2024