timecodestamper: Remove all existing timecode metas if requested to override existing
authorSebastian Dröge <sebastian@centricular.com>
Thu, 24 Nov 2016 12:41:59 +0000 (14:41 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 24 Nov 2016 12:42:45 +0000 (14:42 +0200)
gst/timecode/gsttimecodestamper.c

index d9302895b68398bca6cef0d28eab5f9a538d3ac3..4cbdc683d3243ac2dbbfee1a608ae8bbcc764a6d 100644 (file)
@@ -341,6 +341,16 @@ gst_timecodestamper_sink_event (GstBaseTransform * trans, GstEvent * event)
   return ret;
 }
 
+static gboolean
+remove_timecode_meta (GstBuffer * buffer, GstMeta ** meta, gpointer user_data)
+{
+  if (meta && *meta && (*meta)->info->api == GST_VIDEO_TIME_CODE_META_API_TYPE) {
+    *meta = NULL;
+  }
+
+  return TRUE;
+}
+
 static GstFlowReturn
 gst_timecodestamper_transform_ip (GstBaseTransform * vfilter,
     GstBuffer * buffer)
@@ -350,10 +360,13 @@ gst_timecodestamper_transform_ip (GstBaseTransform * vfilter,
 
   GST_OBJECT_LOCK (timecodestamper);
   if (gst_buffer_get_video_time_code_meta (buffer)
-      && timecodestamper->override_existing == FALSE) {
+      && !timecodestamper->override_existing) {
     GST_OBJECT_UNLOCK (timecodestamper);
     return GST_FLOW_OK;
+  } else if (timecodestamper->override_existing) {
+    gst_buffer_foreach_meta (buffer, remove_timecode_meta, NULL);
   }
+
   if (timecodestamper->source_clock != NULL) {
     if (timecodestamper->current_tc->hours == 0
         && timecodestamper->current_tc->minutes == 0