]> git.sesse.net Git - vlc/commitdiff
picture: pointer for decoder-specified hardware context
authorRémi Denis-Courmont <remi@remlab.net>
Fri, 21 Jun 2013 20:12:30 +0000 (23:12 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 7 Jul 2013 18:11:59 +0000 (21:11 +0300)
include/vlc_picture.h
src/misc/picture.c

index c99f54d7212b39689a8027c64cc92b40442cf080..0b3f948aa540354f1a723e56a6cd9b2a075020ca 100644 (file)
@@ -91,6 +91,8 @@ struct picture_t
     bool            b_progressive;          /**< is it a progressive frame ? */
     bool            b_top_field_first;             /**< which field is first */
     unsigned int    i_nb_fields;                  /**< # of displayed fields */
+    void          * context;          /**< video format-specific data pointer,
+             * must point to a (void (*)(void*)) pointer to free the context */
     /**@}*/
 
     /** Private data - the video output plugin might want to put stuff here to
index ee30af00c8997000dec39f63bd9119a2ad036be4..ac4caba13f769111183da9b6ffb40d97be718e32 100644 (file)
@@ -85,6 +85,18 @@ static int AllocatePicture( picture_t *p_pic )
 /*****************************************************************************
  *
  *****************************************************************************/
+
+static void PictureDestroyContext( picture_t *p_picture )
+{
+    void (**context)( void * ) = p_picture->context;
+    if( context != NULL )
+    {
+        void (*context_destroy)( void * ) = *context;
+        context_destroy( context );
+        p_picture->context = NULL;
+    }
+}
+
 static void PictureDestroy( picture_t *p_picture )
 {
     assert( p_picture &&
@@ -106,6 +118,7 @@ void picture_Reset( picture_t *p_picture )
     p_picture->b_progressive = false;
     p_picture->i_nb_fields = 2;
     p_picture->b_top_field_first = false;
+    PictureDestroyContext( p_picture );
 }
 
 /*****************************************************************************
@@ -271,6 +284,7 @@ void picture_Release( picture_t *p_picture )
     if( refs > 0 )
         return;
 
+    PictureDestroyContext( p_picture );
     if( p_picture->gc.pf_destroy != NULL )
         p_picture->gc.pf_destroy( p_picture );
 }