Fix build with decklink sdk 11
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
diff -Naurp a/libavdevice/decklink_common.cpp b/libavdevice/decklink_common.cpp
|
||||
--- a/libavdevice/decklink_common.cpp 2019-04-01 11:16:31.000000000 +0000
|
||||
+++ b/libavdevice/decklink_common.cpp 2019-04-19 19:12:28.000000000 +0000
|
||||
@@ -81,9 +81,9 @@ static int decklink_get_attr_string(IDec
|
||||
{
|
||||
DECKLINK_STR tmp;
|
||||
HRESULT hr;
|
||||
- IDeckLinkAttributes *attr;
|
||||
+ IDeckLinkProfileAttributes *attr;
|
||||
*s = NULL;
|
||||
- if (dl->QueryInterface(IID_IDeckLinkAttributes, (void **)&attr) != S_OK)
|
||||
+ if (dl->QueryInterface(IID_IDeckLinkProfileAttributes, (void **)&attr) != S_OK)
|
||||
return AVERROR_EXTERNAL;
|
||||
hr = attr->GetString(cfg_id, &tmp);
|
||||
attr->Release();
|
||||
@@ -149,11 +149,28 @@ int ff_decklink_set_configs(AVFormatCont
|
||||
if (ctx->duplex_mode) {
|
||||
DECKLINK_BOOL duplex_supported = false;
|
||||
|
||||
+#if BLACKMAGIC_DECKLINK_API_VERSION >= 0x0b000000
|
||||
+ IDeckLinkProfileManager *manager = NULL;
|
||||
+ if (ctx->dl->QueryInterface(IID_IDeckLinkProfileManager, (void **)&manager) == S_OK)
|
||||
+ duplex_supported = true;
|
||||
+#else
|
||||
if (ctx->attr->GetFlag(BMDDeckLinkSupportsDuplexModeConfiguration, &duplex_supported) != S_OK)
|
||||
duplex_supported = false;
|
||||
+#endif
|
||||
|
||||
if (duplex_supported) {
|
||||
+#if BLACKMAGIC_DECKLINK_API_VERSION >= 0x0b000000
|
||||
+ IDeckLinkProfile *profile = NULL;
|
||||
+ BMDProfileID bmd_profile_id = ctx->duplex_mode == 2 ? bmdProfileOneSubDeviceFullDuplex : bmdProfileTwoSubDevicesHalfDuplex;
|
||||
+ res = manager->GetProfile(bmd_profile_id, &profile);
|
||||
+ if (res == S_OK) {
|
||||
+ res = profile->SetActive();
|
||||
+ profile->Release();
|
||||
+ }
|
||||
+ manager->Release();
|
||||
+#else
|
||||
res = ctx->cfg->SetInt(bmdDeckLinkConfigDuplexMode, ctx->duplex_mode == 2 ? bmdDuplexModeFull : bmdDuplexModeHalf);
|
||||
+#endif
|
||||
if (res != S_OK)
|
||||
av_log(avctx, AV_LOG_WARNING, "Setting duplex mode failed.\n");
|
||||
else
|
||||
@@ -182,7 +199,11 @@ int ff_decklink_set_format(AVFormatConte
|
||||
{
|
||||
struct decklink_cctx *cctx = (struct decklink_cctx *)avctx->priv_data;
|
||||
struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
|
||||
+#if BLACKMAGIC_DECKLINK_API_VERSION >= 0x0b000000
|
||||
+ DECKLINK_BOOL support;
|
||||
+#else
|
||||
BMDDisplayModeSupport support;
|
||||
+#endif
|
||||
IDeckLinkDisplayModeIterator *itermode;
|
||||
IDeckLinkDisplayMode *mode;
|
||||
int i = 1;
|
||||
@@ -243,6 +264,31 @@ int ff_decklink_set_format(AVFormatConte
|
||||
|
||||
if (ctx->bmd_mode == bmdModeUnknown)
|
||||
return -1;
|
||||
+
|
||||
+#if BLACKMAGIC_DECKLINK_API_VERSION >= 0x0b000000
|
||||
+ if (direction == DIRECTION_IN) {
|
||||
+ if (ctx->dli->DoesSupportVideoMode(ctx->video_input, ctx->bmd_mode, (BMDPixelFormat) cctx->raw_format,
|
||||
+ bmdVideoInputFlagDefault,
|
||||
+ &support) != S_OK)
|
||||
+ return -1;
|
||||
+ } else {
|
||||
+ BMDDisplayMode actualMode = ctx->bmd_mode;
|
||||
+ if (!ctx->supports_vanc || ctx->dlo->DoesSupportVideoMode(bmdVideoConnectionUnspecified, ctx->bmd_mode, ctx->raw_format,
|
||||
+ bmdVideoOutputVANC,
|
||||
+ &actualMode, &support) != S_OK || !support || ctx->bmd_mode != actualMode) {
|
||||
+ /* Try without VANC enabled */
|
||||
+ if (ctx->dlo->DoesSupportVideoMode(bmdVideoConnectionUnspecified, ctx->bmd_mode, ctx->raw_format,
|
||||
+ bmdVideoOutputFlagDefault,
|
||||
+ &actualMode, &support) != S_OK || !support || ctx->bmd_mode != actualMode) {
|
||||
+ return -1;
|
||||
+ }
|
||||
+ ctx->supports_vanc = 0;
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+ if (support)
|
||||
+ return 0;
|
||||
+#else
|
||||
if (direction == DIRECTION_IN) {
|
||||
if (ctx->dli->DoesSupportVideoMode(ctx->bmd_mode, (BMDPixelFormat) cctx->raw_format,
|
||||
bmdVideoOutputFlagDefault,
|
||||
@@ -264,6 +310,7 @@ int ff_decklink_set_format(AVFormatConte
|
||||
}
|
||||
if (support == bmdDisplayModeSupported)
|
||||
return 0;
|
||||
+#endif
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -468,7 +515,7 @@ int ff_decklink_init_device(AVFormatCont
|
||||
return AVERROR_EXTERNAL;
|
||||
}
|
||||
|
||||
- if (ctx->dl->QueryInterface(IID_IDeckLinkAttributes, (void **)&ctx->attr) != S_OK) {
|
||||
+ if (ctx->dl->QueryInterface(IID_IDeckLinkProfileAttributes, (void **)&ctx->attr) != S_OK) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Could not get attributes interface for '%s'\n", name);
|
||||
ff_decklink_cleanup(avctx);
|
||||
return AVERROR_EXTERNAL;
|
||||
diff -Naurp a/libavdevice/decklink_common.h b/libavdevice/decklink_common.h
|
||||
--- a/libavdevice/decklink_common.h 2019-04-01 11:16:31.000000000 +0000
|
||||
+++ b/libavdevice/decklink_common.h 2019-04-19 19:12:28.000000000 +0000
|
||||
@@ -24,6 +24,10 @@
|
||||
#define AVDEVICE_DECKLINK_COMMON_H
|
||||
|
||||
#include <DeckLinkAPIVersion.h>
|
||||
+#if BLACKMAGIC_DECKLINK_API_VERSION < 0x0b000000
|
||||
+#define IID_IDeckLinkProfileAttributes IID_IDeckLinkAttributes
|
||||
+#define IDeckLinkProfileAttributes IDeckLinkAttributes
|
||||
+#endif
|
||||
|
||||
#include "libavutil/thread.h"
|
||||
#include "decklink_common_c.h"
|
||||
@@ -87,7 +91,7 @@ struct decklink_ctx {
|
||||
IDeckLinkOutput *dlo;
|
||||
IDeckLinkInput *dli;
|
||||
IDeckLinkConfiguration *cfg;
|
||||
- IDeckLinkAttributes *attr;
|
||||
+ IDeckLinkProfileAttributes *attr;
|
||||
decklink_output_callback *output_callback;
|
||||
|
||||
/* DeckLink mode information */
|
||||
Reference in New Issue
Block a user