Giter Club home page Giter Club logo

parlevision's People

Contributors

dennisreidsma avatar micheljansen avatar raloos avatar woutgg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

parlevision's Issues

Logger

We need a better logger. qDebug() is used for everything now but this does not yield output in release mode.

We need a logger which can have different levels such as WARNING, ERROR, NOTIFY etc and which works in release mode. It would also be nice if it writes to a file because of lack of stdin stdout in windows.

Deadlock on exit

A deadlock happens when:

  • create new pipeline or open a pipeline file
  • change it but do not save
  • close application and choose to discard and not to save

crash when accidentally use duplicate pin-name

The following should not lead to a crash, but to the erroneous second pin name being sufixed with _ with the lowest int that avoids duplcate pin names...

At least, that's my opinion ;-)

#define INPUT_PIN_NAME1 "input 1"
#define INPUT_PIN_NAME2 "input 1"
#define OUTPUT_PIN_NAME "output"

AddSub::AddSub() :
        m_method(1),
        m_normalize ( false )
{
    m_inputPin1 = createInputPin<OpenCVImage>( INPUT_PIN_NAME1, this );
    m_inputPin2 = createInputPin<OpenCVImage>( INPUT_PIN_NAME2, this );
    m_outputPin = createOutputPin<OpenCVImage>( OUTPUT_PIN_NAME, this );
}

Lagging view panels

On the one hand, it is very good that the viewers get low priority when the CPU is not strong enough.
On the other hand, on my machine, it seems the viewers still insist on showing all frames, which means they start lagging because they do not get to update as often as the processors do process().

So. A viewer should, when it updates the display, should take the most recent value of the pin, and not the next not-viewed value. A kind of lossy 1-frame buffer, no?

Pins need to have a fixed ordering

When declaring pins in a certain order(e.g. A, B, C) they need to retain that order in the GUI. Since Pins are internally stored in a map, they lose their order and can get displayed out of order. (e.g. B, A, C).

Method needed to check input parameters

At this time, connections between processors are guaranteed to be of the same type. However, the parameters of these types are not checked. Many processors are now implementing a sort of type checking themselves, which leads to code duplication and generates exceptions when processors which are incompatible are connected to each other. For instance, one should be able to guarantee that the input size of image A and B are always the same, and if they are not the same the possibility of conversion should be checked. If conversion is not possible the pipeline should be stopped and there should be an error reported to the GUI.

PipelineElement info in Inspector

It now shows in Library, but it is also desirable to be able to view the details of a processor that has already been added to the pipeline without having to look it up.

Pipeline scheduling

Processor function process() is called in one or several work threads which are managed by a scheduler. This scheduler is responsible for workload management and cache locality management, meaning that threads "walk" with a frame(number) through the pipeline.

Dependency graph based scheduling

Generate a dependency graph using a topological sort algorithm for true dependency based scheduling. This can increase efficiency and would create true fair scheduling which solves the problem of skewing and queueing which is present now when one processor is much heavier to process than a parallel one in the graph.

Shortkeys

Add shortkeys for things that don't have them yet and make them work in Windows as well.

pipeline render area: I lost my processor!

If I have only one piepline element, I can drag it to the right, outside of the render view area (actually, onto the inspector, as I have all views docked), and the element will disappear! Also, I do not get the scrollbar that normally helps me find it back :)
IF however at a later time I cause the render area to grow, and I have the scrollbar, I can see that this original element indeed still existed outside of the originally viewable render area

freeze

start -> new pipeline -> add camera, violajones -> connect them -> start -> CANNOT LOAD HAAR FILE alert message -> press OK -> start again -> FREEZE

depth issue

pipeline: camera + flip

start pipeline

error:
Error: Flip Image: Depth unsupported by one or multiple connected input pins

Hidable Info panel in library

It has a fixed size now, but on small screens this makes the library unusably small. Investigate if it's feasible to make it resizable or just make a button that toggles visibility.

Cannot restart pipeline after a processor throws an exception

It is currently not possible to simply restart the pipeline after a processor throws an exception. It is possible to restart the pipeline after manually removing and re-adding the offending processor. This should be handled by the framework.

qMetaType requires copy constructor, but we do not want processors to have one.

Right now, XML loading is done by using QMetaType to instance the class using a string identifier such as "plvopencv::ImageConvert". This seemed nice, but unfortunately this enforces all processors to have a copy constructor and prevents them from using signals and slots because they cannot inherit from QObject which does not allow a copy constructor.

We will have to build a factory of some sorts for processors.

Make PipelineElement interface less abstract

PipelineElement interface is to abstract since we need to cast between PipelineProducer and PipelineProcessor to call the produce() and process() functions. See Pipeline.cpp run() method.

Global configuration settings

We need global configuration settings such as the default OpenCV directory and a way to access these variables by the components and processors.

Enum property types

For some cases, such as OpenCV Image types or algorithms, it might be useful to have the framework automatically generate a drop-down list of predefined values in the Inspector instead of an input field.

TypeRegistry and BufferManager design

Buffermanager has to be able to construct and destruct types which may or may not be available at the time of compilation. Therefore, custom types need to be registered in the buffermanager/typeregistry to allow for a factory design pattern on custom types.

"mandatory get() not done"

-camera
-A add B processor

  • camera out naar beide inputs van AaddB
  • start pipeline

error:
Error: A add B: Processor A add B did not call mandatory get() on input Pin input 2

(als je regel 65 en 66 omdraait zegt hij het zelfde over input 1)

Welcome screen

Either load previous pipeline, empty pipeline or something else.

Segfault on properties with numbers

"Als ik een processor maak met 2 variabelen genaamd "threshold1"
en "threshold2" krijg ik een segmentation fault wanneer ik die processor in
de pipeline sleep. Als ik ze "thresholdLow" en "thresholdHigh" noem is er
niets aan de hand.. :S Zal wel iets zijn van Qt Creator ofzo maar toch raar,
iig goed voor in een handleiding"

pipeline render area: I lost my processor!

If I have only one piepline element, I can drag it to the right, outside of the render view area (actually, onto the inspector, as I have all views docked), and the element will disappear! Also, I do not get the scrollbar that normally helps me find it back :)
IF however at a later time I cause the render area to grow, and I have the scrollbar, I can see that this original element indeed still existed outside of the originally viewable render area

Robustness against faulty processors

Maybe ScheduleInfo::updateAndGetState should also have a try{} catch (Everything) around the call to m_element->isReadyForProcessing

to avoid faulty processors from crashing the framework

D

Crash with Qt 4.7.0 when editing pipeline while it is running.

Recreate:
Open or make a pipeline.
Start it, so it is running.
Drag a processor into the pipeline.
Crash.
This should give a warning that you are not allowed to edit the pipeline while it is running, but instead in Qt 4.7.0 on Windows XP it results in a crash in an SSE2 blend operation.

Flush connections on stop

If you press stop and then start, you would expect the pipeline to start from scratch. Now, stuff remains on the connections that was there before.

Connection to self allowed

Right now, a processor is allowed to make a connection between one of its output pins and an input pins. This would create a cycle and is incorrect. Needs to be checked and error reported to screen.

Serialisation of pipeline

Deserialisation needs to be able to instantiate custom processor which are not known at compile time. Processors need to register themselves on DLL load. QMetatype can be used for this. qRegisterMetatype at DLL load.

timing issues

I added a test pipeline to the repository that shows the issue:

A camera and an addsub processor.
The camera out is connected to both addsub inputs.
The output of the addsub shows that apparently, the addsub gets one input pin with a severe delay, and the other not! (At least, on mu Vista machine). Suggestions for where I should look to debug this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.