mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-09-04 11:14:10 +00:00
baseparse: more debug logging, minor clean-up
Trace frames, split out code to queue a frame for later.
This commit is contained in:
parent
8fe1924678
commit
127df9a586
1 changed files with 28 additions and 9 deletions
|
@ -547,12 +547,16 @@ gst_base_parse_frame_copy (GstBaseParseFrame * frame)
|
||||||
copy->buffer = gst_buffer_ref (frame->buffer);
|
copy->buffer = gst_buffer_ref (frame->buffer);
|
||||||
copy->_private_flags &= ~GST_BASE_PARSE_FRAME_PRIVATE_FLAG_NOALLOC;
|
copy->_private_flags &= ~GST_BASE_PARSE_FRAME_PRIVATE_FLAG_NOALLOC;
|
||||||
|
|
||||||
|
GST_TRACE ("copied frame %p -> %p", frame, copy);
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_base_parse_frame_free (GstBaseParseFrame * frame)
|
gst_base_parse_frame_free (GstBaseParseFrame * frame)
|
||||||
{
|
{
|
||||||
|
GST_TRACE ("freeing frame %p", frame);
|
||||||
|
|
||||||
if (frame->buffer) {
|
if (frame->buffer) {
|
||||||
gst_buffer_unref (frame->buffer);
|
gst_buffer_unref (frame->buffer);
|
||||||
frame->buffer = NULL;
|
frame->buffer = NULL;
|
||||||
|
@ -595,6 +599,7 @@ gst_base_parse_frame_init (GstBaseParseFrame * frame)
|
||||||
{
|
{
|
||||||
memset (frame, 0, sizeof (GstBaseParseFrame));
|
memset (frame, 0, sizeof (GstBaseParseFrame));
|
||||||
frame->_private_flags = GST_BASE_PARSE_FRAME_PRIVATE_FLAG_NOALLOC;
|
frame->_private_flags = GST_BASE_PARSE_FRAME_PRIVATE_FLAG_NOALLOC;
|
||||||
|
GST_TRACE ("inited frame %p", frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -624,6 +629,7 @@ gst_base_parse_frame_new (GstBuffer * buffer, GstBaseParseFrameFlags flags,
|
||||||
frame = g_slice_new0 (GstBaseParseFrame);
|
frame = g_slice_new0 (GstBaseParseFrame);
|
||||||
frame->buffer = gst_buffer_ref (buffer);
|
frame->buffer = gst_buffer_ref (buffer);
|
||||||
|
|
||||||
|
GST_TRACE ("created frame %p", frame);
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1521,6 +1527,25 @@ gst_base_parse_check_media (GstBaseParse * parse)
|
||||||
GST_DEBUG_OBJECT (parse, "media is video == %d", parse->priv->is_video);
|
GST_DEBUG_OBJECT (parse, "media is video == %d", parse->priv->is_video);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* takes ownership of frame */
|
||||||
|
static void
|
||||||
|
gst_base_parse_queue_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
|
||||||
|
{
|
||||||
|
if (!(frame->_private_flags & GST_BASE_PARSE_FRAME_PRIVATE_FLAG_NOALLOC)) {
|
||||||
|
/* frame allocated on the heap, we can just take ownership */
|
||||||
|
g_queue_push_tail (&parse->priv->queued_frames, frame);
|
||||||
|
GST_TRACE ("queued frame %p", frame);
|
||||||
|
} else {
|
||||||
|
GstBaseParseFrame *copy;
|
||||||
|
|
||||||
|
/* probably allocated on the stack, must make a proper copy */
|
||||||
|
copy = gst_base_parse_frame_copy (frame);
|
||||||
|
g_queue_push_tail (&parse->priv->queued_frames, copy);
|
||||||
|
GST_TRACE ("queued frame %p (copy of %p)", copy, frame);
|
||||||
|
gst_base_parse_frame_free (frame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* gst_base_parse_handle_and_push_buffer:
|
/* gst_base_parse_handle_and_push_buffer:
|
||||||
* @parse: #GstBaseParse.
|
* @parse: #GstBaseParse.
|
||||||
* @klass: #GstBaseParseClass.
|
* @klass: #GstBaseParseClass.
|
||||||
|
@ -1627,15 +1652,7 @@ gst_base_parse_handle_and_push_frame (GstBaseParse * parse,
|
||||||
gst_base_parse_frame_free (frame);
|
gst_base_parse_frame_free (frame);
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
} else if (ret == GST_BASE_PARSE_FLOW_QUEUED) {
|
} else if (ret == GST_BASE_PARSE_FLOW_QUEUED) {
|
||||||
if (!(frame->_private_flags & GST_BASE_PARSE_FRAME_PRIVATE_FLAG_NOALLOC)) {
|
gst_base_parse_queue_frame (parse, frame);
|
||||||
/* frame allocated on the heap, we can just take ownership */
|
|
||||||
g_queue_push_tail (&parse->priv->queued_frames, frame);
|
|
||||||
} else {
|
|
||||||
/* probably allocated on the stack, must make a proper copy */
|
|
||||||
g_queue_push_tail (&parse->priv->queued_frames,
|
|
||||||
gst_base_parse_frame_copy (frame));
|
|
||||||
gst_base_parse_frame_free (frame);
|
|
||||||
}
|
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
} else if (ret != GST_FLOW_OK) {
|
} else if (ret != GST_FLOW_OK) {
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1686,6 +1703,8 @@ gst_base_parse_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
|
||||||
g_return_val_if_fail (frame != NULL, GST_FLOW_ERROR);
|
g_return_val_if_fail (frame != NULL, GST_FLOW_ERROR);
|
||||||
g_return_val_if_fail (frame->buffer != NULL, GST_FLOW_ERROR);
|
g_return_val_if_fail (frame->buffer != NULL, GST_FLOW_ERROR);
|
||||||
|
|
||||||
|
GST_TRACE_OBJECT (parse, "pushing frame %p", frame);
|
||||||
|
|
||||||
buffer = frame->buffer;
|
buffer = frame->buffer;
|
||||||
|
|
||||||
GST_LOG_OBJECT (parse,
|
GST_LOG_OBJECT (parse,
|
||||||
|
|
Loading…
Reference in a new issue