DeckLink Duo 2, 4 live inputs, 4 outputs

Hi,

I have two cards of this type. I have a problem, with displaying the input signal on the output, on one card I give four input signals, while on the other I run the command PLAY 1-1 DECKLINK DEVICE 1,PLAY 2-1 DECKLINK DEVICE 1, PLAY 3-1 DECKLINK DEVICE 1, PLAY 4-1 DECKLINK DEVICE 1, but when firing Caspar it throws the error “Could enable video input”, anyone know where the problem could be, or how to configure decklinks cards with 4 inputs and 4 outputs.

This is my config File:

    <channel>
        <video-mode>1080i5000</video-mode>
        <consumers>
			<decklink>
				<device>1</device>
				<embedded-audio>true</embedded-audio>
				<latency>low</latency>
				<keyer>external</keyer>
				<key-only>false</key-only>
				<buffer-depth>3</buffer-depth>
			</decklink>
        </consumers>
    </channel>
	<channel>
        <video-mode>1080i5000</video-mode>
        <consumers>
			<decklink>
				<device>2</device>
				<embedded-audio>true</embedded-audio>
				<latency>low</latency>
				<keyer>external</keyer>
				<key-only>false</key-only>
				<buffer-depth>3</buffer-depth>
			</decklink>
        </consumers>
    </channel>
	<channel>
        <video-mode>1080i5000</video-mode>
        <consumers>
			<decklink>
				<device>3</device>
				<embedded-audio>true</embedded-audio>
				<latency>low</latency>
				<keyer>external</keyer>
				<key-only>false</key-only>
				<buffer-depth>3</buffer-depth>
			</decklink>
        </consumers>
    </channel>
	<channel>
        <video-mode>1080i5000</video-mode>
        <consumers>
			<decklink>
				<device>4</device>
				<embedded-audio>true</embedded-audio>
				<latency>low</latency>
				<keyer>external</keyer>
				<key-only>false</key-only>
				<buffer-depth>3</buffer-depth>
			</decklink>
        </consumers>
    </channel>

and decklink configuration:

Thanks for help, because i’m stuck…

You have to choose 1-4 or 5-8 for inputs and leave the other group to the outputs
You are currently playing in all channels the first input, which is configured as an output in the config.
So in the config set:

  • Channel 1: device 5
  • Channel 2: device 6
  • Channel 3: device 7
  • Channel 4: device 8

And then send the commands:

PLAY 1-1 DECKLINK DEVICE 1
PLAY 2-1 DECKLINK DEVICE 2
PLAY 3-1 DECKLINK DEVICE 3
PLAY 4-1 DECKLINK DEVICE 4

(Or the device you want for each one, I’m assuming you want to make some kind of matrix with overlays or something)
Depending on the version of the server you are using you might need to set FORMAT 1080p5000 (or the input format) for it to work properly or set the output format exactly to the input format.

PS:
If you want to just overlay graphics without any manipulation to the input image, you should enable internal keying instead of playing the input on a channel. It will give you a lot better performance. You just group the inputs differently in the cards.

Duo2 has just 4 BNC:s that can be EITHER Input OR Output, you cant get 4 Inputs AND 4 Outputs from a Duo2 to that you need a Quad2.
and just a reminder the BN-order on a Duo2 that have separate connectors is (from PCIe-lane) ref, 1, 3, 2 & 4

I think he wants to pass each input to the respective output in the adjacent card

@rrebuffo Many thanks, for the explanation, it has clarified a lot for me.

@markusnygard My solution, is to give four inputs to one card and get four outputs on the other card to manipulate the mixer and display graphics.

Exactly… I will try it tomorrow :smiley:

Thanks for help…

Sorry to bother you, but the solution of 4 in on 1 card and 4 out on the other card, does not work for me because the four signals are heavily chopped and the server shows unsynchronized all the time (I’m only want play clean signal and using mixer volume per channel). But now I am configure decklink to 2 in-out channels on one card, when I call play command, server return play OK, but output is black, templates work.

