Blockbuster

Version 2.0 - August 29, 2003


Introduction

Blockbuster is an image/movie viewer/player especially designed for very large images and movies (high resolution and many frames) on cluster displays running the DMX X server.

For example, suppose you have a DMX display cluster constructed from a 4 by 3 array of 1280 x 1024 screens for a total of 5120 x 3072 pixels.  Next, suppose you have a scientific visualization movie which is 4000 by 3000 pixels and 10,000 frames in length (i.e. a movie far too large to fit in main memory).  Blockbuster will let you play this movie efficiently on your display cluster.

Blockbuster has all the standard movie playback features such as play, pause, single step, etc.  Furthermore, Blockbuster supports interactive panning and zooming with the mouse for inspecting image details.

Blockbuster has no audio support.

The Blockbuster project is hosted on SourceForge.

Why Blockbuster?  This program is meant for playing big movies (get it?).  Also, in DMX playback mode images are effectively broken into chunks or blocks for efficient display.  Finally, a blockbuster is a type of bomb.

License

Blockbuster is distributed according to the following terms:
  Copyright (c) 2003  Tungsten Graphics, Inc.
  Permission is hereby granted, free of charge, to any person obtaining
  a copy of this software and associated documentation files ("the
  Software"), to deal in the Software without restriction, including
  without limitation the rights to use, copy, modify, merge, publish,
  distribute, sublicense, and/or sell copies of the Software, and to
  permit persons to whom the Software is furnished to do so, subject to
  the following conditions:   The above copyright notice, the Tungsten
  Graphics splash screen, and this permission notice shall be included
  in all copies or substantial portions of the Software.  THE SOFTWARE
  IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
  SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
  THE USE OR OTHER DEALINGS IN THE SOFTWARE.

However, note that two components used by Blockbuster are licensed separately:

Features

Blockbuster has the following major features:

Prerequisites

DMX is not required for running Blockbuster, but Blockbuster is intended to be used on DMX displays.  If you have a display cluster, you should already have DMX up and running.

Blockbuster can either use Xlib or OpenGL to render movie frames.  OpenGL is the preferred renderer so it's recommended that you have a hardware-accelerated implementation of OpenGL installed.  There are some optimizations for NVIDIA hardware, but any OpenGL implementation should suffice.

You'll also need PNG and TIFF libraries installed (typically, /usr/lib/libpng.so and /usr/lib/libtiff.so).

To compile with DMX support you'll need the dmxext.h header and libdmx.a library installed in the standard X directories.

Downloading and Compiling Blockbuster

Blockbuster can be downloaded from the SourceForge download page.

After you've download and unpacked the archive, do the following:
  1. cd blockbuster-2.0/src
  2. Examine/edit Makefile to set the DMX and DEBUGGING variables appropriately.
  3. cd lzo-1.07
  4. ./configure
  5. cd ..
  6. make
When finished, the blockbuster executable will be in the src directory.

Command Line Options

Blockbuster is invoked as follows:

blockbuster -flags [-- -rendererFlags...] matchFilename...

Possible flags are listed below. The rendererFlags can change the behavior of the renderer that is being used to render each frame of the image; because each renderer has different behaviors, each has its own set of flags.

The matchFilename parameters may be either partial file names or complete file names. All matchFilename parameters expand to match all files that begin with the given characters. For example, given a directory samples that contains the image files image1.tiff,image2.png, and picture.tiff, behavior is as follows:

blockbuster samples/image1.tiff The single image file image1.tiff will be opened and repeatedly displayed.
blockbuster samples/image The samples directory will be searched for all files that begin with image. In this case, the files samples/image1.tiff and samples/image2.png will be displayed in succession.
blockbuster samples/ The samples/ directory will be searched for all files. In this case, the files samples/image1.tiff, samples/image2.png, and samples/picture.tiff will all be displayed in succession.

Supported Flags

Flag Effect
-h A usage summary will be provided. All available flags will be displayed, as will all supported file formats, all supported renderers, and any additional options supported by each renderer.

The default value for any particular flag (if any) will be displayed in square brackets (e.g., "[value]").

-S Suppress the startup splash screen.
-m messageLevel Change the verbosity of the program by changing the message level. The supported message levels can be discovered by using the -h option.
-d display
Specify the X display name (such as "foobar:0")
-g geometry
Specify the window geometry for the X window.  Examples: "+500+200" to set the position, "600x400" to set the size or "600x400+500+200" to set both the size and position.
-f fontname
Specify the name of the font to use in the rendering window for displaying the current frame, zoom, etc. information.  Default is "fixed".  Use xlsfonts to list the fonts available on your system.
-r renderer Change the method used to render images. The supported renderers (and their options) can be discovered by using the -h option.  Currently, gl, gltexture, x11 and dmx are supported.
-u interface
Specifies the user interface.  Two are supported:  gtk - a GTK-based GUI, and x11 a keypress/mouse-only interface.  The GTK interface is the default.
-t numThreads Change the number of threads used to preload images in the background. The default value depends on the number of processors available in your system; if your system has more than one processor, 2 threads will (by default) be used to preload images. If your system has only one processor, no threads will be used by default to preload images (i.e., all images will be loaded by the main thread).
-s host[:port] In DMX configurations, the back-end instances (one per screen) will be started with the -s option.  This specifies that blockbuster is to operate in slave mode and that the master instance of the player is running on the computer named and can be contacted on port port.  The default port is 7011.
This option is only needed when running DMX in manual mode.

An up-to-date list of the options supported in the latest version of Blockbuster can always be found by invoking it with the -h flag.

Graphical User Interface Controls

By default, Blockbuster uses a GTK-based GUI (this may be overridden with the -u command line option).

The GTK interface is basically self-explanatory:


Keyboard and Mouse Controls

Whether or not Blockbuster is used with a GUI, it can be controlled with the mouse and keyboard.

The mouse is used to do the following:
The following keyboard commands are recognized:

Using Blockbuster with DMX

This section describes how to set up and use Blockbuster on a display cluster running DMX.

Checklist / setup:
  1. DMX should already be up and running on your display cluster.  Make sure you have a relatively recent copy of DMX installed to be sure it doesn't have a particular bug that was fixed in early July 2003.

  2. The file to view should be accessible on all hosts using the same directory path.  For example, if you wish to view the file /home/data/simulationrun1.sm on your DMX display, the path/filename /home/data/simulationrun1.sm must exist on all nodes.

    Most cluster systems have a shared filesystem which allows all hosts to access the same files using the same paths.

  3. The BLOCKBUSTER_RSH environment variable specifies the remote shell program used for starting the back-end instances of blockbuster on the cluster.  Typically, BLOCKBUSTER_RSH will be set to either rsh or ssh depending on your site's setup.  You should have thing set up such that either rsh or ssh can be used without entering passwords.

    The blockbuster executable program should be in your search path on all the cluster hosts so that it's accessible as soon as you log in.

    To verify that things are working, do the following on your front-end computer (assuming one of your display nodes is named foobar):

    ${BLOCKBUSTER_RSH} foobar which blockbuster

    You should see something like:

    /usr/local/bin/blockbuster

    If not, double-check that blockbuster is in your search path and that rsh/ssh is working.

  4. Make sure that your DISPLAY environment variable is set to the DMX X server.  Start an X application like xterm and make sure it appears on the DMX display.

At this point, simply start Blockbuster with the dmx renderer:

blockbuster -r dmx mymovie.sm


The default renderer used by the back-end instances of Blockbuster is gl (glDrawPixels).  To use the gltexture renderer instead, use the following:

blockbuster -r dmx -- -r gltexture mymovie.sm

Running Manually on DMX

If ssh/rsh isn't working, or you need to debug Blockbuster on DMX, you can start the back-end instances of blockbuster manually.

First, unset the BLOCKBUSTER_RSH environment variable.  Then, start the front-end (master) instance of blockbuster:

  blockbuster -r dmx mymovie.sm

Next, as prompted, start an instance of blockbuster on each back-end host:

blockbuster -s <masterhost>

where masterhost is the host of the master instance of blockbuster.

Implementation Information

This section describes some of the inner workings of Blockbuster.

Rendering

There are currently four supported rendering paths (selected with the -r option):

Image caching

Since Blockbuster is designed to play images much larger than will fit into main memory, an image cache is used to store and manage a subset of the frames in main memory.

The cache can be threaded (if Blockbuster is run with the -t option, or on a multi-processor system); this allows the main Blockbuster thread to render images while the image cache threads can read and decompress upcoming images asynchronously.

Even if Blockbuster runs single-threaded, the image cache will maintain recently-loaded images, to improve interactive performance while stepping back and forth through an image or panning and zooming an image.

Level Of Detail

Some file formats, such as SM, may store images at multiple levels of detail.  For example, the top-most (level 0) image may be 4K x 4K pixels.  The next level of detail may be 2K x 2K pixels, and the next 1K x 1K pixels.

When an image is minified (zoom < 1.0) performance improves by reading and rendering a reduced level of detail.

Blockbuster automatically chooses the best level of detail according to the current zoom factor and target frame rate.

DMX

When running in DMX mode the front-end instance of Blockbuster doesn't actually draw anything.  Instead, it sends commands (via unix sockets) to the back-end instances of Blockbuster.  The back-end instances can use either the x11, gl or gltexture renderers to render directly with the back-end servers.  There are no large image transfers going through DMX.  This improves performance.


Version History

Version 1.0 - July 31, 2003

Version 2.0 - August 29, 2003