What mjpegZero does
mjpegZero turns a live video stream into standards-compliant baseline JPEG (ITU-T T.81, JFIF container) inside the FPGA fabric. Each frame is compressed independently, so the output plays anywhere — a browser, VLC, OpenCV, a UVC host — with no custom decoder and no inter-frame state to corrupt.
- Interfaces: AXI4-Stream video in (16-bit YUYV, or 24-bit RGB through the optional BT.601 converter), AXI4-Stream JPEG bytes out, AXI4-Lite control.
- Quality 1–100: runtime-programmable in full mode, or fixed at synthesis in lite mode to save logic.
- Two languages: behavioral Verilog 2001 and a native VHDL-1993 port — not a translation wrapper.
- Small: a full 1080p configuration is about 2,600 LUTs, 16 BRAMs, and 23 DSPs at 150 MHz on a Xilinx Artix-7.
- No external memory: line-buffer architecture — no frame buffer, no DDR, encode latency of a handful of video lines.
License: free non-commercial, licensed commercial
The public core is source-available under Apache 2.0 with the Commons Clause: research, education, hobby projects, and open-source work are free. Commercial deployment requires a license from bard0 design — for most products that is mjpegZero PRO, which also buys the performance tier and system integration below; custom terms are available where PRO is not the right shape.
mjpegZero PRO
mjpegZero PRO is the commercial tier of the same encoder: identical standards-compliant JPEG output, scaled to the resolutions and control features a shipping camera product needs.
- Up to 4Kp60 4:2:2. Full-rate encoding on low-cost parts — 4Kp60 (498 Mpix/s) fits an Artix-7 200T.
- One parameter from 1080p to 4K. A single setting (1, 2, or 4 pixels per clock) scales the same pipeline — no architecture change, no re-integration when a product line moves up in resolution.
- Bitrate control in hardware. Set a target frame size and the core converges automatically within a configurable quality floor and ceiling — demonstrated live regulating a stream to its byte target. Closed-loop frame-rate control too.
- Retune at runtime, not at rebuild. Quality, restart interval, and rate-control bounds are all runtime-configurable over AXI4-Lite.
- Still plain baseline JPEG. The parallel encoder merges to a standard bitstream — any decoder, any player, no custom receiver software.
- Still small, still no DDR. A full encoder with test-pattern source, rate control, and an Ethernet streaming subsystem fits in ~13k LUTs on an Artix-7 100T; the 4K core preset is ~11.7k LUTs on an Artix-7 200T. Latency stays at a few video lines.
- Complete streaming reference system. RFC 2435 RTP/JPEG packetizer, Ethernet MAC integration, UDP control plane, and host-side viewer and measurement tools — the same system behind the figures above. Bring your sensor; the rest of the path is already in place.
- A maintained baseline. PRO tracks every correctness fix in the public core (and has contributed fixes back), so the commercial tier never drifts from the decodable-everywhere baseline.
| mjpegZero (open core) | mjpegZero PRO | |
|---|---|---|
| Resolution & rate | 1080p30-class on low-cost parts | Up to 4Kp60 |
| Rate control | Quality register | Closed-loop bitrate and frame-rate control in hardware |
| Runtime configuration | Quality (full mode) | Quality, restart interval, rate bounds — no rebuild |
| System integration | Encoder core + demo designs | RTP/JPEG + Ethernet streaming reference system |
| License | Free non-commercial (Apache 2.0 + Commons Clause) | Commercial license from bard0 design |
Evaluating an encoder for a product? Tell us the sensor, resolution, and link budget and we will tell you whether PRO fits — and show it running.
The case study
How does it hold up in a real design? The mjpegZero case study (free PDF) walks through the measured resource numbers, the plug-and-play UVC camera reference design, and how the open core scales to the mjpegZero PRO tier for shipping products.
Frequently asked questions
What license does mjpegZero use?
Apache 2.0 with the Commons Clause. Research, education, hobby, and open-source use are free. Commercial deployment requires written permission from bard0 design — typically an mjpegZero PRO license or a custom agreement.
What does PRO add over the open-source core?
A higher performance tier (up to 4Kp60), closed-loop bitrate and frame-rate control in hardware, runtime configuration over AXI4-Lite, and the complete RTP/JPEG Ethernet streaming reference system. The JPEG output itself is identical — and PRO tracks every correctness fix in the public core.
Does it need external memory?
No. Line-buffer architecture — no frame buffer, no DDR controller, and encode latency of a handful of video lines rather than frames.
Why MJPEG instead of H.264?
Frame-independent compression gives line-level latency, loss tolerance (a dropped packet damages one frame, not a sequence), a tiny logic footprint, and output any host decodes natively. H.264/H.265 deliver better bandwidth at a given quality, but cost far more logic, external memory, and receiver complexity. For machine vision, inspection, and instrumentation links, the MJPEG trade is often the right one — the case study works through this in detail.
The open core and documentation are on GitHub; the case study has the measured numbers. For commercial licensing or mjpegZero PRO, get in touch.