static int UpdateBufferFunctions( filter_chain_t * );
static picture_t *VideoBufferNew( filter_t * );
-static void VideoBufferRelease( picture_t * );
/**
* Filter chain initialisation
{
filter_t *p_filter = pp_filter[i];
picture_t *p_newpic = p_filter->pf_video_filter( p_filter, p_pic );
- if( !p_newpic )
- return NULL;
+
/* FIXME Ugly hack to make it work in picture core.
* FIXME Remove this code when the picture release API has been
* FIXME cleaned up (a git revert of the commit should work) */
if( p_chain->p_this->i_object_type == VLC_OBJECT_VOUT )
{
+ vout_thread_t *p_vout = (vout_thread_t*)p_chain->p_this;
+ vlc_mutex_lock( &p_vout->picture_lock );
if( p_pic->i_refcount )
+ {
p_pic->i_status = DISPLAYED_PICTURE;
+ }
else
+ {
p_pic->i_status = DESTROYED_PICTURE;
- p_newpic->i_status = READY_PICTURE;
+ p_vout->i_heap_size--;
+ }
+ vlc_mutex_unlock( &p_vout->picture_lock );
+
+ if( p_newpic )
+ p_newpic->i_status = READY_PICTURE;
}
+ if( !p_newpic )
+ return NULL;
+
p_pic = p_newpic;
}
return p_pic;
static picture_t *VideoBufferNew( filter_t *p_filter )
{
- picture_t *p_pic = malloc( sizeof( picture_t ) );
- if( !p_pic ) return NULL;
- memset( p_pic, 0, sizeof( picture_t * ) );
- int i_ret = vout_AllocatePicture( VLC_OBJECT( p_filter ), p_pic,
- p_filter->fmt_out.video.i_chroma,
- p_filter->fmt_out.video.i_width,
- p_filter->fmt_out.video.i_height,
- p_filter->fmt_out.video.i_aspect );
- if( i_ret != VLC_SUCCESS )
- {
- msg_Err( p_filter, "Failed to allocate picture: %s",
- vlc_error( i_ret ) );
- free( p_pic );
- return NULL;
- }
- p_pic->pf_release = VideoBufferRelease;
- p_pic->i_type = MEMORY_PICTURE;
- p_pic->i_status = RESERVED_PICTURE;
- return p_pic;
+ const video_format_t *p_fmt = &p_filter->fmt_out.video;
+
+ picture_t *p_picture = picture_New( p_fmt->i_chroma,
+ p_fmt->i_width, p_fmt->i_height,
+ p_fmt->i_aspect );
+ if( !p_picture )
+ msg_Err( p_filter, "Failed to allocate picture\n" );
+ return p_picture;
}
-static void VideoBufferRelease( picture_t *p_pic )
-{
- free( p_pic->p_data_orig );
- free( p_pic );
-}