/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.container.mpegts.field; import java.util.ArrayList; import java.util.List; import com.ttProject.nio.channels.IReadChannel; import com.ttProject.unit.extra.Bit; import com.ttProject.unit.extra.BitLoader; import com.ttProject.unit.extra.bit.Bit1; import com.ttProject.unit.extra.bit.Bit15; import com.ttProject.unit.extra.bit.Bit3; import com.ttProject.unit.extra.bit.Bit4; /** * dts field * @author taktod */ public class DtsField { // 0010 XXX1 XXXX XXXX XXXX XXX1 XXXX XXXX XXXX XXX1 private Bit4 signature = new Bit4(2); private long dts; public void load(IReadChannel ch) throws Exception { signature = new Bit4(); Bit3 dts1 = new Bit3(); Bit1 dtsFlag1 = new Bit1(); Bit15 dts2 = new Bit15(); Bit1 dtsFlag2 = new Bit1(); Bit15 dts3 = new Bit15(); Bit1 dtsFlag3 = new Bit1(); BitLoader bitLoader = new BitLoader(ch); bitLoader.load(signature, dts1, dtsFlag1, dts2, dtsFlag2, dts3, dtsFlag3); if(dtsFlag1.get() != 0x01 || dtsFlag2.get() != 0x01 || dtsFlag3.get() != 0x01) { throw new Exception("separate flag is corrupted."); } dts = (long)(((dts1.get() & 0xFFL) << 30) | (dts2.get() << 15) | (dts3.get())); } public long getDts() { return dts; } public void setDts(long dts) { this.dts = dts; } 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 Bit15((int)(dts >>> 15))); list.add(new Bit1(1)); list.add(new Bit15((int)(dts))); 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(); } }