All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.mp4parser.boxes.EC3SpecificBox Maven / Gradle / Ivy

Go to download

A generic parser and writer for all ISO 14496 based files (MP4, Quicktime, DCF, PDCF, ...)

There is a newer version: 1.1.22
Show newest version
package com.googlecode.mp4parser.boxes;

import com.googlecode.mp4parser.AbstractBox;
import com.googlecode.mp4parser.boxes.mp4.objectdescriptors.BitReaderBuffer;
import com.googlecode.mp4parser.boxes.mp4.objectdescriptors.BitWriterBuffer;

import java.nio.ByteBuffer;
import java.util.LinkedList;
import java.util.List;

/**
 * 

4cc = "{@value #TYPE}"

*/ public class EC3SpecificBox extends AbstractBox { public static final String TYPE = "dec3"; List entries = new LinkedList(); int dataRate; int numIndSub; public EC3SpecificBox() { super(TYPE); } @Override public long getContentSize() { long size = 2; for (Entry entry : entries) { if (entry.num_dep_sub > 0) { size += 4; } else { size += 3; } } return size; } @Override public void _parseDetails(ByteBuffer content) { BitReaderBuffer brb = new BitReaderBuffer(content); dataRate = brb.readBits(13); numIndSub = brb.readBits(3) + 1; // This field indicates the number of independent substreams that are present in the Enhanced AC-3 bitstream. The value // of this field is one less than the number of independent substreams present. for (int i = 0; i < numIndSub; i++) { Entry e = new Entry(); e.fscod = brb.readBits(2); e.bsid = brb.readBits(5); e.bsmod = brb.readBits(5); e.acmod = brb.readBits(3); e.lfeon = brb.readBits(1); e.reserved = brb.readBits(3); e.num_dep_sub = brb.readBits(4); if (e.num_dep_sub > 0) { e.chan_loc = brb.readBits(9); } else { e.reserved2 = brb.readBits(1); } entries.add(e); } } @Override public void getContent(ByteBuffer byteBuffer) { BitWriterBuffer bwb = new BitWriterBuffer(byteBuffer); bwb.writeBits(dataRate, 13); bwb.writeBits(entries.size() - 1, 3); for (Entry e : entries) { bwb.writeBits(e.fscod, 2); bwb.writeBits(e.bsid, 5); bwb.writeBits(e.bsmod, 5); bwb.writeBits(e.acmod, 3); bwb.writeBits(e.lfeon, 1); bwb.writeBits(e.reserved, 3); bwb.writeBits(e.num_dep_sub, 4); if (e.num_dep_sub > 0) { bwb.writeBits(e.chan_loc, 9); } else { bwb.writeBits(e.reserved2, 1); } } } public List getEntries() { return entries; } public void setEntries(List entries) { this.entries = entries; } public void addEntry(Entry entry) { this.entries.add(entry); } public int getDataRate() { return dataRate; } public void setDataRate(int dataRate) { this.dataRate = dataRate; } public int getNumIndSub() { return numIndSub; } public void setNumIndSub(int numIndSub) { this.numIndSub = numIndSub; } public static class Entry { public int fscod; public int bsid; public int bsmod; public int acmod; public int lfeon; public int reserved; public int num_dep_sub; public int chan_loc; public int reserved2; @Override public String toString() { return "Entry{" + "fscod=" + fscod + ", bsid=" + bsid + ", bsmod=" + bsmod + ", acmod=" + acmod + ", lfeon=" + lfeon + ", reserved=" + reserved + ", num_dep_sub=" + num_dep_sub + ", chan_loc=" + chan_loc + ", reserved2=" + reserved2 + '}'; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy