NLE Video Editor
Find a file
Ichthyostega b6bdcc068d Library: investigate how a »zip iterator« can be built
Basically I am sick of writing for-loops in those cases
where the actual iteration is based on one or several data sources,
and I just need some damn index counter. Nothing against for-loops
in general — they have their valid uses — sometimes a for-loop is KISS

But in these typical cases, an iterator-based solution would be a
one-liner, when also exploiting the structured bindings of C++17

''I must admit that I want this for a loooooong time —''
...but always got intimidated again when thinking through the fine points.
Basically it „should be dead simple“ — as they say

Well — — it ''is'' simple, after getting the nasty aspects of tuple binding
and reference data types out of the way. Yesterday, while writing those
`TestFrame` test cases (which are again an example where you want to iterate
over two word sequences simultaneously and just compare them), I noticed that
last year I learned about the `std::apply`-to-fold-expression trick, and
that this solution pattern could be adapted to construct a tuple directly,
thereby circumventing most of the problems related to ''perfect forwarding''

So now we have a new util function `mapEach` (defined in `tuple-helper.hpp`)
and I have learned how to make this application completely generic.

As a second step, I implemented a proof-of-concept in `IterZip_test`,
which indeed was not really challenging, because the `IterExplorer`
is so very sophisticated by now and handles most cases with transparent
type-driven adaptors. A lot of work went into `IterExplorer` over the years,
and this pays off now.

The solution works as follows:
 * apply the `lib::explore()` constructor function to the varargs
 * package the resulting `IterExplorer` instantiations into a tuple
 * build a »state core« implementation which just lifts out the three
   iterator primitives onto this ''product type'' (i.e. the tuple)
 * wrap it in yet another `IterExplorer`
 * add a transformer function on top to extract a value-tuple for each ''yield'

As expected, works out-of-the-box, with all conceivable variants and wild
mixes of iterators, const, pointers, references, you name it....

PS: I changed the rendering of unsigned types in diagnostic output
    to use the short notation, e.g. `uint` instead of `unsigned int`.
    This dramatically improves the legibility of verification strings.
2024-11-22 22:07:39 +01:00
admin Copyright: clarify and simplify the file headers 2024-11-17 23:42:55 +01:00
data Icon: variants turning the hand up/down 2022-10-14 20:26:49 +02:00
doc Library: investigate how a »zip iterator« can be built 2024-11-22 22:07:39 +01:00
po release prep: remove defunct autotools buildsystem 2013-10-29 03:47:50 +01:00
research Copyright: clarify and simplify the file headers 2024-11-17 23:42:55 +01:00
src Library: investigate how a »zip iterator« can be built 2024-11-22 22:07:39 +01:00
target update some DIR_INFO entries 2011-04-05 00:44:30 +02:00
tests Library: investigate how a »zip iterator« can be built 2024-11-22 22:07:39 +01:00
uml DOC: update and rework documentation regarding command access 2021-04-16 18:14:33 +02:00
wiki Library: investigate how a »zip iterator« can be built 2024-11-22 22:07:39 +01:00
.gitignore Doxygen: adjust ignores 2015-08-17 01:14:33 +02:00
AUTHORS Pre-release 0.pre.03 2015-11-02 22:19:26 +01:00
COPYING we need the usual README, INSTALL, AUTHORS, and LICENSE file 2007-09-06 18:16:45 +02:00
DIR_INFO update some DIR_INFO entries 2011-04-05 00:44:30 +02:00
INSTALL Pre-release 0.pre.02 2013-10-30 02:35:20 +01:00
LICENSE ability to pick up the attribute type from the closure/functor 2015-05-03 05:24:06 +02:00
README Pre-release 0.pre.03 2015-11-02 22:19:26 +01:00
SConstruct Copyright: clarify and simplify the file headers 2024-11-17 23:42:55 +01:00

Lumiera -- the video NLE for Linux
====================================
Version: 0.pre.03
:Date: 11/2015

