[FFmpeg-devel] Patch for device list error in decklink_common.cpp
Ramiro Polla
ramiro.polla at gmail.com
Wed Dec 3 15:46:22 CET 2014
On 03.12.2014 12:06, Jon bae wrote:
> Thanks Ramiro for the correction!
> Here is the new patch. (Is it better to post directly the patch, or is ok
> as a attachment?)
Attachment is better. But please avoid top-posting in this mailing-list.
> 2014-12-02 22:19 GMT+01:00 Ramiro Polla <ramiro.polla at gmail.com>:
>> On 02.12.2014 20:30, Jon bae wrote:
>>> Here is the other patch for decklink_common.cpp. It fix the error:
>>>
>>> COM initialization failed
>>> [decklink @ 02e5b520] Could not create DeckLink iterator
>>> dummy: Immediate exit request
>>>
>>
>> From 203eba2fad14dd6d84552d6c22899792e80b53bb Mon Sep 17 00:00:00 2001
>>> From: Jonathan Baecker <jonbae77 at gmail.com>
>>> Date: Tue, 2 Dec 2014 20:12:38 +0100
>>> Subject: [PATCH 2/2] device list error in decklink_common
>>>
>>> Signed-off-by: Jonathan Baecker <jonbae77 at gmail.com>
>>> ---
>>> libavdevice/decklink_common.cpp | 24 ++++++++++++++----------
>>> 1 file changed, 14 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/libavdevice/decklink_common.cpp
>>> b/libavdevice/decklink_common.cpp
>>> index 8eff910..8f7e32a 100644
>>> --- a/libavdevice/decklink_common.cpp
>>> +++ b/libavdevice/decklink_common.cpp
>>> @@ -42,16 +42,20 @@ IDeckLinkIterator *CreateDeckLinkIteratorInstance
>>> (void)
>>> {
>>> IDeckLinkIterator *iter;
>>>
>>> - if (CoInitialize(NULL) != S_OK) {
>>> - av_log(NULL, AV_LOG_ERROR, "COM initialization failed.\n");
>>> - return NULL;
>>> - }
>>> -
>>> - if (CoCreateInstance(CLSID_CDeckLinkIterator, NULL, CLSCTX_ALL,
>>> - IID_IDeckLinkIterator, (void**) &iter) != S_OK)
>>> {
>>> - av_log(NULL, AV_LOG_ERROR, "DeckLink drivers not installed.\n");
>>> - return NULL;
>>> - }
>>> + HRESULT result;
>>> + /* Initialize COM on this thread */
>>> + result = CoInitialize(NULL);
>>> + if (FAILED(result)) {
>>> + av_log(NULL, AV_LOG_ERROR, "COM initialization failed.\n");
>>> + return NULL;
>>> + }
>>> +
>>> + /* Create an IDeckLinkIterator object to enumerate all DeckLink
>>> cards in the system */
>>> + result = CoCreateInstance(CLSID_CDeckLinkIterator, NULL,
>>> CLSCTX_ALL, IID_IDeckLinkIterator, (void**)&iter);
>>> + if (FAILED(result)) {
>>> + av_log(NULL, AV_LOG_ERROR, "DeckLink drivers not installed.\n");
>>> + return NULL;
>>> + }
>>>
>>> return iter;
>>> }
>>> --
>>> 2.2.0
>>>
>>
>> This code is Copyright (c) Blackmagic Design. Try just changing the check
>> for CoInitialize(NULL) from "!= S_OK" to "< 0".
> From 3c3d5dda659fe30c68a81b0a711cb09bcb5be443 Mon Sep 17 00:00:00 2001
> From: Jonathan Baecker <jonbae77 at gmail.com>
> Date: Wed, 3 Dec 2014 12:03:12 +0100
> Subject: [PATCH] fix COM initialization failed
>
> Signed-off-by: Jonathan Baecker <jonbae77 at gmail.com>
> ---
> libavdevice/decklink_common.cpp | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/libavdevice/decklink_common.cpp b/libavdevice/decklink_common.cpp
> index 6899bd2..4252552 100644
> --- a/libavdevice/decklink_common.cpp
> +++ b/libavdevice/decklink_common.cpp
> @@ -42,13 +42,13 @@ IDeckLinkIterator *CreateDeckLinkIteratorInstance(void)
> {
> IDeckLinkIterator *iter;
>
> - if (CoInitialize(NULL) != S_OK) {
> + if (CoInitialize(NULL) < 0) {
> av_log(NULL, AV_LOG_ERROR, "COM initialization failed.\n");
> return NULL;
> }
> if (CoCreateInstance(CLSID_CDeckLinkIterator, NULL, CLSCTX_ALL,
> - IID_IDeckLinkIterator, (void**) &iter) != S_OK) {
> + IID_IDeckLinkIterator, (void**) &iter) < 0) {
> av_log(NULL, AV_LOG_ERROR, "DeckLink drivers not installed.\n");
> return NULL;
> }
The CoCreateInstance check doesn't need to be changed.
More information about the ffmpeg-devel
mailing list