/*
* @(#)ANIMWriter.java
*
* 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.anim;
import org.monte.media.Format;
import org.monte.media.MovieWriter;
import org.monte.media.math.Rational;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import static org.monte.media.FormatKeys.*;
import static org.monte.media.AudioFormatKeys.*;
import static org.monte.media.anim.AmigaVideoFormatKeys.*;
/**
* {@code ANIMWriter}.
*
* @author Werner Randelshofer
* @version $Id: ANIMWriter.java 299 2013-01-03 07:40:18Z werner $
*/
public class ANIMWriter extends ANIMMultiplexer implements MovieWriter {
public final static Format ANIM=new Format(MediaTypeKey,MediaType.FILE,MimeTypeKey,MIME_ANIM);
@Override
public Format getFileFormat() throws IOException {
return ANIM;
}
@Override
public Rational getDuration(int track) {
throw new UnsupportedOperationException("Not supported yet.");
}
private static class Track {
Format format;
}
private ArrayList<Track> tracks=new ArrayList<Track>();
public ANIMWriter(File file) throws IOException {
super(file);
}
@Override
public int addTrack(Format format) throws IOException {
if (tracks.size()>0) throw new UnsupportedOperationException("only 1 track supported");
Format derivedFormat=format.prepend(
MediaTypeKey,MediaType.VIDEO,MimeTypeKey,MIME_ANIM,
EncodingKey,ENCODING_ANIM_OP5,DataClassKey,byte[].class,//
FixedFrameRateKey,false);
setCAMG(toCAMG(derivedFormat));
Track tr=new Track();
tr.format=derivedFormat;
tracks.add(tr);
return tracks.size()-1;
}
@Override
public Format getFormat(int track) {
return tracks.get(track).format;
}
@Override
public int getTrackCount() {
return tracks.size();
}
public boolean isVFRSupported() {
return true;
}
@Override
public boolean isDataLimitReached() {
return false;
}
@Override
public boolean isEmpty(int track) {
return inputTime.isZero();
}
}