The 8.1.4 Jitter Roundup

    Jitter

    Rob Ramirez
    May 27 2020 | 6:30 pm
    Hey everyone, the Max 8.1.4 release is crammed full of fantastic new features and bug-fixes, so I thought it would be helpful to highlight and expound a bit on the Jitter specific changes.

    jit.pwindow

    First up, and probably the most impactful on your everyday Jitter patching, the jit.pwindow performance improvement when displaying textures. Patches will no longer experience FPS drops when a jit.pwindow is added to the chain as a viewer. In many cases this will result in significant improvements. The screenshot below shows the same patch running in 8.1.3 vs 8.1.4. On the left we can see the output hover ~20 FPS when using 8.1.3, compared to the right side which maintains a steady 60 FPS.
    jit.pwindow performance in 8.1.3 vs 8.1.4
    jit.pwindow performance in 8.1.3 vs 8.1.4

    Dynamic patchcords

    This screen shot highlights another significant update in 8.1.4 — video object patchcords (jit.movie, jit.grab, jit.playlist, jit.world) will now dynamically update their type (matrix green or texture blue), depending on the object’s output_texture state. While this change doesn’t impact performance, it does give a much more accurate picture of what’s going on in your patch.

    Matrix / Texture Probe

    Speaking of what’s going on in your patch, the revamped Matrix Probe debugging tool (Debug —> Matrix Probe) now fully supports probing on all video objects and texture output objects. A super useful tool neglected no longer. Expect to see continued improvements to matrix and texture probing in future updates.

    jit.pworld

    We’ve also snuck in a new object, jit.pworld, which provides an alternate way to view GL and video content in your patch. Unlike jit.pwindow, jit.pworld is an “active” GL context, so there is no need for an additional jit.gl.render or jit.world to display GL objects. Additionally texture output from video objects is fully supported by jit.pworld. What this means is displaying HD video in your patch only requires 2 objects, the video object and a jit.pworld.
    The new jit.pworld object
    The new jit.pworld object

    Viddll and Hap

    Also in 8.1.4 we have an update to the Viddll engine, with the most significant change being greatly improved performance with Hap encoded files. The Viddll engine Hap player also provides several advantages over the old Windows Hap package player, such as no requirement for AVI container format (windows-hap’ers know how much of a pain this was), reverse playback, and loadram support.
    With this update there is no longer a need to install a separate package to support Hap playback on either OS (the avf engine added Hap support in 8.1.2). This also brings Hap support to both the sidebar video browser, and jit.playlist (when the viddll engine is enabled in Max Preferences).
    We’ve also added a new Jitter entry the Max Preferences, called Default Cache Size, which sets the default value of the cache_size attribute for new jit.movie and jit.playlist objects when using the Viddll engine.

    jit.playlist

    The playlist family objects received significant love this go round, and it really shows. See the 8.1.4 release notes for the full list of changes. I'll just reiterate here, significant performance improvements when using jit.playlist with several files in a single playlist object and with still images, in addition to all the fantastic UI improvements.
    Hopefully this gives you an idea of what to expect in 8.1.4 for moving your pixels around, happy patching!

    • Pedro Santos's icon
      Pedro Santos
      May 27 2020 | 6:53 pm
      Thank you, Rob and Cycling74 for Max/Jitter's continued improvement!
      Share
    • Rob Ramirez's icon
      Rob Ramirez's icon
      Rob Ramirez
      May 27 2020 | 6:59 pm
      Cheers Pedro!
      Quick note I forgot to mention, GL3 users please update to the latest in the Package Manager for 8.1.4 support.
    • df1's icon
      df1's icon
      df1
      May 27 2020 | 7:16 pm
      Woohoo, been looking forward to this one, especially for colour coded patch cords! Thanks Rob!
    • Pedro Santos's icon
      Pedro Santos's icon
      Pedro Santos
      May 27 2020 | 9:35 pm
      That and jit.pworld, although I've some doubts about its implementation. I thought it would be similar to jit.world (render, videoplane, physics, camera, etc) but it seems to be more basic. For instance, I can't find a way to control its internal frame rate when drawing OpenGL objects, when receiving texture it seems to adjust automatically to the incoming framerate.
      Max Patcher
      In Max, select New From Clipboard.
      Show Text
    • Rob Ramirez's icon
      Rob Ramirez's icon
      Rob Ramirez
      May 27 2020 | 9:39 pm
      yup designed with absolute simplicity in mind. we can always add features based on user feedback, but we can't take them away. feedback is welcome.
    • Jazer Giles's icon
      Jazer Giles's icon
      Jazer Giles
      May 27 2020 | 9:46 pm
      This is great Rob! Thank you!
    • Herr Markant's icon
      Herr Markant's icon
      Herr Markant
      May 27 2020 | 10:43 pm
      jit.pwindow without CPU readback: I weep with joy!
      Thank you!
    • stefano's icon
      stefano's icon
      stefano
      May 28 2020 | 12:23 am
      I have been waiting for this since Rob anticipated some features on that YouTube streaming last month... Amazing update!!! I don't want to be the party pooper here but I noticed a problem with looping in VIDDLL. I am working with my students on some project using multiple video looping / phasing and it seems that VIDDLL + Apple Pro Res on 8.1.4 = movies getting stuck without frames output at the end of each loop. Here an example patch that runs very smoothly in 8.1.3 but that stucks at each video loop in 8.1.4. (see fps attached to jit.movie)
      Max Patcher
      In Max, select New From Clipboard.
      running Catalina on a MacBook 16inch
    • Herr Markant's icon
      Herr Markant's icon
      Herr Markant
      May 28 2020 | 12:38 am
      GUI problem: It is not possible to send the new jit.pwindow "to back" or put any other GUI or Text messages "on top" (bring to front) of it.
    • Federico-AmazingMaxStuff's icon
      Federico-AmazingMaxStuff's icon
      Federico-AmazingMaxStuff
      May 28 2020 | 9:00 am
      That's great Rob! One question about jit.pworld: you cannot use more than one in a patch, is that correct? Or can you use something like the @shared attribute and visualize what's going on in another gl context? Or is it more like a buffer visualizer that is going to go reading the address of the texture you send it?
    • Pedro Santos's icon
      Pedro Santos's icon
      Pedro Santos
      May 28 2020 | 9:57 am
      Hi Federico. As I understood, what you describe (buffer visualizer) is closer to what jit.pwindow is now (e.g., showing matrices or textures without the CPU readback). Jit.pworld seems. to be an even more simplified render/window context than what jit.world is. As you can give a name (render context) to each jit.pworld, you can have several of them in a patch.
      Max Patcher
      In Max, select New From Clipboard.
    • Federico-AmazingMaxStuff's icon
      Federico-AmazingMaxStuff's icon
      Federico-AmazingMaxStuff
      May 28 2020 | 10:52 am
      Hi Pedro! Yes you are right, I completely overlooked the improvement in jit.pwindow. I'm getting old!
    • Rob Ramirez's icon
      Rob Ramirez's icon
      Rob Ramirez
      May 28 2020 | 2:36 pm
      cheers everyone! Markus, that's the trade-off with removing the CPU readback. if it's an issue I could see us adding an attribute to force readback on textures, to get back the pre 8.1.4 behavior.
    • Herr Markant's icon
      Herr Markant's icon
      Herr Markant
      May 28 2020 | 8:24 pm
      @rob Yes, unfortunately this is a big issue for me, and I would prefer the "old style", even if it would reduce my performance. For me, it is essential to have settings and buttons "above" the pwindow! Many thanks, Markus
    • Pedro Santos's icon
      Pedro Santos's icon
      Pedro Santos
      May 28 2020 | 11:06 pm
      I think Herr's problem could be easily solved if jit.pwindow behaved differently for matrices and textures. Actually, it seems to already be doing that, but with an unexpected behaviour. Notice the attached patch: the UI element is in front of the jit.pwindow, it's only when output_texture is turned on that the window stays in front. After that, even if you turn output_texture off, the jit.window never behaves as it originally did.
      Max Patcher
      In Max, select New From Clipboard.
      On a related topic, Herr, did you try to build a GUI above a jit.window? You could use a similar approach to put your GUI on top of a jit.pwindow, as the compositing would be done by the OS window server, not Max/Jitter.
    • Rob Ramirez's icon
      Rob Ramirez's icon
      Rob Ramirez
      May 29 2020 | 2:53 pm
      Pedro is correct. jit.pwindow will exhibit pre 8.1.4 behavior as long as it is displaying matrices. As soon as you send a texture it will enable texture display mode. There is no way to disable texture display mode after it is enabled. If you want pre 8.1.4 behavior you can simply routepass jit_gl_texture messages through a jit.matrix (or more efficiently, albeit delayed by a frame, a jit.gl.asyncread)
      Max Patcher
      In Max, select New From Clipboard.
      but Pedro's solution of placing the GUI in it's own sub-patcher with a floating window, transparent background (or optionally enabling the new "Enable Transparent Patcher With Titlebar") would be my recommendation for best performance.
      Would either of the above work for you?
      If we do end up adding an attribute for readback mode, it will default to no readback (i.e. the current 8.1.4 behavior). But for now the above is you best course of action with 8.1.4.
    • Pedro Santos's icon
      Pedro Santos's icon
      Pedro Santos
      May 29 2020 | 4:48 pm
      Hi again, Rob. I've just tried my patch from the topic I referred (GUI in a tranparent window above jit.window/p.window). I've noticed that it behaved as expected, but now it doesn't anymore. In order to have the possibility of a transparent background, I had to use the "window notitle" flag. I understand that in the patcher inspectar now it has a flag to enable a tranparent background regardless of the title/notitle configuration. Unfortunately, it now must be explicitly enabled even if I already have the "notitle" configuration. So, I think it would be better named as a general "Enable Transparent Patcher" as it must always be turned on... See attached patcher:
      Max Patcher
      In Max, select New From Clipboard.
      And since, we're at it, here's the updated patch from the previous referred topic:
      Max Patcher
      In Max, select New From Clipboard.
    • Rob Ramirez's icon
      Rob Ramirez's icon
      Rob Ramirez
      Jun 01 2020 | 3:14 pm
      thanks pedro, I'll pass this along to the interested parties.
    • foldh's icon
      foldh's icon
      foldh
      Jun 11 2020 | 12:42 pm
      A fantastic update. Thanks Rob and all at C74.
    • Daniel Fishkin's icon
      Daniel Fishkin's icon
      Daniel Fishkin
      Aug 11 2020 | 8:11 pm
      dear rob, i'm really impressed by the functionality of the gui in the jit.playlist object. is there any plans to update someday with a MSP dedicated object, like, "jit.playlist~"? I really get a lot of mileage out of "jit.movie~"—this makes recording dedicated performances with the jit.vcr object much more clear. Or, is there some way to route audio from jit.playlist that i do not understand?
    • Rob Ramirez's icon
      Rob Ramirez's icon
      Rob Ramirez
      Aug 12 2020 | 3:09 pm
      hi Daniel, thanks for the feedback. I have received a few other similar requests for a jit.playlist~ object since 8.1.4, so I will file a ticket for this and we will have it on our radar.
      but yes, there is currently no way to route audio from a jit.playlist through MSP (unless you use a virtual driver like Blackhole/soundflower/etc).
      What you can do now is extract the audio track from the video track and load the audio in a playlist~. The two objects are fairly straightforward to keep in synch.
      A simple ffmpeg command to extract an audio track from a video track is: ffmpeg -i blading.mov -vn blading.wav
    • Martin Beck's icon
      Martin Beck's icon
      Martin Beck
      Sep 20 2020 | 10:30 am
      Feature requests for [jit.pworld] a) Enable/Disable rendering via int message like jit.world (in order to save laptop power and calm down the fan). b) Attribute for frame rate that controls fps if no texture is connected to the object.
    • Rob Ramirez's icon
      Rob Ramirez's icon
      Rob Ramirez
      Sep 21 2020 | 7:47 pm
      thanks Martin, agree both those items are missing, will ticket.