@ -53,25 +53,29 @@ extern "C" {
# include "decklink_common.h"
# ifdef _WIN32
IDeckLinkIterator * CreateDeckLinkIteratorInstance ( void )
static IDeckLinkIterator * decklink_create_iterator ( AVFormatContext * avctx )
{
IDeckLinkIterator * iter ;
# ifdef _WIN32
if ( CoInitialize ( NULL ) < 0 ) {
av_log ( NULL , AV_LOG_ERROR , " COM initialization failed. \n " ) ;
av_log ( avctx , 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 ;
iter = NULL ;
}
# else
iter = CreateDeckLinkIteratorInstance ( ) ;
# endif
if ( ! iter )
av_log ( avctx , AV_LOG_ERROR , " Could not create DeckLink iterator. "
" Make sure you have DeckLink drivers " BLACKMAGIC_DECKLINK_API_VERSION_STRING " or newer installed. \n " ) ;
return iter ;
}
# endif
# ifdef _WIN32
static char * dup_wchar_to_utf8 ( wchar_t * w )
@ -285,13 +289,11 @@ int ff_decklink_list_devices(AVFormatContext *avctx,
int show_inputs , int show_outputs )
{
IDeckLink * dl = NULL ;
IDeckLinkIterator * iter = CreateDeckLinkIteratorInstance ( ) ;
IDeckLinkIterator * iter = decklink_create_iterator ( avctx ) ;
int ret = 0 ;
if ( ! iter ) {
av_log ( avctx , AV_LOG_ERROR , " Could not create DeckLink iterator \n " ) ;
if ( ! iter )
return AVERROR ( EIO ) ;
}
while ( ret = = 0 & & iter - > Next ( & dl ) = = S_OK ) {
IDeckLinkOutput * output_config ;
@ -442,11 +444,9 @@ int ff_decklink_init_device(AVFormatContext *avctx, const char* name)
struct decklink_cctx * cctx = ( struct decklink_cctx * ) avctx - > priv_data ;
struct decklink_ctx * ctx = ( struct decklink_ctx * ) cctx - > ctx ;
IDeckLink * dl = NULL ;
IDeckLinkIterator * iter = CreateDeckLinkIteratorInstance ( ) ;
if ( ! iter ) {
av_log ( avctx , AV_LOG_ERROR , " Could not create DeckLink iterator \n " ) ;
IDeckLinkIterator * iter = decklink_create_iterator ( avctx ) ;
if ( ! iter )
return AVERROR_EXTERNAL ;
}
while ( iter - > Next ( & dl ) = = S_OK ) {
const char * displayName ;