+class QtCamAnalysisBinPrivate {
+public:
+ QtCamAnalysisBinPrivate() :
+ bin(0),
+ probe(0),
+ queuePad(0) {
+
+ }
+
+ static gboolean block_buffers(GstPad *pad, GstMiniObject *o) {
+ Q_UNUSED(pad);
+ Q_UNUSED(o);
+
+ // Drop data
+ return FALSE;
+ }
+
+ GstElement *bin;
+ gulong probe;
+ GstPad *queuePad;
+ QMultiHash<QString, GstElement *> elements;
+};
+
+QtCamAnalysisBin::QtCamAnalysisBin(QtCamAnalysisBinPrivate *d) :
+ d_ptr(d) {
+ gst_object_ref(d_ptr->bin);
+}
+
+QtCamAnalysisBin::~QtCamAnalysisBin() {
+ d_ptr->elements.clear();
+
+ setBlocked(false);
+ gst_object_unref(GST_OBJECT(d_ptr->queuePad));
+ gst_object_unref(d_ptr->bin);
+ delete d_ptr; d_ptr = 0;
+}
+
+void QtCamAnalysisBin::setBlocked(bool blocked) {
+ if (blocked == isBlocked()) {
+ return;
+ }
+
+ if (blocked) {
+ d_ptr->probe = gst_pad_add_buffer_probe(d_ptr->queuePad,
+ G_CALLBACK(QtCamAnalysisBinPrivate::block_buffers),
+ d_ptr);
+ }
+ else {
+ gst_pad_remove_data_probe(d_ptr->queuePad, d_ptr->probe);
+ d_ptr->probe = 0;
+ }
+}
+
+bool QtCamAnalysisBin::isBlocked() const {
+ return d_ptr->probe != 0;
+}