summaryrefslogtreecommitdiff
path: root/ext/zbar/gstzbar.c
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2019-06-19 13:31:39 +0300
committerSebastian Dröge <sebastian@centricular.com>2019-06-19 13:31:39 +0300
commit5ed27c12cc05b483aab710c89cc379b3b61c3947 (patch)
tree492e9a0f74297e7ad5cec309ee99e2d06ae6e199 /ext/zbar/gstzbar.c
parent7b8d1987121721d53456c6d0f867cc989b4989b0 (diff)
downloadgstreamer-plugins-bad-5ed27c12cc05b483aab710c89cc379b3b61c3947.tar.gz
zbar: Include running-time, stream-time and duration in the messages
The timestamp/PTS alone is meaningless without the segment and usually applications care about the running-time or stream-time. This also keeps the messages in sync with the spectrum and level elements.
Diffstat (limited to 'ext/zbar/gstzbar.c')
-rw-r--r--ext/zbar/gstzbar.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/ext/zbar/gstzbar.c b/ext/zbar/gstzbar.c
index 18149eb5e..6591d1968 100644
--- a/ext/zbar/gstzbar.c
+++ b/ext/zbar/gstzbar.c
@@ -291,12 +291,27 @@ gst_zbar_transform_frame_ip (GstVideoFilter * vfilter, GstVideoFrame * frame)
GstStructure *s;
GstSample *sample;
GstCaps *sample_caps;
+ GstClockTime timestamp, running_time, stream_time, duration;
+
+ timestamp = GST_BUFFER_TIMESTAMP (frame->buffer);
+ duration = GST_BUFFER_DURATION (frame->buffer);
+ running_time =
+ gst_segment_to_running_time (&GST_BASE_TRANSFORM (zbar)->segment,
+ GST_FORMAT_TIME, timestamp);
+ stream_time =
+ gst_segment_to_stream_time (&GST_BASE_TRANSFORM (zbar)->segment,
+ GST_FORMAT_TIME, timestamp);
s = gst_structure_new ("barcode",
- "timestamp", G_TYPE_UINT64, GST_BUFFER_TIMESTAMP (frame->buffer),
+ "timestamp", G_TYPE_UINT64, timestamp,
+ "stream-time", G_TYPE_UINT64, stream_time,
+ "running-time", G_TYPE_UINT64, running_time,
"type", G_TYPE_STRING, zbar_get_symbol_name (typ),
"symbol", G_TYPE_STRING, data, "quality", G_TYPE_INT, quality, NULL);
+ if (GST_CLOCK_TIME_IS_VALID (duration))
+ gst_structure_set (s, "duration", G_TYPE_UINT64, duration, NULL);
+
if (zbar->attach_frame) {
/* create a sample from image */
sample_caps = gst_video_info_to_caps (&frame->info);