Question: is it possible to get 2in-2out (independent, without fill and key) on one card with two channels, because so far I did it on two independent cards but with one channel (without fill and key)?

Maybe problem is in key configuration ??

@didikunz Sorry to call you , but I read that you working with configuring Duo2 cards…

My config file:

 <channels>
        <channel>
            <video-mode>1080i5000</video-mode>
            <consumers>
				<decklink>
					<device>1</device>
					<embedded-audio>true</embedded-audio>
					<keyer>external</keyer>
					<key-only>false</key-only>
					<latency>low</latency>
					<buffer-depth>3</buffer-depth>
				</decklink>
            </consumers>
        </channel>
		<channel>
            <video-mode>1080i5000</video-mode>
            <consumers>
				<decklink>
					<device>2</device>
					<embedded-audio>true</embedded-audio>
					<latency>low</latency>
					<keyer>external</keyer>
					<key-only>false</key-only>
					<buffer-depth>3</buffer-depth>
				</decklink>
            </consumers>
        </channel>
		<channel>
            <video-mode>1080i5000</video-mode>
            <consumers>
				<decklink>
					<device>5</device>
					<embedded-audio>true</embedded-audio>
					<latency>low</latency>
					<keyer>external</keyer>
					<key-only>false</key-only>
					<buffer-depth>3</buffer-depth>
				</decklink>
            </consumers>
        </channel>
		<channel>
            <video-mode>1080i5000</video-mode>
            <consumers>
				<decklink>
					<device>6</device>
					<embedded-audio>true</embedded-audio>
					<latency>low</latency>
					<keyer>external</keyer>
					<key-only>false</key-only>
					<buffer-depth>3</buffer-depth>
				</decklink>
            </consumers>
        </channel>

Server logs:

