/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.media.mpegts.field;
import java.util.ArrayList;
import java.util.List;
import com.ttProject.media.extra.Bit;
import com.ttProject.media.extra.Bit1;
import com.ttProject.media.extra.Bit3;
import com.ttProject.media.extra.Bit4;
import com.ttProject.media.extra.Bit7;
import com.ttProject.media.extra.Bit8;
import com.ttProject.media.extra.BitLoader;
import com.ttProject.nio.channels.IReadChannel;
public class DtsField {
// 0010 XXX1 XXXX XXXX XXXX XXX1 XXXX XXXX XXXX XXX1
private Bit4 signature;
private long dts;
public void analyze(IReadChannel ch) throws Exception {
signature = new Bit4();
Bit3 dts1 = new Bit3();
Bit1 dtsFlag1 = new Bit1();
Bit7 dts2 = new Bit7();
Bit8 dts3 = new Bit8();
Bit1 dtsFlag2 = new Bit1();
Bit7 dts4 = new Bit7();
Bit8 dts5 = new Bit8();
Bit1 dtsFlag3 = new Bit1();
BitLoader bitLoader = new BitLoader(ch);
bitLoader.load(signature, dts1, dtsFlag1, dts2, dts3, dtsFlag2, dts4, dts5, dtsFlag3);
if(dtsFlag1.get() != 0x01
|| dtsFlag2.get() != 0x01
|| dtsFlag3.get() != 0x01) {
throw new Exception("セパレートフラグがおかしいです。");
}
dts = (long)(((dts1.get() & 0xFFL) << 30) | (dts2.get() << 23) | (dts3.get() << 15) | (dts4.get() << 8) | dts5.get());
}
public long getDts() {
return dts;
}
public void setDts(long dts) {
this.dts = dts;
}
public void setSignature(Bit4 signature) {
this.signature = signature;
}
public List<Bit> getBits() {
List<Bit> list = new ArrayList<Bit>();
list.add(signature);
list.add(new Bit3((int)(dts >>> 30)));
list.add(new Bit1(1));
list.add(new Bit7((int)(dts >>> 23)));
list.add(new Bit8((int)(dts >>> 15)));
list.add(new Bit1(1));
list.add(new Bit7((int)(dts >>> 8)));
list.add(new Bit8((int)(dts & 0xFF)));
list.add(new Bit1(1));
return list;
}
@Override
public String toString() {
StringBuilder data = new StringBuilder();
data.append("DtsField:");
data.append(" dts:").append(Long.toHexString(dts)).append("(").append(dts / 90000f).append(")");
return data.toString();
}
}