]> git.sesse.net Git - nageru/blobdiff - nageru/decklink_util.cpp
IWYU-fix nageru/*.cpp.
[nageru] / nageru / decklink_util.cpp
index 4b701abed3799448d2d6755652190a1c57769b77..1686389d291b8d7a02b44983a0d6f0dcae050014 100644 (file)
@@ -1,7 +1,17 @@
-#include <DeckLinkAPI.h>
-#include <DeckLinkAPIModes.h>
+#include "DeckLinkAPI.h"
+#include "DeckLinkAPIDiscovery.h"
+#include "DeckLinkAPIModes.h"
+#include "DeckLinkAPITypes.h"
+#include "LinuxCOM.h"
 
 #include <assert.h>
+#include <bmusb/bmusb.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <map>
+#include <stdlib.h>
+#include <utility>
 
 #include "decklink_util.h"
 #include "flags.h"
@@ -33,7 +43,7 @@ map<uint32_t, VideoMode> summarize_video_modes(IDeckLinkDisplayModeIterator *mod
                BMDTimeValue frame_rate_den;
                if (mode_ptr->GetFrameRate(&frame_rate_den, &frame_rate_num) != S_OK) {
                        fprintf(stderr, "Could not get frame rate for mode '%s' on card %d\n", mode.name.c_str(), card_index);
-                       exit(1);
+                       abort();
                }
                mode.frame_rate_num = frame_rate_num;
                mode.frame_rate_den = frame_rate_den;
@@ -56,7 +66,7 @@ BMDVideoConnection pick_default_video_connection(IDeckLink *card, BMDDeckLinkAtt
        IDeckLinkAttributes *attr;
        if (card->QueryInterface(IID_IDeckLinkAttributes, (void**)&attr) != S_OK) {
                fprintf(stderr, "Card %u has no attributes\n", card_index);
-               exit(1);
+               abort();
        }
 
        int64_t connection_mask;
@@ -66,7 +76,7 @@ BMDVideoConnection pick_default_video_connection(IDeckLink *card, BMDDeckLinkAtt
                } else {
                        fprintf(stderr, "Failed to enumerate video outputs for card %u\n", card_index);
                }
-               exit(1);
+               abort();
        }
        attr->Release();
        if (connection_mask == 0) {
@@ -75,7 +85,7 @@ BMDVideoConnection pick_default_video_connection(IDeckLink *card, BMDDeckLinkAtt
                } else {
                        fprintf(stderr, "Card %u has no output connections\n", card_index);
                }
-               exit(1);
+               abort();
        }
 
        if ((connection_mask & bmdVideoConnectionHDMI) &&
@@ -90,3 +100,22 @@ BMDVideoConnection pick_default_video_connection(IDeckLink *card, BMDDeckLinkAtt
                return connection_mask & (-connection_mask);
        }
 }
+
+bool decklink_card_is_active(IDeckLink *card, unsigned card_index)
+{
+       IDeckLinkStatus *status;
+       if (card->QueryInterface(IID_IDeckLinkStatus, (void**)&status) != S_OK) {
+               fprintf(stderr, "Card %u has no status interface\n", card_index);
+               abort();
+       }
+
+       int64_t duplex_mode;
+       if (status->GetInt(bmdDeckLinkStatusDuplexMode, &duplex_mode) != S_OK) {
+               fprintf(stderr, "Could not query duplex mode for card %u\n", card_index);
+               abort();
+       }
+
+       status->Release();
+
+       return (duplex_mode != bmdDuplexStatusInactive);
+}