diff options
Diffstat (limited to 'isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn')
4 files changed, 492 insertions, 0 deletions
diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/all-wcprops b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/all-wcprops new file mode 100644 index 0000000..39f268a --- /dev/null +++ b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/all-wcprops @@ -0,0 +1,17 @@ +K 25 +svn:wc:ra_dav:version-url +V 82 +/svn/!svn/ver/377/trunk/isoparser/src/main/java/com/googlecode/mp4parser/h264/read +END +CAVLCReader.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/!svn/ver/377/trunk/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/CAVLCReader.java +END +BitstreamReader.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/!svn/ver/377/trunk/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/BitstreamReader.java +END diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/entries b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/entries new file mode 100644 index 0000000..f0111dc --- /dev/null +++ b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +778 +http://mp4parser.googlecode.com/svn/trunk/isoparser/src/main/java/com/googlecode/mp4parser/h264/read +http://mp4parser.googlecode.com/svn + + + +2012-03-05T23:28:24.666173Z +377 +Sebastian.Annies@gmail.com + + + + + + + + + + + + + + +7decde4b-c250-0410-a0da-51896bc88be6 + +CAVLCReader.java +file + + + + +2012-09-14T17:27:51.457232Z +bcd623b178982adc4723a481ed9ee8c8 +2012-03-05T23:28:24.666173Z +377 +Sebastian.Annies@gmail.com + + + + + + + + + + + + + + + + + + + + + +5069 + +BitstreamReader.java +file + + + + +2012-09-14T17:27:51.457232Z +0a82a1920e98d55c972bc7e536bfb158 +2012-03-05T23:28:24.666173Z +377 +Sebastian.Annies@gmail.com + + + + + + + + + + + + + + + + + + + + + +4982 + diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/text-base/BitstreamReader.java.svn-base b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/text-base/BitstreamReader.java.svn-base new file mode 100644 index 0000000..816af6a --- /dev/null +++ b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/text-base/BitstreamReader.java.svn-base @@ -0,0 +1,194 @@ +/* +Copyright (c) 2011 Stanislav Vitvitskiy + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. +*/ +package com.googlecode.mp4parser.h264.read; + +import com.googlecode.mp4parser.h264.CharCache; + +import java.io.IOException; +import java.io.InputStream; + +/** + * A dummy implementation of H264 RBSP reading + * + * @author Stanislav Vitvitskiy + */ +public class BitstreamReader { + private InputStream is; + private int curByte; + private int nextByte; + int nBit; + protected static int bitsRead; + + protected CharCache debugBits = new CharCache(50); + + public BitstreamReader(InputStream is) throws IOException { + this.is = is; + curByte = is.read(); + nextByte = is.read(); + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#read1Bit() + */ + public int read1Bit() throws IOException { + if (nBit == 8) { + advance(); + if (curByte == -1) { + return -1; + } + } + int res = (curByte >> (7 - nBit)) & 1; + nBit++; + + debugBits.append(res == 0 ? '0' : '1'); + ++bitsRead; + + return res; + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#readNBit(int) + */ + public long readNBit(int n) throws IOException { + if (n > 64) + throw new IllegalArgumentException("Can not readByte more then 64 bit"); + + long val = 0; + + for (int i = 0; i < n; i++) { + val <<= 1; + val |= read1Bit(); + } + + return val; + } + + private void advance() throws IOException { + curByte = nextByte; + nextByte = is.read(); + nBit = 0; + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#readByte() + */ + public int readByte() throws IOException { + if (nBit > 0) { + advance(); + } + + int res = curByte; + + advance(); + + return res; + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#moreRBSPData() + */ + public boolean moreRBSPData() throws IOException { + if (nBit == 8) { + advance(); + } + int tail = 1 << (8 - nBit - 1); + int mask = ((tail << 1) - 1); + boolean hasTail = (curByte & mask) == tail; + + return !(curByte == -1 || (nextByte == -1 && hasTail)); + } + + public long getBitPosition() { + return (bitsRead * 8 + (nBit % 8)); + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#readRemainingByte() + */ + public long readRemainingByte() throws IOException { + return readNBit(8 - nBit); + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#next_bits(int) + */ + public int peakNextBits(int n) throws IOException { + if (n > 8) + throw new IllegalArgumentException("N should be less then 8"); + if (nBit == 8) { + advance(); + if (curByte == -1) { + return -1; + } + } + int[] bits = new int[16 - nBit]; + + int cnt = 0; + for (int i = nBit; i < 8; i++) { + bits[cnt++] = (curByte >> (7 - i)) & 0x1; + } + + for (int i = 0; i < 8; i++) { + bits[cnt++] = (nextByte >> (7 - i)) & 0x1; + } + + int result = 0; + for (int i = 0; i < n; i++) { + result <<= 1; + result |= bits[i]; + } + + return result; + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#byte_aligned() + */ + public boolean isByteAligned() { + return (nBit % 8) == 0; + } + + /* + * (non-Javadoc) + * + * @see ua.org.jplayer.javcodec.h264.RBSPInputStream#close() + */ + public void close() throws IOException { + } + + public int getCurBit() { + return nBit; + } +}
\ No newline at end of file diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/text-base/CAVLCReader.java.svn-base b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/text-base/CAVLCReader.java.svn-base new file mode 100644 index 0000000..07c7f71 --- /dev/null +++ b/isoparser/src/main/java/com/googlecode/mp4parser/h264/read/.svn/text-base/CAVLCReader.java.svn-base @@ -0,0 +1,185 @@ +/* +Copyright (c) 2011 Stanislav Vitvitskiy + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. +*/ +package com.googlecode.mp4parser.h264.read; + + +import com.googlecode.mp4parser.h264.BTree; + +import java.io.IOException; +import java.io.InputStream; + +import static com.googlecode.mp4parser.h264.Debug.println; + + +public class CAVLCReader extends BitstreamReader { + + public CAVLCReader(InputStream is) throws IOException { + super(is); + } + + public long readNBit(int n, String message) throws IOException { + long val = readNBit(n); + + trace(message, String.valueOf(val)); + + return val; + } + + /** + * Read unsigned exp-golomb code + * + * @return + * @throws java.io.IOException + * @throws java.io.IOException + */ + private int readUE() throws IOException { + int cnt = 0; + while (read1Bit() == 0) + cnt++; + + int res = 0; + if (cnt > 0) { + long val = readNBit(cnt); + + res = (int) ((1 << cnt) - 1 + val); + } + + return res; + } + + /* + * (non-Javadoc) + * + * @see + * ua.org.jplayer.javcodec.h264.H264BitInputStream#readUE(java.lang.String) + */ + public int readUE(String message) throws IOException { + int res = readUE(); + + trace(message, String.valueOf(res)); + + return res; + } + + public int readSE(String message) throws IOException { + int val = readUE(); + + int sign = ((val & 0x1) << 1) - 1; + val = ((val >> 1) + (val & 0x1)) * sign; + + trace(message, String.valueOf(val)); + + return val; + } + + public boolean readBool(String message) throws IOException { + + boolean res = read1Bit() == 0 ? false : true; + + trace(message, res ? "1" : "0"); + + return res; + } + + public int readU(int i, String string) throws IOException { + return (int) readNBit(i, string); + } + + public byte[] read(int payloadSize) throws IOException { + byte[] result = new byte[payloadSize]; + for (int i = 0; i < payloadSize; i++) { + result[i] = (byte) readByte(); + } + return result; + } + + public boolean readAE() { + // TODO: do it!! + throw new UnsupportedOperationException("Stan"); + } + + public int readTE(int max) throws IOException { + if (max > 1) + return readUE(); + return ~read1Bit() & 0x1; + } + + public int readAEI() { + // TODO: do it!! + throw new UnsupportedOperationException("Stan"); + } + + public int readME(String string) throws IOException { + return readUE(string); + } + + public Object readCE(BTree bt, String message) throws IOException { + while (true) { + int bit = read1Bit(); + bt = bt.down(bit); + if (bt == null) { + throw new RuntimeException("Illegal code"); + } + Object i = bt.getValue(); + if (i != null) { + trace(message, i.toString()); + return i; + } + } + } + + public int readZeroBitCount(String message) throws IOException { + int count = 0; + while (read1Bit() == 0) + count++; + + trace(message, String.valueOf(count)); + + return count; + } + + public void readTrailingBits() throws IOException { + read1Bit(); + readRemainingByte(); + } + + private void trace(String message, String val) { + StringBuilder traceBuilder = new StringBuilder(); + int spaces; + String pos = String.valueOf(bitsRead - debugBits.length()); + spaces = 8 - pos.length(); + + traceBuilder.append("@" + pos); + + for (int i = 0; i < spaces; i++) + traceBuilder.append(' '); + + traceBuilder.append(message); + spaces = 100 - traceBuilder.length() - debugBits.length(); + for (int i = 0; i < spaces; i++) + traceBuilder.append(' '); + traceBuilder.append(debugBits); + traceBuilder.append(" (" + val + ")"); + debugBits.clear(); + + println(traceBuilder.toString()); + } +}
\ No newline at end of file |