mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 22:36:33 +00:00
6439169db5
Drop support for user-defined data since this capability was not used so far and GstVaapiMiniObject represents the smallest reference counted object type. Add missing GST_VAAPI_MINI_OBJECT_CLASS() helper macro. Besides, since GstVaapiMiniObject is a libgstvaapi internal object, it is also possible to further simplify the layout of the object. i.e. merge GstVaapiMiniObjectBase into GstVaapiMiniObject.
154 lines
4.3 KiB
C
154 lines
4.3 KiB
C
/*
|
|
* gstvaapiminiobject.h - A lightweight reference counted object
|
|
*
|
|
* Copyright (C) 2012 Intel Corporation
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation; either version 2.1
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free
|
|
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef GST_VAAPI_MINI_OBJECT_H
|
|
#define GST_VAAPI_MINI_OBJECT_H
|
|
|
|
#include <glib.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
typedef struct _GstVaapiMiniObject GstVaapiMiniObject;
|
|
typedef struct _GstVaapiMiniObjectClass GstVaapiMiniObjectClass;
|
|
|
|
/**
|
|
* GST_VAAPI_MINI_OBJECT:
|
|
* @object: a #GstVaapiMiniObject
|
|
*
|
|
* Casts the @object to a #GstVaapiMiniObject
|
|
*/
|
|
#define GST_VAAPI_MINI_OBJECT(object) \
|
|
((GstVaapiMiniObject *)(object))
|
|
|
|
/**
|
|
* GST_VAAPI_MINI_OBJECT_CLASS:
|
|
* @klass: a #GstVaapiMiniObjectClass
|
|
*
|
|
* Casts the @klass to a #GstVaapiMiniObjectClass
|
|
*/
|
|
#define GST_VAAPI_MINI_OBJECT_CLASS(klass) \
|
|
((GstVaapiMiniObjectClass *)(klass))
|
|
|
|
/**
|
|
* GST_VAAPI_MINI_OBJECT_GET_CLASS:
|
|
* @object: a #GstVaapiMiniObject
|
|
*
|
|
* Retrieves the #GstVaapiMiniObjectClass associated with the @object
|
|
*/
|
|
#define GST_VAAPI_MINI_OBJECT_GET_CLASS(object) \
|
|
(GST_VAAPI_MINI_OBJECT(object)->object_class)
|
|
|
|
/**
|
|
* GST_VAAPI_MINI_OBJECT_FLAGS:
|
|
* @object: a #GstVaapiMiniObject
|
|
*
|
|
* The entire set of flags for the @object
|
|
*/
|
|
#define GST_VAAPI_MINI_OBJECT_FLAGS(object) \
|
|
(GST_VAAPI_MINI_OBJECT(object)->flags)
|
|
|
|
/**
|
|
* GST_VAAPI_MINI_OBJECT_FLAG_IS_SET:
|
|
* @object: a #GstVaapiMiniObject
|
|
* @flag: a flag to check for
|
|
*
|
|
* Checks whether the given @flag is set
|
|
*/
|
|
#define GST_VAAPI_MINI_OBJECT_FLAG_IS_SET(object, flag) \
|
|
((GST_VAAPI_MINI_OBJECT_FLAGS(object) & (flag)) != 0)
|
|
|
|
/**
|
|
* GST_VAAPI_MINI_OBJECT_FLAG_SET:
|
|
* @object: a #GstVaapiMiniObject
|
|
* @flags: flags to set
|
|
*
|
|
* This macro sets the given bits
|
|
*/
|
|
#define GST_VAAPI_MINI_OBJECT_FLAG_SET(object, flags) \
|
|
(GST_VAAPI_MINI_OBJECT_FLAGS(object) |= (flags))
|
|
|
|
/**
|
|
* GST_VAAPI_MINI_OBJECT_FLAG_UNSET:
|
|
* @object: a #GstVaapiMiniObject
|
|
* @flags: flags to unset
|
|
*
|
|
* This macro unsets the given bits.
|
|
*/
|
|
#define GST_VAAPI_MINI_OBJECT_FLAG_UNSET(object, flags) \
|
|
(GST_VAAPI_MINI_OBJECT_FLAGS(object) &= ~(flags))
|
|
|
|
/**
|
|
* GstVaapiMiniObject:
|
|
* @object_class: the #GstVaapiMiniObjectClass
|
|
* @ref_count: the object reference count that should be manipulated
|
|
* through gst_vaapi_mini_object_ref() et al. helpers
|
|
* @flags: set of flags that should be manipulated through
|
|
* GST_VAAPI_MINI_OBJECT_FLAG_*() functions
|
|
*
|
|
* A #GstVaapiMiniObject represents a minimal reference counted data
|
|
* structure that can hold a set of flags and user-provided data.
|
|
*/
|
|
struct _GstVaapiMiniObject {
|
|
/*< private >*/
|
|
gconstpointer object_class;
|
|
volatile gint ref_count;
|
|
guint flags;
|
|
};
|
|
|
|
/**
|
|
* GstVaapiMiniObjectClass:
|
|
* @size: size in bytes of the #GstVaapiMiniObject, plus any
|
|
* additional data for derived classes
|
|
* @finalize: function called to destroy data in derived classes
|
|
*
|
|
* A #GstVaapiMiniObjectClass represents the base object class that
|
|
* defines the size of the #GstVaapiMiniObject and utility function to
|
|
* dispose child objects
|
|
*/
|
|
struct _GstVaapiMiniObjectClass {
|
|
guint size;
|
|
GDestroyNotify finalize;
|
|
};
|
|
|
|
G_GNUC_INTERNAL
|
|
GstVaapiMiniObject *
|
|
gst_vaapi_mini_object_new(const GstVaapiMiniObjectClass *object_class);
|
|
|
|
G_GNUC_INTERNAL
|
|
GstVaapiMiniObject *
|
|
gst_vaapi_mini_object_new0(const GstVaapiMiniObjectClass *object_class);
|
|
|
|
G_GNUC_INTERNAL
|
|
GstVaapiMiniObject *
|
|
gst_vaapi_mini_object_ref(GstVaapiMiniObject *object);
|
|
|
|
G_GNUC_INTERNAL
|
|
void
|
|
gst_vaapi_mini_object_unref(GstVaapiMiniObject *object);
|
|
|
|
G_GNUC_INTERNAL
|
|
void
|
|
gst_vaapi_mini_object_replace(GstVaapiMiniObject **old_object_ptr,
|
|
GstVaapiMiniObject *new_object);
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* GST_VAAPI_MINI_OBJECT_H */
|