/* * 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 org.apache.log4j.Logger; 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; /** * ptsField * @author taktod */ public class PtsField { /** logger */ @SuppressWarnings("unused") private Logger logger = Logger.getLogger(PtsField.class); // 0010 XXX1 XXXX XXXX XXXX XXX1 XXXX XXXX XXXX XXX1 // 0011 XXX1 XXXX XXXX XXXX XXX1 XXXX XXXX XXXX XXX1 // connect X will be pts. private Bit4 signature = new Bit4(2); private long pts; // if devided by 90.0f, mili sec data. public void load(IReadChannel ch) throws Exception { signature = new Bit4(); Bit3 pts1 = new Bit3(); Bit1 ptsFlag1 = new Bit1(); Bit15 pts2 = new Bit15(); Bit1 ptsFlag2 = new Bit1(); Bit15 pts3 = new Bit15(); Bit1 ptsFlag3 = new Bit1(); BitLoader bitLoader = new BitLoader(ch); bitLoader.load(signature, pts1, ptsFlag1, pts2, ptsFlag2, pts3, ptsFlag3); if(ptsFlag1.get() != 0x01 || ptsFlag2.get() != 0x01 || ptsFlag3.get() != 0x01) { throw new Exception("separate flag is invalid."); } pts = (long)(((pts1.get() & 0xFFL) << 30) | (pts2.get() << 15) | pts3.get()); } public long getPts() { return pts; } public void setPts(long pts) { this.pts = pts; } public List<Bit> getBits() { List<Bit> list = new ArrayList<Bit>(); list.add(signature); list.add(new Bit3((int)(pts >>> 30))); list.add(new Bit1(1)); list.add(new Bit15((int)(pts >>> 15))); list.add(new Bit1(1)); list.add(new Bit15((int)(pts))); list.add(new Bit1(1)); return list; } @Override public String toString() { StringBuilder data = new StringBuilder(); data.append("PtsField:"); data.append(" pts:").append(Long.toHexString(pts)).append("(").append(pts / 90000f).append(")"); return data.toString(); } }