History

avdevice/decklink: add support for setting duplex mode

This patch also makes BlackMagic drivers v10.6.1 a hard requirement.

Marton Balint committed 10 years ago

Commit 8f9fa491 parent e22760a7 files · +48 −1Browse files

Showing the changes to libavdevice/decklink_common.cpp (1 of 7 files). Show all

Unified · Split

libavdevice/decklink_common.cpp+33−0
@@ -111,6 +111,23 @@ int ff_decklink_set_format(AVFormatContext *avctx, · 110 unmodified lines
111111 int i = 1;
112112 HRESULT res;
113113
114+ if (ctx->duplex_mode) {
115+ bool duplex_supported = false;
116+
117+ if (ctx->attr->GetFlag(BMDDeckLinkSupportsDuplexModeConfiguration, &duplex_supported) != S_OK)
118+ duplex_supported = false;
119+
120+ if (duplex_supported) {
121+ res = ctx->cfg->SetInt(bmdDeckLinkConfigDuplexMode, ctx->duplex_mode == 2 ? bmdDuplexModeFull : bmdDuplexModeHalf);
122+ if (res != S_OK)
123+ av_log(avctx, AV_LOG_WARNING, "Setting duplex mode failed.\n");
124+ else
125+ av_log(avctx, AV_LOG_VERBOSE, "Succesfully set duplex mode to %s duplex.\n", ctx->duplex_mode == 2 ? "full" : "half");
126+ } else {
127+ av_log(avctx, AV_LOG_WARNING, "Unable to set duplex mode, because it is not supported.\n");
128+ }
129+ }
130+
114131 if (direction == DIRECTION_IN) {
115132 res = ctx->dli->GetDisplayModeIterator (&itermode);
116133 } else {
@@ -249,6 +266,10 @@ void ff_decklink_cleanup(AVFormatContext *avctx) · 132 unmodified lines
249266 ctx->dli->Release();
250267 if (ctx->dlo)
251268 ctx->dlo->Release();
269+ if (ctx->attr)
270+ ctx->attr->Release();
271+ if (ctx->cfg)
272+ ctx->cfg->Release();
252273 if (ctx->dl)
253274 ctx->dl->Release();
254275 }
@@ -279,5 +300,17 @@ int ff_decklink_init_device(AVFormatContext *avctx, const char* name) · 24 unmodified lines
279300 if (!ctx->dl)
280301 return AVERROR(ENXIO);
281302
303+ if (ctx->dl->QueryInterface(IID_IDeckLinkConfiguration, (void **)&ctx->cfg) != S_OK) {
304+ av_log(avctx, AV_LOG_ERROR, "Could not get configuration interface for '%s'\n", name);
305+ ff_decklink_cleanup(avctx);
306+ return AVERROR_EXTERNAL;
307+ }
308+
309+ if (ctx->dl->QueryInterface(IID_IDeckLinkAttributes, (void **)&ctx->attr) != S_OK) {
310+ av_log(avctx, AV_LOG_ERROR, "Could not get attributes interface for '%s'\n", name);
311+ ff_decklink_cleanup(avctx);
312+ return AVERROR_EXTERNAL;
313+ }
314+
282315 return 0;
283316 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t