From b18115d54e095a4da5518135cf0e2cd239f53154 Mon Sep 17 00:00:00 2001 From: Martin Piatka <445597@mail.muni.cz> Date: Fri, 1 Mar 2019 13:51:33 +0100 Subject: [PATCH] Decklink: Fix codec prefercence --- src/blackmagic_common.h | 3 ++- src/video_capture/decklink.cpp | 9 +++++++-- src/video_display/decklink.cpp | 5 ++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/blackmagic_common.h b/src/blackmagic_common.h index 3683072fb..e086db102 100644 --- a/src/blackmagic_common.h +++ b/src/blackmagic_common.h @@ -45,6 +45,7 @@ #endif #include +#include #include #include @@ -54,7 +55,7 @@ std::string bmd_hresult_to_string(HRESULT res); // Order of codecs is important because it is used as a preference list (upper // codecs are favored) returned by DISPLAY_PROPERTY_CODECS property (display) -static std::map uv_to_bmd_codec_map = { +static std::vector> uv_to_bmd_codec_map = { { R12L, bmdFormat12BitRGBLE }, { R10k, bmdFormat10BitRGBX }, { v210, bmdFormat10BitYUV }, diff --git a/src/video_capture/decklink.cpp b/src/video_capture/decklink.cpp index a1b833910..25733b54b 100644 --- a/src/video_capture/decklink.cpp +++ b/src/video_capture/decklink.cpp @@ -62,6 +62,7 @@ #include #include #include +#include #include "blackmagic_common.h" #include "audio/audio.h" @@ -802,7 +803,9 @@ static HRESULT set_display_mode_properties(struct vidcap_decklink_state *s, stru result = displayMode->GetName(&displayModeString); if (result == S_OK) { - auto it = uv_to_bmd_codec_map.find(s->codec); + auto it = std::find_if(uv_to_bmd_codec_map.begin(), + uv_to_bmd_codec_map.end(), + [&s](const std::pair& el){ return el.first == s->codec; }); if (it == uv_to_bmd_codec_map.end()) { LOG(LOG_LEVEL_ERROR) << "Unsupported codec: " << get_codec_name(s->codec) << "!\n"; return E_FAIL; @@ -1157,7 +1160,9 @@ vidcap_decklink_init(const struct vidcap_params *params, void **state) displayMode->Release(); continue; } - auto it = uv_to_bmd_codec_map.find(s->codec); + auto it = std::find_if(uv_to_bmd_codec_map.begin(), + uv_to_bmd_codec_map.end(), + [&s](const std::pair& el){ return el.first == s->codec; }); if (it == uv_to_bmd_codec_map.end()) { LOG(LOG_LEVEL_ERROR) << "Unsupported codec: " << get_codec_name(s->codec) << "!\n"; goto error; diff --git a/src/video_display/decklink.cpp b/src/video_display/decklink.cpp index 2633aea41..911f43a41 100644 --- a/src/video_display/decklink.cpp +++ b/src/video_display/decklink.cpp @@ -68,6 +68,7 @@ #include #include #include +#include #include "DeckLinkAPIVersion.h" @@ -657,7 +658,9 @@ display_decklink_reconfigure_video(void *state, struct video_desc desc) s->vid_desc = desc; - auto it = uv_to_bmd_codec_map.find(desc.color_spec); + auto it = std::find_if(uv_to_bmd_codec_map.begin(), + uv_to_bmd_codec_map.end(), + [&desc](const std::pair& el){ return el.first == desc.color_spec; }); if (it == uv_to_bmd_codec_map.end()) { log_msg(LOG_LEVEL_ERROR, MOD_NAME "Unsupported pixel format!\n"); goto error;