timecodestamper: Skip over invalid LTC timecodes immediately

This commit is contained in:
Sebastian Dröge 2020-01-10 13:08:38 +02:00
parent a1443518e0
commit a4c925f694

View file

@ -1306,6 +1306,16 @@ gst_timecodestamper_transform_ip (GstBaseTransform * vfilter,
g_queue_get_length (&timecodestamper->ltc_current_tcs)); g_queue_get_length (&timecodestamper->ltc_current_tcs));
g_free (tc_str); g_free (tc_str);
if (!gst_video_time_code_is_valid (&ltc_tc->timecode)) {
tc_str = gst_video_time_code_to_string (&ltc_tc->timecode);
GST_INFO_OBJECT (timecodestamper, "Invalid LTC timecode %s", tc_str);
g_free (tc_str);
gst_video_time_code_clear (&ltc_tc->timecode);
g_free (ltc_tc);
ltc_tc = NULL;
continue;
}
/* A timecode frame that starts +/- half a frame to the /* A timecode frame that starts +/- half a frame to the
* video frame is considered belonging to that video frame. * video frame is considered belonging to that video frame.
* *
@ -1319,18 +1329,11 @@ gst_timecodestamper_transform_ip (GstBaseTransform * vfilter,
if (timecodestamper->ltc_auto_resync) { if (timecodestamper->ltc_auto_resync) {
if (timecodestamper->ltc_internal_tc) if (timecodestamper->ltc_internal_tc)
gst_video_time_code_free (timecodestamper->ltc_internal_tc); gst_video_time_code_free (timecodestamper->ltc_internal_tc);
if (gst_video_time_code_is_valid (&ltc_tc->timecode)) { timecodestamper->ltc_internal_tc =
timecodestamper->ltc_internal_tc = gst_video_time_code_copy (&ltc_tc->timecode);
gst_video_time_code_copy (&ltc_tc->timecode); timecodestamper->ltc_internal_running_time = ltc_tc->running_time;
timecodestamper->ltc_internal_running_time = ltc_tc->running_time; updated_internal = TRUE;
updated_internal = TRUE; GST_INFO_OBJECT (timecodestamper, "Resynced internal LTC counter");
GST_INFO_OBJECT (timecodestamper, "Resynced internal LTC counter");
} else {
tc_str = gst_video_time_code_to_string (&ltc_tc->timecode);
GST_INFO_OBJECT (timecodestamper, "Invalid LTC timecode %s",
tc_str);
g_free (tc_str);
}
} }
/* And store it back for the next frame in case it has more or less /* And store it back for the next frame in case it has more or less