-
- for( i = 0; i < PICTURE_RING_SIZE; i++ )
- {
- if ( pp_ring[i] != NULL )
- {
- if ( pp_ring[i]->i_status == DESTROYED_PICTURE )
- {
- free( pp_ring[i]->p_data_orig );
- free( pp_ring[i]->p_sys );
- free( pp_ring[i] );
- }
- else
- {
- pp_ring[i]->p_sys->b_dead = true;
- }
- pp_ring[i] = NULL;
- }
- }
- }
-
- /* Find an empty space in the picture ring buffer */
- for( i = 0; i < PICTURE_RING_SIZE; i++ )
- {
- if( pp_ring[i] != NULL && pp_ring[i]->i_status == DESTROYED_PICTURE )
- {
- pp_ring[i]->i_status = RESERVED_PICTURE;
- pp_ring[i]->i_refcount = 1;
- return pp_ring[i];
- }
- }
- for( i = 0; i < PICTURE_RING_SIZE; i++ )
- {
- if( pp_ring[i] == NULL ) break;
- }
-
- if( i == PICTURE_RING_SIZE )
- {
- msg_Err( p_this, "decoder/filter is leaking pictures, "
- "resetting its ring buffer" );
-
- for( i = 0; i < PICTURE_RING_SIZE; i++ )
- {
- pp_ring[i]->p_sys->b_dead = true;
- pp_ring[i]->pf_release( pp_ring[i] );
- pp_ring[i] = NULL;
- }
-
- i = 0;