/* * @(#)Many2one.java 1.7 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package com.ibm.media.codec.audio; import javax.media.format.*; import javax.media.format.*; import com.sun.media.*; import javax.media.*; /** * SimpleCodec is a codec that accepts a chunk of data of any size and generate output data, * It buffers samples internally if necessary. **/ public class Many2one extends BasicCodec { public String getName() { return "many frames to one converter"; } int counter=0; boolean flagEOM=false; Format af=(new AudioFormat(AudioFormat.LINEAR, 8000, 16, 1, AudioFormat.LITTLE_ENDIAN, AudioFormat.SIGNED, Format.NOT_SPECIFIED, Format.NOT_SPECIFIED, (Byte.class))); public Format [] getSupportedInputFormats() { Format fmt [] = new Format[1]; fmt[0] = af; return fmt; } public Format [] getSupportedOutputFormats(Format in) { Format fmt [] = new Format[1]; fmt[0] = af; return fmt; } /** process the media from the input buffer to the output buffer **/ public int process(Buffer inputBuffer, Buffer outputBuffer){ // System.out.println("in " + inputBuffer.getLength() ); // System.out.println("out " + outputBuffer.getLength() ); if (flagEOM) { outputBuffer.setLength(0); outputBuffer.setEOM(true); flagEOM=false; return BUFFER_PROCESSED_OK; } if (outputBuffer.isDiscard()) { outputBuffer.setLength(0); outputBuffer.setOffset(0); } if (inputBuffer.isEOM()) { // this is a little tricky since we have to output two frames now: // one to close former session, another to signle EOM if (outputBuffer.getLength() > 0 ) { flagEOM=true; return BUFFER_PROCESSED_OK | INPUT_BUFFER_NOT_CONSUMED ; } else { // in case we have nothing in the output, we are done outputBuffer.setLength(0); outputBuffer.setEOM(true); return BUFFER_PROCESSED_OK; } } if (outputBuffer.getData()==null) outputBuffer.setData(new byte[10000]); System.arraycopy(inputBuffer.getData(),inputBuffer.getOffset(), outputBuffer.getData(),outputBuffer.getLength(), inputBuffer.getLength() ); outputBuffer.setLength(outputBuffer.getLength() + inputBuffer.getLength() ); if ( (++counter) == 5 ) { counter=0; outputBuffer.setFormat(af ); return BUFFER_PROCESSED_OK; } return BUFFER_PROCESSED_OK | OUTPUT_BUFFER_NOT_FILLED ; } }