Skip to content

Commit

Permalink
Merge branch 'main' into jleibs/dataframe_component_promotion
Browse files Browse the repository at this point in the history
  • Loading branch information
teh-cmc authored Oct 11, 2024
2 parents fab4a9d + fd46ce3 commit 95e98bc
Show file tree
Hide file tree
Showing 18 changed files with 54 additions and 45 deletions.
3 changes: 2 additions & 1 deletion Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4758,14 +4758,15 @@ dependencies = [
[[package]]
name = "rav1d"
version = "1.0.0"
source = "git+https://github.com/rerun-io/rav1d?branch=emilk/dav1d-interface#d3acfb077eac7759f94279ec9a81edd7d0c409ed"
source = "git+https://github.com/rerun-io/rav1d?rev=a9059f6a02e68cf2aba3795cc370c72f695c4730#a9059f6a02e68cf2aba3795cc370c72f695c4730"
dependencies = [
"assert_matches",
"atomig",
"av-data",
"bitflags 2.6.0",
"cc",
"cfg-if",
"cfg_aliases 0.2.1",
"libc",
"nasm-rs",
"parking_lot",
Expand Down
3 changes: 2 additions & 1 deletion crates/store/re_chunk_store/src/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,8 @@ pub struct ChunkStore {
// different datatype for a given component.
pub(crate) type_registry: IntMap<ComponentName, ArrowDataType>,

pub(crate) per_column_metadata: IntMap<EntityPath, IntMap<ComponentName, ColumnMetadataState>>,
pub(crate) per_column_metadata:
BTreeMap<EntityPath, BTreeMap<ComponentName, ColumnMetadataState>>,

pub(crate) chunks_per_chunk_id: BTreeMap<ChunkId, Arc<Chunk>>,

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ namespace rerun.archetypes;

/// A video binary.
///
/// NOTE: Videos can only be viewed in the Rerun web viewer.
/// Only MP4 containers with a limited number of codecs are currently supported, and not in all browsers.
/// Only MP4 containers with AV1 are generally supported,
/// though the web viewer supports more video codecs, depending on browser.
///
/// See <https://rerun.io/docs/concepts/video?speculative-link> for details of what is and isn't supported.
/// See <https://rerun.io/docs/reference/video?speculative-link> for details of what is and isn't supported.
///
/// In order to display a video, you also need to log a [archetypes.VideoFrameReference] for each frame.
///
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace rerun.archetypes;
/// Used to display individual video frames from a [archetypes.AssetVideo].
/// To show an entire video, a video frame reference for each frame of the video should be logged.
///
/// See <https://rerun.io/docs/concepts/video?speculative-link> for details of what is and isn't supported.
/// See <https://rerun.io/docs/reference/video?speculative-link> for details of what is and isn't supported.
///
/// \example archetypes/video_auto_frames title="Video with automatically determined frames" image="https://static.rerun.io/video_manual_frames/320a44e1e06b8b3a3161ecbbeae3e04d1ccb9589/1200w.png"
/// \example archetypes/video_manual_frames title="Demonstrates manual use of video frame references" image="https://static.rerun.io/video_manual_frames/9f41c00f84a98cc3f26875fba7c1d2fa2bad7151/1200w.png"
Expand Down
6 changes: 3 additions & 3 deletions crates/store/re_types/src/archetypes/asset_video.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 6 additions & 4 deletions crates/store/re_video/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@ av1 = ["dep:dav1d"]

## Enable faster native video decoding with assembly.
## You need to install [nasm](https://nasm.us/) to compile with this feature.
# TODO(#7671): this feature flag currently does nothing
# nasm = ["dav1d?/default"] # The default feature set of dav1d has asm enabled
nasm = [] ## TODO(#7671): fix Linux build
# TODO(#7671): this feature flag currently does nothing on Linux.
nasm = [
# The default feature set of our dav1d fork has asm enabled (except on Linux, see above)
"dav1d?/default",
]

[dependencies]
re_log.workspace = true
Expand All @@ -52,7 +54,7 @@ thiserror.workspace = true
# If this package fails to build, install `nasm` locally, or build through `pixi`.
# See https://github.com/rerun-io/rav1d/pull/1
# TODO(#7588): publish this fork of rav1d
dav1d = { git = "https://github.com/rerun-io/rav1d", branch = "emilk/dav1d-interface", package = "rav1d", optional = true, default-features = false, features = [
dav1d = { git = "https://github.com/rerun-io/rav1d", rev = "a9059f6a02e68cf2aba3795cc370c72f695c4730", package = "rav1d", optional = true, default-features = false, features = [
# We opt-out of wasm features so we don't need `nasm` installed. It's still pretty fast.
"bitdepth_8",
] }
Expand Down
4 changes: 2 additions & 2 deletions crates/store/re_video/src/decode/av1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ impl SyncDav1dDecoder {
pub fn new() -> Result<Self> {
re_tracing::profile_function!();

// TODO(#7671): enable this warning again when the `nasm` feature actually does something
// TODO(#7671): enable this warning again on Linux when the `nasm` feature actually does something
#[allow(clippy::overly_complex_bool_expr)]
if false && !cfg!(feature = "nasm") {
if !cfg!(target_os = "linux") && !cfg!(feature = "nasm") {
re_log::warn_once!(
"NOTE: native AV1 video decoder is running extra slowly. \
Speed it up by compiling Rerun with the `nasm` feature enabled. \
Expand Down
2 changes: 1 addition & 1 deletion crates/top/rerun-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ default = ["native_viewer", "web_viewer"]

## Enable faster native video decoding with assembly.
## You need to install [nasm](https://nasm.us/) to compile with this feature.
# TODO(#7671): this feature flag currently does nothing
# TODO(#7671): this feature flag currently does nothing on linux.
nasm = ["rerun/nasm"]

## Support spawning a native viewer.
Expand Down
2 changes: 1 addition & 1 deletion crates/top/rerun/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ log = ["dep:env_logger", "dep:log"]

## Enable faster native video decoding with assembly.
## You need to install [nasm](https://nasm.us/) to compile with this feature.
# TODO(#7671): this feature flag currently does nothing
# TODO(#7671): this feature flag currently does nothing on linux.
nasm = ["re_video/nasm"]

## Support spawning a native viewer.
Expand Down
6 changes: 3 additions & 3 deletions docs/content/reference/types/archetypes/asset_video.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 19 additions & 14 deletions docs/content/reference/video.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,32 @@ This gives the best compression ratio, reducing file sizes and bandwidth require

snippet: archetypes/video_auto_frames

## `AssetVideo` limitations
Video support is new in Rerun, and has several limitations:
## Video playback limitations
Video support is new in Rerun, and has a few limitations:

* [#7298](https://github.com/rerun-io/rerun/issues/7298): Video playback only works in the web viewer
* [#7354](https://github.com/rerun-io/rerun/issues/7354): Only the MP4 container format is supported
* [#7298](https://github.com/rerun-io/rerun/issues/7298): Only the AV1 codec is supported in the native viewer
* [#5181](https://github.com/rerun-io/rerun/issues/5181): There is no audio support
* [#7594](https://github.com/rerun-io/rerun/issues/7594): HDR video is not supported
* There is no video encoder in the Rerun SDK, so you need to create the video file yourself
* Only a limited sets of codecs are supported (see below)
* A limited sets of codecs are supported on web (see below)

## Web viewer support
As of writing, playback of `AssetVideo` is only supported on the web viewer.
Native video playback is coming, and can be tracked [in this GitHub issue](https://github.com/rerun-io/rerun/issues/7298).

Video playback is done using the browser's own video decoder, so the supported codecs depend on your browser.

Overall, we recommend using Chrome or another Chromium-based browser, as it seems to have the best video support as of writing.
## Streaming video
Rerun does not yet support streaming video support. For scenarios where you don't need live video, you can work around this limitation by logging many small `AssetVideo`s to the same Entity Path. See [#7484](https://github.com/rerun-io/rerun/issues/7484) for more.

## Codec support
When choosing a codec, we recommend [AV1](https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Video_codecs#av1),
as it seems to have the best overall playback support while also having very high compression quality.
Since AV1 is patent-free, it is also likely the first codec we will support in the native viewer.
AV1 is also patent-free, and is the only codec we currently support in the native viewer (see [#7298](https://github.com/rerun-io/rerun/issues/7298)). H.264/avc is another popular choice, and native support for that is coming soon.

### Native viewer
In the native viewer, AV1 is the only supported codec. H.264 is coming soon ([#7298](https://github.com/rerun-io/rerun/issues/7298)).


### Web viewer
Video playback in the Rerun Web Viewer is done using the browser's own video decoder, so the supported codecs depend on your browser.

Overall, we recommend using Chrome or another Chromium-based browser, as it seems to have the best video support as of writing.

For decoding video in the Web Viewer, we use the [WebCodecs API](https://developer.mozilla.org/en-US/docs/Web/API/WebCodecs_API).
This API enables us to take advantage of the browser's hardware accelerated video decoding capabilities.
Expand All @@ -58,7 +64,7 @@ With that in mind, here are the browsers which we have tested and verified to ge

[^1]: Firefox on Linux has been observed to [stutter when playing back H.264 video](https://github.com/rerun-io/rerun/issues/7532).
[^2]: Any Chromium-based browser should work, but we don't test all of them.
[^3]: Chrome on Windows has been observed to stutter on playback. It can be mitigated by [using software decoding](https://rerun.io/docs/getting-started/troubleshooting#video-stuttering), but this may lead to high memory usage. See also https://github.com/rerun-io/rerun/issues/7595.
[^3]: Chrome on Windows has been observed to stutter on playback. It can be mitigated by [using software decoding](https://rerun.io/docs/getting-started/troubleshooting#video-stuttering), but this may lead to high memory usage. See [#7595](https://github.com/rerun-io/rerun/issues/7595).

When it comes to codecs, we aim to support any codec which the browser supports, but
we currently cannot guarantee that all of them will work. For more information about
Expand All @@ -77,7 +83,6 @@ At the moment, we test the following codecs:
[^6]: Safari/WebKit has been observed suttering when playing `hvc1` but working fine with `hevc1`. Despite support being advertised Safari 16.5 has been observed not support H.265 decoding.
[^7]: Only supported if hardware encoding is available. Therefore always affected by Windows stuttering issues, see [^3].

(TODO(#7594))[https://github.com/rerun-io/rerun/issues/7594]: HDR video is generally not supported at this point.

## Links
* [Web video codec guide, by Mozilla](https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Video_codecs)
6 changes: 3 additions & 3 deletions rerun_cpp/src/rerun/archetypes/asset_video.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion rerun_cpp/src/rerun/archetypes/video_frame_reference.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion rerun_py/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ extension-module = ["pyo3/extension-module"]

## Enable faster native video decoding with assembly.
## You need to install [nasm](https://nasm.us/) to compile with this feature.
# TODO(#7671): this feature flag currently does nothing
# TODO(#7671): this feature flag currently does nothing on linux.
nasm = ["re_video/nasm"]

## Support serving a web viewer over HTTP with `serve()`.
Expand Down
6 changes: 3 additions & 3 deletions rerun_py/rerun_sdk/rerun/archetypes/asset_video.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 95e98bc

Please sign in to comment.