home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-06-01 | 63.4 KB | 1,708 lines |
- TABLE OF CONTENTS
-
- animation.datatype/--datasheed--
- animation.datatype/--model--
- animation.datatype/ADTM_LOCATE
- animation.datatype/ADTM_PAUSE
- animation.datatype/ADTM_START
- animation.datatype/ADTM_STOP
- animation.datatype/DTM_COPY
- animation.datatype/DTM_FRAMEBOX
- animation.datatype/DTM_PRINT
- animation.datatype/DTM_PROCLAYOUT
- animation.datatype/DTM_REMOVEDTOBJECT
- animation.datatype/DTM_TRIGGER
- animation.datatype/DTM_WRITE
- animation.datatype/GM_GOACTIVE
- animation.datatype/GM_GOINACTIVE
- animation.datatype/GM_HANDLEINPUT
- animation.datatype/GM_HELPTEST
- animation.datatype/GM_HITTEST
- animation.datatype/GM_LAYOUT
- animation.datatype/GM_RENDER
- animation.datatype/MAIN
- animation.datatype/ObtainAnimationEngine
- animation.datatype/OM_DISPOSE
- animation.datatype/OM_GET
- animation.datatype/OM_NEW
- animation.datatype/OM_SET
- animation.datatype/OM_UPDATE
- animation.datatype/preferences
- animation.datatype/--datasheed-- animation.datatype/--datasheed--
-
- NAME
- animation.datatype -- base datatype for animations
-
- SUPERCLASS
- datatypesclass
-
- DESCRIPTION
- The animation.datatype is the super-class for any animation related
- classes.
-
- This class is responsible for creating the controls, scaling,
- remapping and synchronization.
-
- METHODS
- OM_NEW -- Create a new animation object. Passed to superclass, then
- create internal resources, read preferences, then fall througth
- OM_SET.
-
- OM_GET -- Obtain the value of an attribute. Passed to superclass
- if the attribute is not recognized by animation.datatype class.
-
- OM_SET -- Set the values of multiple attributes. Passed to
- superclass first.
-
- OM_UPDATE -- Update the values of multiple attributes. Falls
- througth to OM_SET.
-
- OM_NOTIFY -- Notify new attributes. Passed to superclass.
-
- OM_DISPOSE -- Dispose of a animation object. Passed to superclass
- after animation.datatype instance has freed it's resources.
-
- GM_LAYOUT -- Layout the object and notify the application of the
- title and size. Passed to superclass first.
-
- GM_HITTEST -- Determine if the object has been hit with the
- mouse within the gadget domain rectange. Overrides the
- superclass.
-
- GM_HELPTEST -- Determinate if the object has been hit by an help
- test within the gadget help domain rectangle. Overrides the
- superclass.
-
- GM_GOACTIVE -- Tell the object to go active. Overrides the
- superclass.
-
- GM_HANDLEINPUT -- Handle input. Overrides the superclass.
-
- GM_GOINACTIVE -- Inactive the object. Overrides the superclass.
-
- GM_RENDER -- Cause the current frame to render.
-
- DTM_FRAMEBOX -- Obtain or set the display environment that the
- animation requires. Passed to superclass first.
- Currently, only "obtain" (e.g. FRAMEF_SPECIFY is NOT set)
- is implemented, "set" might be implemented by a subclass...
-
- DTM_PROCLAYOUT -- Layout object on application process. See
- GM_LAYOUT for functionality.
-
- DTM_REMOVEDTOBJECT -- Remove an object from the window/screen.
- Passed to superclass after all.
-
- DTM_TRIGGER -- Cause an async event to occur.
- Overrides the superclass.
-
- DTM_OBTAINDRAWINFO -- not implemented yet
-
- DTM_DRAW -- not implemented yet
-
- DTM_RELEASEDRAWINFO -- not implemented yet
-
- DTM_COPY -- Copy the current frame to the clipboard as an IFF ILBM
- picture.
- Overrides the superclass.
-
- DTM_WRITE -- Write the current or a specified frame to a file as an
- IFF ILBM picture.
- Overrides the superclass.
-
- DTM_PRINT -- Print the current or a specified frame.
- Overrides the superclass.
-
- ADTM_LOADFRAME -- Load a frame of the animation.
-
- ADTM_UNLOADFRAME -- Deallocate any memory allocated by
- ADTM_LOADFRAME.
-
- ADTM_START -- Start the animation. This MUST be passed to the
- super-class AFTER the sub-class has started.
-
- ADTM_PAUSE -- Pause the animation. This MUST be passed to the
- super-class BEFORE the sub-class pauses.
-
- ADTM_STOP -- Stop the animation. This MUST be passed to the
- super-class BEFORE the sub-class stops.
-
- ADTM_LOCATE -- Used to locate a frame of the animation.
-
- All other methods are passed to the superclass.
-
- ATTRIBUTES
- OBP_Precison (ULONG) -- Precision to use when obtaining colors.
- See the PRECISION_ defines in <graphics/view.h>.
- Fixed to PRECISION_ICON (V40),
- Defaults to PRECISION_IMAGE V41).
-
- Applicability is () (V40)
- Applicability is (ISG) (V41)
-
- DTA_ControlPanel (BOOL) -- Determine whether the control
- panel is shown. Defaults to TRUE.
- (It is currently not recommned to change this attribute while
- the object is attached to a window/requester).
- Note: Chaning this attribute affects also the height returned
- by DTM_FRAMEBOX.
-
- Applicability is (I).
- Applicability is (ISGU) (V41)
-
- DTA_Repeat (BOOL) -- Determine whether the animation
- should repeat playing. Defaults to FALSE.
-
- Applicability is (ISGU) (V41)
-
- DTA_Immediate (BOOL) -- Indicate whether the animation
- should immediately begin playing. Defaults to
- FALSE.
-
- Applicability is (I).
- Applicability is (ISGU) (V41)
-
- ADTA_ModeID (ULONG) -- Set and get the graphic mode id of the
- picture. The mode id set here will be checked by BestModeIDA
- based on width/height/depth info of the animation.
- Defaults to 0.
-
- Applicability is (ISG).
-
- ADTA_KeyFrame (struct BitMap *) -- Pointer to the key
- frame.
-
- This bitmap should be allocated using AllocBitMap because this
- is the only way to force GetBitMapAttr and other functions to
- return correct attributary flags.
-
- This bitmap will be used for internal calculations and
- assumtions about bitmap data layout; the bitmaps got from
- ADTM_LOADFRAME have the same size and layout, but GetBitMapAttr
- may return wrong values for these bitmaps!
-
- Note that this bitmap type may change if someone says the object
- in which environment the object will be embedded in
- (DTM_FRAMEBOX). In this case a subclass may change the output
- format (preserving only ADTA_Width and ADTA_Height).
-
- Applicability is (ISG).
-
- ADTA_ColorRegisters (struct ColorRegister *) -- Color table.
-
- Applicability is (G).
-
- ADTA_CRegs (ULONG *) -- Color table to use with SetRGB32CM().
-
- Applicability is (G).
-
- ADTA_GRegs (ULONG *) -- Color table (like ADTA_CRegs, but contains
- color values of allocated (shared) pens).
-
- Applicability is (G).
-
- ADTA_ColorTable (ULONG *) -- PRIVTAE
- ADTA_ColorTable2 (ULONG *) -- PRIVATE
-
- Applicability is (G).
-
- ADTA_Allocated (ULONG) -- Number of shared colors allocated.
-
- Applicability is (G).
-
- ADTA_NumColors (WORD) -- Number of colors used by the picture.
- (May be 0 in the case of a truecolor animatoin without a
- palette).
-
- Applicability is (ISG).
-
- ADTA_NumAlloc (WORD) -- Number of colors allocated by the picture.
-
- Applicability is (G).
-
- ADTA_Remap (BOOL) -- Indicate whether the animation should be
- remapped or not.
- Defaults to TRUE.
-
- Applicability is (IS).
- Applicability is (ISG) (V41).
-
- ADTA_Screen (struct Screen *) -- Screen to remap to
-
- Applicability is (IS) (V41).
-
- ADTA_NumSparse (UWORD) -- Number of colors used for sparse remapping
-
- Applicability is (IS) (V41).
-
- ADTA_SparseTable (UBYTE *) -- Pointer to a table of pen numbers
- indicating which colors should be used when remapping the image.
- This array must contain as many entries as there
- are colors specified with ADTA_NumSparse
-
- Applicability is (IS) (V41).
-
- ADTA_Width (ULONG) -- Width of a frame in pixels.
-
- Applicability is (ISG).
-
- ADTA_Height (ULONG) -- Height of a frame in pixels.
-
- Applicability is (ISG).
-
- ADTA_Depth (ULONG) -- Depth of the frame.
-
- Applicability is (ISG).
-
- ADTA_Frames (ULONG) -- Number of frames in animation.
- Defaults to 0,
- setting this attribute also affects ADTA_FrameIncrement
- (e.g. set it's to 10 except if ADTA_Frames < 50, then
- ADTA_FrameIncrement = ADTA_Frames / 5).
-
- Applicability is (ISG).
-
- ADTA_Frame (ULONG) -- Currect frame
- Setting of this attribute causes an ADTM_LOCATE !
-
- Applicability is (G).
- Applicability is (SGU) (V41)
-
- ADTA_FramesPerSecond (ULONG) -- Number of frames per
- second to play.
- V40 limits this to 60 fps, V41 increases the limit up to
- 1200 fps (max. realtime.library resolution).
- (Setting this tag may also affect the default value for
- ADTA_NumPrefetchFrames.)
- Defaults to 10.
-
- Applicability is (ISG).
-
- ADTA_TicksPerFrame (ULONG) -- realtime.library ticks per frame
- Defaults to TICK_FREQ / 10 = 120
- (Setting this tag may also affect the default value for
- ADTA_NumPrefetchFrames.)
-
- Applicability is (ISG) (V41).
-
- ADTA_CurrFramesPerSecond (ULONG) -- current frames per second rate
- The playback rate and sound playback speed are recalculated
- to match this value.
- If ADTA_AdaptiveFPS is TRUE, this value is recalculated to
- allow the maximum available playback speed on the hardware
- (limmitted by ADTA_FramesPerSecond)
-
- Applicability is (ISGU) (V41).
-
- ADTA_CurrTicksPerSecond (ULONG) -- current ticks per second rate
- The playback rate and sound playback speed are recalculated
- to match this value.
- If ADTA_AdaptiveFPS is TRUE, this value is recalculated to
- allow the maximum available playback speed on the hardware
- (limmitted by ADTA_TicksPerSecond)
-
- Applicability is (ISGU) (V41).
-
- ADTA_FrameIncrement (ULONG) -- Amount to change frame by when fast
- forwarding or rewinding.
- Defaults to 10
-
- Applicability is (G).
- Applicability is (SGU) (V41)
-
- ADTA_BitMapHeader (struct BitMapHeader *) -- Set and get the
- base information for the animation. BitMapHeader is defined in
- <datatypes/pictureclass.h>
- Setting this tag causes the given struct BitMapHeader to be copie
- d
- into the object.
- This also causes ADTA_Width, ADTA_Height, ADTA_Depth to be set.
-
- Applicability is (G).
- Applicability is (ISG) (V41)
-
- ADTA_Sample (BYTE *) -- Pointer to sample data.
-
- Applicability is (ISG).
-
- ADTA_SampleLength (ULONG) -- Length of sample data.
-
- Applicability is (ISG).
-
- ADTA_Period (ULONG) -- Period to play back sample at.
- Defaults to 360.
-
- Applicability is (ISG).
-
- ADTA_Volume (ULONG) -- Volume to play back sample at.
- Defaults to 64.
-
- Applicability is (ISG).
- Applicability is (ISGU) (V41).
-
- ADTA_Cyles (ULONG) -- Cycles to play.
- Defaults to 1.
-
- Applicability is (G).
-
- ADTA_AdaptiveFPS (BOOL) -- If TRUE, the playback rate is limitted
- to the maximum reachable playback rate without frame skipping.
-
- Defaults to TRUE, but maybe changed using the prefs-file (V41).
-
- ADTA_SmartSkip (BOOL) -- If TRUE, some frames are skipped based
- on internal statistics to keep playback and sound in sync.
-
- Defaults to FALSE, but maybe changed using the prefs-file (V41).
-
- ADTA_NumPrefetchFrames (ULONG) -- Number of frames to be
- prefetched by the loading process.
- Must be at least 5, lower values are bumped to 5.
-
- Defaults to 1/2 fps value unless set explicietly by OM_SET or
- using the prefs-file (V41).
-
- ADTA_OvertakeScreem (BOOL) -- Overtake screen palette when not
- remapping.
- Applications should set this explicitly to FALSE if they don't
- want to be affected by this datatype.
-
- Defaults to TRUE, but maybe changed using the prefs-file (V41).
-
- BUGS
- Horrors. This version (V41.6) suffers under the 1001
- nightmare bugs problem:
-
- After all, I think the current version has the following bugs:
-
- - The CPU blitter support is currently broken. Instead of doing
- a small speed comparisation between OS blitter and CPU blitter
- the CPU blitter is enabled on a mc68030 per default if remapping
- is required.
- Who likes to use the CPU blitter evertimes (if the subclass decoder
- creates planar output), set explicitly the CPUBLITTER switch in the
- prefs file, to turn off the CPU blitter evertimes is the OSBLITTER
- option.
-
- - timing may be slightly inaccurate. On a rate of 10 fps, this
- isn't bad, but using fps >= 1 or lower (e.g.
- ADTA_TicksPerFrame > 1200), you may see the problem.
-
- - ADTA_OvertakeScreen does not work correctly. Currently it is
- always set to TRUE.
-
- - Internal statistics (for ADTA_AdaptiveFPS, ADTA_SmartSkip etc.)
- are working now, but the wheighting of loading and display time
- can be made better.
-
- - ADTA_SmartSkip code has been disabled.
-
- - CyberGFX code has been disabled because it isn't tested yet.
-
- - Incompatible with the current V41.11 cgxsystem.library
- PLANES2FAST option, because the GetBitMapAttr function does not
- BMF_STANDARD flag and then animation.datatype treats the bitmaps
- as non-planar, which cannot be remapped.
-
- - planar bitmaps with depth > 8 are not supported yet, sorry.
-
- - tapedeck.gadget handling is very tricky, and may have some
- problems.
-
- - On a highly loaded system the animation playback can't be
- stopped on the fly (IPC communication has problems with this).
- This happens often when DTA_Repeat is set, and the
- ADTM_STOP, ADTM_START cycle occurs to rewind the animation.
-
- - IPC communication is __VERY__ complex. We have 5 (!) threads
- to be controlled and sync'ed:
- - loader process
- - display and control process
- - input.device
- - application process
- - realtime.library player interrupt
-
- Don't expect that all works fine here...
-
- - DTA_Repeat == TRUE does not work with anims with less than 3
- frames, because the first frame is skipped.
- This causes problems with (for example) 2 frame gif animations.
-
- - ADTA_NumSpase and ADTA_SparseTable does not work yet, sorry.
-
- TODO
- - In HAM-mode, a box of color 0 should be drawn around the object
- to avoid some ugly HAM-effects when the background of the parent
- window is not 0.
- (Idea was taken from "cdgsxl").
-
- - Remapping code HAM -> 24-bit
-
- - Remapping code EHB -> Other amiga modes
-
- - Support for non-planar bitmap types (chunkypixel etc.).
-
- - Support for 12/15/16/18/21/24-bit planar bitmaps (direct-RGB
- coded).
-
- - Get some more info about the mysterious tapedeck.gadget.
-
- - The CBM OS 3.1 tapedeck.gadget is limited to a height of 16
- pixels. If I have time, I can write my own version WITHOUT this
- limitation...
-
- HISTORY
- V41.1
- - Initial release to DataTypes Mailinglist
-
- V41.2
- - Recompiled with SAS/C 6.58; this may fix mc68060 related
- problems.
-
- - Now the tapedeck update is slightly better because a "magic"
- update (using a gpr_Redraw of 100 instead of GREDRAW_UPDATE)
- is used.
- Thanks to Heinz Wrobel.
-
- - Fixed the bug that after resizing the parent window the
- height of the playback area was not restored.
- Fixed.
-
- - If the display screen is not visible, the old V40.6 turns
- of the bitmap display (using the VP_HIDE flags).
- Now V41 does the same.
- Thanks to Heinz Wrobel for explaining this. Because this
- may be a hack (not documented by the OS docs), this
- feature is turned off if the NOHACKS switch is set in the
- prefs file.
-
- - Fixed internal statistics (used for adaptive playback rate
- calculations). Now the datatype tracks time-to-unload-a-frame,
- too.
-
- - Fixed a problem with adaptive playback rate selection
- and dynamic timing. The new model seems to run more smoothly,
- but this is still a weak point.
-
- - Recompiled the project with DATA=FARONLY. I think that this
- should fix some problems.
- Thanks to Steve Krueger (sekruege@nando.net) for answering
- some questions.
-
- - Moved OS vs. CPU blitter selection code from GM_LAYOUT
- to the first GM_RENDER after GM_LAYOUT. This should be more
- reliable, and speeds up the initial window layout a little
- bit.
-
- - Seems that there is a bug in the CPU blitter (selection) code.
- For now I wrote a small workaround; the CPU blitter is
- enabled per default on a mc68030 if ADTA_Remap is set to TRUE
- (assuming that the cpu blitter function running on a mc68030 is
- a little bit faster than the OS blitter).
-
- - Updated the autodocs.
-
- - OM_DISPOSE now preserves result2 (e.g. IoErr() result)
- explicitly.
-
- - OM_DISPOSE now sets the embedded sound.datatype object's
- SDTA_Sample to NULL. This fixes possibly problems if a
- sound.datatype clone tries to FreeVec' the sample...
-
- - Removed code from OM_DISPOSE which is executed in
- DTM_REMOVEDTOBJECT (e.g. freeing of pens and tmp. bitmaps).
-
- - Now OM_GET ADTA_Sample, ADTA_SampleLength, ADTA_Period,
- ADTA_Volume and ADTA_Cycles are got from the current frame.
- This feature should work now.
-
- - Implemeted OM_GET ADTA_DestFrame (alias PDTA_DestBitMap). Note
- that accessing this bitmap is ONLY safe when the object does not
- do any playback; the same rule must be respected for
- ADTA_Sample, ADTA_SampleLength and ADTA_Period.
-
- - Added CBM cdxl.datatype compatibility hack (I'm __very__ angry
- about this problem because it took a long time to find the
- problem). It seems that CBM's cdxl.datatype requires that it's
- instance data are on long-word boundary because the data starts
- with a FileInfoBlock.
- Don't rely on this feature !!!
-
- - If the object setup (OM_NEW) failed in a sub-process, the error
- code is now passed to the parent process and there stored
- in Result2. This includes realtime.library errors, too.
-
- - Now uses AllocPooled and an internal memory management to
- avoid memory allocations whereever and whenever possible.
-
- - Internal divisions are now rounded when usefull.
-
- - Child processes are now starting in sequence instead of a
- parallel setup. This is only for testing; later I'll write the
- parallel setup again.
-
- - Fixed the bug that GM_RENDER with GREDRAW_REDRAW didn't work
- properly if the parents box was only changed of one of X- OR
- the Y-axis (e.g. EraseRect wasn't done in this case).
-
- - Fixed the bug that tapedeck.gadget was drawn even if the
- DTA_Domain height was below GA_Height (tapedeck.gadget can't
- clip in Y-direction).
- This fixes visual problems with embed.datatype.
- The check is also made in GM_HITTEST, GM_HELPTEST and
- GM_GOACTIVE.
-
- - If DTA_ControlPanel is FALSE and the mouse SELECTUP starts the
- playback, a following mouse SELECTUP now pauses the playback.
-
- - The stack swapping code now allocates it's memory without
- MEMF_CLEAR, which should result in a small speedup when doing
- things.
-
- - The library base now has 16 reserved lvo entries after
- ObtainEngine which returns all 0 for now.
- All these entries are reserved and private for now.
-
- - DTM_REMOVEDTOBJECT now passes the msg to superclass after doing
- it's work. This fixes problems with some datatypesclass
- internals.
- Fixed.
-
- - DTM_FRAMEBOX now passes the msg to superclass before doing
- it's work. Now datatypesclass can release the input clipboard
- which avoids that the clipboard unit is locked while the object
- exists.
- Fixed.
-
- - Fixed the bug that setting ADTA_ModeID to INVALID_ID caused
- havoc in the object (remapping code got turned off, the
- palette of a public screen was changed etc.).
- Now a ADTA_ModeID of INVALID_ID is treated as a 0UL mode id.
- Thanks to Francis Labrie (fb691875@er.uqam.ca) for reporting
- the bug.
- Fixed.
-
- - Fixed the bug that when the CPU blitter draws the display, a
- GM_RENDER showed the first frame. Now a GM_RENDER and other
- methods sync's the ADTA_DestFrame bitmap correctly (e.g. copy
- the (remapped) src bitmap) into ADTA_DestFrame) before using it.
- Fixed.
-
- - Changed some internals that moving the tapedeck.gadget's slider
- causes less overhead when loading single frames.
-
- - Now the animation.datatype instance data contents are on a
- long-word aligned boundary, which should speed up some things.
- (Tested only with Kick 3.0 yet).
-
- - Fixed a bug in the ADTA_OvertakeScreen code that caused that
- the last color in a palette change was set to black instead
- of the wanted color.
- Fixed.
-
- V41.3
- INTERNAL RELEASE
-
- - Fixed the bug that a non-planar (chunky) bitmaps wasn't passed
- througth.
-
- - Improved internal GetPictureCopy (which is used to create the
- temp. object for DTM_COPY, DTM_WRITE, DTM_PRINT):
- - It now uses the key bitmap as a friend bitmap parameter.
- This may fix problems when processing non-planar bitmaps.
-
- WARNING: This may result in large problems if a < V43
- picture.datatype is used in a GFX-card environment (CyberGFX,
- Picasso 96 etc.).
-
- - It now does not attempt to copy a colormap if is
- ADTA_NumColors == 0 (added this check to avoid some
- unneccesary memory copies which result all in a big NOP is
- this case).
-
- - Reduced the memory usage if non-planar input bitmaps are used
- by the subclass (the temporary bitmaps used for remapping etc.
- are not allocated (because they were not used...)).
-
- - Tests have shown that the PLANES2FAST option of
- cgxsystem.library V41.11 is incompatible with animation.datatype
- because the GetBitMapAttr function does not set BMF_STANDARD for
- these bitmaps even if they are planar.
- This causes that the bitmaps are treated as chunkypixel ones
- (where the remapping code can't touch them).
- Cannot be fixed yet.
-
- V41.4
- Version for the "Compuler 97'" fair in Colone/Germany
-
- - Replaced the custom stack swapping code by my "standard" module
-
- - Fixed the bug that a failed palette allocation (e.g. setting of
- ADTA_NumColors) return random values for the ADTA_CRegs,
- ADTA_ColorRegisters etc. attributes if it was set more than once
- in objects lifetime and the allocation failes.
- The attributes now return correctly NULL in this case.
- Fixed.
-
- - If ADTA_NumColors is set to 0, now ADTA_CRegs,
- ADTA_ColorRegisters, ADTA_GRegs etc. return a NULL pointer
- instead of returning random values.
-
- - Minor code cleaup.
-
- - Oops, the last distribution missed the
- "datatypes/animationclassext.h" include file.
-
- V41.5
- - Fixed a bug that some things (like internal CopyBitMapPlanar)
- only worked if the object has been added to the display.
- Fixed.
-
- - Fixed the bug that the alf_Duration field wasn't respected for
- ADTM_LOCATE and the first frames played back by ADTM_START.
- Fixed.
-
- - Enabled the remapping code for 8-bit chunkypixel bitmaps.
- This also fixes the problem with CyberGFX that planar bitmaps
- in are not detected in CGFX PLANES2FAST mode (but there a still
- a couple of bugs...).
- Should work now...
-
- - Fixed the bug (in theory, but it does never happen) that the
- load process did not clear some internal flags on exit
- which may cause deadlocks if an application fires ADTM_START
- after the object has been removed from display (which
- is illegal, but...).
- Fixed.
-
- - Major changes in the IPC communication and timing parts.
- Main reason was to reduce the delay gap caused by a repeat
- rewind (if DTA_Repeat is TRUE).
-
- - OM_GET ADTA_Sample, ADTA_SampleLength, ADTA_Period
- refers to the current frame, if there is no current frame
- the attributes refers to the first frame.
- The "feature" introduced in V41.2 to get the "current"
- values from the sound.datatype object wasn't very usefull
- because CBM's sound.datatype did not support OM_GET for these
- attributes.
-
- V41.6
- - Fixed the bug that STM_LOCATE did not work properly. The
- DTA_TriggerMethods info says that "Locate" is
- (STM_LOCATE | STMD_ULONG), but the trigger command dispatcher
- checked the old STM_LOCATE (without the STMD_#? flag).
- Now the trigger command dispatcher masks the trigger method
- using ((trigger_method) & ~STMF_DATA_MASK) to get rid of the
- STMD_#? info...
- Fixed.
-
- - Added SHARECHIP / NOSHARECHIP options. Before V41.6, the
- animation.datatype tests incoming planar bitmaps of they lie in
- chipmem can can be passed to BltBitMapRastport directly without
- using a copy to a chipmem buffer.
- Now this test is avoided unless the SHARECHIP option is on
- again. The prefs docs about this option explains why this may be
- good in certain cases...
-
- - tapedeck.gadget's special GM_RENDER mode 100 (GREDRAW_SLIDER, e.g
- .
- only update embedded slider) is never more treated as an hack.
-
- - Small speedup because tapedeck's rastport using for
- GM_RENDER/GREDRAW_SLIDER is now set up at GM_LAYOUT time
- instead of a once-pre-draw setup.
-
- - The 8-bit-chunkypixel remapping code has been re-written.
- It now remaps RPL8 / remap / WPL8 instead using a RPA8 / remap /
- WPA8 cycle (the line-by-line should be more cache-friendly and
- therefore faster...).
- The memory needed for this remapping is also reduced
- significantly...
-
- - The 8-bit-chunkypixel remapping code never more checks
- for the return codes of RPL8/RPA8 nor WPL8/WPA8.
- It seems that the GFX-Card driver software sometimes returns
- rubbish here...
- Should fix some reported blank displays...
-
- - Added support for FIF_ABILITIES (bit 31, (0x80000000UL)).
- This flag indicates that animation.datatype supports the
- FIF_#? flags. "GMultiView" for example now looks on this
- flag and is able to show a HAM/EHB animation on a public
- screen if we support the remapping for it.
-
- - Fixed the bug that DTM_TRIGGER did not send
- DTERROR_COULDNT_SEND_MESSAGE in the case of no receiver.
- Fixed.
-
- - Now SAS/C's build-in math functions are used instead of
- the C macros...
-
- - Changed the default value of ADTA_NumPrefetchFrames.
- Instead of 10 frames to prefetch now (1/2 fps) number of
- frames will be pre-fetched during loading.
- Setting ADTA_NumPrefetchFrames explicitly by OM_SET or
- by the prefs-file will turn this automatic selection off
- again...
- This may give a more reasonable default value for
- mpegvideo.datatype's NOLOADALL mode...
-
- - Fixed the bug in OM_NEW that if realtime.libary/CreatePlayerA
- failed with an PLAYER_ErrorCode error not of RTE_NOMEMORY or
- RTE_NOCONDUCTOR Result2 (IoErr) was set to 0.
- Due lack of a good dos.library error code if've set the
- code to 1234L for now.
- Fixed.
-
- - Small modifications in the code which may caused problems with
- animations with more than 16384 pixel width and/or height.
- These dimensions are currently therorectical, but:
- Fixed.
-
- - DTM_REMOVEOBJECT now causes that all queuing frames in the
- display queue are disposed (e.g. moved to the dispose queue).
- This avoids the bug that removing the object from a window
- and re-attaching it again may cause that next play cycle will
- display these frames first.
- Fixed.
-
- - The priority of the display and load processes are now set up
- based on the parent process priority (e.g. the process which
- executes OM_NEW).
- The display process gets parent process priority, the load
- process gets "parent priority - 1".
- This allows to run the playback at higher priorities.
-
- - { GA_Immediate, TRUE } is not set any more for the
- tapedeck.gadget. This seems to fix some problems with input
- processing from tapedeck.gadgets.
-
- - Fixed the bug that tapedeck.gadget's TDECK_CurrentFrame attribute
- wasn't updated if DTA_ControlPanel is set to TRUE.
- Fixed.
-
- - ADTM_START now clears the load queue explicitly if the first
- frame in the queue matches not the given "asa_Frame".
-
- SEE ALSO
- mpegsystem.datatype, mpegvideo.datatype,
- picmovie.datatype,
- cdxl.datatype. avi.datatype, quicktime.datatype,
- moviesetter.datatype,
- film.datatype
-
- THANKS TO
- David Junod for the design and the first implemenation,
- Olaf Barthel for his great help,
- Heinz Wrobel for explaining some things.
- Frank Mariak for his CPU blitter replacement and CyberGFX support,
- Niels Froeling for the planar remapping code,
- and the people of the DataTypes Mailing list for testing and their
- help
-
- animation.datatype/--model-- animation.datatype/--model--
-
- MODEL
- <The following has not been finished yet. It's only a first, small,
- poorly, genernal overview about the used model>
-
- The following short text should describe how the animation.datatype
- works (in general):
-
- The animation.datatype is split up in four parts:
- 1. the decoder (the subclass which sits on animation.datatype)
- 2. the loading process
- 3. the display and control process
- 4. a realtime.library Player (timing interrupt)
- 5. a control process (application process, or input.device)
-
- 1. The Decoder
- The decoder part belongs completely to the subclass (sitting on
- animation.datatype). animation.datatype communicates through
- methods (ADTM_START, ADTM_PAUSE, ADTM_STOP, ADTM_LOCATE,
- ADTM_LOADFRAME and ADTM_UNLOADFRANE) with the subclass.
- Mainly, ADTM_LOADFRAME and ADTM_UNLOADFRAME are used to load/unload
- a frame from the subclass.
-
- 2. The Loading Process
- The loading process has a simple task: Load as much frames as
- possible and store the frames into a "frame queue".
- The idea is that the loading process (which runns at a lower
- priority than the display process) consumes all CPU time which is
- not used by the display process.
-
- The load process is controlled by the display and the control
- process (the application., for example), which can set one of
- the following modes for the load process:
- a) preload: Load the next 10 (can be changed by the prefs-file)
- frames, then stop.
- b) play: Fill the "frame queue" until it is full (e.g. until
- it reaches 10 frames or more).
- c) stop: Stop loading and preloading
- d) flush: flush frame queue
-
- 3. The Display Process
- The display process is responsible for remapping and displaying
- of frames during playback. If signalled by the realtime.library
- Player, the display process gets the first frame from the frame
- queue, remapps it (if neccesary) and displays it. If a sample
- is attached to the frame, the sample is fed to the embedded
- sound.datatype object.
-
- 4. The realtime.library Player (Timing Interupt)
- The player has the job to decrase a counter each 1/1200 sec.
- If the counter reaches 0, it is time to display the next frame,
- and the interrupt fires a signal to the display process to
- trigger the display of the frame.
-
- 5. The Control Process
- There is no fixed control process. But the application is allowed
- to send ADTM_START, ADTM_PAUSE, ADTM_STOP and ADTM_LOCATE to
- trigger a playback, pause or stop it - or locate a single frame.
- The same counts for the user, who plays with the embedded
- tapedeck.gadget.
-
- animation.datatype/ADTM_LOCATE animation.datatype/ADTM_LOCATE
-
- NAME
- ADTM_LOCATE -- Locate a frame
-
- FUNCTION
- ADTM_LOCATE locates a frame and displays it.
-
- RESULT
- Returns non-zero on success,
- 0UL on failure.
-
- NOTE
-
- animation.datatype/ADTM_PAUSE animation.datatype/ADTM_PAUSE
-
- NAME
- ADTM_PAUSE -- Pause an animation playback
-
- FUNCTION
- ADTM_PAUSE pauses an animation playback.
- If the playback is currently active, it will be paused, then the
- sound is turned off. The load process is turned off, too.
-
- RESULT
- Non-zero if the playback has been turned off successfully.
- 0UL if on error (object is not attached to a window etc.).
-
- NOTE
- - This method MUST be passes to the super-class (animation.datatype)
- before the sub-class pauses !
-
- - Subclasses can treat this method like ADTM_STOP. Unlike
- ADTM_STOP, a subclass should not reset any frame counter
- (or Seek to any other file position, for example), because
- in the most cases the playback starts again at this position.
-
- animation.datatype/ADTM_START animation.datatype/ADTM_START
-
- NAME
- ADTM_START -- Start animation playback
-
- FUNCTION
- ADTM_START starts the animation playback.
-
- First the timer is reset to the current frame. If the load process
- is inactive, it will be activated; this method waits until
- a preload cycle is done.
- Then the timer is activated and sound will be turned on.
-
- Starting with V41, this method is a NOP when the object is not
- attached to a window/requester (this allows custom players
- to use ADTM_START and the subclass optimisations made in a
- ADTM_START / ADTM_STOP cycle).
-
- RESULT
- Returns Non-Zero if playback has been started successfulls.
- Returns 0UL on failure (e.g. objectnot attached to a window etc.)
-
- NOTE
- - Subclasses can use ADTM_START to optimize playback. Starting
- with ADTM_START and ADTM_PAUSE/ADTM_STOP, a continous range
- of frames is read by the loading process.
- A common example usage (in a subclass) is to send the first
- read-packets (for the timstamp given in adtStart -> asa_Frame)
- asyncrounous to the filesystem.
- Don't wait for the packets ! ADTM_LOADFRAME should do this.
-
- - Subclasses must prepare for playback BEFORE passing
- this msg to animation.datatype, because the loading process will
- immediately start loading.
-
- - Subclasses MUST NOT hold any locks which are also locked in
- ADTM_LOADFRAME / ADTM_UNLOADFRAME when passing ADTM_START to
- animation.datatype. This causes a deadlock because the process
- which is running ADTM_START will wait until the load process
- has finished it's playback, but the load process is waiting
- for the semaphore which is locked by the ADTM_START process.
-
- - Starting with V41, this method gurantees that the playback
- has been started on exit.
-
- - Starting with V41, this method is safe when the object is
- not attached to a window.
-
- animation.datatype/ADTM_STOP animation.datatype/ADTM_STOP
-
- NAME
- ADTM_STOP -- Stops an animation.datatype playback
-
- FUNCTION
- ADTM_STOP stops an animation playback.
- If the playback is currently active, it will be stopped, then the
- sound is turned off. The load process is turned off, too.
-
- RESULT
-
- NOTE
- - This method MUST be passes to the super-class (animation.datatype)
- before the sub-class stops !
-
- - Starting with V41 this method gurantees that the playback has
- been stopped on exit.
-
- animation.datatype/DTM_COPY animation.datatype/DTM_COPY
-
- NAME
- DTM_COPY -- Copy current frame to primary clipboard unit
-
- FUNCTION
- DTM_COPY copies the current frame as an IFF ILBM frame to the
- primary clipboard (unit 0).
-
- Starting with animation.datatype V41, this method creates a
- temporary picture.datatype object, which will be fed with
- bitmap, colormap, DTA_ObjName, DTA_ObjAuthor, DTA_ObjAnnotation,
- DTA_ObjCopyright, DTA_ObjVersion, ADTA_BitMapHeader, ADTA_ModeID,
- ADTA_NumColors, ADTA_ColorRegisters, ADTA_CRegs. Then this
- method is passes to the picture.datatype object.
-
- Before V41, animation.datatype used it's own clipboard saving code.
-
- RESULT
- The return code from the picture.datatype object.
-
- NOTE
-
- SEE ALSO
- picture.datatype/DTM_COPY
-
- animation.datatype/DTM_FRAMEBOX animation.datatype/DTM_FRAMEBOX
-
- NAME
- DTM_FRAMEBOX -- Get/or set the object's environment
-
- FUNCTION
- The DTM_FRAMEBOX method is used to set or get the object's
- environment.
-
- The FRAMEF_SPECIFY flag defines the mode of this method.
-
- If FRAMEF_SPECIFY is not set the object returns it's preferred
- (optimum) enviroment in dtf_FrameInfo (output).
-
- If FRAMEF_SPECIFY is set, the application tells the object
- about it's destination environment (got from dtf_ContentsInfo);
- animation.datatype does nothing here (NOP), but a subclass can use
- this to select a matching dither mode or select the best-matching
- stream (in multi-stream animations like MPEG-2).
-
- RESULT
- Returns non-zero for success, 0 for failure (NOP).
-
- NOTE
-
- animation.datatype/DTM_PRINT animation.datatype/DTM_PRINT
-
- NAME
- DTM_PRINT -- Print current or specified frame to file.
-
- FUNCTION
- DTM_PRINT prints the current or a specifed frame as an IFF ILBM
- picture to the printer.
-
- Starting with animation.datatype V41, this method creates a
- temporary picture.datatype object, which will be fed with
- bitmap, colormap, DTA_ObjName, DTA_ObjAuthor, DTA_ObjAnnotation,
- DTA_ObjCopyright, DTA_ObjVersion, ADTA_BitMapHeader, ADTA_ModeID,
- ADTA_NumColors, ADTA_ColorRegisters, ADTA_CRegs. Then this
- method is passes to the picture.datatype object.
-
- Before V41, animation.datatype used it's own printer code.
-
- TAGS
- ADTA_Frame (ULONG) -- (V41) Timestamp of the frame to print.
- Defaults to the current frame.
-
- DTA_RastPort, DTA_DestCols, DTA_DestRows and DTA_Special
- are also recognised by the picture.datatype DTM_PRINT code.
- See picture.datatype/DTM_PRINT or datatypesclass autodoc.
-
- RESULT
- The return code from the picture.datatype object.
-
- BUGS
- - DTA_SelectDomain is ignored in V41 (as the whole DTM_SELECT
- code is not working yet).
-
- NOTE
-
- SEE ALSO
- picture.datatype/DTM_PRINT
-
- animation.datatype/DTM_PROCLAYOUT animation.datatype/DTM_PROCLAYOUT
-
- NAME
- DTM_PROCLAYOUT -- Layout an animation.datatype object on applications
- process
-
- FUNCTION
- <not written yet, sorry>
-
- RESULT
-
- NOTE
-
- animation.datatype/DTM_REMOVEDTOBJECT animation.datatype/DTM_REMOVEDTOBJECT
-
- NAME
- DTM_REMOVEDTOBJECT -- Release all window/screen related resources
-
- FUNCTION
- DTM_REMOVEDTOBJECT is used to remove a animation.datatype object
- from screen context. The playback is stopped (using ADTM_STOP),
- then all resouces allocated in the initial GM_LAYOUT are freed.
- This includes shared or exclusive pens allocated, temporary bitmaps
- etc.
-
- After all, the method is passed to superclass.
-
- After using this method, the object is removed from screen's context
- and can be re-used in another screen.
-
- RESULT
- Returns return value from superclass.
-
- NOTE
- This method is normally invoked from within
- datatypes.library/RemoveDTObject. Manual usage is only neccesary
- where AddDTObject wasn't used (see embed.datatype for example).
-
- animation.datatype/DTM_TRIGGER animation.datatype/DTM_TRIGGER
-
- NAME
- DTM_TRIGGER -- Trigger an action
-
- FUNCTION
- Trigger an asyncrounous (!) action on the object.
-
- Supported are:
-
- Label | Command | Function | Parameters
- ----------------+-----------+-------------------------+------------
- "Pause" | "PAUSE" | STM_PAUSE | STMD_VOID
- "Play" | "PLAY" | STM_PLAY | STMD_VOID
- "Rewind", | "REWIND" | STM_REWIND | STMD_VOID
- "Fast Forward" | "FF" | STM_FASTFORWARD | STMD_VOID
- "Stop" | "STOP" | STM_STOP | STMD_VOID
- "Locate" | "LOCATE" | STM_LOCATE | STMD_ULONG
-
- - Pause
- Pauses the current playback.
- The control process simply does a ADTM_PAUSE here.
-
- - Play
- Start playback
-
- - Rewind
- Skips ADTA_FrameIncrement frames back
-
- - Fast Forward
- Skips ADTA_FrameIncrement frames forward
-
- - Stop
- Stops the current playback.
- The control process simply does a ADTM_STOP here.
-
- - Locate
- The given parameter (dtt_Data; treated as ULONG) is used as the
- frame number (or timestamp) to locate (e.g. load and display this
- frame). This is simmilar to ADTM_LOCATE (but this isn't done here
- yet).
-
- Be sure to look at datatypes.library/GetDTTriggerMethodDataFlags to
- check whether a trigger method requires an argument or not !
-
- RESULT
- Returns non-zero for success,
- 0 for failure (and result2 set to the cause:
- ERROR_NO_FREE_STORE - no memory
- DTERROR_COULDNT_SEND_MESSAGE - object not ready to send (should NOT
- occur)
- ERROR_ACTION_NOT_KNOWN - unknown STM_#? type
-
- BUGS
- - The given STM_#? type is not checked if it is supported or not.
-
- NOTE
- - Once again: This method is asyncrounous. You cannot assume
- that the triggered action is started nor finished after
- DTM_TRIGGER returns.
-
- - Common usage is a button field or a menu item to let the user
- to some actions on the object.
-
- SEE ALSO
- datatypes.library/GetDTTriggerMethodDataFlags
-
- animation.datatype/DTM_WRITE animation.datatype/DTM_WRITE
-
- NAME
- DTM_WRITE -- Copy current or specified frame to file.
-
- FUNCTION
- DTM_WRITE copies the current or a specifed frame as an IFF ILBM
- picture to the given filehandle.
-
- Starting with animation.datatype V41, this method creates a
- temporary picture.datatype object, which will be fed with
- bitmap, colormap, DTA_ObjName, DTA_ObjAuthor, DTA_ObjAnnotation,
- DTA_ObjCopyright, DTA_ObjVersion, ADTA_BitMapHeader, ADTA_ModeID,
- ADTA_NumColors, ADTA_ColorRegisters, ADTA_CRegs. Then this
- method is passes to the picture.datatype object.
-
- Before V41, animation.datatype used it's own saving code.
-
- TAGS
- ADTA_Frame (ULONG) -- (V41) Timestamp of the frame to save.
- Defaults to the current frame.
-
- RESULT
- The return code from the picture.datatype object.
-
- NOTE
- - Subclasses may implement ADTA_Frame, ADTA_Frames and
- ADTA_FrameIncrement for their own encoders.
-
- SEE ALSO
- picture.datatype/DTM_WRITE
-
- animation.datatype/GM_GOACTIVE animation.datatype/GM_GOACTIVE
-
- NAME
- GM_GOACTIVE -- Activate an animation.datatype gadget
-
- FUNCTION
- The GM_GOACTIVE method is used to indicate to a gadget that it has
- become active. This method overrides the superclass.
-
- See also GM_HANDLEINPUT, because this method is exactly the the
- same except the following things:
-
- - If the gpInput message mouse position is over the tapedeck.gadget
- it will become the active member (unless it has GA_Disabled == TRUE
- set for any reason).
-
- RESULT
- See GM_HANDLEINPUT
-
- NOTE
-
- animation.datatype/GM_GOINACTIVE animation.datatype/GM_GOINACTIVE
-
- NAME
- GM_GOINACTIVE -- Decativate an animation.datatype object
-
- FUNCTION
- The GM_GOINACTIBE method is used to indicate that the
- animation.datatype gadget has become inactive. This method overrides
- the superclass.
-
- If the embedded tapdeck.gadget was active, this method
- will be passed to it.
-
- RESULT
- The return code from the superclass is returned.
-
- NOTE
-
- animation.datatype/GM_HANDLEINPUT animation.datatype/GM_HANDLEINPUT
-
- NAME
- GM_HANDLEINPUT -- Process gadget input events
-
- FUNCTION
- The GM_HANDLEINPUT method is used to handle te input events of an
- active animation.datatype gadget. This method overrides the
- superclass.
-
- If there is an active member (currently only tapedeck.gadget),
- all messages are passed througth to it.
-
- If there is no tapedeck.gadget in the display (e.g. DTA_ControlPanel
- == FALSE) and the object is not playing, a mouse SELECTUP starts
- the playback. If the object is playing, a SELECTUP pauses the
- playback.
-
- RESULT
- Do not interpret the results here, due they're a result of private
- internal activity.
- A later version will define here valid values.
-
- NOTE
-
- animation.datatype/GM_HELPTEST animation.datatype/GM_HELPTEST
-
- NAME
- GM_HELPTEST -- Test if object has been hit by a help request
-
- FUNCTION
- The GM_HELPTEST method is used to determine if the given mouse
- coordinates are within the help domain of the animation.datatype
- gadget.
- This method overrides the superclass.
-
- If the mouse position is over the embedded tapdeck.gadget, this
- method is passed to it.
-
- RESULT
- GMR_HELPHIT or the return value of the embedded tapedeck.gadget
-
- NOTE
-
- animation.datatype/GM_HITTEST animation.datatype/GM_HITTEST
-
- NAME
- GM_HITTEST -- Test if object has been hit by mouse
-
- FUNCTION
- The GM_HITTEST method is used to determine if the given mouse
- coordinates are within the domain of the animation.datatype gadget.
- This method overrides the superclass.
-
- If the mouse position is over the embedded tapdeck.gadget, this
- method is passed to it.
-
- RESULT
- GMR_GADGETHIT or the return value of the embedded tapedeck.gadget
-
- NOTE
-
- animation.datatype/GM_LAYOUT animation.datatype/GM_LAYOUT
-
- NAME
- GM_LAYOUT -- Layout an animation.datatype object
-
- FUNCTION
- <not written yet, sorry>
-
- RESULT
- Returns return value from superclass.
-
- NOTE
-
- animation.datatype/GM_RENDER animation.datatype/GM_RENDER
-
- NAME
- GM_RENDER -- Render an animation.datatype gadget
-
- FUNCTION
- The GM_RENDER method is used to render an animation.datatype object
- with the current frame. This method is also passed to the embedded
- tapedeck.gadget if DTA_ControlPanel is TRUE and if there is enougth
- space to render it (currenty a domain height < 16 pixels causes the
- tapedeck.gadget not to be rendered)
- . This method overrides the superclass.
-
- If this is the first GM_RENDER/GREDRAW_REDRAW after the initial
- GM_LAYOUT and DTA_Immediate was set to TRUE, the playback is
- started here.
-
- RESULT
- This method returns 0.
-
- NOTE
-
- animation.datatype/MAIN animation.datatype/MAIN
-
- INTRODUCTION
- animation.datatype is the datatypes base class for all animation
- and movie subclasses. It is responsible for remapping, sound,
- scronisation, creating the controls and misc. other things
-
- FEATURES
- - Supports now the full animation.datatype interface like defined
- in include31:datatypes/animationclass.h:
- - Supports palette-per-frame, e.g. each frame can have it's own
- palette.
-
- - Dynamic timing. A frame can have a variable duration until
- the next frame occurs.
-
- - Fully compatible to the original animation.datatype V40.7
-
- - Configurable througth a preferences file.
-
- - Includes a CPU blitter for planar screens. If enabled by the prefs
- file, animation.datatype uses a CPU blitter instead of the OS
- blitter.
-
- - CyberGFX compatible:
- - Now animation.datatype V41 can handle non-planar bitmaps, e.g.
- chunkypixel bitmaps, as input.
- (Currently they cannot be remapped, the bitmaps are displayed
- unchanged on the destination screen).
-
- - Supports HAM/EHB -> 24-bit remapping. (TEMPORARY DISABLED).
-
- - No skipping anymore. The aniation.datatype V41 introduces
- a new feature called "adaptive frame rate selection". Instead
- of skipping frames when they cannot be displayed in real-time,
- the FPS rate is now adapted to fit (e.g. the maximum available
- playback speed without skipping).
-
-
- REQUIREMENTS
- - You need at least Kick/WB 3.0.
-
- - "realtime.library", >= V39 - for timing
- - "gadgets/tapedeck.gadget" (any version) - for the controls
-
- You need "sound.datatype" >= V40 for sound support.
-
- USAGE
- Usage is very simply: If you have loaded an animation, you can
- control the animation using the tapedeck gadget at the bottom:
- "<<" skips some frames back
- ">" starts playing
- ">>" skips some frames forward.
- The slider part can be used to move manually to a specific
- postion in the animation/movie.
-
- Note that there is also a prefs-file where you can set various
- options. See "preferences" section for details.
-
- INSTALLATION
- After unpacking this archive:
- Because this version does not include an Installer script, you have
- to do the installation manually through the shell:
-
- - Unpack this archive and copy the "animation.datatype" to
- SYS:Classes/DataTypes/:
-
- Copy CLONE FROM "animation.datatype" TO
- "SYS:Classes/DataTypes/animation.datatype"
-
- AUTHOR
- If you want to blame me, report any bugs, or wants a new version
- send your letter to:
- Roland Mainz
- Hohenstaufenstraße 8
- 52388 Nörvenich
- GERMANY
-
- Phone: (+49)(0)2426/901568
- Fax: (+49)(0)2426/901569
-
- EMAIL is also available (if you want to send me attachments
- larger than 1MB (up to 5MB, more with my permission):
-
- GISBURN@w-specht.rhein-ruhr.de
-
- Up to April 1998 I'm reachable using this email address, too:
- Reinhold.A.Mainz@KBV.DE
-
- | Please put your name and address in your mails !
- | German mailers should add their phone numbers.
- | See BUGS section above when submitting bug reports.
-
- Sorry, but I can only look once a week for mails.
- If you don't hear something from me within three weeks, please
- send your mail again (but watch about new releases) (problems with
- this email port are caused by reconfigurations, hackers, network
- problems etc.).
-
- The entire "animation.datatype" package may be noncommercially
- redistributed, provided that the package is always distributed
- in it's complete form (including it's documentation). A small
- copy fee for media costs is okay but any kind of commercial
- distribution is strictly forbidden without my permission !
- Comments and suggestions how to improve this program are
- generally appreciated!
-
- Thanks to: See "--datasheed--/THANKS TO" section...
-
- animation.datatype/ObtainAnimationEnginemation.datatype/ObtainAnimationEngine
-
- NAME
- ObtainAnimationEngine -- Obtain the pointer to the animation class.
-
- SYNOPSIS
- class = ObtainAnimationEngine();
- d0
-
- struct IClass *ObtainAnimationEngine( void );
-
- FUNCTION
- This function is used to obtain the pointer to the class
- structure for this public BOOPSI class.
-
- RETURNS
- Returns a pointer to a valid public BOOPSI class pointer.
-
- NOTE
- - This function is also known as ObtainEngine. See
- "include31:clib/dtclass_protos.h"
-
- - Starting with V41, animation.datatype has a struct ClassLibrary
- structure (see V42 "include:intuition/classes.h") in it's
- classbase, where the BOOPSI class pointer can be obtained from.
- This method should be preferred over ObtainAnimationEngine.
-
- animation.datatype/OM_DISPOSE animation.datatype/OM_DISPOSE
-
- NAME
- OM_DISPOSE -- Dispose aniation.datatype class instance
-
- FUNCTION
- This method disposed all animation.datatype instance related
- rousources, including the tapedeck.gadget, the player etc.
-
- RESULT
- Returns the return value of the superclass.
-
- NOTE
-
- animation.datatype/OM_GET animation.datatype/OM_GET
-
- NAME
- OM_GET -- Get the value of an attribute
-
- FUNCTION
- The OM_GET method is used to get a value of an attribute.
-
- <not fully written yet, sorry>
-
- ADTA_DestFrame (struct BitMap *) (V41) -- current remapped frame
- (the matching palette can be found in ADTA_GRegs).
- Note that reading this attribute is only save when the object
- is NOT playing.
-
- ADTA_Sample (UBYTE *) (V41) -- current frame's sample.
- Note that reading this attribute is only safe when the object
- is NOT playing.
-
- ADTA_SampleLength (ULONG) (V41) -- current frame's sample length.
- Note that reading this attribute is only safe when the object
- is NOT playing.
-
- ADTA_Period (ULONG) (V41) -- current frame's sample period.
- Note that reading this attribute is only safe when the object
- is NOT playing.
-
- ADTA_Volume (ULONG) (V41) -- global volume.
-
- ADTA_Cycles (ULONG (V41) -- fixed to 1
-
- RESULT
- Returns non-zero on success, 0 on failure (attribute not recognized
- by OM_GET).
-
- NOTE
-
- animation.datatype/OM_NEW animation.datatype/OM_NEW
-
- NAME
- OM_NEW -- Create a new animation.datatype object
-
- FUNCTION
- The OM_NEW method is used to create an instance of the
- animation.datatype class. This method is passed to the superclass
- first. After this, it sets up the instance data, creates sound
- and tapedeck objects, and the load and display processes. After
- all, when the object and the embedded objects and threads are
- ready for action, this method returns.
-
- On error this method calls OM_DISPOSE for it's own instance
- (e.g. CoerceMethod( cl, (Object *)retval, OM_DISPOSE );) and
- returns an error code.
-
- RESULT
- On success, a ptr to the object is returned,
- on failure, 0UL is returned, Result2 (IoErr()) contains the
- cause.
-
- NOTE
-
- animation.datatype/OM_SET animation.datatype/OM_SET
-
- NAME
- OM_SET -- Set the attributes of a animation.datatype object
-
- FUNCTION
- The OM_SET method is used to set the attributes of a
- animation.datatype gadget. This method is passed to the superclass
- first.
-
- TAGS
- <not complety written yet, sorry>
-
- DTA_TopVert (LONG) -- Used to specify the vertical top image
- position. The value is stored in
- struct DTSpecialInfo -> si_TopVert. Values < 0 are set to 0.
- Setting this value causes that the object returns non-zero
- for OM_SET/OM_UPDATE, which should trigger an GM_RENDER with
- GREDRAW_UPDATE (the topmost instance is responsible for doing
- this).
- This overrides superclass's functionality.
-
- DTA_TopHoriz (LONG) -- Used to specify the horizontal top image
- position. The value is stored in
- struct DTSpecialInfo -> si_TopHoriz. Values < 0 are set to 0.
- Setting this value causes that the object returns non-zero
- for OM_SET/OM_UPDATE, which should trigger an GM_RENDER with
- GREDRAW_UPDATE (the topmost instance is responsible for doing
- this).
- This overrides superclass's functionality.
-
- ADTA_Remap (BOOL) -- Indicate whether the picture should be
- remapped or not.
- ADTA_Remap == TRUE does only work if DTM_FRAMEBOX sets the
- FIF_REMAPABLE flag to indicate that animation.datatype
- can remap the incoming data.
- WARNING: This tag MUST not be changed while the object is
- attached to a window or requester !
-
- Applicability is (ISGU).
-
- RESULT
- Non-zero if a GM_RENDER with GREDRAW_UPDATE should be triggered
- by the topmost class.
-
- NOTE
-
- SEE ALSO
- OM_UPDATE, OM_NEW
-
- animation.datatype/OM_UPDATE animation.datatype/OM_UPDATE
-
- NAME
- OM_UPDATE -- Update attributes
-
- FUNCTION
- OM_UPDATE updates anmation.datatype attributes, see OM_SET for
- details.
-
- TAGS
- See OM_SET autodoc.
-
- RESULT
-
- NOTE
-
- SEE ALSO
- OM_SET, OM_NEW
-
- animation.datatype/preferences animation.datatype/preferences
-
- NAME
- preferences
-
- DESCRIPTION
- The "ENV:Classes/DataTypes/animation.prefs" file contains global
- settings for the animation datatype.
- The preferences file is an ASCII file containing one line where the
- preferences can be set.
- It can be superset by a local variable with the same name.
-
- Each line can contain settings, special settings for some subclasses
- can be set using the MATCHCLASS option.
- Lines beginning with a '#' or ';' chars are treated as comments.
- Lines are limitted to 256 chars.
-
- TEMPLATE
- MATCHCLASS/K,VERBOSE/S,ADAPTIVEFPS/S,NOADAPTIVEFPS/S,
- NUMPREFETCHFRAMES/K/N,WAITBOVP/S,NOWAITBOVP/S,OSBLITTER/S,
- CPUBLITTER/S,CHOOSEBLITTER/S,SHARECHIP/S,NOSHARECHIP/S,HACKS/S,
- NOHACKS/S
-
- MATCHCLASS -- Public class name. If given, the current prefs line
- is only for this subclass only.
- Example: MATCHCLASS="cdxl.datatype"
-
- VERBOSE -- Print information about the animation.
-
- ADAPTIVEFPS -- If set, the animation.datatype recalculates the
- playback rate that all frames and sounds can be displayed without
- skipping.
- This option is on per default starting with animation.datatype V41
-
- NOADAPTIVEFPS -- Turns the ADAPTIVEFPS flag off.
-
- NUMPREFETCHFRAMES -- Increases the number of frams which should
- be pre-fetched by the load process.
- Note: Increasing this value may cause the animation to run more
- smoothly, but takes also more memory.
- Defaults to 10.
-
- WAITBOVP -- Wait until raster beam reaches the bottom of the current
- viewport (screen). Only useful with some Gfx-Card-Software
- or graphics.library > V40.
- (In the future this option should be enabled if CyberGFX >= V41
- is detected).
-
- NOWAITBOVP -- Turns WAITBOVP flag off.
-
- OSBLITTER -- Use OS blitter even on planar screens. It is
- mutually exclusive to CPUBLITTER and CHOOSEBLITTER options.
- This option is off per default.
-
- CPUBLITTER - Use CPU blitter on planar screens. It is
- mutually exclusive to OSBLITTER and CHOOSEBLITTER options.
- This option is off per default.
-
- CHOOSEBLITTER -- If destination is a planar screen, the datatype
- makes a speed comparisation whether CPU or OS blitter is faster.
- It is mutually exclusive to OSBLITTER and CPUBLITTER options.
- This option is on per default.
-
- SHARECHIP -- animation.datatype <= V41.5 tests incoming planar
- bitmaps if they're in chipmem (using TypeOfMem) or not; if
- they're in chipmem and there's no remapping required, they're
- passed througth to BltBitMap rastport directly instead of
- copy'ing them to a chipmem buffer and blit from there.
- Using this option the TypeOfMem test can be turned on again,
- which may be usefull for high-speed animations (> 30 fps) on
- an own MultiView screen using the Amiga native screen modes.
- This option is off per default.
-
- NOSHARECHIP -- Turns the SHARECHIP option off.
- This option is on per default.
-
- HACKS -- Use some internal hacks (system-conform, but I don't
- like them).
- This option is on per default.
-
- NOHACKS -- Turns HACKS option off.
-
- NOTE
- An invalid prefs file line will be ignored and forces the VERBOSE
- output.
-
- BUGS
- - Low memory may cause that the prefs file won't be parsed.
-
- - Lines are limitted to 256 chars
-
- - An invalid prefs file line will be ignored.
-
- - The sample path length is limitted to 200 chars. A larger
- value may crash the machine if an error occurs.
-
-