Movies On The QL

Some tentative first steps have been taken by users on QL Forum to implement animated graphics and even simple movies on faster QL-compatible platforms.

There have been some previous moves in this direction – software such as the Q-Top Animator by Urs König (available on his The Distribution and QL/E packages), and some “Tv Movies” on PD software disks – I think they were originally published via the Italian QL group Q-Italy.

QL Forum member Cristian started the discussion by providing a fairly simple routine to rapidly copy screen image files to the screen from ramdisc, taking advantage of the speed of LBYTES working with files from ramdisc, loading a numbered sequence of screens with suitable pauses in between, something like:

FOR n = 1 TO number_of_screens
LBYTES ram1_SCREEN’&n&”_scr”,131072
PAUSE speed%

Various suggestions were made, such as making use of the second screen space in memory on a Minerva-equipped system, so that frames could be loaded to either screen area and quickly ‘switched’ between the two screens.

The main limitation here was that it only displayed 512×256 (32 kilobyte) QL screens, and relied on the screen being at the same address in memory as on an original black box QL.

Per Witte took things a stage further by utilising Bob Spelten jr.’s SQRview program to convert screens to sprites, which can then be output to the screen using the SPRW command from Easyptr, which allows for a variety of frame sizes to be handled and a coordinate to be specified within a window.Per went on to produce a basic player, eventually called Qplayer.

David Westbury’s PHGTK (Photon General Toolkit) allows multi-frame animated GIF images for example to be output as individual PIC files, with the unused 10th byte in the file altered to specifiy a frame timing parameter, which opens up another avenue for animating using multiple PIC files, pasted to the screen in the right order with frame timing taken from each file to pause before the next file. Some PIC file window load/save functions such as David’s could be used to display the individual frames.

The disadvantage of this approach is that PIC files are uncompressed, so anything other than the shortest of animations could produce massive output files. GD2 sprites do at least have the option to be compressed using a simple Run Length Encoding RLE) which does go some way towards reducing file sizes.

There was some discussion of combining the individual frames into a single large file so that an entire “movie” or animation could be made into a single file for convenience.

There was some discussion of exploring the use of compression utilities such as Zip or Bzip to reduce file sizes, but it was eventually determined that decompression could not take place fast enough to keep up with, say, a 10 frame per second video.

Marcel Kilgus joined the conversation and true to form he could not resist the temptation to write what he called a “quick and dirty” movie player including sound, which he made available to download at – this is 135MB in size and Marcel warned it may only work on QPC2.

The movie file itself is about 320MB in size and contains about 2 minutes of concert footage shot by Marcel himself.

The source files are included for those wishing to tinker with this. It is all supplied as a copy of QPC2 and SMSQE.BIN configured ready to go with no user intervention once unzipped to a folder on your Windows hard drive. Some of the files are in a file, the others in the Windows folder accessed by DOS1. The movie file itself is accessed via DOS1_ – Marcel says that strange things happen when trying to move this sheer amount of data quickly via a WIN file.

He established that the player has to stream about 2.6MB per second in this case, meaning most systems could only handle this much data without compression – using BZIP2 or GZIP would result in too many decompression delays. Marcel ended up with a Qmovie file which is an interleaved data format with one second of audio, followed by one second of video in uncompressed format, with information such as resolution and frame rate hard coded into the qmovie_exe file.