Skip to content

Commit

Permalink
Moved package size parsing to a separate class
Browse files Browse the repository at this point in the history
  • Loading branch information
PaulWoitaschek committed Jul 19, 2017
1 parent f76b60c commit 3914c04
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package de.ph1b.audiobook.features.chapterReader.ogg.oggReading

import de.ph1b.audiobook.features.chapterReader.toUInt


object PackageSizeParser {

fun fromSegmentTable(segmentTable: ByteArray): List<Int> = segmentTable
.map { it.toUInt() }
.fold(mutableListOf(0), { acc, e ->
acc[acc.lastIndex] += e
if (e != 255) {
acc.add(0)
}
acc
})
.filter { it != 0 }
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,6 @@ import java.io.InputStream

private val OGG_PAGE_MAGIC = "OggS".toByteArray()

fun computePacketSizesFromSegmentTable(segmentTable: ByteArray): List<Int>
= segmentTable.map { it.toUInt() }.fold(mutableListOf(0), { acc, e ->
acc[acc.lastIndex] += e
if (e != 255)
acc.add(0)
acc
}).filter { it != 0 }

fun readOggPages(stream: InputStream): Sequence<OggPage> {
return generateSequence gen@ {
// https://www.ietf.org/rfc/rfc3533.txt
Expand All @@ -41,7 +33,7 @@ fun readOggPages(stream: InputStream): Sequence<OggPage> {
stream.skipBytes(4) // checksum
val numberPageSegments = stream.readUInt8()
val segmentTable = stream.readBytes(numberPageSegments)
val packets = computePacketSizesFromSegmentTable(segmentTable).map {
val packets = PackageSizeParser.fromSegmentTable(segmentTable).map {
stream.readBytes(it)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package de.ph1b.audiobook.features.chapterReader.ogg

import de.ph1b.audiobook.features.chapterReader.ogg.oggReading.OggPage
import de.ph1b.audiobook.features.chapterReader.ogg.oggReading.OggStream
import de.ph1b.audiobook.features.chapterReader.ogg.oggReading.computePacketSizesFromSegmentTable
import de.ph1b.audiobook.features.chapterReader.ogg.oggReading.PackageSizeParser
import de.ph1b.audiobook.features.chapterReader.ogg.oggReading.concat
import de.ph1b.audiobook.features.chapterReader.ogg.oggReading.demuxOggStreams
import de.ph1b.audiobook.features.chapterReader.ogg.oggReading.readOggPages
Expand Down Expand Up @@ -31,10 +31,10 @@ private fun <T> Iterable<T>.shuffle(): List<T> {
class OggReadingTest {
@Test
fun computePacketSizesFromSegmentTableTest() {
assertThat(computePacketSizesFromSegmentTable(unsignedByteArrayOf(
assertThat(PackageSizeParser.fromSegmentTable(unsignedByteArrayOf(
255, 255, 14, 255, 0, 255, 255, 17)))
.isEqualTo(listOf(2*255 + 14, 255, 2*255 + 17))
assertThat(computePacketSizesFromSegmentTable(unsignedByteArrayOf(
assertThat(PackageSizeParser.fromSegmentTable(unsignedByteArrayOf(
255, 255, 255, 255, 70, 255, 255)))
.isEqualTo(listOf(4*255 + 70, 2*255))
}
Expand Down

0 comments on commit 3914c04

Please sign in to comment.