- bool listDevices( mlt_properties properties )
- {
- IDeckLinkIterator* decklinkIterator = NULL;
- try
- {
- int i = 0;
-#ifdef WIN32
- HRESULT result = CoInitialize( NULL );
- if ( FAILED( result ) )
- throw "COM initialization failed";
- result = CoCreateInstance( CLSID_CDeckLinkIterator, NULL, CLSCTX_ALL, IID_IDeckLinkIterator, (void**) &decklinkIterator );
- if ( FAILED( result ) )
- throw "The DeckLink drivers are not installed.";
-#else
- decklinkIterator = CreateDeckLinkIteratorInstance();
- if ( !decklinkIterator )
- throw "The DeckLink drivers are not installed.";
-#endif
- for ( ; decklinkIterator->Next( &m_deckLink ) == S_OK; i++ )
- {
- if ( m_deckLink->QueryInterface( IID_IDeckLinkOutput, (void**) &m_deckLinkOutput ) == S_OK )
- {
- char *name = NULL;
- if ( m_deckLink->GetModelName( (const char**) &name ) == S_OK )
- {
- const char *format = "device.%d";
- char *key = (char*) calloc( 1, strlen( format ) + 1 );
-
- sprintf( key, format, i );
- mlt_properties_set( properties, key, name );
- mlt_log_verbose( NULL, "[consumer decklink] %s = %s\n", key, name );
- free( key );
- free( name );
- }
- SAFE_RELEASE( m_deckLinkOutput );
- }
- SAFE_RELEASE( m_deckLink );
- }
- SAFE_RELEASE( decklinkIterator );
- mlt_properties_set_int( properties, "devices", i );
- mlt_log_verbose( NULL, "[consumer decklink] devices = %d\n", i );
-
- return true;
- }
- catch ( const char *error )
- {
- SAFE_RELEASE( decklinkIterator );
- mlt_log_error( getConsumer(), "%s\n", error );
- return false;
- }
- }
-