Commit caa4d653 authored by Laurent Aimar's avatar Laurent Aimar

Improved a bit picture API.

parent c14063ab
...@@ -51,6 +51,11 @@ typedef struct plane_t ...@@ -51,6 +51,11 @@ typedef struct plane_t
} plane_t; } plane_t;
/**
* A private definition to help overloading picture release
*/
typedef struct picture_release_sys_t picture_release_sys_t;
/** /**
* Video picture * Video picture
* *
...@@ -113,6 +118,7 @@ struct picture_t ...@@ -113,6 +118,7 @@ struct picture_t
/** This way the picture_Release can be overloaded */ /** This way the picture_Release can be overloaded */
void (*pf_release)( picture_t * ); void (*pf_release)( picture_t * );
picture_release_sys_t *p_release_sys;
/** Next picture in a FIFO a pictures */ /** Next picture in a FIFO a pictures */
struct picture_t *p_next; struct picture_t *p_next;
...@@ -122,7 +128,7 @@ struct picture_t ...@@ -122,7 +128,7 @@ struct picture_t
* This function will create a new picture. * This function will create a new picture.
* The picture created will implement a default release management compatible * The picture created will implement a default release management compatible
* with picture_Hold and picture_Release. This default management will release * with picture_Hold and picture_Release. This default management will release
* picture_sys_t *p_sys field if non NULL. * p_sys, p_q, p_data_orig fields if non NULL.
*/ */
VLC_EXPORT( picture_t *, picture_New, ( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) ); VLC_EXPORT( picture_t *, picture_New, ( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) );
...@@ -155,6 +161,17 @@ static inline void picture_Release( picture_t *p_picture ) ...@@ -155,6 +161,17 @@ static inline void picture_Release( picture_t *p_picture )
p_picture->pf_release( p_picture ); p_picture->pf_release( p_picture );
} }
/**
* This function will return true if you are not the only owner of the
* picture.
*
* It is only valid if it is created using picture_New.
*/
static inline bool picture_IsReferenced( picture_t *p_picture )
{
return p_picture->i_refcount > 1;
}
/** /**
* Cleanup quantization matrix data and set to 0 * Cleanup quantization matrix data and set to 0
*/ */
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <vlc_filter.h> #include <vlc_filter.h>
#include <vlc_image.h> #include <vlc_image.h>
#include <vlc_block.h> #include <vlc_block.h>
#include <vlc_picture_pool.h>
#include "vout_pictures.h" #include "vout_pictures.h"
#include "vout_internal.h" #include "vout_internal.h"
...@@ -664,6 +665,7 @@ int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma, int i_width, int ...@@ -664,6 +665,7 @@ int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma, int i_width, int
} }
p_picture->pf_release = NULL; p_picture->pf_release = NULL;
p_picture->p_release_sys = NULL;
p_picture->pf_lock = NULL; p_picture->pf_lock = NULL;
p_picture->pf_unlock = NULL; p_picture->pf_unlock = NULL;
p_picture->i_refcount = 0; p_picture->i_refcount = 0;
...@@ -925,6 +927,7 @@ picture_t *picture_New( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_ ...@@ -925,6 +927,7 @@ picture_t *picture_New( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_
void picture_Delete( picture_t *p_picture ) void picture_Delete( picture_t *p_picture )
{ {
assert( p_picture && p_picture->i_refcount == 0 ); assert( p_picture && p_picture->i_refcount == 0 );
assert( p_picture->p_release_sys == NULL );
free( p_picture->p_q ); free( p_picture->p_q );
free( p_picture->p_data_orig ); free( p_picture->p_data_orig );
...@@ -1047,4 +1050,3 @@ int picture_Export( vlc_object_t *p_obj, ...@@ -1047,4 +1050,3 @@ int picture_Export( vlc_object_t *p_obj,
/***************************************************************************** /*****************************************************************************
* *
*****************************************************************************/ *****************************************************************************/
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment