/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.media.flv1; import java.nio.ByteBuffer; import com.ttProject.media.IAnalyzer; import com.ttProject.media.IVideoData; import com.ttProject.media.Unit; import com.ttProject.media.extra.Bit1; import com.ttProject.media.extra.Bit2; import com.ttProject.media.extra.Bit3; import com.ttProject.media.extra.Bit5; import com.ttProject.media.extra.Bit8; import com.ttProject.nio.channels.IReadChannel; /** * flv1のコーデックの映像(H263 sorenson)の内容を解析します。 * @see http://hkpr.info/flash/swf/index.php?%E3%83%93%E3%83%87%E3%82%AA%2FSorenson%20H.263%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 * @author taktod */ public abstract class Frame extends Unit implements IVideoData { @SuppressWarnings("unused") private Bit8 pictureStartCode1; @SuppressWarnings("unused") private Bit8 pictureStartCode2; @SuppressWarnings("unused") private Bit1 pictureStartCode3; private Bit5 version; private Bit8 temporalReference; @SuppressWarnings("unused") private Bit3 pictureSize; private int width; private int height; private Bit2 pictureType; private Bit1 deblockingFlag; private Bit5 quantizer; private Bit1 extraInformationFlag; private Bit8 extraInformation; public Frame(Bit8 pictureStartCode1, Bit8 pictureStartCode2, Bit1 pictureStartCode3, Bit5 version, Bit8 temporalReference, Bit3 pictureSize, int width, int height, Bit2 pictureType, Bit1 deblockingFlag, Bit5 quantizer, Bit1 extraInformationFlag, Bit8 extraInformation) { super(0, 0); this.pictureStartCode1 = pictureStartCode1; this.pictureStartCode2 = pictureStartCode2; this.pictureStartCode3 = pictureStartCode3; this.version = version; this.temporalReference = temporalReference; this.pictureSize = pictureSize; this.width = width; this.height = height; this.pictureType = pictureType; this.deblockingFlag = deblockingFlag; this.quantizer = quantizer; this.extraInformationFlag = extraInformationFlag; this.extraInformation = extraInformation; } public Bit5 getVersion() { return version; } public Bit8 getTemporalReference() { return temporalReference; } public int getWidth() { return width; } public int getHeight() { return height; } public Bit2 getPictureType() { return pictureType; } public Bit1 getDeblockingFlag() { return deblockingFlag; } public Bit5 getQuantizer() { return quantizer; } public Bit1 getExtraInformationFlag() { return extraInformationFlag; } public Bit8 getExtraInformation() { return extraInformation; } @Override public void analyze(IReadChannel ch, IAnalyzer<?> analyzer) throws Exception { // ここで必要情報を読み込む(正直flv1のbufferデータをコピーするだけでいいと思う。) } @Override public long getDts() { return 0; } @Override public long getPts() { return 0; } @Override public ByteBuffer getRawData() throws Exception { return null; } @Override public double getTimebase() { return 0; } @Override public String toString() { StringBuilder data = new StringBuilder(); data.append(getClass().getSimpleName()); data.append(" width:").append(width); data.append(" height:").append(height); return data.toString(); } }