home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 7 / AU_CD7.iso / _movies / _armovie / documents / alienfiles < prev    next >
Text File  |  1996-11-18  |  15KB  |  392 lines

  1.            Alien file format support for Replay
  2.            ====================================
  3.  
  4. Introduction
  5. ------------
  6.  
  7. Replay's support for alien film formats (e.g. Video for Windows and Quicktime)
  8. is provided by MovieFS (developed by Warm Silence Software Ltd). Replay III is
  9. supplied with a version of MovieFS that handles WAV sound samples and AVI films
  10. in the Indeo format, and the system may be extended by third parties to handle
  11. additional formats. The purpose of this document is twofold:
  12.  
  13.  * To explain the few changes, in an application's interaction with Replay,
  14.    that are required when MovieFS is involved.
  15.  
  16.  * To explain the interface by which third parties may extend MovieFS to
  17.    support additional file formats.
  18.  
  19. Extensions that handle almost all AVI, MOV, FLI, DL, WAV, WVE and VOC files are
  20. already existing, but are not released as part of Replay III.
  21.  
  22. User Interface
  23. --------------
  24.  
  25. In some ways it is reasonable to say that MovieFS has no user interface:
  26. MovieFS works by extending the RiscOS operating system with an image filing
  27. system, so as to make files of an alien format look like directories that
  28. contain an ARMovie file (with name "ARMovie"). Users can do anything with the
  29. contained file that they might have done with a normal ARMovie file.
  30.  
  31. In the Desktop, the illusion is taken further in that drags of, and double
  32. clicks on, alien films are made to seem as though they were applied to the
  33. contained ARMovie. Thus, to the user, alien films behave exactly like ARMovie
  34. files.
  35.  
  36. For this to work smoothly the alien films should have an appropriate file type
  37. (&FB2 for AVI, and &FB1 for WAV, for example), since the file type is the key
  38. used by RiscOS to decide when to use an image filing system. MovieFS is
  39. sometimes able to set the file type automatically, when invoked by a drag or
  40. double click. An alternative mechanism, using a non-image filing system, comes
  41. into play when the file type cannot be set; this is again transparent to the
  42. user under the Desktop, but carries a few extra complications for application
  43. programmers.
  44.  
  45. There are occasions when the user may not want to be fooled into viewing alien
  46. films as ARMovie files, and may want to open the images to see the contained
  47. ARMovie. To do this the user presses the shift key while double clicking.
  48. Similarly, pressing shift while dragging cancels MovieFS's interference with
  49. the WIMP, so that the receiver of the drag will be presented with the alien
  50. film file, not the ARMovie file inside it.
  51.  
  52. On opening the image file, users will see files other than "ARMovie". There is
  53. a text file named "ReadMe", which provide information about the version of
  54. MovieFS in use, and sometimes a second text file named "Error", which reports
  55. any problems that MovieFS had in interpreting the alien film. In fact, the
  56. ARMovie file may sometimes not be present (if MovieFS was not able to make
  57. sufficient sense of the alien film), but at least one of "ARMovie" and "Error"
  58. are always present.
  59.  
  60. Application programers interface
  61. --------------------------------
  62.  
  63. The presence of MovieFS makes relatively little difference to application
  64. programmers: if interaction is mainly through clicking and dragging then alien
  65. film files behave like ARMovie files. However, it may be beneficial to perform
  66. some processing of pathnames presented to, and retrieved from the user via
  67. writable icons. As examples:
  68.  
  69.  * If the user drags an alien film file to your application, and your
  70.    application displays the pathname, then it should cut off the ".ARMovie"
  71.    part, so as not to confuse the user.
  72.  
  73.  * If the user types, into a writable icon, the pathname of an image file
  74.    that contains an ARMovie file called "ARMovie", then your application
  75.    should add the ".ARMovie" leaf when accessing the film.
  76.  
  77. In the case that the file type of the alien film is not appropriately set, the
  78. pathname transformation is a little more complicated than simply adding and
  79. removing the ".ARMovie" string. The ARMovie file corresponding to the alien
  80. film
  81.  
  82.    ADFS::Disc.$.dir.file/avi
  83.  
  84. is
  85.  
  86.    MovieFS#ADFS##Disc.$.dir.file/avi:$.ARMovie
  87.  
  88. That is, all ':'s are replaced by '#'s, "MovieFS#" is stuck on the beginning,
  89. and ":$.ARMovie" is stuck on the end.
  90.  
  91. System structure
  92. ----------------
  93.  
  94. There are two levels at which film formats vary: they differ in the coding of
  95. audio and video data (the compression formats), and they differ in the overall
  96. ordering and cataloguing, within the file, of the data associated with video
  97. frames and groups of audio samples (the container format).
  98.  
  99. Replay provides interfaces (see documents CodecIf and ToUseSound) to cope with
  100. variation in compression formats, and the fetcher interface (see document
  101. Fetchers) to cope with variation in container format. Associated with MovieFS
  102. are a number of video decompressers, audio decompressers, and fetchers, of
  103. which the Indeo video decompresser, various WAV audio decompressers, and a
  104. fetcher for WAV and AVI(Indeo only) are supplied with Replay III. All the
  105. details necessary for third parties to add new decompressers and fetchers are
  106. given in the documents just mentioned.
  107.  
  108. The decompressers and fetchers are not sufficient on their own to allow Replay
  109. to play alien films, since Replay requires knowledge of many parameters (not
  110. least, it needs to know which decompressers and fetchers to actually use). All
  111. the necessary parameters are contained within the ARMovie header, which must be
  112. present in any film that is to be played. Of course alien films don't have
  113. ARMovie headers, but the image filing system provided by MovieFS makes them
  114. look as though they do.
  115.  
  116. That is the purpose of MovieFS: to recognise alien films, derive from them the
  117. parameters required by Replay, and fake enough of an ARMovie file to convince
  118. Replay to play it.
  119.  
  120. The functionality is split amongst several modules, which communicate with each
  121. other via a protocol designed specifically for the purpose. In this protocol,
  122. some modules play the part of providers and others that of clients.
  123.  
  124. Providers take on the role of recognising files: on the request of a client,
  125. they analyse a file to see if it is one that they support; and if so they
  126. provide a set of entry points through which an ARMovie-type view of the file
  127. can be accessed. As supplied with Replay III, MovieFS has one provider (or
  128. recogniser), which is the module named MFSUniv, but it is intended that third
  129. parties should produce additional recognisers for new film formats.
  130.  
  131. On the other side of the protocol, there are two clients:
  132.  
  133.  * The module named MovieFS provides the file system and image file system,
  134.    giving embodiment within RiscOS of the ARMovies faked by the recognisers.
  135.  
  136.  * The module named Kickstart provides the WIMP filter that redirects double
  137.    clicks and drags.
  138.  
  139. Clients expect there to be multiple recognisers, which they poll in sequence
  140. when they have a new film file that they wish to have interpreted.
  141.  
  142. Module initialisation
  143. ---------------------
  144.  
  145. When the various modules start up, the clients have to get to know about the
  146. recognisers. That is achieved through the use of Service calls. These Service
  147. calls and the entry points provided by recognisers are described next.
  148.  
  149. Service_RecogAnnounce (Service call &XXXXXXXX)
  150.  
  151.    Register or deregister as a recognition module.
  152.  
  153. On entry
  154.  
  155.    R1 = &XXXXXXXX (reason code)
  156.    R0 = 1 for register
  157.         2 for deregister
  158.    R2 = address of recognition information block
  159.    R3 = 0 (for future expansion)
  160.  
  161. On exit
  162.  
  163.    All registers preserved
  164.  
  165. Use
  166.  
  167.    This service call is used by recognisers, usually during initialisation, to
  168. announce their presence to all clients that are loaded at that time, and
  169. usually at finalisation to inform clients that they will no longer provide a
  170. recognition service. Clients should ignore calls that have a value other than 0
  171. for R3.
  172.  
  173. Service_RecogEnumerate (Service call &XXXXXXXX)
  174.  
  175.    Request registration from recogniser modules
  176.  
  177. On entry
  178.  
  179.    R1 = &XXXXXXXX (reason code)
  180.    R2 = Address to call for registration
  181.    R3 = 0 (for future expansion)
  182.  
  183. On exit
  184.  
  185.    All registers preserved
  186.  
  187. Use
  188.  
  189.    When a client module is loaded, there may be recognition modules already
  190. present. This service call is used by clients to request that such recognisers
  191. announce their presence. The recognisers should set up registers R0-R3 as
  192. though they were going to issue Service_RecogAnnounce, but should instead call
  193. the address contained in R2. The APCS is assumed, so the address can be called
  194. from C, if necessary. Recognisers should ignore calls to Service_RecogEnumerate
  195. that have a value other than 0 for R3.
  196.  
  197. The recognition information block contains the following.
  198.  
  199.   &00         File type recognised by this module
  200.   &04         Address of descriptive string (null terminated)
  201.   &08         Address of RecEntry_Recognise
  202.   &0C         Address of RecEntry_Open
  203.   &10         Address of RecEntry_Close
  204.   &14         Address of RecEntry_FileHandle
  205.   &18         Address of RecEntry_Read
  206.   &1C         Address of RecEntry_size
  207.   &20         Address of RecEntry_Error
  208.  
  209. Clients should not assume that block itself has life beyond the registering
  210. service call, but a recogniser is obliged to maintain the string and entry
  211. points until it deregisters. Several recognisers are permitted to register with
  212. a common file type, and a single recogniser is permitted to register a set of
  213. entry points multiply, with different file types. Clients must cope with this,
  214. and should avoid calling the same RecEntry_Recognise entry point twice when
  215. polling, just because they have been informed of it twice. However, to test
  216. whether a set of entry points has been seen before, it sufficient for the
  217. client to check the address of RecEntry_Recognise.
  218.  
  219. The descriptive string is for presentation to the user. It may be used by
  220. clients to display a list of recognisers. The entry points shall obey the APCS,
  221. and can be called from C.
  222.  
  223. The interface provides access to a film, as though it had been converted to an
  224. ARMovie file. In fact, a recogniser must achieve this by performing the
  225. conversion on demand, but for simplicity the entry points are described below
  226. as though a one-pass conversion were permissible.
  227.  
  228. RecEntry_Recognise
  229.  
  230.    Recognise a file
  231.  
  232. On entry
  233.  
  234.    R0 = 0
  235.    R1 = file handle
  236.  
  237. On exit
  238.  
  239.    R0 = correct file type         if recognised
  240.         -1                        otherwise
  241.  
  242. Use
  243.  
  244.    This entry point is used by a client to identify the correct recogniser for
  245. a particular file. The client will call this entry point for each recogniser it
  246. is aware of, until one returns a value other than -1. The client will, from
  247. then on, use the entry points from the successful recogniser. A single
  248. recogniser may handle files of several types, but returns the correct type for
  249. the file in question when RecEntry_Recognise is called. A recogniser should
  250. perform this task as quickly as possible, as it may be part of a long chain of
  251. calls.
  252.  
  253. Note: if R0 is not 0 on entry then it should be -1 on exit.
  254.  
  255. RecEntry_Open
  256.  
  257.    Convert a file, in preparation for reads
  258.  
  259. On entry
  260.  
  261.    R0 = file handle
  262.  
  263. On exit
  264.  
  265.    R0 = recogniser handle
  266.  
  267. Use
  268.  
  269.    This is called by a client in preparation for calls to RecEntryRead, so that
  270. the recogniser can analyse the file and build any data structures it may need.
  271.  
  272. RecEntry_Close
  273.  
  274.    Close the converted file
  275.  
  276. On entry
  277.  
  278.    R0 = recogniser handle
  279.  
  280. On exit
  281.  
  282.    ---
  283.  
  284. Use
  285.  
  286.    This entry point is called by a client after all reads have been completed,
  287. so that the recogniser can release all resources that it claimed when opening
  288. the file.
  289.  
  290. RecEntry_FileHandle
  291.  
  292.    Inform of new file handle
  293.  
  294. On entry
  295.  
  296.    R0 = recogniser handle
  297.    R1 = new file handle
  298.  
  299. On exit
  300.  
  301.    ---
  302.  
  303. Use
  304.  
  305.    A recogniser typically needs to read the alien film file during calls to
  306. RecEntry_Read, and therefore must record the file handle. However, it is
  307. sometimes necessary for a client to close and reopen the alien film file,
  308. between calls to RecEntry_Open and RecEntry_Close, causing the file handle to
  309. change. This entry point allows a client to inform a recogniser of the change.
  310.  
  311. RecEntry_Read
  312.  
  313.    Read from converted file
  314.  
  315. On entry
  316.  
  317.    R0 = Address of buffer to receive data
  318.    R1 = Position within file of first byte of data
  319.    R2 = Number of bytes to read
  320.    R3 = recogniser handle
  321.  
  322. On exit
  323.  
  324.    ---
  325.  
  326. Use
  327.  
  328.    This entry point is used by a client to indirectly read the file; the data
  329. returned must be as though the alien film file had been converted to an
  330. equivalent ARMovie file, and as though it were the converted file that is being
  331. read.
  332.  
  333. RecEntry_size
  334.  
  335.    Return the size of the converted file
  336.  
  337. On entry
  338.  
  339.    R0 = recogniser handle
  340.  
  341. On exit
  342.  
  343.    R0 = size
  344.  
  345. RecEntry_Error
  346.  
  347.    Return a string describing the problems that were encountered in converting
  348. the file.
  349.  
  350. On entry
  351.  
  352.    R0 = recogniser handle
  353.  
  354. On exit
  355.  
  356.    R0 = Address of string (null terminated)     if errors occurred
  357.       = 0                                       otherwise
  358.  
  359. Extending MovieFS
  360. -----------------
  361.  
  362. As already explained, dealing with new film formats usually involves coding new
  363. video and audio decompressers, which is independent of the MovieFS part of the
  364. system. It is when supporting a new container format that it is necessary to
  365. extend MovieFS with a new recogniser module.
  366.  
  367. When coding a recogniser, a developer has several choices in what sort of
  368. ARMovie to fake. It is possible, although quite difficult, to fake a Replay II
  369. file. Previous versions of MovieFS worked that way: during a call to
  370. RecEntry_Read, pieces of data had to be picked up from various places within
  371. the alien film, and packed together to form legitimate ARMovie chunks; careful
  372. buffering was needed for this not to cause excessive seeking from disc (and
  373. hence lumpy play back).
  374.  
  375. Under Replay III, the job of the recogniser can be far simpler. The faked file
  376. can consist of just an ARMovie header and an unaltered copy of the original
  377. file, offset by enough bytes to allow for the header. When using this method, a
  378. suitable fetcher must also be written and referred to from the header (see
  379. document Fetchers). That method may be appropriate in many circumstances, but
  380. places the onus for doing most of the hard work on the fetcher.
  381.  
  382. There is also a middle road, where again the recogniser must fake an ARMovie
  383. header, and a shifted, but otherwise unaltered, copy of the original file. This
  384. time, however, the recogniser also fakes a catalogue. The recogniser can
  385. perform detailed analysis of the film file, and pass information to the fetcher
  386. via the catalogue. That way the fetcher's work is simplified. The format of the
  387. catalogue is at the discretion of the developer; Replay III will not pay heed
  388. to it, except to pass its offset (which should be present in the header) to the
  389. fetcher.
  390.  
  391. (c) Copyright Warm Silence Software Ltd, 1996
  392.