Page 1 of 1

Full-range, 10-bit RGB 444 on DeckLink output?

PostPosted: Wed Apr 24, 2019 11:07 pm
by Jason Rhodes

I have a DeckLink Duo 2 card that is attached to a custom camera/firmware device. That camera is outputting 10-bit RGB 4:4:4 1080p/23.98 imagery over 3G-SDI. My custom software is correctly capturing that imagery, using the DeckLink SDK (bmdFormat10BitRGB & bmdModeHD1080p2398).

There is no real colorspace information being sent - each 10-bit R/G/B values can range from 0 (0x000) to 1023 (0x3FF). I have verified that the captured frame data does indeed represent this range, and each and every pixel I capture matches the expected sent frame. All good.

However, if I attempt to take that same captured frame-imagery, and replay it OUT from the DeckLink Duo (basically slapping it directly into the Frame buffer and setting the output as above), and then re-capture it (essentially, emulating the camera output), I find that the received values do [b]NOT/b] always bit-for-bit match the sent values.

My assumption is that the DeckLink Output is somehow modifying the pixel values, perhaps to fit them into some colorspace range? If so, is there a way to avoid/disable that so that I can output full-range, 10-bit RGB data?

Code: Select all
Hardware:  DeckLink Duo 2
Software:  DeckLink Driver/SDK: 10.11.4

Re: Full-range, 10-bit RGB 444 on DeckLink output?

PostPosted: Fri Apr 26, 2019 12:55 pm
by Jason Rhodes
Well, a bit more digging points me to the following comments in some sample code:
Code: Select all
// Big-endian RGB 10-bit per component with SMPTE
// video levels (64-960).  Packed as 2:10:10:10
bmdFormat10BitRGB = 'r210',

// Big-endian RGB 12-bit per component with
// full range (0-4095). Packed as 12-bit per component
bmdFormat12BitRGB  = 'R12B',

So it would seem that the 10-bit RGB is being limited to SMPTE Video Levels.

Is this a hardware/firmware/device limitation, or could this be disabled via a configuration flag to get to full-range 10-bit?

Re: Full-range, 10-bit RGB 444 on DeckLink output?

PostPosted: Wed May 15, 2019 6:49 pm
by Andrew Kolakowski
Hmmm, r210 should be full range as it's RGB data.
Where is this sample code from?
According to: ... s.php#r210
it meant to be video range. Very strange. Always thought it's full range format (just plain RGB data, but packed).

Re: Full-range, 10-bit RGB 444 on DeckLink output?

PostPosted: Fri Apr 16, 2021 1:53 pm
by aknowles
This is an old post, but for the record:

RGB 4:4:4 (and RGBA 4:4:4:4) 10-bit can't use the full 10-bit range when carried on SDI interfaces. If they do, there is a risk of certain patterns of pixels causing the receiver to lose synchronization.

This is because RGB 4:4:4 10-bit uses the same bit layout in transmission as RGBA 4:4:4:4 10-bit, and so uses all of the available 40 bits per pixel. This means it would be possible to send illegal synchronization bit sequences if the full 0-1023 range of levels is allowed in the pixel values.

RGB 4:4:4 12-bit does not have this problem, as it only uses 36 of the available 40 bits per pixel, and they are arranged such that no 36-bit value can represent a synchronization bit sequence. So the full 0-4095 levels can be used.

This is defined by the relevant SMPTE SDI standards.

Re: Full-range, 10-bit RGB 444 on DeckLink output?

PostPosted: Fri Apr 16, 2021 2:30 pm
by Andrew Kolakowski
Yes, 10bit SDI is never 0-1023, but 4-1019 with those few bottom/top bits reserved for syncing info, but pro gear is aware of this and handles it properly. This been even carried to HDMI spec (even if I think HDMI could use all bits for actual data). Good monitors like Eizo CG have specially setting to say if signal is real full or SDI full.

If 12bit if free of this "problem" then that's good, but not all cards have 12bit mode.
ProRes encoder in Resolve doesn't use those bits either ( at least not in 4:2:2 mode which is 10bit).

This is still I first time I've heard that r210 is RGB format but with limited levels though.