p_picture->pf_release( p_picture );
}
+/**
+ * Cleanup quantization matrix data and set to 0
+ */
+static inline void picture_CleanupQuant( picture_t *p_pic )
+{
+ free( p_pic->p_q );
+ p_pic->p_q = NULL;
+ p_pic->i_qstride = 0;
+ p_pic->i_qtype = 0;
+}
+
/**
* This function will copy all picture dynamic properties.
*/
p_pic->b_top_field_first = p_sys->p_ff_pic->top_field_first;
p_pic->i_qstride = p_sys->p_ff_pic->qstride;
-#if 1
- p_pic->p_q = p_sys->p_ff_pic->qscale_table; /* XXX: is this dangerous? shouldn't be since the ff pics are never freed ... but you never know */
-#else
- /* FIXME: this leaks p_q */
int i_mb_h = ( p_pic->format.i_height + 15 ) / 16;
p_pic->p_q = malloc( p_pic->i_qstride * i_mb_h );
memcpy( p_pic->p_q, p_sys->p_ff_pic->qscale_table,
p_pic->i_qstride * i_mb_h );
-#endif
switch( p_sys->p_ff_pic->qscale_type )
{
case FF_QSCALE_TYPE_MPEG1:
}
else
{
+ free( p_pic->p_q );
free( p_pic->p_data_orig );
free( p_pic );
}
VLC_UNUSED(p_this);
if( p_pic )
{
+ free( p_pic->p_q );
free( p_pic->p_data_orig );
free( p_pic->p_sys );
free( p_pic );
VLC_UNUSED(p_decoder);
p_pic->i_refcount = 0;
p_pic->i_status = DESTROYED_PICTURE;
+ picture_CleanupQuant( p_pic );
}
static void video_del_buffer_filter( filter_t *p_filter, picture_t *p_pic )
VLC_UNUSED(p_filter);
p_pic->i_refcount = 0;
p_pic->i_status = DESTROYED_PICTURE;
+ picture_CleanupQuant( p_pic );
}
static void video_link_picture_decoder( decoder_t *p_dec, picture_t *p_pic )
else
{
p_pic->i_status = DESTROYED_PICTURE;
+ picture_CleanupQuant( p_pic );
p_vout->i_heap_size--;
}
/* Destroy the picture without displaying it */
p_picture->i_status = DESTROYED_PICTURE;
p_vout->i_heap_size--;
+ picture_CleanupQuant( p_picture );
}
vlc_mutex_unlock( &p_vout->picture_lock );
}
p_pic->i_status = DESTROYED_PICTURE;
p_vout->i_heap_size--;
+ picture_CleanupQuant( p_pic );
vlc_mutex_unlock( &p_vout->picture_lock );
}
{
p_pic->i_status = DESTROYED_PICTURE;
p_vout->i_heap_size--;
+ picture_CleanupQuant( p_pic );
}
vlc_mutex_unlock( &p_vout->picture_lock );
{
assert( p_picture && p_picture->i_refcount == 0 );
+ free( p_picture->p_q );
free( p_picture->p_data_orig );
free( p_picture->p_sys );
free( p_picture );
*
*****************************************************************************/
-