From: Steinar Gunderson Date: Sun, 26 Sep 2010 22:50:45 +0000 (+0200) Subject: Merge branch 'master' into lpcm_encoder X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=4b66a290d0ea4fd059c2498e4d1df9c60c1936df;hp=52ba8e1f73cc1b06db3d7fdaec08b58f2a21cb26;p=vlc Merge branch 'master' into lpcm_encoder --- diff --git a/modules/access/sdi.cpp b/modules/access/sdi.cpp index 7b8413b2c8..4e8988e075 100644 --- a/modules/access/sdi.cpp +++ b/modules/access/sdi.cpp @@ -270,7 +270,7 @@ static int Open( vlc_object_t *p_this ) vlc_mutex_init( &p_sys->frame_lock ); vlc_cond_init( &p_sys->has_frame ); - p_sys->p_video_frame = NULL; + p_sys->b_first_frame = true; IDeckLinkIterator *decklink_iterator = CreateDeckLinkIteratorInstance(); if( !decklink_iterator ) @@ -286,6 +286,8 @@ static int Open( vlc_object_t *p_this ) int i_card_index = var_CreateGetInteger( p_demux, "sdi-card-index" ); for( int i = 0; i <= i_card_index; ++i ) { + if( p_sys->p_card ) + p_sys->p_card->Release(); result = decklink_iterator->Next( &p_sys->p_card ); if( result != S_OK ) break; @@ -380,6 +382,8 @@ static int Open( vlc_object_t *p_this ) { msg_Err( p_demux, "Invalid --sdi-audio-connection specified; choose one of " \ "embedded, aesebu, or analog." ); + free( psz_tmp ); + p_config->Release(); Close( p_this ); return VLC_EGENERIC; } @@ -412,6 +416,7 @@ static int Open( vlc_object_t *p_this ) char *psz_display_mode = var_CreateGetString( p_demux, "sdi-mode" ); if( !psz_display_mode || strlen( psz_display_mode ) == 0 || strlen( psz_display_mode ) > 4 ) { msg_Err( p_demux, "Missing or invalid --sdi-mode string" ); + free( psz_display_mode ); p_display_iterator->Release(); Close( p_this ); return VLC_EGENERIC; @@ -425,6 +430,8 @@ static int Open( vlc_object_t *p_this ) strcpy(sz_display_mode_padded, " "); for( int i = 0; i < strlen( psz_display_mode ); ++i ) sz_display_mode_padded[i] = psz_display_mode[i]; + + free( psz_display_mode ); BMDDisplayMode wanted_mode_id; memcpy( &wanted_mode_id, &sz_display_mode_padded, sizeof(wanted_mode_id) ); @@ -447,6 +454,7 @@ static int Open( vlc_object_t *p_this ) if( result != S_OK ) { msg_Err( p_demux, "Failed to get display mode name" ); + p_display_mode->Release(); p_display_iterator->Release(); Close( p_this ); return VLC_EGENERIC; @@ -457,6 +465,7 @@ static int Open( vlc_object_t *p_this ) if( result != S_OK ) { msg_Err( p_demux, "Failed to get frame rate" ); + p_display_mode->Release(); p_display_iterator->Release(); Close( p_this ); return VLC_EGENERIC; @@ -500,6 +509,8 @@ static int Open( vlc_object_t *p_this ) p_sys->i_fps_den = frame_duration; p_sys->i_dominance_flags = i_dominance_flags; } + + p_display_mode->Release(); } p_display_iterator->Release(); @@ -586,8 +597,6 @@ static int Open( vlc_object_t *p_this ) (char*)&audio_fmt.i_codec, audio_fmt.audio.i_rate, audio_fmt.audio.i_bitspersample, audio_fmt.audio.i_channels); p_sys->p_audio_es = es_out_Add( p_demux->out, &audio_fmt ); - p_sys->b_first_frame = true; - /* Update default_pts to a suitable value for access */ var_Create( p_demux, "sdi-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); @@ -610,6 +619,12 @@ static void Close( vlc_object_t *p_this ) if( p_sys->p_delegate ) p_sys->p_delegate->Release(); + + if( p_sys->p_video_frame ) + block_Release( p_sys->p_video_frame ); + + if( p_sys->p_audio_frame ) + block_Release( p_sys->p_audio_frame ); free( p_sys ); }