[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