/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.media.vp6.frame;
import com.ttProject.media.IAnalyzer;
import com.ttProject.media.extra.Bit1;
import com.ttProject.media.extra.Bit2;
import com.ttProject.media.extra.Bit5;
import com.ttProject.media.extra.Bit6;
import com.ttProject.media.extra.Bit8;
import com.ttProject.media.extra.BitLoader;
import com.ttProject.media.vp6.Frame;
import com.ttProject.nio.channels.IReadChannel;
/**
* キーフレーム
* @author taktod
*/
public class IntraFrame extends Frame {
private Bit5 version;
private Bit2 version2;
private Bit1 interlace;
@SuppressWarnings("unused")
private short offset; // 16bit
private Bit8 dimY; // x16で縦幅
private Bit8 dimX; // x16で横幅
private Bit8 renderY; // x16で縦幅
private Bit8 renderX; // x16で横幅
/**
* コンストラクタ
* @param frameMode
* @param qp
* @param marker
*/
public IntraFrame(Bit1 frameMode, Bit6 qp, Bit1 marker) {
super(frameMode, qp, marker);
}
/**
* 解析をすすめる動作
*/
@Override
public void analyze(IReadChannel ch, IAnalyzer<?> analyzer)
throws Exception {
BitLoader bitLoader = new BitLoader(ch);
version = new Bit5();
version2 = new Bit2();
interlace = new Bit1();
bitLoader.load(version, version2, interlace);
if(getMarker().get() == 1 || version2.get() == 0) {
Bit8 offset1 = new Bit8();
Bit8 offset2 = new Bit8();
bitLoader.load(offset1, offset2);
offset = (short)((offset1.get() << 8) | offset2.get());
}
dimY = new Bit8();
dimX = new Bit8();
renderY = new Bit8();
renderX = new Bit8();
bitLoader.load(dimY, dimX, renderY, renderX);
}
@Override
public int getHeight() {
if(renderY == null) {
return -1;
}
return renderY.get() * 16;
}
@Override
public int getWidth() {
if(renderX == null) {
return -1;
}
return renderX.get() * 16;
}
}