Rerun C++ SDK
Loading...
Searching...
No Matches
rerun::archetypes::VideoFrameReference Struct Reference

Archetype: References a single video frame. More...

#include <rerun/archetypes/video_frame_reference.hpp>

Public Types

using IndicatorComponent = rerun::components::IndicatorComponent< IndicatorComponentName >
 Indicator component, used to identify the archetype when converting to a list of components.
 

Public Member Functions

 VideoFrameReference (VideoFrameReference &&other)=default
 
 VideoFrameReference (rerun::components::VideoTimestamp _timestamp)
 
VideoFrameReference with_video_reference (rerun::components::EntityPath _video_reference) &&
 Optional reference to an entity with a archetypes::AssetVideo.
 

Public Attributes

rerun::components::VideoTimestamp timestamp
 References the closest video frame to this timestamp.
 
std::optional< rerun::components::EntityPathvideo_reference
 Optional reference to an entity with a archetypes::AssetVideo.
 

Static Public Attributes

static constexpr const char IndicatorComponentName []
 

Detailed Description

Archetype: References a single video frame.

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/reference/video for details of what is and isn't supported.

Examples

Video with automatically determined frames

image

#include <rerun.hpp>
#include <iostream>
using namespace std::chrono_literals;
int main(int argc, char* argv[]) {
if (argc <2) {
// TODO(#7354): Only mp4 is supported for now.
std::cerr <<"Usage: " <<argv[0] <<" <path_to_video.[mp4]>" <<std::endl;
return 1;
}
const auto path = argv[1];
const auto rec = rerun::RecordingStream("rerun_example_asset_video_auto_frames");
rec.spawn().exit_on_failure();
// Log video asset which is referred to by frame references.
auto video_asset = rerun::AssetVideo::from_file(path).value_or_throw();
rec.log_static("video", video_asset);
// Send automatically determined video frame timestamps.
std::vector<std::chrono::nanoseconds> frame_timestamps_ns =
video_asset.read_frame_timestamps_ns().value_or_throw();
// Note timeline values don't have to be the same as the video timestamps.
auto time_column =
rerun::TimeColumn::from_times("video_time", rerun::borrow(frame_timestamps_ns));
std::vector<rerun::components::VideoTimestamp> video_timestamps(frame_timestamps_ns.size());
for (size_t i = 0; i <frame_timestamps_ns.size(); i++) {
video_timestamps[i] = rerun::components::VideoTimestamp(frame_timestamps_ns[i]);
}
auto video_frame_reference_indicators =
rerun::ComponentColumn::from_indicators<rerun::VideoFrameReference>(
static_cast<uint32_t>(video_timestamps.size())
);
rec.send_columns(
"video",
time_column,
{
video_frame_reference_indicators.value_or_throw(),
rerun::ComponentColumn::from_loggable(rerun::borrow(video_timestamps)).value_or_throw(),
}
);
}
A RecordingStream handles everything related to logging data into Rerun.
Definition recording_stream.hpp:60
Collection< TElement > borrow(const TElement *data, size_t num_instances=1)
Borrows binary data into a Collection from a pointer.
Definition collection.hpp:461
static Result< ComponentColumn > from_loggable(const Collection< T > &components)
Creates a new component column from a collection of component instances where each run has a length o...
Definition component_column.hpp:60
static TimeColumn from_times(std::string timeline_name, const Collection< std::chrono::duration< TRep, TPeriod > > &chrono_times, SortingStatus sorting_status=SortingStatus::Unknown)
Creates a time column from an array of arbitrary std::chrono durations.
Definition time_column.hpp:115
Component: Timestamp inside a archetypes::AssetVideo.
Definition video_timestamp.hpp:15

Demonstrates manual use of video frame references

image

#include <rerun.hpp>
#include <iostream>
using namespace std::chrono_literals;
int main(int argc, char* argv[]) {
if (argc <2) {
// TODO(#7354): Only mp4 is supported for now.
std::cerr <<"Usage: " <<argv[0] <<" <path_to_video.[mp4]>" <<std::endl;
return 1;
}
const auto path = argv[1];
const auto rec = rerun::RecordingStream("rerun_example_asset_video_manual_frames");
rec.spawn().exit_on_failure();
// Log video asset which is referred to by frame references.
rec.log_static("video_asset", rerun::AssetVideo::from_file(path).value_or_throw());
// Create two entities, showing the same video frozen at different times.
rec.log("frame_1s", rerun::VideoFrameReference(1.0s).with_video_reference("video_asset"));
rec.log("frame_2s", rerun::VideoFrameReference(2.0s).with_video_reference("video_asset"));
// TODO(#5520): log blueprint once supported
}
Archetype: References a single video frame.
Definition video_frame_reference.hpp:114
VideoFrameReference with_video_reference(rerun::components::EntityPath _video_reference) &&
Optional reference to an entity with a archetypes::AssetVideo.
Definition video_frame_reference.hpp:159

Member Function Documentation

◆ with_video_reference()

VideoFrameReference rerun::archetypes::VideoFrameReference::with_video_reference ( rerun::components::EntityPath  _video_reference) &&
inline

Optional reference to an entity with a archetypes::AssetVideo.

If none is specified, the video is assumed to be at the same entity. Note that blueprint overrides on the referenced video will be ignored regardless, as this is always interpreted as a reference to the data store.

For a series of video frame references, it is recommended to specify this path only once at the beginning of the series and then rely on latest-at query semantics to keep the video reference active.

Member Data Documentation

◆ timestamp

rerun::components::VideoTimestamp rerun::archetypes::VideoFrameReference::timestamp

References the closest video frame to this timestamp.

Note that this uses the closest video frame instead of the latest at this timestamp in order to be more forgiving of rounding errors for inprecise timestamp types.

Timestamps are relative to the start of the video, i.e. a timestamp of 0 always corresponds to the first frame. This is oftentimes equivalent to presentation timestamps (known as PTS), but in the presence of B-frames (bidirectionally predicted frames) there may be an offset on the first presentation timestamp in the video.

◆ video_reference

std::optional<rerun::components::EntityPath> rerun::archetypes::VideoFrameReference::video_reference

Optional reference to an entity with a archetypes::AssetVideo.

If none is specified, the video is assumed to be at the same entity. Note that blueprint overrides on the referenced video will be ignored regardless, as this is always interpreted as a reference to the data store.

For a series of video frame references, it is recommended to specify this path only once at the beginning of the series and then rely on latest-at query semantics to keep the video reference active.

◆ IndicatorComponentName

constexpr const char rerun::archetypes::VideoFrameReference::IndicatorComponentName[]
staticconstexpr
Initial value:
=
"rerun.components.VideoFrameReferenceIndicator"

The documentation for this struct was generated from the following file: