From 95f81d724073b61af9665c1766e613ed7f1ea61a Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 16 Jul 2013 08:06:27 -0300 Subject: [PATCH] pad-monitor: add check for out of segment buffer data --- validate/gst/qa/gst-qa-element-monitor.h | 1 + validate/gst/qa/gst-qa-pad-monitor.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/validate/gst/qa/gst-qa-element-monitor.h b/validate/gst/qa/gst-qa-element-monitor.h index 5afb3575c6..f46c146e9f 100644 --- a/validate/gst/qa/gst-qa-element-monitor.h +++ b/validate/gst/qa/gst-qa-element-monitor.h @@ -39,6 +39,7 @@ G_BEGIN_DECLS #define GST_QA_ELEMENT_MONITOR_CLASS_CAST(klass) ((GstQaElementMonitorClass*)(klass)) #define GST_QA_ELEMENT_MONITOR_GET_ELEMENT(m) (GST_ELEMENT_CAST (GST_QA_MONITOR_GET_OBJECT (m))) +#define GST_QA_ELEMENT_MONITOR_ELEMENT_IS_DECODER(m) (GST_QA_ELEMENT_MONITOR_CAST (m)->is_decoder) typedef struct _GstQaElementMonitor GstQaElementMonitor; typedef struct _GstQaElementMonitorClass GstQaElementMonitorClass; diff --git a/validate/gst/qa/gst-qa-pad-monitor.c b/validate/gst/qa/gst-qa-pad-monitor.c index 742edd1e46..13c0f4e88f 100644 --- a/validate/gst/qa/gst-qa-pad-monitor.c +++ b/validate/gst/qa/gst-qa-pad-monitor.c @@ -20,6 +20,7 @@ */ #include "gst-qa-pad-monitor.h" +#include "gst-qa-element-monitor.h" /** * SECTION:gst-qa-pad-monitor @@ -381,8 +382,21 @@ gst_qa_pad_monitor_buffer_probe (GstPad * pad, GstBuffer * buffer, { GstQaPadMonitor *monitor = udata; + /* TODO should we assume that a pad-monitor should always have an + * element-monitor as a parent? */ if (G_LIKELY (GST_QA_MONITOR_GET_PARENT (monitor))) { /* a GstQaPadMonitor parent must be a GstQaElementMonitor */ + if (GST_QA_ELEMENT_MONITOR_ELEMENT_IS_DECODER (monitor)) { + /* should not push out of segment data */ + if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (buffer)) && + GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer)) && + !gst_segment_clip (&monitor->segment, monitor->segment.format, + GST_BUFFER_TIMESTAMP (buffer), GST_BUFFER_TIMESTAMP (buffer) + + GST_BUFFER_DURATION (buffer), NULL, NULL)) { + /* TODO error */ + g_assert_not_reached (); + } + } } return TRUE; }