From 452977abdf681ebbc2a1083cd3104204a8edbab4 Mon Sep 17 00:00:00 2001 From: kapodamy Date: Fri, 3 Jul 2020 02:07:42 -0300 Subject: [PATCH 1/3] Drop "writing/muxed by" metadata * All muxers (mp4, webm and ogg) are affected * solve some checkstyle's errors (building was blocked) Mp4FromDashWriter: * drop "writing application" * drop "handler name" OggFromWebMWriter: * drop "writing application" for OPUS and VORBIS header WebMWriter: * Drop "Muxing application" * Drop "Writing application" --- .../newpipe/streams/Mp4FromDashWriter.java | 28 ++------------ .../newpipe/streams/OggFromWebMWriter.java | 38 ++++++------------- .../schabi/newpipe/streams/WebMWriter.java | 22 ++++------- 3 files changed, 22 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java index eb208280e..00a0f750e 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java @@ -717,18 +717,6 @@ public class Mp4FromDashWriter { makeTrak(i, durations[i], defaultMediaTime[i], tablesInfo[i], is64); } - // udta/meta/ilst/©too - auxWrite(new byte[]{ - 0x00, 0x00, 0x00, 0x5C, 0x75, 0x64, 0x74, 0x61, 0x00, 0x00, 0x00, 0x54, 0x6D, 0x65, - 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x68, 0x64, 0x6C, 0x72, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x64, 0x69, 0x72, 0x61, 0x70, - 0x70, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x27, 0x69, 0x6C, 0x73, 0x74, 0x00, 0x00, 0x00, - 0x1F, (byte) 0xA9, 0x74, 0x6F, 0x6F, 0x00, 0x00, 0x00, 0x17, 0x64, 0x61, 0x74, 0x61, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65 // "NewPipe" binary string - }); - return lengthFor(start); } @@ -850,20 +838,10 @@ public class Mp4FromDashWriter { private byte[] makeHdlr(final Hdlr hdlr) { ByteBuffer buffer = ByteBuffer.wrap(new byte[]{ - 0x00, 0x00, 0x00, 0x77, 0x68, 0x64, 0x6C, 0x72, // hdlr + 0x00, 0x00, 0x00, 0x21, 0x68, 0x64, 0x6C, 0x72, // hdlr 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // binary string - // "ISO Media file created in NewPipe ( - // A libre lightweight streaming frontend for Android)." - 0x49, 0x53, 0x4F, 0x20, 0x4D, 0x65, 0x64, 0x69, 0x61, 0x20, 0x66, 0x69, 0x6C, 0x65, - 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x20, 0x4E, 0x65, - 0x77, 0x50, 0x69, 0x70, 0x65, 0x20, 0x28, 0x41, 0x20, 0x6C, 0x69, 0x62, 0x72, 0x65, - 0x20, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6D, 0x69, 0x6E, 0x67, - 0x20, 0x66, 0x72, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20, - 0x41, 0x6E, - 0x64, 0x72, 0x6F, 0x69, 0x64, 0x29, 0x2E + 0x00// null string character }); buffer.position(12); @@ -899,7 +877,7 @@ public class Mp4FromDashWriter { * characteristics of sample groups. The descriptive information is any other * information needed to define or characterize the sample group. * - * ¿is replicabled this box? + * ¿is replicable this box? * NO due lacks of documentation about this box but... * most of m4a encoders and ffmpeg uses this box with dummy values (same values) */ diff --git a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java index e24464dc0..092b9d31f 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java @@ -274,30 +274,15 @@ public class OggFromWebMWriter implements Closeable { if ("A_OPUS".equals(webmTrack.codecId)) { return new byte[]{ 0x4F, 0x70, 0x75, 0x73, 0x54, 0x61, 0x67, 0x73, // "OpusTags" binary string - 0x07, 0x00, 0x00, 0x00, // writing application string size - 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string + 0x00, 0x00, 0x00, 0x00, // writing application string size (not present) 0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags) }; } else if ("A_VORBIS".equals(webmTrack.codecId)) { return new byte[]{ - 0x03, // ???????? + 0x03, // ¿¿¿??? 0x76, 0x6f, 0x72, 0x62, 0x69, 0x73, // "vorbis" binary string - 0x07, 0x00, 0x00, 0x00, // writting application string size - 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string - 0x01, 0x00, 0x00, 0x00, // additional tags count (zero means no tags) - - /* - // whole file duration (not implemented) - 0x44,// tag string size - 0x55, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x3D, 0x30, - 0x30, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x2E, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 - */ - 0x0F, // tag string size - 0x00, 0x00, 0x00, 0x45, 0x4E, 0x43, 0x4F, - 0x44, 0x45, 0x52, 0x3D, // "ENCODER=" binary string - 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ???????? + 0x00, 0x00, 0x00, 0x00, // writing application string size (not present) + 0x00, 0x00, 0x00, 0x00, // additional tags count (zero means no tags) }; } @@ -377,7 +362,7 @@ public class OggFromWebMWriter implements Closeable { return addPacketSegment(block.dataSize); } - private boolean addPacketSegment(int size) { + private boolean addPacketSegment(final int size) { if (size > 65025) { throw new UnsupportedOperationException("page size cannot be larger than 65025"); } @@ -396,8 +381,8 @@ public class OggFromWebMWriter implements Closeable { return false; // not enough space on the page } - for (; size > 0; size -= 255) { - segmentTable[segmentTableSize++] = (byte) Math.min(size, 255); + for (int seg = size; seg > 0; seg -= 255) { + segmentTable[segmentTableSize++] = (byte) Math.min(seg, 255); } if (extra) { @@ -419,12 +404,13 @@ public class OggFromWebMWriter implements Closeable { } } - private int calcCrc32(int initialCrc, final byte[] buffer, final int size) { + private int calcCrc32(final int initialCrc, final byte[] buffer, final int size) { + int crc = initialCrc; for (int i = 0; i < size; i++) { - int reg = (initialCrc >>> 24) & 0xff; - initialCrc = (initialCrc << 8) ^ crc32Table[reg ^ (buffer[i] & 0xff)]; + int reg = (crc >>> 24) & 0xff; + crc = (crc << 8) ^ crc32Table[reg ^ (buffer[i] & 0xff)]; } - return initialCrc; + return crc; } } diff --git a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java index c3cd2a2e4..586c8105a 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java @@ -151,7 +151,7 @@ public class WebMWriter implements Closeable { (byte) 0xac, (byte) 0x81, /*info offset*/ 0x43, 0x4d, (byte) 0xbb, (byte) 0x8b, 0x53, (byte) 0xab, (byte) 0x84, 0x16, 0x54, (byte) 0xae, 0x6b, 0x53, (byte) 0xac, (byte) 0x81, - /*tracks offset*/ 0x6a, + /*tracks offset*/ 0x56, 0x4d, (byte) 0xbb, (byte) 0x8e, 0x53, (byte) 0xab, (byte) 0x84, 0x1f, 0x43, (byte) 0xb6, 0x75, 0x53, (byte) 0xac, (byte) 0x84, /*cluster offset [2]*/ 0x00, 0x00, 0x00, 0x00, 0x4d, (byte) 0xbb, (byte) 0x8e, 0x53, (byte) 0xab, (byte) 0x84, 0x1c, 0x53, @@ -160,19 +160,11 @@ public class WebMWriter implements Closeable { /* info */ listBuffer.add(new byte[]{ - 0x15, 0x49, (byte) 0xa9, 0x66, (byte) 0xa2, 0x2a, (byte) 0xd7, (byte) 0xb1 + 0x15, 0x49, (byte) 0xa9, 0x66, (byte) 0x8e, 0x2a, (byte) 0xd7, (byte) 0xb1 }); listBuffer.add(encode(DEFAULT_TIMECODE_SCALE, true)); // this value MUST NOT exceed 4 bytes listBuffer.add(new byte[]{0x44, (byte) 0x89, (byte) 0x84, 0x00, 0x00, 0x00, 0x00, // info.duration - - /* MuxingApp */ - 0x4d, (byte) 0x80, (byte) 0x87, 0x4E, - 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string - - /* WritingApp */ - 0x57, 0x41, (byte) 0x87, 0x4E, - 0x65, 0x77, 0x50, 0x69, 0x70, 0x65// "NewPipe" binary string }); /* tracks */ @@ -416,7 +408,7 @@ public class WebMWriter implements Closeable { } } - private long makeCluster(final SharpStream stream, final long timecode, long offset, + private long makeCluster(final SharpStream stream, final long timecode, final long offset, final boolean create) throws IOException { ClusterInfo cluster; @@ -426,8 +418,6 @@ public class WebMWriter implements Closeable { cluster.size = (int) (written - offset - CLUSTER_HEADER_SIZE); } - offset = written; - if (create) { /* cluster */ dump(new byte[]{0x1f, 0x43, (byte) 0xb6, 0x75}, stream); @@ -445,7 +435,7 @@ public class WebMWriter implements Closeable { dump(encode(timecode, true), stream); } - return offset; + return written; } private void makeEBML(final SharpStream stream) throws IOException { @@ -588,8 +578,10 @@ public class WebMWriter implements Closeable { return lengthFor(buffer); } - private void makeEbmlVoid(final SharpStream out, int size, final boolean wipe) + private void makeEbmlVoid(final SharpStream out, final int amount, final boolean wipe) throws IOException { + int size = amount; + /* ebml void */ outByteBuffer.putShort(0, (short) 0xec20); outByteBuffer.putShort(2, (short) (size - 4)); From b2d78d380bfb4ebcb822a46bfe612d98b9c06fd9 Mon Sep 17 00:00:00 2001 From: kapodamy Date: Fri, 3 Jul 2020 20:51:45 -0300 Subject: [PATCH 2/3] update WebMWriter.java --- .../main/java/org/schabi/newpipe/streams/WebMWriter.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java index 586c8105a..7cdcac15e 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java @@ -408,9 +408,10 @@ public class WebMWriter implements Closeable { } } - private long makeCluster(final SharpStream stream, final long timecode, final long offset, + private long makeCluster(final SharpStream stream, final long timecode, final long offsetStart, final boolean create) throws IOException { ClusterInfo cluster; + long offset = offsetStart; if (offset > 0) { // save the size of the previous cluster (maximum 256 MiB) @@ -418,6 +419,8 @@ public class WebMWriter implements Closeable { cluster.size = (int) (written - offset - CLUSTER_HEADER_SIZE); } + offset = written; + if (create) { /* cluster */ dump(new byte[]{0x1f, 0x43, (byte) 0xb6, 0x75}, stream); @@ -435,11 +438,11 @@ public class WebMWriter implements Closeable { dump(encode(timecode, true), stream); } - return written; + return offset; } private void makeEBML(final SharpStream stream) throws IOException { - // deafult values + // default values dump(new byte[]{ 0x1A, 0x45, (byte) 0xDF, (byte) 0xA3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x42, (byte) 0x86, (byte) 0x81, 0x01, From 8120b6aaaa219d358fda0cfc0279cebb873598ed Mon Sep 17 00:00:00 2001 From: kapodamy Date: Sun, 5 Jul 2020 23:55:40 -0300 Subject: [PATCH 3/3] checkstyle's amend --- .../schabi/newpipe/streams/DataReader.java | 8 +++++-- .../newpipe/streams/Mp4FromDashWriter.java | 23 ++++++++++--------- .../newpipe/streams/OggFromWebMWriter.java | 2 +- .../schabi/newpipe/streams/WebMWriter.java | 12 ++++++---- checkstyle-suppressions.xml | 15 ------------ 5 files changed, 27 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java index 96f78ac0e..dcd751e81 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java +++ b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java @@ -43,7 +43,8 @@ public class DataReader { return readBuffer[readOffset++] & 0xFF; } - public long skipBytes(long amount) throws IOException { + public long skipBytes(final long byteAmount) throws IOException { + long amount = byteAmount; if (readCount < 0) { return 0; } else if (readCount == 0) { @@ -90,7 +91,10 @@ public class DataReader { return read(buffer, 0, buffer.length); } - public int read(final byte[] buffer, int offset, int count) throws IOException { + public int read(final byte[] buffer, final int off, final int c) throws IOException { + int offset = off; + int count = c; + if (readCount < 0) { return -1; } diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java index 00a0f750e..2baf8fe55 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java @@ -464,16 +464,16 @@ public class Mp4FromDashWriter { } private void initChunkTables(final TablesInfo tables, final int firstCount, - final int succesiveCount) { + final int successiveCount) { // tables.stsz holds amount of samples of the track (total) int totalSamples = (tables.stsz - firstCount); - float chunkAmount = totalSamples / (float) succesiveCount; + float chunkAmount = totalSamples / (float) successiveCount; int remainChunkOffset = (int) Math.ceil(chunkAmount); boolean remain = remainChunkOffset != (int) chunkAmount; int index = 0; tables.stsc = 1; - if (firstCount != succesiveCount) { + if (firstCount != successiveCount) { tables.stsc++; } if (remain) { @@ -488,15 +488,15 @@ public class Mp4FromDashWriter { tables.stscBEntries[index++] = firstCount; tables.stscBEntries[index++] = 1; - if (firstCount != succesiveCount) { + if (firstCount != successiveCount) { tables.stscBEntries[index++] = 2; - tables.stscBEntries[index++] = succesiveCount; + tables.stscBEntries[index++] = successiveCount; tables.stscBEntries[index++] = 1; } if (remain) { tables.stscBEntries[index++] = remainChunkOffset + 1; - tables.stscBEntries[index++] = totalSamples % succesiveCount; + tables.stscBEntries[index++] = totalSamples % successiveCount; tables.stscBEntries[index] = 1; } } @@ -640,19 +640,20 @@ public class Mp4FromDashWriter { return size; } - private byte[] makeMdat(long refSize, final boolean is64) { + private byte[] makeMdat(final long refSize, final boolean is64) { + long size = refSize; if (is64) { - refSize += 16; + size += 16; } else { - refSize += 8; + size += 8; } ByteBuffer buffer = ByteBuffer.allocate(is64 ? 16 : 8) - .putInt(is64 ? 0x01 : (int) refSize) + .putInt(is64 ? 0x01 : (int) size) .putInt(0x6D646174); // mdat if (is64) { - buffer.putLong(refSize); + buffer.putLong(size); } return buffer.array(); diff --git a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java index 092b9d31f..00a29c7ab 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java @@ -282,7 +282,7 @@ public class OggFromWebMWriter implements Closeable { 0x03, // ¿¿¿??? 0x76, 0x6f, 0x72, 0x62, 0x69, 0x73, // "vorbis" binary string 0x00, 0x00, 0x00, 0x00, // writing application string size (not present) - 0x00, 0x00, 0x00, 0x00, // additional tags count (zero means no tags) + 0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags) }; } diff --git a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java index 7cdcac15e..02b22965d 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java @@ -148,21 +148,25 @@ public class WebMWriter implements Closeable { 0x11, 0x4d, (byte) 0x9b, 0x74, (byte) 0xbe, 0x4d, (byte) 0xbb, (byte) 0x8b, 0x53, (byte) 0xab, (byte) 0x84, 0x15, 0x49, (byte) 0xa9, 0x66, 0x53, - (byte) 0xac, (byte) 0x81, /*info offset*/ 0x43, + (byte) 0xac, (byte) 0x81, + /*info offset*/ 0x43, 0x4d, (byte) 0xbb, (byte) 0x8b, 0x53, (byte) 0xab, (byte) 0x84, 0x16, 0x54, (byte) 0xae, 0x6b, 0x53, (byte) 0xac, (byte) 0x81, /*tracks offset*/ 0x56, 0x4d, (byte) 0xbb, (byte) 0x8e, 0x53, (byte) 0xab, (byte) 0x84, 0x1f, - 0x43, (byte) 0xb6, 0x75, 0x53, (byte) 0xac, (byte) 0x84, /*cluster offset [2]*/ 0x00, 0x00, 0x00, 0x00, + 0x43, (byte) 0xb6, 0x75, 0x53, (byte) 0xac, (byte) 0x84, + /*cluster offset [2]*/ 0x00, 0x00, 0x00, 0x00, 0x4d, (byte) 0xbb, (byte) 0x8e, 0x53, (byte) 0xab, (byte) 0x84, 0x1c, 0x53, - (byte) 0xbb, 0x6b, 0x53, (byte) 0xac, (byte) 0x84, /*cues offset [7]*/ 0x00, 0x00, 0x00, 0x00 + (byte) 0xbb, 0x6b, 0x53, (byte) 0xac, (byte) 0x84, + /*cues offset [7]*/ 0x00, 0x00, 0x00, 0x00 }); /* info */ listBuffer.add(new byte[]{ 0x15, 0x49, (byte) 0xa9, 0x66, (byte) 0x8e, 0x2a, (byte) 0xd7, (byte) 0xb1 }); - listBuffer.add(encode(DEFAULT_TIMECODE_SCALE, true)); // this value MUST NOT exceed 4 bytes + // the segment duration MUST NOT exceed 4 bytes + listBuffer.add(encode(DEFAULT_TIMECODE_SCALE, true)); listBuffer.add(new byte[]{0x44, (byte) 0x89, (byte) 0x84, 0x00, 0x00, 0x00, 0x00, // info.duration }); diff --git a/checkstyle-suppressions.xml b/checkstyle-suppressions.xml index a4fc516f2..b29789eca 100644 --- a/checkstyle-suppressions.xml +++ b/checkstyle-suppressions.xml @@ -16,21 +16,6 @@ lines="278,310"/> - - - - - - -