Jit.gl.videoplane and jit.xfade

    May 03 2006 | 5:09 pm
    Hi list,
    I finished my VJ patch, but now that everything works well I am
    experiencing low framerate if multiple movies and video-synths are
    working at the same time. If we think at my patch as a mixer, I have 2
    cannels that generate shapes etc connected to a jit.xfade, 2 channels
    that play videos connected to another jit.xfade, and finally the 2
    outputs of these first 2 xfades goes into a 3rd xfade. It happens that
    if I am playing with all the 4 videosources switched on the framerate
    drops to 6-7 fps from the original 20 (NB this happens only on my
    laptop, while on my desktop that is much stronger still doesn't happen
    but since I plan to add new features I could have problems also on
    the desktop in the future). I am think that using jit.gl.videoplane to
    enable hardware rendering would improve the performance, but I have
    some doubt about how to use it in conjunction with the xfade objects.
    In the videoplane help it's shown how to couple it with a jit.render,
    which I read in its help has to be attached to a jit.window or
    jit.pwindow to use hardware rendering. But I don't want to output
    every channel to a window, I want their output to go to the
    appropriate xfade. As you see I am a bit confused on how to use this
    videoplane. Basically I want to move some of the CPU effort to the
    GPU, and I don't know how to do it. Maybe this is possible just in the
    last stage, when the last xfade is connected to jit.window. Help!
    Thank you
    PS: the jit.fpsgui object after some processing gets transparent in
    jitter 1.5.2 :s

    • May 03 2006 | 5:20 pm
      shaders, shaders, shaders. xfade, although altivec-enhanced, still
      slows down the cpu. use jit.gl.slab and co.normal.jxs.
    • May 03 2006 | 6:10 pm
      Thanks Joshua
      Where can I find documentation about writing jxs files?
      >From the docs: "Currently the high level languages GLSL and CG, as
      well as ARB, and NV assembly programs are supported." which are the
      differences? What would you suggest for a beginner?
      And the co.normal.jxs you mentioned isn't anywhere on google. Where
      can I find it?
      I'd need a comprehensive guide on using gl stuff. :s Thanks, and
      sorry for the trivial questions,
    • May 04 2006 | 2:26 am
      try jitter tutorials 41-43. and search the archives for jit.gl.slab.
      don't write your own. they're in c74support/jitter_shaders.
    • May 04 2006 | 6:14 am
      Just a test
      Just for your own testing curiosity...
      Try running all your sources without mixing them.
      I've found that as much as I optimize various things, just having multiple quicktime objects/other sources is often the real framerate killer.
      I find my framerate tanks because of the following.
      -Multiple Quicktime objects.
      -High processor load Codecs in movie files. MP4/Divx/etc.
      -not limiting update rates of preview windows.
      -Using messages such as "gettime" on quicktime movies to update time/position.
      -not optimizing message order/sending messages to too many places at the same time.
      GL can be handy, but it isn't always the biggest issue.
    • May 04 2006 | 6:17 am
      Hi Leo,
      I think this is good advice! I look forward to seeing what you're up
      to one of these days.
    • May 04 2006 | 6:59 am
      I was just making a patch with a bunch of tiny movies playing.
      12 x 4 pixels each.
      With 6 movies playing through separate jit.qt.movie objects, my framerate dropped to about 10 fps on a dual g5 2.3 ghz.
      it seems like each instance of jit.qt.movie adds a lot of overhead.
      I was triggering each object using send-recieve. I'd like to be able to run more movies if I can. Like 20 if poss.
      I know there are workarounds, but is there an intrinsic issue with running multiple qt movie or Is there something I'm doing wrong here?
      Is to do with the triggering?
    • May 04 2006 | 10:30 am
      what codec, what framerate?
    • May 04 2006 | 2:04 pm
      'None' compressed.
      30 fps.
    • May 04 2006 | 2:44 pm
      very, very bad idea.
      try this: compressing them with photoJPEG, highest quality, 30fps.
      then look at your patch. pjpg at highest quality is lossless.
    • May 04 2006 | 2:56 pm
      do you mean that photoJPEG @highest is the same quality as raw when used to
      export jitter output??
    • May 04 2006 | 3:36 pm
      i believe so.
    • May 04 2006 | 4:01 pm
      > I find my framerate tanks because of the following.
      > -Multiple Quicktime objects.
      for clarity, however, it should be noted that if the object is not
      playing anything, it won't affect your framerate.
      > -Using messages such as "gettime" on quicktime movies to update
      > time/position.
      i can't say i've found this to be true. perhaps what was slowing
      things down was the process that the resulting "time" message output
      was directed to, for example, a graphical display widget. in this
      case, qlim or speedlim the "time" messages from jit.qt.movie's output
      (i.e., [jit.qt.movie}->[route time] -> [qlim 100] -> [widget])
      i would also add that using jsui's as interactive or constantly updated
      interface elements (such as a timer display) can be a real framerate
      killer, even if fsaa is disabled on the jsui's. Pictslider or LCD
      should be used instead. This is sad-making for me, because I very much
      like the jsui!
      it also helps to use jit.change on the output of your video sources.
      in the event that you want to use a still and your patch depends on a
      constant stream of video (quite likely), you can write a bypass
    • May 04 2006 | 4:19 pm
      just chiming in:
      technically pjpeg @ 100% is still "lossy", but not detectable by the
      naked eye
      this is very important though:
      100% quality setting is logarithmically more CPU overhead to
      decompress vs 75%
      EG while 75% may take 3% cpu, 100% quality may take about 10-15%
      imho 75% looks just as good with most material, although the
      discerning eye can tell the difference looking at a still frame, its
      very hard to tell with video.
      -- deKam
      what is deKam up to these days?
    • May 04 2006 | 4:20 pm
      On 5/4/06, joshua goldberg wrote:
      > i believe so.
      that's new to me. it sure is a more convenient format to archive my jitter
      output then exporting raw ;-)
      best, thijs
    • May 07 2006 | 6:09 am
      Er. So photo-jpeg quicktimes, which involve decompression, are better than uncompressed quicktimes? Surely getting rid of the decompression bit would speed things up?
      At only 12x4 pixels, I I don't want to factor in compression, even lossless. These movies are under 10K bytes for 30 seconds. I'm not sure that slow retrieval times are the problem. Is Max particularly optimised for photo-jpeg?
      What does seem to be the problem is multiple instances of jit.qt.movie. Whether large or small, compressed or uncompressed.
      Is there a workaround or magic button?
    • May 07 2006 | 6:14 am
      Use loadram for such small files. That will be much faster.
    • May 07 2006 | 6:18 am
      loading to ram isn't making a difference.
      Also, in principle, I want to play movies off a hard drive, not load to ram.
      The hard drive I have does about 180mb per second, so access speed isn't a huge issue.
      Maybe something else is at work in my patch....
    • May 07 2006 | 6:31 am
      Perhaps posting your patch will provide more insight into your problem.
    • May 07 2006 | 9:24 am
      Yes. It would help us do more than to just speculate if you could
      upload an archive (with media files, preferably) which demonstrates
      your issues.
      One thing to consider is if you are using metro, rather than qmetro
      to drive the process, and if you are using many instances of
      jit.pwindow to preview the movies. These all will cause additional
      low priority queue events to be processed. By default, only 10 queue
      events are processed per "tick". You can increase the number of
      events processed per tick, by changing the queuethrottle settings
      inside the performance options window. Hard to say without seeing an
      example patch.