diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2019-06-19 13:31:39 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2019-06-19 13:31:39 +0300 |
commit | 5ed27c12cc05b483aab710c89cc379b3b61c3947 (patch) | |
tree | 492e9a0f74297e7ad5cec309ee99e2d06ae6e199 /ext/zbar/gstzbar.c | |
parent | 7b8d1987121721d53456c6d0f867cc989b4989b0 (diff) | |
download | gstreamer-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.c | 17 |
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); |