Blockbuster

Version 2.5.0 – June 15, 2007




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. The best kind of movie to view with blockbuster would be the "streaming movie" format, which usually has the file extension ".sm" associated with it. Sidecar is a helper application that allows you to control an instance of blockbuster from a remote machine, and which allows you to create a predetermined set of "movie cues" that can be saved and executed for a rehearsed presentation. Also included in this distribution are the "smtools," where "sm" means "streaming movie." They allow you to create and manipulate movies that are optimized for blockbuster playback on power walls.

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.


Features

Blockbuster has the following major features:

Sidecar has the following major features: smtools consists of the following utilities to create and manipulate streaming movies or "sm files," as they are often called:

USING BLOCKBUSTER

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

italics == required argument
Note that substrings are matched in the order listed below. So typing -h is the same as typing -help. Typing -n is ambiguous and undefined. Internally, the first match found will be used, but you don't know what that will be.

Flag

Default Value

Effect

-backend-path path abspath($0) specifies the path to blockbuster on the backend nodes for DMX (default is to use the same path as the front end)
-BackendPath path same as front end same as -backend-path <path>

-cache num

8

Specify how many frames to cache – use lower values when frame size gets large

-d display

$DISPLAY

Specify the X display name (such as "foobar:0")

-font fontname

"fixed"

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.

-framerate (or -F) rate 30.0 Limit the movie to rate frames per second or less.

-g geometry

fit to size of movie

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.

-help

n/a

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]").

-loops 1 How many times to play the movie. If you specify "forever" or -1, it will loop infinitely many times.

-m messageLevel

"error" ("debug" if compiled with DEBUG)

Change the verbosity of the program by changing the message level. The supported message levels are, in order of chattiness: quiet, syserr, error, warning, info, debug.

-no-controls (or -C) show controls Hides the blockbuster controller interface. Especially useful when using Sidecar. The GUI can also be hidden or displayed by right-clicking on the movie canvas.

-no-decorations (or -D)

show decorations

Turns off window decorations

-no-splash (or -S)

show splash screen

Suppress the startup splash screen.

-play (or -Play) do not play on load Play the movie immediately after loading it.

-preload numframes

4

Specifies how many frames to preload -- use lower values when frame size gets large

-renderer name

gl or gltexture if supported

Change the method used to render images. The supported renderers (and their options) can be discovered by using the -h option.  Currently, gl, gl_stereo, gltexture, x11 and dmx are supported. For dmx use -R to specify back-end renderer. e.g. blockbuster -r dmx -R gl_stereo

-slave host[:port]

disabled by default

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. This is rarely needed except for debugging (see "Running Manually on DMX" below).

-threads numThreads

2 (or 1 if you do not have 2 processors)

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).

-userInterface name

gtk

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.

-version off If given, blockbuster prints the version and exits. (version is printed anyway on startup)
-zoom scale auto Value of 0 or "auto" means set zoom to match window size (image gets bigger if window grows). A nonzero number means keep the movie at a constant size regardless of window size. 1.0 means keep image at 100%, 1.5 means scale to 150%, etc.

Graphical User Interface Controls

By default, Blockbuster uses a GTK-based GUI (this may be overridden with the -u command line option). This GUI is shown in the image below.

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 Distributed Multihead X (DMX) Servers

This section describes how to set up and use Blockbuster on a display cluster running DMX. In this mode, you, the user, run blockbuster on the "frontend" (login) node of DMX, and blockbuster spawns a copy of itself on each "backend" DMX node. Each backend blockbuster loads only a part of the movie, making movie viewing on large powerwalls very practical at good frame rates.

Checklist / setup:

  1. DMX should already be up and running on your display cluster.  Make sure you have a copy of DMX installed released later than 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. If you need to specify separate path names for each host, you will need to launch each backend copy of blockbuster manually. (See below)

  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, and such that blockbuster is in your PATH on the backend nodes. To test this, try typing "rsh which blockbuster" and if this fails or you are prompted for a password, consult your system administrator for a workaround.

  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, or your movie files have different path names on each backend node, then you might wish to 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 five 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, selected via the -R flag.  There are no large image transfers going through DMX.  This improves performance.