A newer version of Max is available. Click here to access the latest version of this document.

Tutorial 22: Working With Video Output Components

This tutorial demonstrates how to use Jitter in conjunction with a QuickTime-compatible video output device—such as a DV camera—to send matrices and video sequences directly to hardware, bypassing your computer’s analog video output. We’ll explore the jit.qt.videoout object, and return to the jit.movie object to explore its video output capabilities.

The patch examples in this tutorial assume that you have a DV camera attached to your computer’s FireWire port, powered on and in VTR mode. However, the techniques described will work with any device that has a QuickTime video output component.

End of the Line

You can place the jit.qt.videoout as the final object in a Jitter patch and send processed Jitter matrices directly to a video output device. You'll find that this process is very similar in operation to the jit.grab object that we used in the previous tutorial.

The jit.grab and jit.qt.videoout objects both require that you create a component connection before they can do their work. In the case of the jit.qt.videoout object, that means a connection to a video output device. And, as in the previous tutorial, we'll need to specify the settings we want to use by creating a listing of all our available devices and output modes and choose the settings we want before we use the jit.qt.videoout object. Since we're already familiar with that procedure from working with the jit.grab object in the last tutorial, using the jit.qt.videoout object will be easy.

jit.qt.videoout in action
• Click the read dozer.mov message box to read an example movie.

Take a moment and look at the patch. By now, you should be familiar with the processes we're using to transform the movie: we separate out a single plane of a matrix using the jit.unpack object, and sent it to the jit.op object. You'll notice that the jit.op and the jit.rota objects are using named matrices to communicate between the jit.rota object’s output matrix and the jit.op object’s right input matrix without using any patch cords. Yep—it's the cool Jitter feedback loop in action.

• Turn on the toggle attached to the metro object to start the patch. You’ll notice that jit.qt.videoout appears to have no effect. Until we send it an open message, the object simply passes any matrix received via its inlet directly to its outlet. Don’t click the open message box just yet—we still have some setup work to do.
• Click the message box that says getvoclist. Sending a getvoclist message to the jit.qt.videoout object causes it to send out its right outlet a list of messages preceded by the symbol voclist. The items in this list refer to each available video output component — voc, for short. This list of available video outputs is routed through an iter object and from there into the umenu object on the left, from which we can easily make our selection. On our system, the list contains a single item: FireWire.
If the video output component is registered with the MacOS, it will appear in the voclist and can be opened even if the hardware isn't available. If there is no hardware available, the jit.qt.videoout object will report a –200 error in the Max Console when you send matrices to it.
• Select the FireWire output component from the umenu. This causes the item’s index number (which is the same as its position in the umenu) to be sent to the jit.qt.videoout object, via the voc $1 message. If you don't select anything, the first item in the list will be used as the default component. This is equivalent to sending the message voc 0 to the jit.qt.videoout object.
• Click on the message box that says getvocmodes to retrieve a list of available modes for the output component you chose. The resulting list, preceded by the symbol vocmodes, is routed through iter and into the righthand umenu object. Our list contains two items: Apple FireWire NTSC and Apple FireWire PAL.
• Select the output mode you’d like to use from the umenu. Your selection will depend on your FireWire hardware—our camera is NTSC, so we’re using Apple FireWire NTSC mode. This causes the item’s index number (which is the same as its position in the umenu), to be sent to the jit.qt.videoout object, via the vocmode $1 message. If you don't select anything, the first item in the list will be used as the default mode. This is equivalent to sending the message vocmode 0 to the jit.qt.videoout object.
• Now we’re ready to start sending data to our output device. Click the open message box to start the component connection. After a few moments, you should see the same image on your device’s display as you see in the jit.pwindow in the patch.
If you are getting errors in the Max Console, and not seeing any video on your hardware device, check to make sure that your device hasn’t gone to sleep.
• We have control over other aspects of the output, too. While the specific codec we use is hardware-specific (Apple FireWire always uses the Apple DV codec for output, for example), we do have control over the codec quality of our output. Try selecting different values in the umenu object connected to the codecquality $1 message and compare the results on your output device. You should be able to improve speed at the expense of a small loss in image quality by using the Minimum Quality (codecquality 0) or Low Quality (codecquality 1) settings. The default is Normal Quality (codecquality 2).

Summary

The jit.qt.videoout object provides a way to send processed Jitter data directly to a device supported by QuickTime video output components—such as a DV camera—over FireWire.

See Also

Name Description
Working with Video in Jitter Working with Video in Jitter
jit.op Apply binary or unary operators
jit.pwindow Display Jitter data and images
jit.grab Digitize video from an external source
jit.movie Play a QuickTime movie
jit.qt.videoout Output video to QuickTime video output component
jit.rota Scale/rotate in 2D
jit.unpack Make multiple single plane matrices out of a multiplane matrix