X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fmain.cpp;h=6ade4978fa3f7d1e636d4170477190be6e46df5b;hb=9710a16a95584e51590c23bff9426f532ed7b98b;hp=d6bfe50e71196f7a482184f8d3e80f19a9d4f6e6;hpb=d03b3a9898b6da83867b27ab76261fbecdcb54e3;p=libsigrokflow.git diff --git a/src/main.cpp b/src/main.cpp index d6bfe50..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,91 +21,22 @@ #include #include -#include - namespace Srf { -using namespace std; -using namespace std::placeholders; - -void init() -{ -} - -auto src_template = Gst::PadTemplate::create("src", - Gst::PAD_SRC, - Gst::PAD_ALWAYS, - Gst::Caps::create_any()); - -LegacyCaptureDevice::LegacyCaptureDevice(shared_ptr device) : - _device(device), _src_pad(Gst::Pad::create(src_template)) -{ - add_pad(_src_pad); -} - -shared_ptr LegacyCaptureDevice::libsigrok_device() -{ - return _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: - _device->open(); - _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 = _device->driver()->parent()->create_session(); - _session->add_device(_device); - _session->add_datafeed_callback(bind(&LegacyCaptureDevice::_datafeed_callback, this, _1, _2)); - _session->start(); - _session->run(); - _task->stop(); } }