for (IDeckLinkDisplayMode *mode_ptr; mode_it->Next(&mode_ptr) == S_OK; mode_ptr->Release()) {
VideoMode mode;
- mode.id = mode_ptr->GetDisplayMode();
const char *mode_name;
if (mode_ptr->GetName(&mode_name) != S_OK) {
// TODO: Respect the TFF/BFF flag.
mode.interlaced = (mode_ptr->GetFieldDominance() == bmdLowerFieldFirst || mode_ptr->GetFieldDominance() == bmdUpperFieldFirst);
+
+ uint32_t id = mode_ptr->GetDisplayMode();
+ video_modes.insert(make_pair(id, mode));
}
- // TODO: Make the user mode selectable.
- set_video_mode(bmdModeHD720p5994);
+ set_video_mode_no_restart(bmdModeHD720p5994);
if (input->EnableAudioInput(48000, bmdAudioSampleType32bitInteger, 2) != S_OK) {
fprintf(stderr, "Failed to enable audio input for card %d\n", card_index);
}
void DeckLinkCapture::set_video_mode(uint32_t video_mode_id)
+{
+ if (input->StopStreams() != S_OK) {
+ fprintf(stderr, "StopStreams failed\n");
+ exit(1);
+ }
+
+ set_video_mode_no_restart(video_mode_id);
+
+ if (input->StartStreams() != S_OK) {
+ fprintf(stderr, "StartStreams failed\n");
+ exit(1);
+ }
+}
+
+void DeckLinkCapture::set_video_mode_no_restart(uint32_t video_mode_id)
{
BMDDisplayModeSupport support;
IDeckLinkDisplayMode *display_mode;
}
if (input->EnableVideoInput(video_mode_id, bmdFormat8BitYUV, 0) != S_OK) {
- fprintf(stderr, "Failed to set 720p59.94 connection for card %d\n", card_index);
+ fprintf(stderr, "Failed to set video mode 0x%04x for card %d\n", video_mode_id, card_index);
exit(1);
}