#include "decklink-device-mode.hpp" DeckLinkDeviceMode::DeckLinkDeviceMode(IDeckLinkDisplayMode *mode, long long id) : id(id), mode(mode) { if (mode == nullptr) { return; } decklink_string_t decklinkStringName; if (mode->GetName(&decklinkStringName) == S_OK) { DeckLinkStringToStdString(decklinkStringName, name); } } DeckLinkDeviceMode::DeckLinkDeviceMode(const std::string &name, long long id) : id(id), mode(nullptr), name(name) {} DeckLinkDeviceMode::~DeckLinkDeviceMode(void) {} BMDDisplayMode DeckLinkDeviceMode::GetDisplayMode(void) const { if (mode != nullptr) { return mode->GetDisplayMode(); } return bmdModeUnknown; } int DeckLinkDeviceMode::GetWidth() { if (mode != nullptr) { return mode->GetWidth(); } return 0; } int DeckLinkDeviceMode::GetHeight() { if (mode != nullptr) { return mode->GetHeight(); } return 0; } bool DeckLinkDeviceMode::GetFrameRate(BMDTimeValue *frameDuration, BMDTimeScale *timeScale) { if (mode != nullptr) { return SUCCEEDED(mode->GetFrameRate(frameDuration, timeScale)); } return false; } BMDDisplayModeFlags DeckLinkDeviceMode::GetDisplayModeFlags(void) const { if (mode != nullptr) { return mode->GetFlags(); } return (BMDDisplayModeFlags)0; } long long DeckLinkDeviceMode::GetId(void) const { return id; } const std::string &DeckLinkDeviceMode::GetName(void) const { return name; } bool DeckLinkDeviceMode::IsEqualFrameRate(int64_t num, int64_t den) { bool equal = false; if (mode) { BMDTimeValue frameDuration; BMDTimeScale timeScale; if (SUCCEEDED(mode->GetFrameRate(&frameDuration, &timeScale))) { equal = timeScale * den == frameDuration * num; } } return equal; } void DeckLinkDeviceMode::SetMode(IDeckLinkDisplayMode *mode_) { mode = mode_; }