*************************************************************
Lumiera is a non-linear video editing and compositing tool.

The Application will allow to edit footage in the common
multimedia formats (quicktime, ogg, mkv, avi) and audio/video
stream codecs (dv, mpeg1/2/4, h264 ...)

Lumiera features non-destructive editing, compositing tools,
a selection of effects plugins, processing in RGB, YUV and
RGB-float colour models and the ability to mix media with
differing sizes and framerates. Lumiera is especially well
suited for large and elaborate professional editing tasks
with lots of material, several scenes, nested sequences,
colour grading, 3D support, full fledged sound montage
and multiple edit versions prepared in parallel.

NOTE: as of 11/2015, Lumiera is in early development stage;
it is not usable yet. The above describes the Lumiera project
vision, which will need years to implement. This preview Release
installs a current development snapshot in pre-alpha stage.

Visit http://Lumiera.org and join the mailing list
when interested in Lumiera planning and development.
****************************************************************


Lumiera pre-Alpha Versions
--------------------------

**This source tree doesn't yet contain a working video editing application** +
Rather, it contains the framework and technology core
of the envisioned Application ``Lumiera''.

See http://issues.lumiera.org/roadmap[Project roadmap]

As of _11/2015_ (0.pre.03)::
a lot of long standing maintennance work has been done. The Project switched
to C++11 and in the end even to C++14 and Debian/Jessie as reference platform,
followed by clean-up of now obsolete workarounds. On the GUI side, we largely
made the transition to GTK-3, which lead to rework of our timeline widget, not
finished yet. This work also spured an effort the connection and communication
between Proc and the UI, which is expected to be asynchroneous. Due to the
limited developer resources, work on the Engine and Player part is stalled.

As of _10/2013_ (0.pre.02)::
the data models have been elaborated and some significant parts of the session
are finished. Work has continued with time handling, a draft of the output
connection framework, a draft of the player subsystem and interfaces to the
engine and processing network. Unfortunately there was a considerable slowdown
and decrease in team size, yet still the code base is growing towards 90k LOC.
No tangible progress regarding the GUI and the backend.

As of _1/2011_ (0.pre.01)::
the project has created and documented a fairly consistent design,
partially coded up -- starting from the technical foundations and working up.
The code base is approaching 65k LOC. Roughly half of this is test code.
The Application can be installed and started to bring up a GTK GUI framework,
but the GUI is very preliminary and not connected to core functionality.
The video processing pipeline exists only in the blueprints.

As of _2/2008_::
the project has been separated completely from ``Cinelerra'', the parent project.
The Community, which at that time was largely identical to the Cinelerra-CV community,
choose the new project name ``Lumiera'' through a collaborative selection and vote.
The basic project infrastructure is up and running, and work on the new codebase
has started. We can show nothing beyond a test suite for some time to come.

As of _7/2007_::
we started with the backend and render engine draft, some example code
complemented by several unit tests. There is a TiddlyWiki with detailed
design considerations and developer documentation and a UML model



Build Requirements
------------------

For building Lumiera, you'll need:

 * C99 / C++14 compiler GCC `>=4.9` or Clang `>=3.5`
 * Git Version management system
 * http://www.scons.org/[SCons build system]
 * http://www.boost.org/[Boost libraries]
 * http://gmerlin.sourceforge.net/[GAVL library]
 * http://nobug.pipapo.org/[NoBug library]
 * http://www.gtkmm.org/en/[GTKmm]
 * http://alsa-project.org[ALSA libasound2-dev]
 * http://cgit.freedesktop.org/xorg/lib/libXv[libXv]
 * https://wiki.gnome.org/LibRsvg[lib rSVG]
 * https://git.gnome.org/browse/gdl[lib GDL]

See the online documentation at http://Lumiera.org/download.html



Debian Package
--------------
Hermann Vosseler (aka Ichthyo) maintains a *Debian* packaging of the source tree

- the package definition can be pulled from `git://git.lumiera.org/debian/lumiera/`
- the package can be built by `git-buildpackage`