Skip to content

Commit

Permalink
refactoing / documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
olir committed Mar 19, 2018
1 parent 9ded309 commit 520a1f7
Show file tree
Hide file tree
Showing 20 changed files with 254 additions and 226 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
# Frankenstein VR
Free Video Converter for Virtual Reality and 3D based on ffmpeg and OpenCV for Java.
It's a small open source platform for OpenCV-based video filters, that can be pluged as custom filters into the processing pipeline:
It's a small, open-source platform for OpenCV-based video filtering, where custom filters can be simply added into the processing pipeline:

<img src="doc/pipeline.png" width="100%">

When you work on custom filters, you can concentrate on manipulating images with the OpenCV library.
When you work on custom filters, you can concentrate on manipulating images with the OpenCV library.
For a list of available filters and HOWTO see [SegmentFilters.md](https://github.com/olir/Frankenstein/blob/master/SegmentFilters.md).

The pipeline allows input as video file, camera, network stream or pictures stored as left/right 3D slides (e.g. from nikon camera).

So Frankenstein VR can e.g. be used to convert anaglyph or side-by-side 3D videos for VR display,
and the output video can be perfectly viewed in 3D with VR Hardware and a video players like [LittlStar](http://littlstar.info).
VR videos appear like displayed on a virtual 160-inch curved 3D display in front of you.

3D is optional.Hence, Frankenstein VR can be used solely for classic video processing. It focuses on filters, that are not part of common tools.
3D is optional. Hence, Frankenstein VR can be used solely for classic video processing. It focuses on filters, that are not part of common tools.

## Screenshots
<img src="doc/config.png" width="45%"> <img src="doc/processing.png" width="45%" />
Expand Down
3 changes: 2 additions & 1 deletion RELEASE-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
## Version 0.2 (currently working on)
- Cam Stream Input (no audio)
- Network Stream Input (opencv or vlc/file)
- Video Segment Filters
- Segment Filters (Black and White, Stereo Distance)


16 changes: 16 additions & 0 deletions SegmentFilters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Frankenstein VR - Segment Filters

## Available Filters

* Black and White - Converts to grayscale.
* Stereo Distance - Manipulates the stereo effect distance of side by side videos
** Distance slider: frame can appear farer or closer

## Howto create a new filter

A filter is made of the following parts:
* filter class - contains the image manipulation
* filter configuration controller class - a fxml contoller
* fxml layout file - sub layout for configuration of the filter
* property files with localized text

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.net.URL;

import de.screenflow.frankenstein.vf.LocalVideoFilter;
import de.screenflow.frankenstein.vf.SegmentVideoFilter;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
Expand All @@ -17,9 +17,9 @@ public class FilterSetupController {

private Stage stage;

private LocalVideoFilter selectedFilter = null;
private SegmentVideoFilter selectedFilter = null;

@FXML ComboBox<LocalVideoFilter> cbFilter;
@FXML ComboBox<SegmentVideoFilter> cbFilter;

@FXML BorderPane bpContainer;

Expand All @@ -29,8 +29,8 @@ public void configure(ProcessingSceneController parent, Stage stage) {

cbFilter.getItems().setAll(parent.getLocalFilters());

cbFilter.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<LocalVideoFilter>() {
@Override public void changed(ObservableValue<? extends LocalVideoFilter> selected, LocalVideoFilter oldFilter, LocalVideoFilter newFilter) {
cbFilter.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<SegmentVideoFilter>() {
@Override public void changed(ObservableValue<? extends SegmentVideoFilter> selected, SegmentVideoFilter oldFilter, SegmentVideoFilter newFilter) {
if (oldFilter != null) {
bpContainer.setCenter(null);
selectedFilter = null;
Expand All @@ -51,7 +51,7 @@ public void ok() {
stage.close();
}

public LocalVideoFilter getSelectedFilterInstance() {
public SegmentVideoFilter getSelectedFilterInstance() {
return selectedFilter;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@
import de.screenflow.frankenstein.MovieProcessor;
import de.screenflow.frankenstein.ProcessingListener;
import de.screenflow.frankenstein.vf.FilterElement;
import de.screenflow.frankenstein.vf.LocalVideoFilter;
import de.screenflow.frankenstein.vf.SegmentVideoFilter;
import de.screenflow.frankenstein.vf.VideoFilter;
import de.screenflow.frankenstein.vf.VideoStreamSource;
import de.screenflow.frankenstein.vf.local.BWFilter;
import de.screenflow.frankenstein.vf.local.StereoDistanceFilter;
import de.screenflow.frankenstein.vf.segment.BWFilter;
import de.screenflow.frankenstein.vf.segment.StereoDistanceFilter;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
Expand Down Expand Up @@ -97,7 +97,7 @@ public class ProcessingSceneController implements ProcessingListener {

boolean streamRunning = false;

private List<LocalVideoFilter> localFilters;
private List<SegmentVideoFilter> localFilters;


@FXML
Expand Down Expand Up @@ -217,7 +217,7 @@ public void changed(ObservableValue<? extends FilterElement> observable, FilterE
}
});

localFilters = new ArrayList<LocalVideoFilter>();
localFilters = new ArrayList<SegmentVideoFilter>();
localFilters.add(new BWFilter());
localFilters.add(new StereoDistanceFilter());

Expand Down Expand Up @@ -848,7 +848,7 @@ public void filterSetup() {
stage.initModality(Modality.APPLICATION_MODAL);
stage.initOwner(btnListFilter.getScene().getWindow());
stage.showAndWait();
LocalVideoFilter f = controller.getSelectedFilterInstance();
SegmentVideoFilter f = controller.getSelectedFilterInstance();
selectedFilter.setType(f);
processor.applyLocalFilters(filterListData);
Platform.runLater(() -> {
Expand Down Expand Up @@ -926,7 +926,7 @@ public void run() {
new Thread(r).start();
}

public List<LocalVideoFilter> getLocalFilters() {
public List<SegmentVideoFilter> getLocalFilters() {
return localFilters;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

public class FilterElement {
public Range r;
public LocalVideoFilter filter = null;
public SegmentVideoFilter filter = null;
ProcessingSceneController psc;

public FilterElement(Range r, ProcessingSceneController psc) {
FilterElement.this.r = r;
this.psc = psc;
}

public void setType(LocalVideoFilter selectedFilterType) {
public void setType(SegmentVideoFilter selectedFilterType) {
filter = selectedFilterType;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import javafx.scene.Parent;
import javafx.scene.Scene;

public interface LocalVideoFilter extends VideoFilter {
LocalVideoFilter createInstance();
public interface SegmentVideoFilter extends VideoFilter {
SegmentVideoFilter createInstance();
Scene createConfigurationScene(Locale locale, String stylesheet);
}

This file was deleted.

83 changes: 0 additions & 83 deletions src/main/java/de/screenflow/frankenstein/vf/local/BWFilter.java

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package de.screenflow.frankenstein.vf.segment;

public class BWConfigController {

}

0 comments on commit 520a1f7

Please sign in to comment.