p_vout->p->b_picture_empty = false;
p_vout->p->i_picture_qtype = QTYPE_NONE;
- p_vout->p->snapshot.b_available = true;
- p_vout->p->snapshot.i_request = 0;
- p_vout->p->snapshot.p_picture = NULL;
- vlc_mutex_init( &p_vout->p->snapshot.lock );
- vlc_cond_init( &p_vout->p->snapshot.wait );
+ vout_snapshot_Init( &p_vout->p->snapshot );
/* Initialize locks */
vlc_mutex_init( &p_vout->picture_lock );
vlc_cond_signal( &p_vout->p->change_wait );
vlc_mutex_unlock( &p_vout->change_lock );
- vlc_mutex_lock( &p_vout->p->snapshot.lock );
- p_vout->p->snapshot.b_available = false;
- vlc_cond_broadcast( &p_vout->p->snapshot.wait );
- vlc_mutex_unlock( &p_vout->p->snapshot.lock );
+ vout_snapshot_End( &p_vout->p->snapshot );
vlc_join( p_vout->p->thread, NULL );
module_unneed( p_vout, p_vout->p_module );
vlc_mutex_destroy( &p_vout->p->vfilter_lock );
/* */
- for( ;; )
- {
- picture_t *p_picture = p_vout->p->snapshot.p_picture;
- if( !p_picture )
- break;
-
- p_vout->p->snapshot.p_picture = p_picture->p_next;
-
- picture_Release( p_picture );
- }
- vlc_cond_destroy( &p_vout->p->snapshot.wait );
- vlc_mutex_destroy( &p_vout->p->snapshot.lock );
+ vout_snapshot_Clean( &p_vout->p->snapshot );
/* */
free( p_vout->p->psz_filter_chain );
p_filtered_picture = filter_chain_VideoFilter( p_vout->p->p_vf2_chain,
p_picture );
- bool b_snapshot = false;
- if( vlc_mutex_trylock( &p_vout->p->snapshot.lock ) == 0 )
- {
- b_snapshot = p_vout->p->snapshot.i_request > 0
- && p_picture != NULL;
- vlc_mutex_unlock( &p_vout->p->snapshot.lock );
- }
+ const bool b_snapshot = vout_snapshot_IsRequested( &p_vout->p->snapshot );
/*
* Check for subpictures to display
* Take a snapshot if requested
*/
if( p_directbuffer && b_snapshot )
- {
- vlc_mutex_lock( &p_vout->p->snapshot.lock );
- assert( p_vout->p->snapshot.i_request > 0 );
- while( p_vout->p->snapshot.i_request > 0 )
- {
- picture_t *p_pic = picture_New( p_vout->fmt_out.i_chroma,
- p_vout->fmt_out.i_width,
- p_vout->fmt_out.i_height,
- p_vout->fmt_out.i_aspect );
- if( !p_pic )
- break;
-
- picture_Copy( p_pic, p_directbuffer );
-
- p_pic->format.i_sar_num = p_vout->fmt_out.i_sar_num;
- p_pic->format.i_sar_den = p_vout->fmt_out.i_sar_den;
-
- p_pic->p_next = p_vout->p->snapshot.p_picture;
- p_vout->p->snapshot.p_picture = p_pic;
- p_vout->p->snapshot.i_request--;
- }
- vlc_cond_broadcast( &p_vout->p->snapshot.wait );
- vlc_mutex_unlock( &p_vout->p->snapshot.lock );
- }
+ vout_snapshot_Set( &p_vout->p->snapshot,
+ &p_vout->fmt_out, p_directbuffer );
/*
* Call the plugin-specific rendering method if there is one