X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fmain.cpp;h=6ade4978fa3f7d1e636d4170477190be6e46df5b;hb=9710a16a95584e51590c23bff9426f532ed7b98b;hp=19d1f35eb733bd27d49e78f424fbaf3639cbb8ab;hpb=64b0db030beb584b6c8391f590981c810aaf8147;p=libsigrokflow.git diff --git a/src/main.cpp b/src/main.cpp index 19d1f35..6ade497 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,7 @@ /* * This file is part of the libsigrokflow project. * + * Copyright (C) 2018 Martin Ling * Copyright (C) 2018 Uwe Hermann * * This program is free software: you can redistribute it and/or modify @@ -20,96 +21,22 @@ #include #include -#include - namespace Srf { -using namespace std; -using namespace std::placeholders; - -void init() -{ -} - -Glib::RefPtrLegacyCaptureDevice::create( - shared_ptr libsigrok_device) -{ - auto element = Gst::ElementFactory::create_element("sigrok_legacy_capture_device"); - auto device = Glib::RefPtr::cast_static(element); - - auto src_template = Gst::PadTemplate::create("src", - Gst::PAD_SRC, - Gst::PAD_ALWAYS, - Gst::Caps::create_any()); - device->_src_pad = Gst::Pad::create(src_template); - device->add_pad(device->_src_pad); - device->_libsigrok_device = libsigrok_device; - return device; -} - -shared_ptr LegacyCaptureDevice::libsigrok_device() -{ - return _libsigrok_device; -} - -Gst::StateChangeReturn LegacyCaptureDevice::change_state_vfunc(Gst::StateChange transition) +Sink::Sink(GstBaseSink *gobj) : + Gst::BaseSink(gobj) { - switch (transition) - { - case Gst::STATE_CHANGE_READY_TO_PAUSED: - return Gst::StateChangeReturn::STATE_CHANGE_NO_PREROLL; - case Gst::STATE_CHANGE_PAUSED_TO_PLAYING: - _libsigrok_device->open(); - _libsigrok_device->config_set(sigrok::ConfigKey::LIMIT_SAMPLES, - Glib::Variant::create(10)); - _task = Gst::Task::create(std::bind(&LegacyCaptureDevice::_run, this)); - _task->set_lock(_mutex); - _src_pad->set_active(true); - _task->start(); - return Gst::STATE_CHANGE_SUCCESS; - default: - return Gst::STATE_CHANGE_SUCCESS; - } } -void LegacyCaptureDevice::_datafeed_callback( - shared_ptr device, - shared_ptr packet) +Device::Device(GstElement *gobj) : + Gst::Element(gobj) { - (void) device; - switch (packet->type()->id()) { - case SR_DF_LOGIC: - { - auto logic = static_pointer_cast(packet->payload()); - auto mem = Gst::Memory::create( - Gst::MEMORY_FLAG_READONLY, - logic->data_pointer(), - logic->data_length(), - 0, - logic->data_length()); - auto buf = Gst::Buffer::create(); - buf->append_memory(move(mem)); - _src_pad->push(move(buf)); - break; - } - case SR_DF_END: - _session->stop(); - _src_pad->push_event(Gst::EventEos::create()); - break; - default: - break; - } } -void LegacyCaptureDevice::_run() +CaptureDevice::CaptureDevice(GstElement *gobj) : + Device(gobj) { - _session = _libsigrok_device->driver()->parent()->create_session(); - _session->add_device(_libsigrok_device); - _session->add_datafeed_callback(bind(&LegacyCaptureDevice::_datafeed_callback, this, _1, _2)); - _session->start(); - _session->run(); - _task->stop(); } }