Repository navigation
EdgeFirst Replay v2.3.0
EdgeFirst Replay v2.3.0
Installation
Download Binaries
| Platform | Binary |
|---|---|
| Linux x86_64 | edgefirst-replay-2.3.0-linux-x86_64 |
| Linux ARM64 | edgefirst-replay-2.3.0-linux-aarch64 |
| Configuration | replay.default |
# Download and install (ARM64 example)
wget https://github.com/EdgeFirstAI/replay/releases/download/v2.3.0/edgefirst-replay-2.3.0-linux-aarch64
chmod +x edgefirst-replay-2.3.0-linux-aarch64
sudo mv edgefirst-replay-2.3.0-linux-aarch64 /usr/local/bin/edgefirst-replay
# Install default configuration (optional)
sudo cp replay.default /etc/default/replayWhat's Changed
Changed
- Breaking:
rt/camera/dmanow publishes the decoder-native NV12 buffer,
matching the live camera wire contract. Replay no longer performs NV12→RGBA
conversion before publishing this topic. Downstream consumers that were
reading RGBA fromrt/camera/dmashould switch to--camera-image-topic
(sensor_msgs/Image, rgba8). - Bumped
edgefirst-schemas1.3.1 → 3.4.0 and adopted its zero-copy
view/builder API (FoxgloveCompressedVideo::from_cdr,
CompressedImage::from_cdr,Image::builder().encode_into_vec(..),
DmaBuffer::new(..).into_cdr()). - Upgraded
videostreamto 2.5.2. Switched the h264 decoder construction
from the legacyDecoder::create(H264, fps)to
Decoder::create_ex(H264, fps, CodecBackend::Auto); the legacy entrypoint
bypasses the v4l2 device enumeration the 2.5.x backend relies on, while
the_exentry uses it. On imx8mp this routes to/dev/video1 vsi_v4l2dec
with a tighter natural NV12 stride (1920 bytes vs the Hantro path's 2880). decode_h264_msgretries on transient decoder backpressure (V4L2 m2m OUTPUT
queue full): up to 20 attempts, 5 ms sleep between, retrying the same data.
Mirrors~/Software/EdgeFirst/camera/src/replay.rs. Without this, the very
first decode_frame call on a cold pool returnsIo("Decoder Error")from
the C library and is otherwise treated as fatal.mainis now sync (no#[tokio::main], notokio::time::sleep, no
tokio::process::Command). The edgefirst-hal 0.23.1 GL backend calls
tokio::sync::oneshot::Receiver::blocking_recvduring converter init,
which panics inside a tokio runtime; makingmainsync sidesteps the
collision. Service-handler invocations usestd::process::Commandand
the inter-frame timing loop usesstd::thread::sleep.
Removed
- NXP G2D (
g2d-sys),turbojpeg,dma-heap,tokio, and the per-frame
cdrcrate dependency. All image conversion, JPEG decoding, and CMA
allocation now go throughedgefirst-hal0.23.1. src/image.rs(G2D surface helpers, CMA-heapImage,MappedImage).
Added
--camera-image-topic(envCAMERA_IMAGE_TOPIC) and--camera-image-buffers
(envCAMERA_IMAGE_BUFFERS, default 4) — opt-insensor_msgs/ImageRGBA
publisher for consumers that need a non-dma-buf-aware decoded image stream.
Backed byedgefirst-halImageProcessor(auto-selects G2D / OpenGL / CPU).
Source tensors cached by dma-buf inode; destination tensors pre-allocated
once and reused.- JPEG MCAP playback now uses the optimized
edgefirst-codecJPEG decoder
(peek_info+ImageLoad::load_image), writing directly into pre-allocated
NV12 dma-buf tensors — no host-side intermediate, no memcpy.
Full Documentation: https://github.com/EdgeFirstAI/replay#readme