Giter VIP home page Giter VIP logo

yuv.ka's Introduction

Yuv.KA

About

The short version: Yuv.KA is a video manipulation program.

The long version: Yuv.KA is a video manipulation program using .NET 4.0, WPF and Caliburn.Micro. It's based on the idea of representing a video manipulation pipeline as a graph (that's abstract nodes connected via edges). It doesn't support sound playback, as it's targeted at the yuv420 format, which contains only raw frame data, and no sound information. Yuv.KA was built in 2012 as a project for the "Praxis der Softwareentwicklung" course at the University of Karlsruhe (TH). The title is a combination of 'yuv' (which is one of the names used for the YCbCr color space, which is what Yuv.KA reads and writes, and the file extension of the corresponging videos), and 'KA' (which is an abbreviation of Karlsruhe). Yufka is also a type of Turkish bread which is the namesake of a Turkish meal quite popular here in ole Germany, hence the logo.

Technology

What you'll need

First off, you'll need Windows. Sorry Linux and Mac OS users, but Yuv.KA heavily relies on WPF, and that's not available on mono[1]. (At least not at the time of writing)
You'll also need the .NET Framework 4.0

Plugins

Yuv.KA supports plugin node packages that just have to be dropped into the Plugins folder inside the installation (e.g. C:\Program Files\Yuv.KA\Plugins\, but your mileage may vary). These plugins will be loaded at runtime and incorporated into the program, ready for you to use them.

Writing Plugins

Writing a plugin is pretty simple. I'm going to assume you've got Visual Studio and Yuv.KA somewhere of your computer.

  1. In Visual Studio, create a new Project. Select WPF Application as the project type.
  2. Delete the App.xaml and MainWindow.xaml files VS creates for you. You won't be needing these.
  3. Right-click your project in the solution explorer. Choose Properties (Alt + Enter).
  4. Set the 'Output Type' to be 'Class Library'. Save the change.
  5. Right-click your project and select 'Add Reference...'. Browse to the location of your Yuv.KA installation, and add references to the files YuvKA.Implementation.dll, YuvKA.exe, and Caliburn.Micro.dll. (Be sure to also look in the Plugins folder.) [2]
  6. You're good to go! Create a new class (Shift + Alt + C).
  7. Let your class inherit from YuvKA.Pipeline.Node (or any subclass thereof you may know), and implement the necessary methods[3].
  8. If you want to give your node some parameters visible to the user, attach the [Browsable(true)] attribute[4] to the property you want to be visible to the user[5]. (Under certain circumstances, you may also specify the [DisplayName(<YourName>)] attribute.)
  9. Once done with this, just build the dll and drop it into Yuv.KA's installation folder or Plugin folder - if everything went right, your node should now be detected by the program.

[1] - See their official statement.
[2] - Depending on what you're trying to do, you might also need references to System.Runtime.Serialization (if you want to have persistent data across pipeline saving/loading) or System.ComponentModel.DataAnnotations (If you for example want to give numeric property value certain ranges with [Range(,)]).
[3] - For the basic Node, this is just the Process method. You may want to define your own constructor in order to give the node a proper Name.
[4] - You'll need to be using System.ComponentModel for that.
[5] - Of course, you can't do this for arbitrary classes. The PropertyEditor included in YuvKA gives you quite a few things to play around with, including booleans, enumerations, file paths, colors, doubles, integers, and a few others. For the full list, check out the source. If you need more than this, you'll need to implement it yourself. To do this, you need to supply a UI for the control in XAML with proper caliburn bindings and a parametrized subclass of PropertyViewModel<T>.

yuv.ka's People

Contributors

kha avatar tehmillhouse avatar bissen avatar roberthangu avatar pgemander avatar

Stargazers

 avatar  avatar  avatar Michael Vollmer avatar Leon Handreke avatar  avatar

Watchers

 avatar  avatar James Cloos avatar Michael Vollmer avatar  avatar  avatar  avatar

Forkers

bissen kha

yuv.ka's Issues

Speed setting is unintuitive

It should allow the User to specify a target framerate instead of multiplying the current target framerate by a constant factor

Child windows cannot behave on minimizing

On a new pipeline, drag a single node in the pipeline and open it's output window. Then minimize the output window to see that it will not be minimized properly.

(If you open two output windows and minimize the one you opened first, the minimization will work correctly.)

Poor encoder performance

Using a small pipeline the encoder's buffering behavior is noticeable. We should try and asynchronously read the next frame or frame batch as soon as the current one is returned.

Refactor window ownership.

Original message: // TODO Extract owner in an interface

Currently the window owner of child windows has to be set manually in MainViewModel's OpenWindow method.

limited replayspeed looks broken

when replayspeed is far lower than it takes to render, that frames are displayed in intervals of 5 frames and then sleep until it displays the next interval (is especially unintuitive with speed 1). frames should be displayed one after another in one constant speed.
reconstruction: display an input node and set framerate/speed to 1

Enabling/Disabling of output windows doesn't work correctly

Open a new delay node, try to show its output. (Doesn't work. This part is as it should be.)

Now create a color input node connect the nodes and try to open the delay nodes output again.
This part it should work, but it still doesn't.

Also: Starting, pausing and stopping the pipeline do not affect the bug.

Crash on opening overlay node

How to create the bug;

  • Load a pipeline which includes an OverlayNode
  • Press Play
  • Press New
  • Load the same pipeline again
  • Try to open OverlayNode

Data bindings lost when loading empty pipeline

When loading a .yuvka file from disk, several things can go wrong, leading to an inconsistent program state
-- Textbox below slider no longer bound to currentTick
-- PipelineDriver appears to be null, causing the program to crash when the play button is pressed

Steps to reproduce:

  • start program, save empty pipeline
  • load saved file
    => the ReplayStateView's slider is still working, but the textfield doesn't update.
    => When the play button is pressed, the program crashes

FileNotFoundException occurs when trying to load nonempty pipeline

When trying to load a previously saved pipeline containing at least one node, the program crashes on a FileNotFoundException as it's unable to find the YuvKA.Implementation assembly necessary for loading the node type contained in the saved file

Steps to reproduce:
[[* Open program

  • Drag at least one node into PipelineView
  • Save .yuvka file]]
  • Load previously saved .yuvka file containing a pipeline with at least one node
    => Exception is raised

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.