/* * @(#)VideoCodec.java 1.7 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package com.ibm.media.codec.video; import javax.media.format.*; import javax.media.format.*; import javax.media.*; import com.sun.media.*; import java.awt.Dimension; public abstract class VideoCodec extends BasicCodec { protected String PLUGIN_NAME; protected VideoFormat defaultOutputFormats[]; protected VideoFormat supportedInputFormats[]; protected VideoFormat supportedOutputFormats[]; protected VideoFormat inputFormat; protected VideoFormat outputFormat; protected final boolean DEBUG = true; public String getName() { return PLUGIN_NAME; } public Format [] getSupportedInputFormats() { return supportedInputFormats; } public Format setInputFormat(Format format) { if ( !(format instanceof VideoFormat) || (null == matches(format, supportedInputFormats)) ) return null; inputFormat = (VideoFormat)format; return format; } public Format setOutputFormat(Format format) { // This methods assumes setInputFormat has already been called. if ( !(format instanceof VideoFormat) || (null == matches(format, getMatchingOutputFormats(inputFormat))) ) return null; outputFormat = (VideoFormat)format; return format; } protected Format getInputFormat() { return inputFormat; } protected Format getOutputFormat() { return outputFormat; } protected Format[] getMatchingOutputFormats(Format in) { return new Format[0]; } public Format [] getSupportedOutputFormats(Format in) { // null input format if (in == null) { return defaultOutputFormats; } // mismatch input format if ( !(in instanceof VideoFormat ) || (matches(in,supportedInputFormats) == null) ) { return new Format[0]; } // match input format return getMatchingOutputFormats(in); } public boolean checkFormat(Format format) { Dimension inSize = ((VideoFormat) format).getSize(); if (!inSize.equals(outputFormat.getSize()) ) { videoResized(); } return true; } protected void videoResized() { } protected void updateOutput(Buffer outputBuffer, Format format, int length, int offset) { outputBuffer.setFormat(format); outputBuffer.setLength(length); outputBuffer.setOffset(offset); } }