/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.frame.vp6;
import java.nio.ByteBuffer;
import org.apache.log4j.Logger;
import com.ttProject.frame.CodecType;
import com.ttProject.frame.VideoFrame;
import com.ttProject.frame.vp6.type.IntraFrame;
import com.ttProject.unit.extra.BitConnector;
import com.ttProject.unit.extra.bit.Bit1;
import com.ttProject.unit.extra.bit.Bit6;
/**
* vp6 frame.
* on2Vp6
* @see http://wiki.multimedia.cx/index.php?title=On2_VP6
* 00 78 46 0F 14 0F 14 3F 6E E8 CB 01 8D C9 89 26 9E AD 53 6F 33 FD DD F2 BF AB F6 ED FB 1C
*
* for flv data, first data of vp6 need to be the end of data.
* so data start with 0x78
*
* @see http://hkpr.info/flash/swf/index.php?%E3%83%93%E3%83%87%E3%82%AA%2FOn2%20Truemotion%20VP6%20%E3%83%93%E3%83%83%E3%83%88%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88
* on2vp6alphaも
* はじめの00の部分はalignのずれ設定みたいですね。
* データは捨てた方がよさそう・・・
*
* @author taktod
*/
public abstract class Vp6Frame extends VideoFrame {
/** logger */
@SuppressWarnings("unused")
private Logger logger = Logger.getLogger(Vp6Frame.class);
private final Bit1 frameMode;
private final Bit6 qp;
private final Bit1 marker;
/** key frame object for ref */
private IntraFrame keyFrame = null;
/**
* constructor
* @param frameMode
* @param qp
* @param marker
*/
public Vp6Frame(Bit1 frameMode, Bit6 qp, Bit1 marker) {
this.frameMode = frameMode;
this.qp = qp;
this.marker = marker;
}
/**
* set the keyframe.
* @param keyFrame
*/
public void setKeyFrame(IntraFrame keyFrame) {
this.keyFrame = keyFrame;
super.setWidth(keyFrame.getWidth());
super.setHeight(keyFrame.getHeight());
}
/**
* ref marker
* @return
*/
protected Bit1 getMarker() {
return marker;
}
/**
* ref keyFrame
* @return
*/
protected IntraFrame getKeyFrame() {
return keyFrame;
}
/**
* ref the header buffer
* @return
*/
protected ByteBuffer getHeaderBuffer() {
BitConnector connector = new BitConnector();
return connector.connect(frameMode, qp, marker);
}
/**
* {@inheritDoc}
*/
@Override
public CodecType getCodecType() {
return CodecType.VP6;
}
}