shell-recorder-src: allow sending EOS to our source
When we send EOS to our source, make it queue the special item to cause EOS after all buffers are pushed.
This commit is contained in:
parent
43ae3b8140
commit
8b9904b6d0
@ -35,6 +35,7 @@ enum {
|
|||||||
/* Special marker value once the source is closed */
|
/* Special marker value once the source is closed */
|
||||||
#define RECORDER_QUEUE_END ((GstBuffer *)1)
|
#define RECORDER_QUEUE_END ((GstBuffer *)1)
|
||||||
|
|
||||||
|
#define shell_recorder_src_parent_class parent_class
|
||||||
G_DEFINE_TYPE(ShellRecorderSrc, shell_recorder_src, GST_TYPE_PUSH_SRC);
|
G_DEFINE_TYPE(ShellRecorderSrc, shell_recorder_src, GST_TYPE_PUSH_SRC);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -93,6 +94,26 @@ shell_recorder_src_negotiate (GstBaseSrc * base_src)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
shell_recorder_src_send_event (GstElement * element, GstEvent * event)
|
||||||
|
{
|
||||||
|
ShellRecorderSrc *src = SHELL_RECORDER_SRC (element);
|
||||||
|
gboolean res;
|
||||||
|
|
||||||
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
|
case GST_EVENT_EOS:
|
||||||
|
shell_recorder_src_close (src);
|
||||||
|
gst_event_unref (event);
|
||||||
|
res = TRUE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
res = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, send_event, (element,
|
||||||
|
event), FALSE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/* The create() virtual function is responsible for returning the next buffer.
|
/* The create() virtual function is responsible for returning the next buffer.
|
||||||
* We just pop buffers off of the queue and block if necessary.
|
* We just pop buffers off of the queue and block if necessary.
|
||||||
*/
|
*/
|
||||||
@ -224,11 +245,6 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
|
|||||||
object_class->set_property = shell_recorder_src_set_property;
|
object_class->set_property = shell_recorder_src_set_property;
|
||||||
object_class->get_property = shell_recorder_src_get_property;
|
object_class->get_property = shell_recorder_src_get_property;
|
||||||
|
|
||||||
base_src_class->negotiate = shell_recorder_src_negotiate;
|
|
||||||
|
|
||||||
push_src_class->create = shell_recorder_src_create;
|
|
||||||
|
|
||||||
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_CAPS,
|
PROP_CAPS,
|
||||||
g_param_spec_boxed ("caps",
|
g_param_spec_boxed ("caps",
|
||||||
@ -251,6 +267,12 @@ shell_recorder_src_class_init (ShellRecorderSrcClass *klass)
|
|||||||
"Generic/Src",
|
"Generic/Src",
|
||||||
"Feed screen capture data to a pipeline",
|
"Feed screen capture data to a pipeline",
|
||||||
"Owen Taylor <otaylor@redhat.com>");
|
"Owen Taylor <otaylor@redhat.com>");
|
||||||
|
|
||||||
|
element_class->send_event = shell_recorder_src_send_event;
|
||||||
|
|
||||||
|
base_src_class->negotiate = shell_recorder_src_negotiate;
|
||||||
|
|
||||||
|
push_src_class->create = shell_recorder_src_create;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user