]> git.sesse.net Git - nageru/blobdiff - nageru/decklink_util.cpp
Remove the x264 VBV settings.
[nageru] / nageru / decklink_util.cpp
index 4b701abed3799448d2d6755652190a1c57769b77..c2ebd575b073cb1743d6a2cc3c1ea418c415d126 100644 (file)
@@ -33,7 +33,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 +56,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 +66,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 +75,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 +90,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);
+}