Video
Component registry: espressif/brookesia_service_video
Helper header:
#include "brookesia/service_helper/video.hpp"Helper class:
esp_brookesia::service::helper::Video
Overview
brookesia_service_video provides:
Encoding: Capture to compressed or raw formats (resolution, FPS, format per stream).
Decoding: H.264, MJPEG, and others to RGB/YUV for display or processing.
Features
Encoder
Input comes from a local video device (default /dev/video0; Kconfig can set path prefix and count).
Each output stream can be one of (per-stream resolution and FPS):
Type |
Description |
|---|---|
H.264 |
Common network/storage codec |
MJPEG |
Frame-wise JPEG-like compression |
RGB565 / RGB888 / BGR888 |
RGB formats |
YUV420 / YUV422 / O_UYY_E_VYY |
YUV formats |
Warning
Multiple simultaneous outputs are not supported yet.
Decoder
Compressed input and pixel output; configure per use case.
Input (Compressed)
Format |
Description |
|---|---|
H.264 |
Common video codec |
MJPEG |
Frame-wise JPEG stream |
Output (Pixel)
Format |
Description |
|---|---|
RGB565 (BE/LE) |
16-bit RGB for some panels/framebuffers |
RGB888 / BGR888 |
24-bit RGB/BGR |
YUV420P / YUV422P |
Planar YUV for pipelines |
YUV422 / UYVY422 |
Packed YUV for capture/display |
O_UYY_E_VYY |
Packed layout (hardware/pipeline dependent) |
Standard Include / Helper Class
Standard include:
#include \"brookesia/service_helper/video.hpp\"Helper class:
esp_brookesia::service::helper::Video
Service Interfaces
Functions
Encoder
Open
Description
Open the encoder with config.
Execution
Requires scheduler: Required
Parameters
ConfigType:
ObjectRequired: required
Description: Encoder config. Example: {“sinks”:[{“format”:”H264”,”width”:320,”height”:240,”fps”:30},{“format”:”MJPEG”,”width”:320,”height”:240,”fps”:15}],”enable_stream_mode”:true}
Schema JSON
Show raw JSON
{
"name": "Open",
"description": "Open the encoder with config.",
"require_scheduler": true,
"parameters": [
{
"name": "Config",
"description": "Encoder config. Example: {\"sinks\":[{\"format\":\"H264\",\"width\":320,\"height\":240,\"fps\":30},{\"format\":\"MJPEG\",\"width\":320,\"height\":240,\"fps\":15}],\"enable_stream_mode\":true}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call VideoEncoder0 Open {"Config":null}
Close
Description
Close encoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "Close",
"description": "Close encoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call VideoEncoder0 Close
Start
Description
Start encoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "Start",
"description": "Start encoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call VideoEncoder0 Start
Stop
Description
Stop encoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "Stop",
"description": "Stop encoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call VideoEncoder0 Stop
FetchFrame
Description
Fetch an encoder output frame and emit FetchSinkFrameReady. Only available in non-stream mode.
Execution
Requires scheduler: Required
Parameters
SinkIndexType:
NumberRequired: optional
Default:
0E0Description: Sink index.
Schema JSON
Show raw JSON
{
"name": "FetchFrame",
"description": "Fetch an encoder output frame and emit `FetchSinkFrameReady`. Only available in non-stream mode.",
"require_scheduler": true,
"parameters": [
{
"name": "SinkIndex",
"description": "Sink index.",
"type": "Number",
"required": false,
"default_value": 0.0
}
]
}
CLI Command
svc_call VideoEncoder0 FetchFrame {"SinkIndex":null}
Decoder
Open
Description
Open the decoder with config.
Execution
Requires scheduler: Required
Parameters
ConfigType:
ObjectRequired: required
Description: Decoder config. Example: {“width”:320,”height”:240,”source_format”:”H264”,”sink_format”:”RGB565_LE”,”enable_stream_mode”:true,”enable_hw_acceleration”:true}
Schema JSON
Show raw JSON
{
"name": "Open",
"description": "Open the decoder with config.",
"require_scheduler": true,
"parameters": [
{
"name": "Config",
"description": "Decoder config. Example: {\"width\":320,\"height\":240,\"source_format\":\"H264\",\"sink_format\":\"RGB565_LE\",\"enable_stream_mode\":true,\"enable_hw_acceleration\":true}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call VideoDecoder0 Open {"Config":null}
Close
Description
Close decoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "Close",
"description": "Close decoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call VideoDecoder0 Close
Start
Description
Start decoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "Start",
"description": "Start decoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call VideoDecoder0 Start
Stop
Description
Stop decoder.
Execution
Requires scheduler: Required
Parameters
No parameters.
Schema JSON
Show raw JSON
{
"name": "Stop",
"description": "Stop decoder.",
"require_scheduler": true,
"parameters": []
}
CLI Command
svc_call VideoDecoder0 Stop
FeedFrame
Description
Feed a decoder input frame.
Execution
Requires scheduler: Required
Parameters
FrameType:
RawBufferRequired: required
Description: Frame data.
Schema JSON
Show raw JSON
{
"name": "FeedFrame",
"description": "Feed a decoder input frame.",
"require_scheduler": true,
"parameters": [
{
"name": "Frame",
"description": "Frame data.",
"type": "RawBuffer",
"required": true,
"default_value": null
}
]
}
CLI Command
svc_call VideoDecoder0 FeedFrame {"Frame":null}
Events
Encoder
StreamSinkFrameReady
Description
Emitted when an encoder stream frame is ready. Stream mode only.
Execution
Requires scheduler: Not required
Items
SinkIndexType:
NumberDescription: Sink index.
SinkInfoType:
ObjectDescription: Sink info. Example: {“format”:”H264”,”width”:320,”height”:240,”fps”:30}
FrameType:
RawBufferDescription: Encoded frame data.
Schema JSON
Show raw JSON
{
"name": "StreamSinkFrameReady",
"description": "Emitted when an encoder stream frame is ready. Stream mode only.",
"require_scheduler": false,
"items": [
{
"name": "SinkIndex",
"description": "Sink index.",
"type": "Number"
},
{
"name": "SinkInfo",
"description": "Sink info. Example: {\"format\":\"H264\",\"width\":320,\"height\":240,\"fps\":30}",
"type": "Object"
},
{
"name": "Frame",
"description": "Encoded frame data.",
"type": "RawBuffer"
}
]
}
CLI Command
svc_subscribe VideoEncoder0 StreamSinkFrameReady
FetchSinkFrameReady
Description
Emitted when an encoder fetched frame is ready. Non-stream mode only.
Execution
Requires scheduler: Not required
Items
SinkIndexType:
NumberDescription: Sink index.
SinkInfoType:
ObjectDescription: Sink info. Example: {“format”:”MJPEG”,”width”:320,”height”:240,”fps”:15}
FrameType:
RawBufferDescription: Encoded frame data.
Schema JSON
Show raw JSON
{
"name": "FetchSinkFrameReady",
"description": "Emitted when an encoder fetched frame is ready. Non-stream mode only.",
"require_scheduler": false,
"items": [
{
"name": "SinkIndex",
"description": "Sink index.",
"type": "Number"
},
{
"name": "SinkInfo",
"description": "Sink info. Example: {\"format\":\"MJPEG\",\"width\":320,\"height\":240,\"fps\":15}",
"type": "Object"
},
{
"name": "Frame",
"description": "Encoded frame data.",
"type": "RawBuffer"
}
]
}
CLI Command
svc_subscribe VideoEncoder0 FetchSinkFrameReady
Decoder
SinkFrameReady
Description
Emitted when a decoder output frame is ready.
Execution
Requires scheduler: Not required
Items
WidthType:
NumberDescription: Decoded frame width.
HeightType:
NumberDescription: Decoded frame height.
FrameType:
RawBufferDescription: Decoded frame data.
Schema JSON
Show raw JSON
{
"name": "SinkFrameReady",
"description": "Emitted when a decoder output frame is ready.",
"require_scheduler": false,
"items": [
{
"name": "Width",
"description": "Decoded frame width.",
"type": "Number"
},
{
"name": "Height",
"description": "Decoded frame height.",
"type": "Number"
},
{
"name": "Frame",
"description": "Decoded frame data.",
"type": "RawBuffer"
}
]
}
CLI Command
svc_subscribe VideoDecoder0 SinkFrameReady