mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
videotimecode: Set the DROP_FRAME flag when parsing timecodes with a ,/; from a string
And also add a test for parsing a few valid and invalid timecodes
This commit is contained in:
parent
571e0abd8a
commit
acd7010576
2 changed files with 57 additions and 6 deletions
|
@ -694,18 +694,22 @@ gst_video_time_code_new_from_string (const gchar * tc_str)
|
|||
if (sscanf (tc_str, "%02u:%02u:%02u:%02u", &hours, &minutes, &seconds,
|
||||
&frames)
|
||||
== 4
|
||||
|| sscanf (tc_str, "%02u:%02u:%02u;%02u", &hours, &minutes, &seconds,
|
||||
&frames)
|
||||
== 4
|
||||
|| sscanf (tc_str, "%02u:%02u:%02u.%02u", &hours, &minutes, &seconds,
|
||||
&frames)
|
||||
== 4
|
||||
|| sscanf (tc_str, "%02u:%02u:%02u,%02u", &hours, &minutes, &seconds,
|
||||
&frames)
|
||||
== 4) {
|
||||
tc = gst_video_time_code_new (0, 1, NULL, GST_VIDEO_TIME_CODE_FLAGS_NONE,
|
||||
hours, minutes, seconds, frames, 0);
|
||||
|
||||
return tc;
|
||||
} else if (sscanf (tc_str, "%02u:%02u:%02u;%02u", &hours, &minutes, &seconds,
|
||||
&frames)
|
||||
== 4 || sscanf (tc_str, "%02u:%02u:%02u,%02u", &hours, &minutes, &seconds,
|
||||
&frames)
|
||||
== 4) {
|
||||
tc = gst_video_time_code_new (0, 1, NULL,
|
||||
GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME, hours, minutes, seconds, frames,
|
||||
0);
|
||||
|
||||
return tc;
|
||||
} else {
|
||||
GST_ERROR ("Warning: Could not parse timecode %s. "
|
||||
|
|
|
@ -670,6 +670,50 @@ GST_START_TEST (videotimecode_from_date_time)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
static void
|
||||
test_timecode_from_string (const gchar * str, gboolean success, guint hours,
|
||||
guint minutes, guint seconds, guint frames, gboolean drop_frame)
|
||||
{
|
||||
GstVideoTimeCode *tc;
|
||||
gchar *s;
|
||||
|
||||
tc = gst_video_time_code_new_from_string (str);
|
||||
|
||||
if (success) {
|
||||
fail_unless (tc);
|
||||
} else {
|
||||
fail_if (tc);
|
||||
return;
|
||||
}
|
||||
|
||||
fail_unless_equals_int (tc->hours, hours);
|
||||
fail_unless_equals_int (tc->minutes, minutes);
|
||||
fail_unless_equals_int (tc->seconds, seconds);
|
||||
fail_unless_equals_int (tc->frames, frames);
|
||||
|
||||
if (drop_frame)
|
||||
fail_unless (tc->config.flags & GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME);
|
||||
else
|
||||
fail_if (tc->config.flags & GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME);
|
||||
|
||||
s = gst_video_time_code_to_string (tc);
|
||||
fail_unless_equals_string (s, str);
|
||||
|
||||
gst_video_time_code_free (tc);
|
||||
g_free (s);
|
||||
}
|
||||
|
||||
GST_START_TEST (videotimecode_from_to_string)
|
||||
{
|
||||
test_timecode_from_string ("11:12:13:14", TRUE, 11, 12, 13, 14, FALSE);
|
||||
test_timecode_from_string ("11:12:13;14", TRUE, 11, 12, 13, 14, TRUE);
|
||||
test_timecode_from_string ("11:12:13:", FALSE, 0, 0, 0, 0, FALSE);
|
||||
test_timecode_from_string ("11:12:13:ab", FALSE, 0, 0, 0, 0, FALSE);
|
||||
test_timecode_from_string ("a 11:12:13:14", FALSE, 0, 0, 0, 0, FALSE);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static Suite *
|
||||
gst_videotimecode_suite (void)
|
||||
{
|
||||
|
@ -708,6 +752,9 @@ gst_videotimecode_suite (void)
|
|||
tcase_add_test (tc, videotimecode_from_date_time_1s);
|
||||
tcase_add_test (tc, videotimecode_from_date_time_halfsecond);
|
||||
tcase_add_test (tc, videotimecode_from_date_time);
|
||||
|
||||
tcase_add_test (tc, videotimecode_from_to_string);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue