From: Sebastian Dröge Date: Mon, 20 May 2019 12:30:28 +0000 (+0300) Subject: avwait: Allow setting start timecode after end timecode and the other way around X-Git-Tag: accepted/tizen/unified/20220217.153506~2^2~10^2~9^2~12^2~2^2~90^2~1^2~83 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f558b1ff6fb618486888dc86524a815629917e64;p=platform%2Fupstream%2Fgstreamer.git avwait: Allow setting start timecode after end timecode and the other way around This might be necessary temporarily for changing the previous settings. Make it an actual error if the settings are like this while processing a buffer. --- diff --git a/gst/timecode/gstavwait.c b/gst/timecode/gstavwait.c index 4ab5a4d..dc85d07 100644 --- a/gst/timecode/gstavwait.c +++ b/gst/timecode/gstavwait.c @@ -461,23 +461,10 @@ gst_avwait_set_property (GObject * object, guint prop_id, frames = g_ascii_strtoll (parts[3], NULL, 10); gst_video_time_code_init (self->tc, 0, 1, NULL, 0, hours, minutes, seconds, frames, 0); - if (self->end_tc - && gst_video_time_code_compare (self->tc, self->end_tc) != -1) { - gchar *end_tc; - - end_tc = gst_video_time_code_to_string (self->end_tc); - g_warning - ("ERROR: End timecode %s must be after start timecode %s. Start timecode rejected", - end_tc, tc_str); - gst_video_time_code_free (self->tc); - g_free (end_tc); - self->tc = gst_video_time_code_new_empty (); - } else { - if (GST_VIDEO_INFO_FORMAT (&self->vinfo) != GST_VIDEO_FORMAT_UNKNOWN - && self->vinfo.fps_n != 0) { - self->tc->config.fps_n = self->vinfo.fps_n; - self->tc->config.fps_d = self->vinfo.fps_d; - } + if (GST_VIDEO_INFO_FORMAT (&self->vinfo) != GST_VIDEO_FORMAT_UNKNOWN + && self->vinfo.fps_n != 0) { + self->tc->config.fps_n = self->vinfo.fps_n; + self->tc->config.fps_d = self->vinfo.fps_d; } g_strfreev (parts); break; @@ -486,26 +473,11 @@ gst_avwait_set_property (GObject * object, guint prop_id, if (self->tc) gst_video_time_code_free (self->tc); self->tc = g_value_dup_boxed (value); - if (self->end_tc - && gst_video_time_code_compare (self->tc, self->end_tc) != -1) { - gchar *start_tc, *end_tc; - - start_tc = gst_video_time_code_to_string (self->tc); - end_tc = gst_video_time_code_to_string (self->end_tc); - g_warning - ("ERROR: End timecode %s must be after start timecode %s. Start timecode rejected", - end_tc, start_tc); - gst_video_time_code_free (self->tc); - g_free (start_tc); - g_free (end_tc); - self->tc = gst_video_time_code_new_empty (); - } else { - if (self->tc->config.fps_n == 0 - && GST_VIDEO_INFO_FORMAT (&self->vinfo) != - GST_VIDEO_FORMAT_UNKNOWN && self->vinfo.fps_n != 0) { - self->tc->config.fps_n = self->vinfo.fps_n; - self->tc->config.fps_d = self->vinfo.fps_d; - } + if (self->tc->config.fps_n == 0 + && GST_VIDEO_INFO_FORMAT (&self->vinfo) != + GST_VIDEO_FORMAT_UNKNOWN && self->vinfo.fps_n != 0) { + self->tc->config.fps_n = self->vinfo.fps_n; + self->tc->config.fps_d = self->vinfo.fps_d; } break; } @@ -513,26 +485,11 @@ gst_avwait_set_property (GObject * object, guint prop_id, if (self->end_tc) gst_video_time_code_free (self->end_tc); self->end_tc = g_value_dup_boxed (value); - if (self->tc && self->end_tc - && gst_video_time_code_compare (self->tc, self->end_tc) != -1) { - gchar *start_tc, *end_tc; - - start_tc = gst_video_time_code_to_string (self->tc); - end_tc = gst_video_time_code_to_string (self->end_tc); - g_warning - ("ERROR: End timecode %s must be after start timecode %s. End timecode rejected", - end_tc, start_tc); - gst_video_time_code_free (self->end_tc); - self->end_tc = NULL; - g_free (start_tc); - g_free (end_tc); - } else if (self->end_tc) { - if (self->end_tc->config.fps_n == 0 - && GST_VIDEO_INFO_FORMAT (&self->vinfo) != - GST_VIDEO_FORMAT_UNKNOWN && self->vinfo.fps_n != 0) { - self->end_tc->config.fps_n = self->vinfo.fps_n; - self->end_tc->config.fps_d = self->vinfo.fps_d; - } + if (self->end_tc->config.fps_n == 0 + && GST_VIDEO_INFO_FORMAT (&self->vinfo) != + GST_VIDEO_FORMAT_UNKNOWN && self->vinfo.fps_n != 0) { + self->end_tc->config.fps_n = self->vinfo.fps_n; + self->end_tc->config.fps_d = self->vinfo.fps_d; } break; } @@ -785,6 +742,22 @@ gst_avwait_vsink_chain (GstPad * pad, GstObject * parent, GstBuffer * inbuf) } switch (self->mode) { case MODE_TIMECODE:{ + if (self->tc && self->end_tc + && gst_video_time_code_compare (self->tc, self->end_tc) != -1) { + gchar *tc_str, *end_tc; + + tc_str = gst_video_time_code_to_string (self->tc); + end_tc = gst_video_time_code_to_string (self->end_tc); + GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL), + ("End timecode %s must be after start timecode %s. Start timecode rejected", + end_tc, tc_str)); + g_free (end_tc); + g_free (tc_str); + gst_buffer_unref (inbuf); + g_mutex_unlock (&self->mutex); + return GST_FLOW_ERROR; + } + if (self->tc != NULL && tc != NULL) { gboolean emit_passthrough_signal = FALSE; if (gst_video_time_code_compare (tc, self->tc) < 0