FYI: a very big overview:

* something like a 'libcinelerra' will be done
* we (me, ichthyo, IRC people) decided to do cinelerra3 language
agnostic, which means the interfaces between modules will be in C style
and thus useable from other languages too, the essential components will
be developed in C/C++. Keep in mind that essential components have to be
maintainable by a broad number of people, but when someone want's to
hack a haskell or whatever esoteric language plugin, have fun with it.
* Coarse design overview:
** so far we planning 3 main components:
 1) A library which provides common functionality
 2) A Backend which provides dumb but efficent file caching and
scheduling of tasks (and some more)
 3) A Processing layer which builds the renderpipe from EDLs.
** The renderpipe is rather an arbitary graph, everything becomes a node
in this graph, even encoders/decoders, tracks are just containers which
manage such nodes.
** Compositor windows can be attached to any point in this graph
** The whole thing is 'pull-based', which means when something like a
compositor or a file render job requires a frame, this request is passed
to the system and initiates all necessary actions to provide this frame.

Many things which are currently separate entities will become unified
under this all-is-a-node hood. This will have some impacts on a high
level interface like David suggested (we don't want to loose
possibilities, just to make the interface simple, don't we?).

What I wanted to say: In general such a interface will be done (we will
already need it for our testsuites), but it might need to look diffrent
from this proposal.

After all we decided *not* to use this Mailinglist for design
discussions but private mails and git repositories (there is a
tiddlywiki inside the git), not because we want to work in secret, but
because the ML is too time intensive, people just make suggestions
without knowing whats already there.

Take this mail as invitation to look at the git repositories and design
documents and partipicate where you would like to do.

        Christian


David McNab wrote:
> Hi,
> 
> Just following up on some discussion on IRC about CinV3 options, here's
> a hypothetical example based on the concept of 'libcinelerra', the main
> video editing engine, on top of which any gui is very thin and very
> cleanly separated.
> 
> Cheers
> David
> 
> ------------
> 
>  $ gcc -c myprog.c
>  $ gcc -o myprog myprog.c -lcinelerra
>  $ cat myprog.c
> 
>  /*
>   * myprog.c - sample Cinelerra client app for converting an arbitrary
>   * video to .mov format, and de-noising the video along the way
>   */
> 
>  #include <stdlib.h>
>  #include <stdio.h>
>  #include <cinelerra.h>
>  #include <cinelerra/plugin.h>
> 
>  int main(int argc, char *argv[])
>  {
>      CinProject *cin;
>      CinTimeline *timeline;
>      CinVideoTrack *vidTrk;
>      CinStereoAudioTrack *audTrk;
>      CinClip *videoIn;
>      CinPlugin *denoiser;
>      CinRenderConfig *render;
>      int err;
> 
>      // get a cin project
>      if ((cin = cinProjectCreate()) == NULL) {
>          fprintf(stderr, "Failed to create cinelerra project\n");
>          exit(1);
>      }
> 
>      // set it up for standard PAL
>      cinProjectSetProperty(CIN_FORMAT, CIN_FMT_PAL);
> 
>      // create tracks which inherit properties from project
>      vidTrk = cinProjectAppendVideoTrack(cin, "myvideo");
>      audTrk = cinProjectAppendAudioTrack(cin, "myaudio", 2);
> 
>      // load video to convert
>      if ((videoIn = cinProjectLoadResource(cin, argv[1])) == NULL) {
>          fprintf(stderr, "Failed to load video %s\n", argv[1]);
>          exit(1);
>      }
> 
>      // place video on timeline, 1.0 seconds from start
>      cinTimelineAddClip(cin->timeline, videoIn, vidTrk, audTrk, 1.0);
> 
>      // add video denoiser effect
>      if ((denoiser = cinTrackAppendPlugin(vidTrk,"vdenoise")) == NULL) {
>          fprintf(stderr, "Failed to load video denoiser\n");           
>          exit(1);
>      }
> 
>      // and set it so it spans the entire video clip
>      cinPluginSetProperty(denoiser, CIN_PLUGIN_START, vidTrk->begin);
>      cinPluginSetProperyt(denoiser, CIN_PLUGIN_END, vidTrk->end);
> 
>      // set up render command structure
>      render.file = "out.mov";
>      render.container = CIN_CONTAINER_MOV;
>      render.vcodec = CIN_VCODEC_MPEG4;
>      render.fps = 25;
>      render.vbw = 2000; // kbits/sec
>      render.acodec = CIN_ACODEC_MP3;
>      render.arate = 44100;
>      render.abw = 256; // 256kbits/sec
> 
>      // now do the render
>      if ((err = cinProjectRender(cin, &render)) != 0) {
>          fprintf(stderr, "Failed to render\n");
>          exit(1);
>      }
> 
>      // success
>      return 0;
>  }
> 
> 
> 
> 
> _______________________________________________
> Cinelerra mailing list
> [email protected]
> https://init.linpro.no/mailman/skolelinux.no/listinfo/cinelerra


_______________________________________________
Cinelerra mailing list
[email protected]
https://init.linpro.no/mailman/skolelinux.no/listinfo/cinelerra

Reply via email to