Received message from 127.0.0.1: PLAY 1-1 DECKLINK DEVICE 1 FORMAT 1080i5000\r\n
[2021-04-13 14:29:50.392] [debug]   Executing command: PLAY
[2021-04-13 14:29:50.428] [trace]   [ffmpeg] [Parsed_yadif_1 @ 0000023650308D80] Setting 'mode' to value 'send_field_nospatial'
[2021-04-13 14:29:50.428] [trace]   
[2021-04-13 14:29:50.428] [trace]   [ffmpeg] [Parsed_yadif_1 @ 0000023650308D80] Setting 'parity' to value 'tff'
[2021-04-13 14:29:50.428] [trace]   
[2021-04-13 14:29:50.428] [trace]   [ffmpeg] [Parsed_yadif_1 @ 0000023650308D80] Setting 'deint' to value 'all'
[2021-04-13 14:29:50.428] [trace]   
[2021-04-13 14:29:50.430] [trace]   [ffmpeg] [Parsed_yadif_1 @ 0000023650307E80] Setting 'mode' to value 'send_field_nospatial'
[2021-04-13 14:29:50.430] [trace]   
[2021-04-13 14:29:50.430] [trace]   [ffmpeg] [Parsed_yadif_1 @ 0000023650307E80] Setting 'parity' to value 'tff'
[2021-04-13 14:29:50.430] [trace]   
[2021-04-13 14:29:50.430] [trace]   [ffmpeg] [Parsed_yadif_1 @ 0000023650307E80] Setting 'deint' to value 'all'
[2021-04-13 14:29:50.430] [trace]   
[2021-04-13 14:29:50.430] [trace]   [ffmpeg] [in_0 @ 0000023650307580] Setting 'video_size' to value '1920x1080'
[2021-04-13 14:29:50.430] [trace]   
[2021-04-13 14:29:50.430] [trace]   [ffmpeg] [in_0 @ 0000023650307580] Setting 'pix_fmt' to value '15'
[2021-04-13 14:29:50.430] [trace]   
[2021-04-13 14:29:50.431] [trace]   [ffmpeg] [in_0 @ 0000023650307580] Setting 'time_base' to value '1/1000000'
[2021-04-13 14:29:50.431] [trace]   
[2021-04-13 14:29:50.431] [trace]   [ffmpeg] [in_0 @ 0000023650307580] Setting 'sar' to value '1/1'
[2021-04-13 14:29:50.431] [trace]   
[2021-04-13 14:29:50.431] [trace]   [ffmpeg] [in_0 @ 0000023650307580] Setting 'frame_rate' to value '50/1'
[2021-04-13 14:29:50.431] [trace]   
[2021-04-13 14:29:50.431] [trace]   [ffmpeg] [in_0 @ 0000023650307580] w:1920 h:1080 pixfmt:uyvy422 tb:1/1000000 fr:50/1 sar:1/1 sws_param:
[2021-04-13 14:29:50.431] [trace]   
[2021-04-13 14:29:50.431] [trace]   [ffmpeg] [auto_scaler_0 @ 0000023650308D80] w:iw h:ih flags:'bilinear' interl:0
[2021-04-13 14:29:50.431] [trace]   
[2021-04-13 14:29:50.431] [trace]   [ffmpeg] [Parsed_yadif_1 @ 0000023650307E80] auto-inserting filter 'auto_scaler_0' between the filter 'Parsed_null_0' and the filter 'Parsed_yadif_1'
[2021-04-13 14:29:50.431] [trace]   
[2021-04-13 14:29:50.431] [trace]   [ffmpeg] [auto_scaler_1 @ 0000023650307D80] w:iw h:ih flags:'bilinear' interl:0
[2021-04-13 14:29:50.431] [trace]   
[2021-04-13 14:29:50.432] [trace]   [ffmpeg] [out @ 0000023650307F80] auto-inserting filter 'auto_scaler_1' between the filter 'Parsed_yadif_1' and the filter 'out'
[2021-04-13 14:29:50.432] [trace]   
[2021-04-13 14:29:50.432] [trace]   [ffmpeg] [AVFilterGraph @ 00000236502BB600] query_formats: 4 queried, 1 merged, 2 already done, 0 delayed
[2021-04-13 14:29:50.432] [trace]   
[2021-04-13 14:29:50.432] [trace]   [ffmpeg] [auto_scaler_0 @ 0000023650308D80] picking yuv422p out of 37 ref:uyvy422 alpha:0
[2021-04-13 14:29:50.432] [trace]   
[2021-04-13 14:29:50.432] [trace]   [ffmpeg] [auto_scaler_0 @ 0000023650308D80] w:1920 h:1080 fmt:uyvy422 sar:1/1 -> w:1920 h:1080 fmt:yuv422p sar:1/1 flags:0x2
[2021-04-13 14:29:50.432] [trace]   
[2021-04-13 14:29:50.433] [trace]   [ffmpeg] [auto_scaler_1 @ 0000023650307D80] w:1920 h:1080 fmt:yuv422p sar:1/1 -> w:1920 h:1080 fmt:uyvy422 sar:1/1 flags:0x2
[2021-04-13 14:29:50.433] [trace]   
[2021-04-13 14:29:50.433] [debug]                                                 +---------------+
[2021-04-13 14:29:50.433] [debug]   in_0:default--[1920x1080 1:1 uyvy422]--default| Parsed_null_0 |default--[1920x1080 1:1 uyvy422]--auto_scaler_0:default
[2021-04-13 14:29:50.433] [debug]                                                 |    (null)     |
[2021-04-13 14:29:50.433] [debug]                                                 +---------------+
[2021-04-13 14:29:50.433] [debug]   
[2021-04-13 14:29:50.433] [debug]                                                          +----------------+
[2021-04-13 14:29:50.433] [debug]   auto_scaler_0:default--[1920x1080 1:1 yuv422p]--default| Parsed_yadif_1 |default--[1920x1080 1:1 yuv422p]--auto_scaler_1:default
[2021-04-13 14:29:50.433] [debug]                                                          |    (yadif)     |
[2021-04-13 14:29:50.433] [debug]                                                          +----------------+
[2021-04-13 14:29:50.433] [debug]   
[2021-04-13 14:29:50.433] [debug]   +----------+
[2021-04-13 14:29:50.433] [debug]   |   in_0   |default--[1920x1080 1:1 uyvy422]--Parsed_null_0:default
[2021-04-13 14:29:50.433] [debug]   | (buffer) |
[2021-04-13 14:29:50.433] [debug]   +----------+
[2021-04-13 14:29:50.433] [debug]   
[2021-04-13 14:29:50.433] [debug]                                                          +--------------+
[2021-04-13 14:29:50.433] [debug]   auto_scaler_1:default--[1920x1080 1:1 uyvy422]--default|     out      |
[2021-04-13 14:29:50.433] [debug]                                                          | (buffersink) |
[2021-04-13 14:29:50.433] [debug]                                                          +--------------+
[2021-04-13 14:29:50.433] [debug]   
[2021-04-13 14:29:50.433] [debug]                                                          +---------------+
[2021-04-13 14:29:50.433] [debug]   Parsed_null_0:default--[1920x1080 1:1 uyvy422]--default| auto_scaler_0 |default--[1920x1080 1:1 yuv422p]--Parsed_yadif_1:default
[2021-04-13 14:29:50.433] [debug]                                                          |    (scale)    |
[2021-04-13 14:29:50.433] [debug]                                                          +---------------+
[2021-04-13 14:29:50.433] [debug]   
[2021-04-13 14:29:50.433] [debug]                                                           +---------------+
[2021-04-13 14:29:50.433] [debug]   Parsed_yadif_1:default--[1920x1080 1:1 yuv422p]--default| auto_scaler_1 |default--[1920x1080 1:1 uyvy422]--out:default
[2021-04-13 14:29:50.433] [debug]                                                           |    (scale)    |
[2021-04-13 14:29:50.433] [debug]                                                           +---------------+
[2021-04-13 14:29:50.433] [debug]   
[2021-04-13 14:29:50.433] [debug]   
[2021-04-13 14:29:50.439] [trace]   [ffmpeg] [Parsed_aresample_1 @ 0000023650308F80] Setting 'sample_rate' to value '48000'
[2021-04-13 14:29:50.439] [trace]   
[2021-04-13 14:29:50.439] [trace]   [ffmpeg] [Parsed_aresample_1 @ 0000023650308F80] Setting 'async' to value '2000'
[2021-04-13 14:29:50.439] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [Parsed_aresample_1 @ 0000023650307680] Setting 'sample_rate' to value '48000'
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [Parsed_aresample_1 @ 0000023650307680] Setting 'async' to value '2000'
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [in_0 @ 0000023650307880] Setting 'time_base' to value '1/48000'
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [in_0 @ 0000023650307880] Setting 'sample_rate' to value '48000'
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [in_0 @ 0000023650307880] Setting 'sample_fmt' to value '2'
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [in_0 @ 0000023650307880] Setting 'channel_layout' to value '0x63f'
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [in_0 @ 0000023650307880] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x63f
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.441] [trace]   [ffmpeg] [AVFilterGraph @ 00000236502BB540] query_formats: 4 queried, 9 merged, 0 already done, 0 delayed
[2021-04-13 14:29:50.441] [trace]   
[2021-04-13 14:29:50.442] [trace]   [ffmpeg] [Parsed_aresample_1 @ 0000023650307680] [SWR @ 00000236636C00C0] Using s32p internally between filters
[2021-04-13 14:29:50.442] [trace]   
[2021-04-13 14:29:50.442] [trace]   [ffmpeg] [Parsed_aresample_1 @ 0000023650307680] ch:8 chl:7.1 fmt:s32 r:48000Hz -> ch:8 chl:7.1 fmt:s32 r:48000Hz
[2021-04-13 14:29:50.442] [trace]   
[2021-04-13 14:29:50.442] [debug]                                           +----------------+
[2021-04-13 14:29:50.442] [debug]   in_0:default--[48000Hz s32:7.1]--default| Parsed_anull_0 |default--[48000Hz s32:7.1]--Parsed_aresample_1:default
[2021-04-13 14:29:50.442] [debug]                                           |    (anull)     |
[2021-04-13 14:29:50.442] [debug]                                           +----------------+
[2021-04-13 14:29:50.442] [debug]   
[2021-04-13 14:29:50.442] [debug]                                                     +--------------------+
[2021-04-13 14:29:50.442] [debug]   Parsed_anull_0:default--[48000Hz s32:7.1]--default| Parsed_aresample_1 |default--[48000Hz s32:7.1]--out:default
[2021-04-13 14:29:50.442] [debug]                                                     |    (aresample)     |
[2021-04-13 14:29:50.442] [debug]                                                     +--------------------+
[2021-04-13 14:29:50.442] [debug]   
[2021-04-13 14:29:50.442] [debug]   +-----------+
[2021-04-13 14:29:50.442] [debug]   |   in_0    |default--[48000Hz s32:7.1]--Parsed_anull_0:default
[2021-04-13 14:29:50.442] [debug]   | (abuffer) |
[2021-04-13 14:29:50.442] [debug]   +-----------+
[2021-04-13 14:29:50.442] [debug]   
[2021-04-13 14:29:50.442] [debug]                                                         +---------------+
[2021-04-13 14:29:50.442] [debug]   Parsed_aresample_1:default--[48000Hz s32:7.1]--default|      out      |
[2021-04-13 14:29:50.442] [debug]                                                         | (abuffersink) |
[2021-04-13 14:29:50.442] [debug]                                                         +---------------+
[2021-04-13 14:29:50.442] [debug]   
[2021-04-13 14:29:50.442] [debug]   
[2021-04-13 14:29:50.447] [info]    DeckLink Duo 2 [1|1080i5000] Initialized
[2021-04-13 14:29:50.451] [debug]   Executed command (0.059s): PLAY
[2021-04-13 14:29:50.451] [info]    Sent message to 127.0.0.1:202 PLAY OK\r\n
[2021-04-13 14:29:50.451] [trace]   Ready for a new command
[2021-04-13 14:29:50.525] [trace]   [ffmpeg] [auto_scaler_0 @ 0000023650308D80] w:1920 h:1080 fmt:uyvy422 sar:0/1 -> w:1920 h:1080 fmt:yuv422p sar:0/1 flags:0x2
[2021-04-13 14:29:50.525] [trace]   
[2021-04-13 14:29:50.569] [trace]   [ffmpeg] [auto_scaler_1 @ 0000023650307D80] w:1920 h:1080 fmt:yuv422p sar:0/1 -> w:1920 h:1080 fmt:uyvy422 sar:0/1 flags:0x2
[2021-04-13 14:29:50.569] [trace]

First go to the windows control panel and start the “Blackmagic Desktop Video Setup” applet. There set all channels to be connected to exact 1 BNC connector. Then change all <keyer>external</keyer> to <keyer>default</keyer> and try again.

By the way: What is the reason to do this? Because to add graphics you do not need to play the inputs. Do you need some MIXER effects applied to these inputs?

And by the way: use the </> button to format log and configs as you can see on your post, that is edited by me.

Thanks for reply, yes I’m using mixer for 4 channels, i solved problem, but using CPU in my DELL server is 100% (4 channels on caspar layer). Soution is using max 2 channels (one card duo2) per machine.

But I’m curious about keyer, what is difference, because now is set “external” and working, but defeault is also “external” ??

Regards :slightly_smiling_face:

The difference for the keyer setting is, that “default” (at least how I have understood it) disables the hardware keyer and let the channel be a simple output without alpha channel processing. While “internal” let you key over incoming video, without going through the CPU / GPU etc. and “external” gives you a separate fill & key output on two linked SDI outs.

1 Like

Thanks for explanation. My problem is sloved, for 4in FULL HD input, cpu must be strong :grinning: