/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.media.vp6;
import com.ttProject.media.extra.Bit1;
import com.ttProject.media.extra.Bit6;
import com.ttProject.media.extra.BitLoader;
import com.ttProject.media.vp6.frame.InterFrame;
import com.ttProject.media.vp6.frame.IntraFrame;
import com.ttProject.nio.channels.IReadChannel;
/**
* frameを解析する動作
* @author taktod
*/
public class FrameAnalyzer implements IFrameAnalyzer {
private IntraFrame lastKeyFrame = null;
@Override
public Frame analyze(IReadChannel ch) throws Exception {
BitLoader bitLoader = new BitLoader(ch);
Bit1 frameMode = new Bit1();
Bit6 qp = new Bit6();
Bit1 marker = new Bit1();
bitLoader.load(frameMode, qp, marker);
Frame frame = null;
switch(frameMode.get()) {
case 0: // intraFrame
frame = new IntraFrame(frameMode, qp, marker);
lastKeyFrame = (IntraFrame) frame;
break;
case 1: // interFrame
frame = new InterFrame(frameMode, qp, marker);
frame.setLastKeyFrame(lastKeyFrame);
break;
default:
throw new Exception("frameTypeがおかしい値でした。");
}
frame.analyze(ch, null);
return frame;
}
}