mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-03 01:02:19 +00:00
adapter: make internals private
Make the adapter fields private.
This commit is contained in:
parent
8a962bc1ab
commit
aad3812633
2 changed files with 69 additions and 98 deletions
|
@ -124,11 +124,21 @@ static void gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush);
|
||||||
GST_DEBUG_CATEGORY_STATIC (gst_adapter_debug);
|
GST_DEBUG_CATEGORY_STATIC (gst_adapter_debug);
|
||||||
#define GST_CAT_DEFAULT gst_adapter_debug
|
#define GST_CAT_DEFAULT gst_adapter_debug
|
||||||
|
|
||||||
#define GST_ADAPTER_GET_PRIVATE(obj) \
|
struct _GstAdapter
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_ADAPTER, GstAdapterPrivate))
|
|
||||||
|
|
||||||
struct _GstAdapterPrivate
|
|
||||||
{
|
{
|
||||||
|
GObject object;
|
||||||
|
|
||||||
|
/*< private > */
|
||||||
|
GSList *buflist;
|
||||||
|
GSList *buflist_end;
|
||||||
|
gsize size;
|
||||||
|
gsize skip;
|
||||||
|
|
||||||
|
/* we keep state of assembled pieces */
|
||||||
|
gpointer assembled_data;
|
||||||
|
gsize assembled_size;
|
||||||
|
gsize assembled_len;
|
||||||
|
|
||||||
GstClockTime pts;
|
GstClockTime pts;
|
||||||
guint64 pts_distance;
|
guint64 pts_distance;
|
||||||
GstClockTime dts;
|
GstClockTime dts;
|
||||||
|
@ -140,6 +150,11 @@ struct _GstAdapterPrivate
|
||||||
GstMapInfo info;
|
GstMapInfo info;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _GstAdapterClass
|
||||||
|
{
|
||||||
|
GObjectClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
#define _do_init \
|
#define _do_init \
|
||||||
GST_DEBUG_CATEGORY_INIT (gst_adapter_debug, "adapter", 0, "object to splice and merge buffers to desired size")
|
GST_DEBUG_CATEGORY_INIT (gst_adapter_debug, "adapter", 0, "object to splice and merge buffers to desired size")
|
||||||
#define gst_adapter_parent_class parent_class
|
#define gst_adapter_parent_class parent_class
|
||||||
|
@ -153,8 +168,6 @@ gst_adapter_class_init (GstAdapterClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass *object = G_OBJECT_CLASS (klass);
|
GObjectClass *object = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
g_type_class_add_private (klass, sizeof (GstAdapterPrivate));
|
|
||||||
|
|
||||||
object->dispose = gst_adapter_dispose;
|
object->dispose = gst_adapter_dispose;
|
||||||
object->finalize = gst_adapter_finalize;
|
object->finalize = gst_adapter_finalize;
|
||||||
}
|
}
|
||||||
|
@ -162,13 +175,12 @@ gst_adapter_class_init (GstAdapterClass * klass)
|
||||||
static void
|
static void
|
||||||
gst_adapter_init (GstAdapter * adapter)
|
gst_adapter_init (GstAdapter * adapter)
|
||||||
{
|
{
|
||||||
adapter->priv = GST_ADAPTER_GET_PRIVATE (adapter);
|
|
||||||
adapter->assembled_data = g_malloc (DEFAULT_SIZE);
|
adapter->assembled_data = g_malloc (DEFAULT_SIZE);
|
||||||
adapter->assembled_size = DEFAULT_SIZE;
|
adapter->assembled_size = DEFAULT_SIZE;
|
||||||
adapter->priv->pts = GST_CLOCK_TIME_NONE;
|
adapter->pts = GST_CLOCK_TIME_NONE;
|
||||||
adapter->priv->pts_distance = 0;
|
adapter->pts_distance = 0;
|
||||||
adapter->priv->dts = GST_CLOCK_TIME_NONE;
|
adapter->dts = GST_CLOCK_TIME_NONE;
|
||||||
adapter->priv->dts_distance = 0;
|
adapter->dts_distance = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -213,13 +225,9 @@ gst_adapter_new (void)
|
||||||
void
|
void
|
||||||
gst_adapter_clear (GstAdapter * adapter)
|
gst_adapter_clear (GstAdapter * adapter)
|
||||||
{
|
{
|
||||||
GstAdapterPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (GST_IS_ADAPTER (adapter));
|
g_return_if_fail (GST_IS_ADAPTER (adapter));
|
||||||
|
|
||||||
priv = adapter->priv;
|
if (adapter->info.memory)
|
||||||
|
|
||||||
if (priv->info.memory)
|
|
||||||
gst_adapter_unmap (adapter);
|
gst_adapter_unmap (adapter);
|
||||||
|
|
||||||
g_slist_foreach (adapter->buflist, (GFunc) gst_mini_object_unref, NULL);
|
g_slist_foreach (adapter->buflist, (GFunc) gst_mini_object_unref, NULL);
|
||||||
|
@ -229,12 +237,12 @@ gst_adapter_clear (GstAdapter * adapter)
|
||||||
adapter->size = 0;
|
adapter->size = 0;
|
||||||
adapter->skip = 0;
|
adapter->skip = 0;
|
||||||
adapter->assembled_len = 0;
|
adapter->assembled_len = 0;
|
||||||
priv->pts = GST_CLOCK_TIME_NONE;
|
adapter->pts = GST_CLOCK_TIME_NONE;
|
||||||
priv->pts_distance = 0;
|
adapter->pts_distance = 0;
|
||||||
priv->dts = GST_CLOCK_TIME_NONE;
|
adapter->dts = GST_CLOCK_TIME_NONE;
|
||||||
priv->dts_distance = 0;
|
adapter->dts_distance = 0;
|
||||||
priv->scan_offset = 0;
|
adapter->scan_offset = 0;
|
||||||
priv->scan_entry = NULL;
|
adapter->scan_entry = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -245,14 +253,14 @@ update_timestamps (GstAdapter * adapter, GstBuffer * buf)
|
||||||
pts = GST_BUFFER_PTS (buf);
|
pts = GST_BUFFER_PTS (buf);
|
||||||
if (GST_CLOCK_TIME_IS_VALID (pts)) {
|
if (GST_CLOCK_TIME_IS_VALID (pts)) {
|
||||||
GST_LOG_OBJECT (adapter, "new pts %" GST_TIME_FORMAT, GST_TIME_ARGS (pts));
|
GST_LOG_OBJECT (adapter, "new pts %" GST_TIME_FORMAT, GST_TIME_ARGS (pts));
|
||||||
adapter->priv->pts = pts;
|
adapter->pts = pts;
|
||||||
adapter->priv->pts_distance = 0;
|
adapter->pts_distance = 0;
|
||||||
}
|
}
|
||||||
dts = GST_BUFFER_DTS (buf);
|
dts = GST_BUFFER_DTS (buf);
|
||||||
if (GST_CLOCK_TIME_IS_VALID (dts)) {
|
if (GST_CLOCK_TIME_IS_VALID (dts)) {
|
||||||
GST_LOG_OBJECT (adapter, "new dts %" GST_TIME_FORMAT, GST_TIME_ARGS (dts));
|
GST_LOG_OBJECT (adapter, "new dts %" GST_TIME_FORMAT, GST_TIME_ARGS (dts));
|
||||||
adapter->priv->dts = dts;
|
adapter->dts = dts;
|
||||||
adapter->priv->dts_distance = 0;
|
adapter->dts_distance = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,9 +275,9 @@ copy_into_unchecked (GstAdapter * adapter, guint8 * dest, gsize skip,
|
||||||
|
|
||||||
/* first step, do skipping */
|
/* first step, do skipping */
|
||||||
/* we might well be copying where we were scanning */
|
/* we might well be copying where we were scanning */
|
||||||
if (adapter->priv->scan_entry && (adapter->priv->scan_offset <= skip)) {
|
if (adapter->scan_entry && (adapter->scan_offset <= skip)) {
|
||||||
g = adapter->priv->scan_entry;
|
g = adapter->scan_entry;
|
||||||
skip -= adapter->priv->scan_offset;
|
skip -= adapter->scan_offset;
|
||||||
} else {
|
} else {
|
||||||
g = adapter->buflist;
|
g = adapter->buflist;
|
||||||
}
|
}
|
||||||
|
@ -388,8 +396,8 @@ gst_adapter_try_to_merge_up (GstAdapter * adapter, gsize size)
|
||||||
g->data = head;
|
g->data = head;
|
||||||
|
|
||||||
/* invalidate scan position */
|
/* invalidate scan position */
|
||||||
adapter->priv->scan_offset = 0;
|
adapter->scan_offset = 0;
|
||||||
adapter->priv->scan_entry = NULL;
|
adapter->scan_entry = NULL;
|
||||||
|
|
||||||
g = g_slist_next (g);
|
g = g_slist_next (g);
|
||||||
}
|
}
|
||||||
|
@ -422,7 +430,6 @@ gst_adapter_try_to_merge_up (GstAdapter * adapter, gsize size)
|
||||||
gconstpointer
|
gconstpointer
|
||||||
gst_adapter_map (GstAdapter * adapter, gsize size)
|
gst_adapter_map (GstAdapter * adapter, gsize size)
|
||||||
{
|
{
|
||||||
GstAdapterPrivate *priv;
|
|
||||||
GstBuffer *cur;
|
GstBuffer *cur;
|
||||||
gsize skip, csize;
|
gsize skip, csize;
|
||||||
gsize toreuse, tocopy;
|
gsize toreuse, tocopy;
|
||||||
|
@ -431,9 +438,7 @@ gst_adapter_map (GstAdapter * adapter, gsize size)
|
||||||
g_return_val_if_fail (GST_IS_ADAPTER (adapter), NULL);
|
g_return_val_if_fail (GST_IS_ADAPTER (adapter), NULL);
|
||||||
g_return_val_if_fail (size > 0, NULL);
|
g_return_val_if_fail (size > 0, NULL);
|
||||||
|
|
||||||
priv = adapter->priv;
|
if (adapter->info.memory)
|
||||||
|
|
||||||
if (priv->info.memory)
|
|
||||||
gst_adapter_unmap (adapter);
|
gst_adapter_unmap (adapter);
|
||||||
|
|
||||||
/* we don't have enough data, return NULL. This is unlikely
|
/* we don't have enough data, return NULL. This is unlikely
|
||||||
|
@ -452,10 +457,10 @@ gst_adapter_map (GstAdapter * adapter, gsize size)
|
||||||
|
|
||||||
csize = gst_buffer_get_size (cur);
|
csize = gst_buffer_get_size (cur);
|
||||||
if (csize >= size + skip) {
|
if (csize >= size + skip) {
|
||||||
if (!gst_buffer_map (cur, &priv->info, GST_MAP_READ))
|
if (!gst_buffer_map (cur, &adapter->info, GST_MAP_READ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
return (guint8 *) priv->info.data + skip;
|
return (guint8 *) adapter->info.data + skip;
|
||||||
}
|
}
|
||||||
/* We may be able to efficiently merge buffers in our pool to
|
/* We may be able to efficiently merge buffers in our pool to
|
||||||
* gather a big enough chunk to return it from the head buffer directly */
|
* gather a big enough chunk to return it from the head buffer directly */
|
||||||
|
@ -503,17 +508,13 @@ gst_adapter_map (GstAdapter * adapter, gsize size)
|
||||||
void
|
void
|
||||||
gst_adapter_unmap (GstAdapter * adapter)
|
gst_adapter_unmap (GstAdapter * adapter)
|
||||||
{
|
{
|
||||||
GstAdapterPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (GST_IS_ADAPTER (adapter));
|
g_return_if_fail (GST_IS_ADAPTER (adapter));
|
||||||
|
|
||||||
priv = adapter->priv;
|
if (adapter->info.memory) {
|
||||||
|
|
||||||
if (priv->info.memory) {
|
|
||||||
GstBuffer *cur = adapter->buflist->data;
|
GstBuffer *cur = adapter->buflist->data;
|
||||||
GST_LOG_OBJECT (adapter, "unmap memory buffer %p", cur);
|
GST_LOG_OBJECT (adapter, "unmap memory buffer %p", cur);
|
||||||
gst_buffer_unmap (cur, &priv->info);
|
gst_buffer_unmap (cur, &adapter->info);
|
||||||
priv->info.memory = NULL;
|
adapter->info.memory = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,14 +559,11 @@ gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush)
|
||||||
{
|
{
|
||||||
GstBuffer *cur;
|
GstBuffer *cur;
|
||||||
gsize size;
|
gsize size;
|
||||||
GstAdapterPrivate *priv;
|
|
||||||
GSList *g;
|
GSList *g;
|
||||||
|
|
||||||
GST_LOG_OBJECT (adapter, "flushing %" G_GSIZE_FORMAT " bytes", flush);
|
GST_LOG_OBJECT (adapter, "flushing %" G_GSIZE_FORMAT " bytes", flush);
|
||||||
|
|
||||||
priv = adapter->priv;
|
if (adapter->info.memory)
|
||||||
|
|
||||||
if (priv->info.memory)
|
|
||||||
gst_adapter_unmap (adapter);
|
gst_adapter_unmap (adapter);
|
||||||
|
|
||||||
/* clear state */
|
/* clear state */
|
||||||
|
@ -575,8 +573,8 @@ gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush)
|
||||||
/* take skip into account */
|
/* take skip into account */
|
||||||
flush += adapter->skip;
|
flush += adapter->skip;
|
||||||
/* distance is always at least the amount of skipped bytes */
|
/* distance is always at least the amount of skipped bytes */
|
||||||
priv->pts_distance -= adapter->skip;
|
adapter->pts_distance -= adapter->skip;
|
||||||
priv->dts_distance -= adapter->skip;
|
adapter->dts_distance -= adapter->skip;
|
||||||
|
|
||||||
g = adapter->buflist;
|
g = adapter->buflist;
|
||||||
cur = g->data;
|
cur = g->data;
|
||||||
|
@ -584,8 +582,8 @@ gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush)
|
||||||
while (flush >= size) {
|
while (flush >= size) {
|
||||||
/* can skip whole buffer */
|
/* can skip whole buffer */
|
||||||
GST_LOG_OBJECT (adapter, "flushing out head buffer");
|
GST_LOG_OBJECT (adapter, "flushing out head buffer");
|
||||||
priv->pts_distance += size;
|
adapter->pts_distance += size;
|
||||||
priv->dts_distance += size;
|
adapter->dts_distance += size;
|
||||||
flush -= size;
|
flush -= size;
|
||||||
|
|
||||||
gst_buffer_unref (cur);
|
gst_buffer_unref (cur);
|
||||||
|
@ -604,11 +602,11 @@ gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush)
|
||||||
adapter->buflist = g;
|
adapter->buflist = g;
|
||||||
/* account for the remaining bytes */
|
/* account for the remaining bytes */
|
||||||
adapter->skip = flush;
|
adapter->skip = flush;
|
||||||
adapter->priv->pts_distance += flush;
|
adapter->pts_distance += flush;
|
||||||
adapter->priv->dts_distance += flush;
|
adapter->dts_distance += flush;
|
||||||
/* invalidate scan position */
|
/* invalidate scan position */
|
||||||
priv->scan_offset = 0;
|
adapter->scan_offset = 0;
|
||||||
priv->scan_entry = NULL;
|
adapter->scan_entry = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -909,9 +907,9 @@ gst_adapter_prev_pts (GstAdapter * adapter, guint64 * distance)
|
||||||
g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_CLOCK_TIME_NONE);
|
g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_CLOCK_TIME_NONE);
|
||||||
|
|
||||||
if (distance)
|
if (distance)
|
||||||
*distance = adapter->priv->pts_distance;
|
*distance = adapter->pts_distance;
|
||||||
|
|
||||||
return adapter->priv->pts;
|
return adapter->pts;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -936,9 +934,9 @@ gst_adapter_prev_dts (GstAdapter * adapter, guint64 * distance)
|
||||||
g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_CLOCK_TIME_NONE);
|
g_return_val_if_fail (GST_IS_ADAPTER (adapter), GST_CLOCK_TIME_NONE);
|
||||||
|
|
||||||
if (distance)
|
if (distance)
|
||||||
*distance = adapter->priv->dts_distance;
|
*distance = adapter->dts_distance;
|
||||||
|
|
||||||
return adapter->priv->dts;
|
return adapter->dts;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -989,21 +987,21 @@ gst_adapter_masked_scan_uint32_peek (GstAdapter * adapter, guint32 mask,
|
||||||
|
|
||||||
/* first step, do skipping and position on the first buffer */
|
/* first step, do skipping and position on the first buffer */
|
||||||
/* optimistically assume scanning continues sequentially */
|
/* optimistically assume scanning continues sequentially */
|
||||||
if (adapter->priv->scan_entry && (adapter->priv->scan_offset <= skip)) {
|
if (adapter->scan_entry && (adapter->scan_offset <= skip)) {
|
||||||
g = adapter->priv->scan_entry;
|
g = adapter->scan_entry;
|
||||||
skip -= adapter->priv->scan_offset;
|
skip -= adapter->scan_offset;
|
||||||
} else {
|
} else {
|
||||||
g = adapter->buflist;
|
g = adapter->buflist;
|
||||||
adapter->priv->scan_offset = 0;
|
adapter->scan_offset = 0;
|
||||||
adapter->priv->scan_entry = NULL;
|
adapter->scan_entry = NULL;
|
||||||
}
|
}
|
||||||
buf = g->data;
|
buf = g->data;
|
||||||
bsize = gst_buffer_get_size (buf);
|
bsize = gst_buffer_get_size (buf);
|
||||||
while (G_UNLIKELY (skip >= bsize)) {
|
while (G_UNLIKELY (skip >= bsize)) {
|
||||||
skip -= bsize;
|
skip -= bsize;
|
||||||
g = g_slist_next (g);
|
g = g_slist_next (g);
|
||||||
adapter->priv->scan_offset += bsize;
|
adapter->scan_offset += bsize;
|
||||||
adapter->priv->scan_entry = g;
|
adapter->scan_entry = g;
|
||||||
buf = g->data;
|
buf = g->data;
|
||||||
bsize = gst_buffer_get_size (buf);
|
bsize = gst_buffer_get_size (buf);
|
||||||
}
|
}
|
||||||
|
@ -1041,8 +1039,8 @@ gst_adapter_masked_scan_uint32_peek (GstAdapter * adapter, guint32 mask,
|
||||||
/* nothing found yet, go to next buffer */
|
/* nothing found yet, go to next buffer */
|
||||||
skip += bsize;
|
skip += bsize;
|
||||||
g = g_slist_next (g);
|
g = g_slist_next (g);
|
||||||
adapter->priv->scan_offset += info.size;
|
adapter->scan_offset += info.size;
|
||||||
adapter->priv->scan_entry = g;
|
adapter->scan_entry = g;
|
||||||
gst_buffer_unmap (buf, &info);
|
gst_buffer_unmap (buf, &info);
|
||||||
buf = g->data;
|
buf = g->data;
|
||||||
|
|
||||||
|
|
|
@ -38,40 +38,13 @@ G_BEGIN_DECLS
|
||||||
#define GST_IS_ADAPTER_CLASS(klass) \
|
#define GST_IS_ADAPTER_CLASS(klass) \
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_ADAPTER))
|
(G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_ADAPTER))
|
||||||
|
|
||||||
typedef struct _GstAdapter GstAdapter;
|
|
||||||
typedef struct _GstAdapterClass GstAdapterClass;
|
|
||||||
typedef struct _GstAdapterPrivate GstAdapterPrivate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstAdapter:
|
* GstAdapter:
|
||||||
*
|
*
|
||||||
* The opaque #GstAdapter data structure.
|
* The opaque #GstAdapter data structure.
|
||||||
*/
|
*/
|
||||||
struct _GstAdapter {
|
typedef struct _GstAdapter GstAdapter;
|
||||||
GObject object;
|
typedef struct _GstAdapterClass GstAdapterClass;
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
GSList * buflist;
|
|
||||||
GSList * buflist_end;
|
|
||||||
gsize size;
|
|
||||||
gsize skip;
|
|
||||||
|
|
||||||
/* we keep state of assembled pieces */
|
|
||||||
gpointer assembled_data;
|
|
||||||
gsize assembled_size;
|
|
||||||
gsize assembled_len;
|
|
||||||
|
|
||||||
GstAdapterPrivate *priv;
|
|
||||||
|
|
||||||
gpointer _gst_reserved[GST_PADDING];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _GstAdapterClass {
|
|
||||||
GObjectClass parent_class;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
gpointer _gst_reserved[GST_PADDING];
|
|
||||||
};
|
|
||||||
|
|
||||||
GType gst_adapter_get_type (void);
|
GType gst_adapter_get_type (void);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue