#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_; }