decoder: add ref_count to GstVaapiPicture.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Mon, 21 Nov 2011 17:39:49 +0000 (18:39 +0100)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 24 Jan 2012 09:15:52 +0000 (10:15 +0100)
gst-libs/gst/vaapi/gstvaapidecoder.c
gst-libs/gst/vaapi/gstvaapidecoder_priv.h

index 4442f10..da738ef 100644 (file)
@@ -671,6 +671,7 @@ create_picture(GstVaapiDecoder *decoder)
 
     picture->type       = GST_VAAPI_PICTURE_TYPE_NONE;
     picture->flags      = 0;
+    picture->ref_count  = 1;
     picture->surface_id = VA_INVALID_ID;
     picture->surface    = NULL;
     picture->param_id   = VA_INVALID_ID;
index 3a6cda1..402348f 100644 (file)
@@ -149,6 +149,7 @@ struct _GstVaapiCodecInfo {
 struct _GstVaapiPicture {
     GstVaapiPictureType type;
     guint               flags;
+    guint               ref_count;
     VASurfaceID         surface_id;
     GstVaapiSurface    *surface;
     VABufferID          param_id;
@@ -254,6 +255,20 @@ void
 gst_vaapi_decoder_free_picture(GstVaapiDecoder *decoder, GstVaapiPicture *picture)
     attribute_hidden;
 
+static inline GstVaapiPicture *
+gst_vaapi_decoder_ref_picture(GstVaapiDecoder *decoder, GstVaapiPicture *picture)
+{
+    ++picture->ref_count;
+    return picture;
+}
+
+static inline void
+gst_vaapi_decoder_unref_picture(GstVaapiDecoder *decoder, GstVaapiPicture *picture)
+{
+    if (--picture->ref_count == 0)
+        gst_vaapi_decoder_free_picture(decoder, picture);
+}
+
 GstVaapiIqMatrix *
 gst_vaapi_decoder_new_iq_matrix(GstVaapiDecoder *decoder)
     attribute_hidden;