feat: FPGA VANC timecode inserter for Ninja V recording trigger#607
Open
alfskaar wants to merge 2 commits intohd-zero:mainfrom
Open
feat: FPGA VANC timecode inserter for Ninja V recording trigger#607alfskaar wants to merge 2 commits intohd-zero:mainfrom
alfskaar wants to merge 2 commits intohd-zero:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a reference FPGA implementation and accompanying documentation for injecting SMPTE 12M-2 timecode as SMPTE ST 291M VANC packets into the HDMI video vertical blanking interval, enabling Atomos Ninja V “HDMI Device” record trigger behavior.
Changes:
- Introduces a Verilog VANC timecode inserter module for an 8-bit DE-based video interface (with packet builder + insertion FSM).
- Documents the VANC packet structure, integration placement, and recommended blanking line / horizontal offset guidance.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| fpga_vanc_timecode/vanc_timecode_inserter.v | Implements line/pixel counting, timecode latching, ST 291M packet construction, and blanking-safe insertion mux. |
| fpga_vanc_timecode/README.md | Explains Ninja V trigger mechanism and provides packet format + integration notes for the sample module. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
edf9f98 to
d92df36
Compare
SMPTE ST 291M / 12M-2 ancillary data packet inserter for DE-based parallel video interfaces. Intended as a starting point for Atomos Ninja V record-trigger via VANC timecode.
d92df36 to
f493500
Compare
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Sample Verilog module and documentation for injecting SMPTE 12M-2 timecode as VANC (Vertical Ancillary Data) packets into the HDMI video blanking interval.
Background
The Atomos Ninja V "HDMI Device" trigger modes (Canon EOS R, Sony ILCE-7SM3, etc.) use VANC timecode — not HDMI InfoFrames — to detect recording state.
HDfury captures of a real Canon EOS R confirmed all InfoFrames are byte-for-byte identical between REC ON and REC OFF. The trigger mechanism is SMPTE 12M-2 timecode embedded at the pixel level during vertical blanking.
The IT66121 HDMI transmitter cannot inject VANC — it only handles InfoFrames and audio. VANC must be injected by the FPGA before the video reaches the IT66121.
Files
fpga_vanc_timecode/vanc_timecode_inserter.vfpga_vanc_timecode/README.mdIntegration
CPU (ARM / Allwinner V536) controls timecode via FPGA registers:
TC_HOURS,TC_MINUTES,TC_SECONDS,TC_FRAMES,TC_ENABLEStatus
Sample/reference code for FPGA integration. Software-side Canon EOS R VSIF trigger code exists separately in the firmware (not included in this PR).