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:
- The LZO library is licensed with the GNU General Public Licence.
- The SM library is copyrighted by Lawrence Livermore National Labs.
Features
Blockbuster has the following major features:
- Support for high resolution images (8K x 8K pixels, or larger,
for example)
- Unlimited movie length (large than RAM)
- Interactive panning and zooming with the mouse
- Support for multiple level of detail images
- Adjustable frame rate
- Supported still image formats:
- TIFF
- PNG
- PBM
- PGM
- PPM
- SGI RGB/RGBA
- Supported movie formats:
- SM - developed by Lawrence Livermore National Labs. SM
supports tiled images, multiple level of detail and several types of
intra-frame (but not inter-frame) image compression.
- Multiple rendering paths:
- Xlib
- OpenGL glDrawPixels
- OpenGL texture mapping
- DMX (Distributed Xinerama)
- Modular architecture allows one to easily add new file formats,
new renderers and new graphical user interfaces
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:
- cd blockbuster-2.0/src
- Examine/edit Makefile to
set the DMX and DEBUGGING variables appropriately.
- cd lzo-1.07
- ./configure
- cd ..
- 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:
- Playback controls - there
are buttons for playing, stopping and stepping in various
increments. The current frame slider can be dragged to scrub over the movie.
- Framerate control -
controls the frame rate. Blockbuster will play back the movie as
quickly as possible, but no faster than the current framerate setting.
- Level of detail - for
files that have multiple levels of detail, this control selects between
them. It's actually a bias added to the automatically computed
level of detail (computed from current zoom factor). 0 is the
highest level of detail, 1 is half detail, 2 is quarter detail, etc.
- Hide - hides the GUI
panel. It can be displayed again by pressing 'i'.
- Open - allows you to
select a new file through the file browser.
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:
- Panning - press the left
mouse button and drag the mouse to pan over the image.
- Zooming - press the
middle mouse button and drag forward/backward to zoom in/out of the
image.
The following keyboard commands are recognized:
- Right/Left arrow -
advance/backup by one frame.
- Shift + Right/Left arrow
- advance/backup by 20 frames.
- Control + Right/Left arrow
- advance/backup by 1/4 of movie length.
- Home - jump to the first
frame, center the image and set zoom to one
- End - jump to the last
frame in the movie
- Spacebar - play/pause
- r - play in reverse
- f - zoom image to fit
the window (minify only)
- 1 - set zoom to 1.0
- c - center the image in
the window
- l/L - increase/decrease
the current level of detail displayed
- i - display the GUI panel
(interface) if it was hidden
- Esc - exit Blockbuster
Using Blockbuster with DMX
This section describes how to set up and use Blockbuster on a display
cluster running DMX.
Checklist / setup:
- 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.
- 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.
- 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.
- 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):
- x11 - Images are drawn with
Xlib using XPutImage(). This path does not support bilinear
filtering.
- gl - Images are drawn with OpenGL's glDrawPixels()
command. Image zooming is
supported, but bilinear filtering is not. When zoomed out (i.e.
minification), reduced-resolution images are used if the file format
supports them.
- gltexture - Images are drawn with OpenGL by drawing a
texture on a quadrilateral. Full bilinear/trilinear filtering is
supported. When the image to draw is larger than will fit into a
single OpenGL texture, tiling is used (the image is broken into pieces
each rendered with a separate quadrilateral). When zoomed out
(i.e. minification), mipmapped textures are used. Furthermore, if
the file format supports multiple image resolutions, reduced resolution
images will be read when possible.
- dmx - Intended for cluster displays running the DMX X
server. For each host in the cluster, a back-end instance of Blockbuster is
started. The front-end
instance of the player sends commands to the back-end instances which
do the actual rendering directly with the back-end servers.
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
- Initial release of Blockbuster
- Supports PNG, PBM, PPM, PGM, TIFF and SM file formats
- Renders to X11, OpenGL and DMX
- Non-GUI interface
- Threaded file cache
Version 2.0 - August 29, 2003
- Added GTK-based graphical interface
- Dynamic level-of-detail support
- Improved performance (better caching, threading and file reading)
- Many bug fixes