shell-recorder-src: Set frame duration
We where not setting a duration for the frames, which caused the resulting videos to have a broken header. Fix that by making the source a live source and setting the correct frame duration. https://bugzilla.gnome.org/show_bug.cgi?id=688487
This commit is contained in:
parent
a0c56c74e1
commit
e0d127b3e4
@ -14,6 +14,9 @@ struct _ShellRecorderSrc
|
||||
GMutex mutex_data;
|
||||
GMutex *mutex;
|
||||
|
||||
GstClock *clock;
|
||||
GstClockTime last_frame_time;
|
||||
|
||||
GstCaps *caps;
|
||||
GAsyncQueue *queue;
|
||||
gboolean closed;
|
||||
@ -41,6 +44,10 @@ static void
|
||||
shell_recorder_src_init (ShellRecorderSrc *src)
|
||||
{
|
||||
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
||||
gst_base_src_set_live (GST_BASE_SRC (src), TRUE);
|
||||
|
||||
src->clock = gst_system_clock_obtain ();
|
||||
src->last_frame_time = 0;
|
||||
|
||||
src->queue = g_async_queue_new ();
|
||||
src->mutex = &src->mutex_data;
|
||||
@ -89,6 +96,10 @@ shell_recorder_src_create (GstPushSrc *push_src,
|
||||
return GST_FLOW_EOS;
|
||||
|
||||
buffer = g_async_queue_pop (src->queue);
|
||||
|
||||
if (src->last_frame_time == 0)
|
||||
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
|
||||
|
||||
if (buffer == RECORDER_QUEUE_END)
|
||||
{
|
||||
/* Returning UNEXPECTED here will cause a EOS message to be sent */
|
||||
@ -100,6 +111,9 @@ shell_recorder_src_create (GstPushSrc *push_src,
|
||||
- (int)(gst_buffer_get_size(buffer) / 1024));
|
||||
|
||||
*buffer_out = buffer;
|
||||
GST_BUFFER_DURATION(*buffer_out) = GST_CLOCK_DIFF (src->last_frame_time, gst_clock_get_time (GST_CLOCK (src->clock)));
|
||||
|
||||
src->last_frame_time = gst_clock_get_time (GST_CLOCK (src->clock));
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
@ -141,6 +155,8 @@ shell_recorder_src_finalize (GObject *object)
|
||||
|
||||
g_mutex_clear (src->mutex);
|
||||
|
||||
gst_object_unref (src->clock);
|
||||
|
||||
G_OBJECT_CLASS (shell_recorder_src_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user