summaryrefslogtreecommitdiff
path: root/libavdevice/decklink_common.cpp
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2018-04-15 00:06:59 +0200
committerMarton Balint <cus@passwd.hu>2018-04-18 22:20:17 +0200
commit768c0774d82c8dc8eb9c14684b619b0d3b4e2f05 (patch)
treecf032a4661b9738d39f0298d0f6ba33d97fb4a19 /libavdevice/decklink_common.cpp
parent30270561608a2a73c0dd9e73e346addff58f0f35 (diff)
downloadffmpeg-768c0774d82c8dc8eb9c14684b619b0d3b4e2f05.tar.gz
avdevice/decklink_commmon: enhance error messages when iterator creation fails
Show a more useful error message which specifies the required driver version for the build, and use the correct context in the error message for WIN32. Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavdevice/decklink_common.cpp')
-rw-r--r--libavdevice/decklink_common.cpp28
1 files changed, 14 insertions, 14 deletions
diff --git a/libavdevice/decklink_common.cpp b/libavdevice/decklink_common.cpp
index b889033cf8..d8cced7c74 100644
--- a/libavdevice/decklink_common.cpp
+++ b/libavdevice/decklink_common.cpp
@@ -53,25 +53,29 @@ extern "C" {
#include "decklink_common.h"
-#ifdef _WIN32
-IDeckLinkIterator *CreateDeckLinkIteratorInstance(void)
+static IDeckLinkIterator *decklink_create_iterator(AVFormatContext *avctx)
{
IDeckLinkIterator *iter;
+#ifdef _WIN32
if (CoInitialize(NULL) < 0) {
- av_log(NULL, AV_LOG_ERROR, "COM initialization failed.\n");
+ av_log(avctx, AV_LOG_ERROR, "COM initialization failed.\n");
return NULL;
}
if (CoCreateInstance(CLSID_CDeckLinkIterator, NULL, CLSCTX_ALL,
IID_IDeckLinkIterator, (void**) &iter) != S_OK) {
- av_log(NULL, AV_LOG_ERROR, "DeckLink drivers not installed.\n");
- return NULL;
+ iter = NULL;
}
+#else
+ iter = CreateDeckLinkIteratorInstance();
+#endif
+ if (!iter)
+ av_log(avctx, AV_LOG_ERROR, "Could not create DeckLink iterator. "
+ "Make sure you have DeckLink drivers " BLACKMAGIC_DECKLINK_API_VERSION_STRING " or newer installed.\n");
return iter;
}
-#endif
#ifdef _WIN32
static char *dup_wchar_to_utf8(wchar_t *w)
@@ -285,13 +289,11 @@ int ff_decklink_list_devices(AVFormatContext *avctx,
int show_inputs, int show_outputs)
{
IDeckLink *dl = NULL;
- IDeckLinkIterator *iter = CreateDeckLinkIteratorInstance();
+ IDeckLinkIterator *iter = decklink_create_iterator(avctx);
int ret = 0;
- if (!iter) {
- av_log(avctx, AV_LOG_ERROR, "Could not create DeckLink iterator\n");
+ if (!iter)
return AVERROR(EIO);
- }
while (ret == 0 && iter->Next(&dl) == S_OK) {
IDeckLinkOutput *output_config;
@@ -442,11 +444,9 @@ int ff_decklink_init_device(AVFormatContext *avctx, const char* name)
struct decklink_cctx *cctx = (struct decklink_cctx *)avctx->priv_data;
struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
IDeckLink *dl = NULL;
- IDeckLinkIterator *iter = CreateDeckLinkIteratorInstance();
- if (!iter) {
- av_log(avctx, AV_LOG_ERROR, "Could not create DeckLink iterator\n");
+ IDeckLinkIterator *iter = decklink_create_iterator(avctx);
+ if (!iter)
return AVERROR_EXTERNAL;
- }
while (iter->Next(&dl) == S_OK) {
const char *displayName;