1 #include <DeckLinkAPI.h>
2 #include <DeckLinkAPIModes.h>
4 #include "decklink_util.h"
9 map<uint32_t, VideoMode> summarize_video_modes(IDeckLinkDisplayModeIterator *mode_it, unsigned card_index)
11 map<uint32_t, VideoMode> video_modes;
13 for (IDeckLinkDisplayMode *mode_ptr; mode_it->Next(&mode_ptr) == S_OK; mode_ptr->Release()) {
16 const char *mode_name;
17 if (mode_ptr->GetName(&mode_name) != S_OK) {
18 mode.name = "Unknown mode";
20 mode.name = mode_name;
23 mode.autodetect = false;
25 mode.width = mode_ptr->GetWidth();
26 mode.height = mode_ptr->GetHeight();
28 BMDTimeScale frame_rate_num;
29 BMDTimeValue frame_rate_den;
30 if (mode_ptr->GetFrameRate(&frame_rate_den, &frame_rate_num) != S_OK) {
31 fprintf(stderr, "Could not get frame rate for mode '%s' on card %d\n", mode.name.c_str(), card_index);
34 mode.frame_rate_num = frame_rate_num;
35 mode.frame_rate_den = frame_rate_den;
37 // TODO: Respect the TFF/BFF flag.
38 mode.interlaced = (mode_ptr->GetFieldDominance() == bmdLowerFieldFirst || mode_ptr->GetFieldDominance() == bmdUpperFieldFirst);
40 uint32_t id = mode_ptr->GetDisplayMode();
41 video_modes.insert(make_pair(id, mode));