Copyright 2011-01-06 Werner Randelshofer

ch.randelshofer.media.anim
Class ANIMDecoder

java.lang.Object
  extended by ch.randelshofer.media.anim.ANIMDecoder
All Implemented Interfaces:
IFFVisitor

public class ANIMDecoder
extends java.lang.Object
implements IFFVisitor

Decodes IFF files and adds the data to an ANIMMovieTrack.

Version:
2.1 2010-01-22 Added support for CRNG color cycling.
2.0 2009-12-25 Treat an ILBM file as an animation with a single frame.
1.3 2009-12-24 Added support for CRNG color cycling.
1.2.1 2006-09-30 Decode CMAP even if it is too big or too small for the number of bitplanes used of the animation.
1.2 2003-04-21 Decode ANFI revised.
1.0 2003-04-03 Support for ANIM+SLA (Animations with Statically Loaded Audio) files added.
1.0 1999-10-19
Author:
Werner Randelshofer, Hausmatt 10, CH-6405 Immensee, Switzerland

Field Summary
protected static int A2024_MONITOR_ID
           
protected static int DBLNTSC_MONITOR_ID
           
protected static int DBLPAL_MONITOR_ID
           
protected static int DEFAULT_MONITOR_ID
           
protected static int EHB_MASK
           
protected static int EURO36_MONITOR_ID
           
protected static int EURO72_MONITOR_ID
           
protected static int EXTRAHALFBRITE_KEY
           
protected static int HAM_KEY
           
protected static int HAM_MASK
           
protected static int MONITOR_ID_MASK
          ILBM CAMG chunk: Mask and ID bits for CAMG ModeID.
protected static int NTSC_MONITOR_ID
           
protected static int PAL_MONITOR_ID
           
protected static int PROTO_MONITOR_ID
           
protected static int SUPER72_MONITOR_ID
           
protected static int VGA_MONITOR_ID
           
 
Constructor Summary
ANIMDecoder(java.io.InputStream inputStream)
           
ANIMDecoder(java.net.URL location)
           
 
Method Summary
protected  void decodeANNO(IFFChunk[] chunks, ANIMMovieTrack track)
           
protected  void decodeAUTH(IFFChunk[] chunks, ANIMMovieTrack track)
           
protected  void decodeColorCycling(IFFChunk[] crngChunks, IFFChunk[] drngChunks, ANIMMovieTrack track)
          Process CRNG and DRNG chunks in the sequence of their location in the file.
protected  void decodeCOPYRIGHT(IFFChunk[] chunks, ANIMMovieTrack track)
           
protected  void decodeCRNG(IFFChunk chunk, ANIMMovieTrack track)
          Decodes the color range cycling (ILBM CRNG).
protected  void decodeDRNG(IFFChunk chunk, ANIMMovieTrack track)
          Decodes the DPaint IV enhanced color cycle chunk (ILBM DRNG)
 void enterGroup(IFFChunk chunk)
           
 void leaveGroup(IFFChunk chunk)
           
 void produce(ANIMMovieTrack track, int n, boolean loadAudio)
          Decodes the stream and produces animation frames into the specified movie track.
 void registerChunks(IFFParser iff, boolean loadAudio)
           
 void visitChunk(IFFChunk group, IFFChunk chunk)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MONITOR_ID_MASK

protected static final int MONITOR_ID_MASK
ILBM CAMG chunk: Mask and ID bits for CAMG ModeID.

See Also:
Constant Field Values

DEFAULT_MONITOR_ID

protected static final int DEFAULT_MONITOR_ID
See Also:
Constant Field Values

NTSC_MONITOR_ID

protected static final int NTSC_MONITOR_ID
See Also:
Constant Field Values

PAL_MONITOR_ID

protected static final int PAL_MONITOR_ID
See Also:
Constant Field Values

VGA_MONITOR_ID

protected static final int VGA_MONITOR_ID
See Also:
Constant Field Values

A2024_MONITOR_ID

protected static final int A2024_MONITOR_ID
See Also:
Constant Field Values

PROTO_MONITOR_ID

protected static final int PROTO_MONITOR_ID
See Also:
Constant Field Values

EURO72_MONITOR_ID

protected static final int EURO72_MONITOR_ID
See Also:
Constant Field Values

EURO36_MONITOR_ID

protected static final int EURO36_MONITOR_ID
See Also:
Constant Field Values

SUPER72_MONITOR_ID

protected static final int SUPER72_MONITOR_ID
See Also:
Constant Field Values

DBLNTSC_MONITOR_ID

protected static final int DBLNTSC_MONITOR_ID
See Also:
Constant Field Values

DBLPAL_MONITOR_ID

protected static final int DBLPAL_MONITOR_ID
See Also:
Constant Field Values

HAM_MASK

protected static final int HAM_MASK
See Also:
Constant Field Values

EHB_MASK

protected static final int EHB_MASK
See Also:
Constant Field Values

HAM_KEY

protected static final int HAM_KEY
See Also:
Constant Field Values

EXTRAHALFBRITE_KEY

protected static final int EXTRAHALFBRITE_KEY
See Also:
Constant Field Values
Constructor Detail

ANIMDecoder

public ANIMDecoder(java.io.InputStream inputStream)

ANIMDecoder

public ANIMDecoder(java.net.URL location)
Method Detail

produce

public void produce(ANIMMovieTrack track,
                    int n,
                    boolean loadAudio)
             throws java.io.IOException
Decodes the stream and produces animation frames into the specified movie track. Reads the n-th ANIM chunk out of the IFF-file.

Parameters:
track - The decoded data is stored in this track.
n - The index of the ANIM FORM to be read out of the IFF-File
loadAudio - If this is set to false, audio data will be skipped.
Throws:
java.io.IOException

registerChunks

public void registerChunks(IFFParser iff,
                           boolean loadAudio)

enterGroup

public void enterGroup(IFFChunk chunk)
Specified by:
enterGroup in interface IFFVisitor

leaveGroup

public void leaveGroup(IFFChunk chunk)
Specified by:
leaveGroup in interface IFFVisitor

visitChunk

public void visitChunk(IFFChunk group,
                       IFFChunk chunk)
                throws ParseException,
                       AbortException
Specified by:
visitChunk in interface IFFVisitor
Throws:
ParseException
AbortException

decodeCRNG

protected void decodeCRNG(IFFChunk chunk,
                          ANIMMovieTrack track)
                   throws ParseException
Decodes the color range cycling (ILBM CRNG).
 #define RNG_NORATE  36   // Dpaint uses this rate to mean non-active
  set {
  active = 1, reverse = 2
  } crngActive;

  // A CRange is store in a CRNG chunk.
  typedef struct {
  WORD  pad1;              // reserved for future use; store 0 here *
  WORD  rate;              // 60/sec=16384, 30/sec=8192, 1/sec=16384/60=273
  WORD set crngActive flags;     // bit0 set = active, bit 1 set = reverse
  UBYTE low; UBYTE high;         // lower and upper color registers selected
  } ilbmColorRegisterRangeChunk;
 

Throws:
ParseException

decodeDRNG

protected void decodeDRNG(IFFChunk chunk,
                          ANIMMovieTrack track)
                   throws ParseException
Decodes the DPaint IV enhanced color cycle chunk (ILBM DRNG)

The RNG_ACTIVE flag is set when the range is cyclable. A range should only have the RNG _ACTIVE if it:

  1. contains at least one color register
  2. has a defined rate
  3. has more than one color and/or color register
 ILBM DRNG DPaint IV enhanced color cycle chunk
 --------------------------------------------

 set {
     RNG_ACTIVE=1,RNG_DP_RESERVED=4
 } drngFlags;

 /* True color cell * /
 typedef struct {
     UBYTE cell;
     UBYTE r;
     UBYTE g;
     UBYTE b;
 } ilbmDRNGDColor;

 /* Color register cell * /
 typedef struct {
     UBYTE cell;
     UBYTE index;
 } ilbmDRNGDIndex;

 /* DRNG chunk. * /
 typedef struct {
     UBYTE min; /* min cell value * /
     UBYTE max; /* max cell value * /
     UWORD rate; /* color cycling rate, 16384 = 60 steps/second * /
     UWORD set drngFlags flags; /* 1=RNG_ACTIVE, 4=RNG_DP_RESERVED * /
     UBYTE ntrue; /* number of DColorCell structs to follow * /
     UBYTE ntregs; /* number of DIndexCell structs to follow * /
     ilbmDRNGDColor[ntrue] trueColorCells;
     ilbmDRNGDIndex[ntregs] colorRegisterCells;
 } ilbmDRangeChunk;
 

Throws:
ParseException

decodeColorCycling

protected void decodeColorCycling(IFFChunk[] crngChunks,
                                  IFFChunk[] drngChunks,
                                  ANIMMovieTrack track)
                           throws ParseException
Process CRNG and DRNG chunks in the sequence of their location in the file.

Throws:
ParseException

decodeCOPYRIGHT

protected void decodeCOPYRIGHT(IFFChunk[] chunks,
                               ANIMMovieTrack track)
                        throws ParseException
Throws:
ParseException

decodeAUTH

protected void decodeAUTH(IFFChunk[] chunks,
                          ANIMMovieTrack track)
                   throws ParseException
Throws:
ParseException

decodeANNO

protected void decodeANNO(IFFChunk[] chunks,
                          ANIMMovieTrack track)
                   throws ParseException
Throws:
ParseException

Copyright 2011-01-06 Werner Randelshofer