diff --git a/plugins/decklink/decklink-device-discovery.cpp b/plugins/decklink/decklink-device-discovery.cpp index 1f7a88e8f..28e5ee247 100644 --- a/plugins/decklink/decklink-device-discovery.cpp +++ b/plugins/decklink/decklink-device-discovery.cpp @@ -5,7 +5,7 @@ DeckLinkDeviceDiscovery::DeckLinkDeviceDiscovery() { - discovery = CreateDeckLinkDiscoveryInstance(); + discovery.Set(CreateDeckLinkDiscoveryInstance()); if (discovery == nullptr) blog(LOG_INFO, "No blackmagic support"); } diff --git a/plugins/decklink/decklink-device-instance.cpp b/plugins/decklink/decklink-device-instance.cpp index 47d17a4a0..e7beead57 100644 --- a/plugins/decklink/decklink-device-instance.cpp +++ b/plugins/decklink/decklink-device-instance.cpp @@ -142,14 +142,14 @@ void DeckLinkDeviceInstance::HandleVideoFrame( if (videoFrame == nullptr) return; - IDeckLinkVideoFrameAncillaryPackets *packets; + ComPtr packets; if (videoFrame->QueryInterface(IID_IDeckLinkVideoFrameAncillaryPackets, (void **)&packets) == S_OK) { - IDeckLinkAncillaryPacketIterator *iterator; + ComPtr iterator; packets->GetPacketIterator(&iterator); - IDeckLinkAncillaryPacket *packet; + ComPtr packet; iterator->Next(&packet); if (packet) { @@ -160,18 +160,13 @@ void DeckLinkDeviceInstance::HandleVideoFrame( if (did == 0x61 && sdid == 0x01) { this->HandleCaptionPacket(packet, timestamp); } - - packet->Release(); } - - iterator->Release(); - packets->Release(); } - IDeckLinkVideoFrame *frame; + ComPtr frame; if (videoFrame->GetPixelFormat() != convertFrame->GetPixelFormat()) { - IDeckLinkVideoConversion *frameConverter = - CreateVideoConversionInstance(); + ComPtr frameConverter; + frameConverter.Set(CreateVideoConversionInstance()); frameConverter->ConvertFrame(videoFrame, convertFrame); @@ -373,7 +368,7 @@ bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_, if (!device->GetInput(&input)) return false; - IDeckLinkConfiguration *deckLinkConfiguration = NULL; + ComPtr deckLinkConfiguration; HRESULT result = input->QueryInterface(IID_IDeckLinkConfiguration, (void **)&deckLinkConfiguration); if (result != S_OK) { @@ -526,7 +521,7 @@ bool DeckLinkDeviceInstance::StartOutput(DeckLinkDeviceMode *mode_) int keyerMode = device->GetKeyerMode(); - IDeckLinkKeyer *deckLinkKeyer = nullptr; + ComPtr deckLinkKeyer; if (device->GetKeyer(&deckLinkKeyer)) { if (keyerMode) { deckLinkKeyer->Enable(keyerMode == 1); @@ -574,10 +569,8 @@ bool DeckLinkDeviceInstance::StopOutput() output->DisableVideoOutput(); output->DisableAudioOutput(); - if (decklinkOutputFrame != nullptr) { - decklinkOutputFrame->Release(); + if (decklinkOutputFrame != nullptr) decklinkOutputFrame = nullptr; - } return true; } diff --git a/plugins/decklink/decklink-device-instance.hpp b/plugins/decklink/decklink-device-instance.hpp index 9ca049c93..9e2ab905f 100644 --- a/plugins/decklink/decklink-device-instance.hpp +++ b/plugins/decklink/decklink-device-instance.hpp @@ -38,7 +38,7 @@ protected: bool allow10Bit; OBSVideoFrame *convertFrame = nullptr; - IDeckLinkMutableVideoFrame *decklinkOutputFrame = nullptr; + ComPtr decklinkOutputFrame; void FinalizeStream(); void SetupVideoFormat(DeckLinkDeviceMode *mode_); diff --git a/plugins/decklink/decklink-device-mode.cpp b/plugins/decklink/decklink-device-mode.cpp index 1d53234b8..0e5ab25c9 100644 --- a/plugins/decklink/decklink-device-mode.cpp +++ b/plugins/decklink/decklink-device-mode.cpp @@ -18,11 +18,7 @@ DeckLinkDeviceMode::DeckLinkDeviceMode(const std::string &name, long long id) { } -DeckLinkDeviceMode::~DeckLinkDeviceMode(void) -{ - if (mode != nullptr) - mode->Release(); -} +DeckLinkDeviceMode::~DeckLinkDeviceMode(void) {} BMDDisplayMode DeckLinkDeviceMode::GetDisplayMode(void) const { @@ -82,11 +78,5 @@ bool DeckLinkDeviceMode::IsEqualFrameRate(int64_t num, int64_t den) void DeckLinkDeviceMode::SetMode(IDeckLinkDisplayMode *mode_) { - IDeckLinkDisplayMode *old = mode; - if (old != nullptr) - old->Release(); - mode = mode_; - if (mode != nullptr) - mode->AddRef(); } diff --git a/plugins/decklink/decklink-device-mode.hpp b/plugins/decklink/decklink-device-mode.hpp index fcaea9da2..e5780577f 100644 --- a/plugins/decklink/decklink-device-mode.hpp +++ b/plugins/decklink/decklink-device-mode.hpp @@ -9,7 +9,7 @@ class DeckLinkDeviceMode { protected: long long id; - IDeckLinkDisplayMode *mode; + ComPtr mode; std::string name; public: diff --git a/plugins/decklink/decklink-device.cpp b/plugins/decklink/decklink-device.cpp index 2d6b489cd..ed27b56e5 100644 --- a/plugins/decklink/decklink-device.cpp +++ b/plugins/decklink/decklink-device.cpp @@ -49,9 +49,9 @@ bool DeckLinkDevice::Init() ComPtr input; if (device->QueryInterface(IID_IDeckLinkInput, (void **)&input) == S_OK) { - IDeckLinkDisplayModeIterator *modeIterator; + ComPtr modeIterator; if (input->GetDisplayModeIterator(&modeIterator) == S_OK) { - IDeckLinkDisplayMode *displayMode; + ComPtr displayMode; long long modeId = 1; while (modeIterator->Next(&displayMode) == S_OK) { @@ -63,11 +63,8 @@ bool DeckLinkDevice::Init() modeId); inputModes.push_back(mode); inputModeIdMap[modeId] = mode; - displayMode->Release(); ++modeId; } - - modeIterator->Release(); } } @@ -88,9 +85,9 @@ bool DeckLinkDevice::Init() if (device->QueryInterface(IID_IDeckLinkOutput, (void **)&output) == S_OK) { - IDeckLinkDisplayModeIterator *modeIterator; + ComPtr modeIterator; if (output->GetDisplayModeIterator(&modeIterator) == S_OK) { - IDeckLinkDisplayMode *displayMode; + ComPtr displayMode; long long modeId = 1; while (modeIterator->Next(&displayMode) == S_OK) { @@ -102,11 +99,8 @@ bool DeckLinkDevice::Init() modeId); outputModes.push_back(mode); outputModeIdMap[modeId] = mode; - displayMode->Release(); ++modeId; } - - modeIterator->Release(); } } diff --git a/plugins/decklink/plugin-main.cpp b/plugins/decklink/plugin-main.cpp index fc87cd256..8b3238ec8 100644 --- a/plugins/decklink/plugin-main.cpp +++ b/plugins/decklink/plugin-main.cpp @@ -16,8 +16,8 @@ struct obs_output_info decklink_output_info; bool log_sdk_version() { - IDeckLinkIterator *deckLinkIterator; - IDeckLinkAPIInformation *deckLinkAPIInformation; + ComPtr deckLinkIterator; + ComPtr deckLinkAPIInformation; HRESULT result; deckLinkIterator = CreateDeckLinkIteratorInstance(); @@ -42,8 +42,6 @@ bool log_sdk_version() blog(LOG_INFO, "Decklink API Installed version %s", versionString.c_str()); - - deckLinkAPIInformation->Release(); } return true;