Commit a89fd3ec authored by Steinar H. Gunderson's avatar Steinar H. Gunderson Committed by Jean-Baptiste Kempf

Hold on to the DeckLink configuration object for the entire session, or it...

Hold on to the DeckLink configuration object for the entire session, or it will revert to the defaults in the configuration file. (This change was made during the 7.9 series SDK, it seems.)

This also fixes an issue where VLC would segfault if it could not
initialize the card.

Patch originally by Ed Groth <ed at boxpopuli.com>.
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 229ff459
...@@ -129,6 +129,10 @@ struct demux_sys_t ...@@ -129,6 +129,10 @@ struct demux_sys_t
IDeckLinkInput *p_input; IDeckLinkInput *p_input;
DeckLinkCaptureDelegate *p_delegate; DeckLinkCaptureDelegate *p_delegate;
/* We need to hold onto the IDeckLinkConfiguration object, or our settings will not apply.
See section 2.4.15 of the Blackmagic Decklink SDK documentation. */
IDeckLinkConfiguration *p_config;
es_out_id_t *p_video_es; es_out_id_t *p_video_es;
es_out_id_t *p_audio_es; es_out_id_t *p_audio_es;
...@@ -340,8 +344,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -340,8 +344,7 @@ static int Open( vlc_object_t *p_this )
} }
/* Set up the video and audio sources. */ /* Set up the video and audio sources. */
IDeckLinkConfiguration *p_config; if( p_sys->p_card->QueryInterface( IID_IDeckLinkConfiguration, (void**)&p_sys->p_config) != S_OK )
if( p_sys->p_card->QueryInterface( IID_IDeckLinkConfiguration, (void**)&p_config) != S_OK )
{ {
msg_Err( p_demux, "Failed to get configuration interface" ); msg_Err( p_demux, "Failed to get configuration interface" );
goto finish; goto finish;
...@@ -371,7 +374,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -371,7 +374,7 @@ static int Open( vlc_object_t *p_this )
} }
msg_Dbg( p_demux, "Setting video input format to 0x%x", conn); msg_Dbg( p_demux, "Setting video input format to 0x%x", conn);
result = p_config->SetInt( bmdDeckLinkConfigVideoInputConnection, conn ); result = p_sys->p_config->SetInt( bmdDeckLinkConfigVideoInputConnection, conn );
if( result != S_OK ) if( result != S_OK )
{ {
msg_Err( p_demux, "Failed to set video input connection" ); msg_Err( p_demux, "Failed to set video input connection" );
...@@ -397,7 +400,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -397,7 +400,7 @@ static int Open( vlc_object_t *p_this )
} }
msg_Dbg( p_demux, "Setting audio input format to 0x%x", conn); msg_Dbg( p_demux, "Setting audio input format to 0x%x", conn);
result = p_config->SetInt( bmdDeckLinkConfigAudioInputConnection, conn ); result = p_sys->p_config->SetInt( bmdDeckLinkConfigAudioInputConnection, conn );
if( result != S_OK ) if( result != S_OK )
{ {
msg_Err( p_demux, "Failed to set audio input connection" ); msg_Err( p_demux, "Failed to set audio input connection" );
...@@ -582,9 +585,6 @@ finish: ...@@ -582,9 +585,6 @@ finish:
if( decklink_iterator ) if( decklink_iterator )
decklink_iterator->Release(); decklink_iterator->Release();
if( p_config )
p_config->Release();
free( psz_video_connection ); free( psz_video_connection );
free( psz_audio_connection ); free( psz_audio_connection );
free( psz_display_mode ); free( psz_display_mode );
...@@ -603,6 +603,9 @@ static void Close( vlc_object_t *p_this ) ...@@ -603,6 +603,9 @@ static void Close( vlc_object_t *p_this )
demux_t *p_demux = (demux_t *)p_this; demux_t *p_demux = (demux_t *)p_this;
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
if( p_sys->p_config )
p_sys->p_config->Release();
if( p_sys->p_input ) if( p_sys->p_input )
{ {
p_sys->p_input->StopStreams(); p_sys->p_input->StopStreams();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment