Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * @(#)ZMBVDecoder.java  1.0  2011-08-27
   * 
   * Copyright (c) 2011 Werner Randelshofer, Goldau, Switzerland.
   * All rights reserved.
   * 
   * You may not use, copy or modify this file, except in compliance with the
   * license agreement you entered into with Werner Randelshofer.
   * For details see accompanying license terms.
  */
 package org.monte.media.jmf.codec.video;
 
 import  javax.media.Buffer;
 import  javax.media.Format;
 import  javax.media.ResourceUnavailableException;
 import  javax.media.format.RGBFormat;
 import  javax.media.format.VideoFormat;

ZMBVDecoder.

Author(s):
Werner Randelshofer
Version:
1.0 2011-08-27 Created.
 
 public class ZMBVDecoder extends AbstractVideoDecoder {

    
RGB bit masks
 
     protected static final int bMask = 0x000000ff;
     protected static final int gMask = 0x0000ff00;
     protected static final int rMask = 0x00ff0000;
     private int[] pixels;
     private int[] prevPixels;
     private long previousSequenceNumber = 0;
     private ZMBVCodecCore state;
 
     public ZMBVDecoder() {
          = new VideoFormat[]{new VideoFormat("ZMBV")};
          = new VideoFormat[]{new RGBFormat(
             null, Format.NOT_SPECIFIED,
             Format.intArray,
             Format.NOT_SPECIFIED, // frame rate
             32,
             ,
             1, Format.NOT_SPECIFIED,
             Format.FALSE, // flipped
             Format.NOT_SPECIFIED // endian
             )};
          = "DosBox Screen Capture \"ZMBV\"";
     }
 
     @Override
     protected Format[] getMatchingOutputFormats(Format input) {
 
         if ([0].matches(input)) {
             VideoFormat inf = (VideoFormat) input;
 
             Dimension s = inf.getSize();
 
             RGBFormat outf = new RGBFormat(s,
                     s.width < 0 || s.height < 0 ? Format.NOT_SPECIFIED : s.width * s.height,
                     Format.intArray, inf.getFrameRate(), 32, , 1, s.width, Format.FALSE, RGBFormat.BIG_ENDIAN);
 
             return new Format[]{outf};
         }
         return new Format[0];
     }
 
     @Override
     public int process(Buffer input, Buffer output) {
         //System.err.println("ZMBVDecoder " + input.getTimeStamp());
         if (input.isDiscard()) {
             output.setDiscard(true);
             return BUFFER_PROCESSED_OK;
         }
         if (input.isEOM()) {
             output.setEOM(true);
             output.setData(null);
             return BUFFER_PROCESSED_OK;
         }
 
         output.copy(input);
         output.setFormat();
         output.setData();
         output.setOffset(0);
         output.setLength(.);
         //if (input.)
 
         byte[] inDat = (byte[]) input.getData();
         int[] swap = ;
          = ;
          = swap;
 
         // Detect if frames were skipped
         long sequenceNumber = input.getSequenceNumber();
         boolean framesWereSkipped = (sequenceNumber !=  + 1);
         boolean isKeyframe = .decode(inDatinput.getOffset(), input.getLength(), .getSize().width, .getSize().height,
                 framesWereSkipped);
        if (framesWereSkipped && !isKeyframe) {
            output.setDiscard(true);
        } else {
             = sequenceNumber;
        } 
        
        setFlag(output, Buffer.FLAG_KEY_FRAME, isKeyframe);
        return BUFFER_PROCESSED_OK;
    }
    @Override
    public void close() {
         = null;
         = null;
    }
    @Override
    public void open() throws ResourceUnavailableException {
         = new ZMBVCodecCore();
         = null;
         = new int[.getSize().width * .getSize().height];
         = new int[.getSize().width * .getSize().height];
    }
New to GrepCode? Check out our FAQ X