Skip to content

Commit

Permalink
refactor(core): move bitSize of ByteBufferWriter to BitBufferWriter
Browse files Browse the repository at this point in the history
  • Loading branch information
ThibaultBee committed Nov 30, 2023
1 parent 89e9b5d commit d10f4b6
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ data class AudioSpecificConfig(
)
}

override fun write(writer: BitBuffer) {
override fun write(output: BitBuffer) {
TODO("Not yet implemented")
}

Expand Down Expand Up @@ -325,7 +325,7 @@ data class AudioSpecificConfig(
}
}

override fun write(writer: BitBuffer) {
override fun write(output: BitBuffer) {
TODO("Not yet implemented")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
*/
package io.github.thibaultbee.streampack.internal.utils.av.audio.aac

import io.github.thibaultbee.streampack.internal.utils.av.audio.AudioSpecificConfig
import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBuffer
import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBufferWriter
import io.github.thibaultbee.streampack.internal.utils.av.buffer.ByteBufferWriter
import io.github.thibaultbee.streampack.internal.utils.av.audio.AudioSpecificConfig
import java.nio.ByteBuffer

class AudioMuxElement(
Expand All @@ -30,7 +30,8 @@ class AudioMuxElement(
private val payloadLengthInfo = PayloadLengthInfo()
private val payloadMux = PayloadMux()

override val bitSize: Int
override val size = (bitSize + Byte.SIZE_BITS - 1) / Byte.SIZE_BITS
private val bitSize: Int
get() = 1 + if (!useSameStreamMuxConfig) {
streamMuxConfig!!.bitSize
} else {
Expand Down Expand Up @@ -69,27 +70,27 @@ class AudioMuxElement(

private inner class PayloadLengthInfo : BitBufferWriter() {
private val payloadSize = payload!!.remaining()
override val size = (payloadSize / 255) + 1
override val bitSize = ((payloadSize / 255) + 1) * Byte.SIZE_BITS

override fun write(writer: BitBuffer) {
override fun write(output: BitBuffer) {
if (streamMuxConfig!!.allStreamsSameTimeFraming == true) {
var remainingPayloadLength = payloadSize
for (i in 0..(payloadSize - 255) step 255) {
writer.put(0xFF, 8)
output.put(0xFF, 8)
remainingPayloadLength -= 255
}
writer.put(remainingPayloadLength, 8)
output.put(remainingPayloadLength, 8)
} else {
throw NotImplementedError("Not implemented yet")
}
}
}

private inner class PayloadMux : BitBufferWriter() {
override val size = payload!!.remaining()
override val bitSize = payload!!.remaining() * Byte.SIZE_BITS

override fun write(writer: BitBuffer) {
writer.put(payload!!)
override fun write(output: BitBuffer) {
output.put(payload!!)
}
}

Expand All @@ -115,7 +116,10 @@ class AudioMuxElement(
)
}

fun fromDecoderSpecificInfo(payload: ByteBuffer, decoderSpecificInfo: ByteBuffer): AudioMuxElement {
fun fromDecoderSpecificInfo(
payload: ByteBuffer,
decoderSpecificInfo: ByteBuffer
): AudioMuxElement {
return AudioMuxElement(
muxConfigPresent = true,
useSameStreamMuxConfig = false,
Expand Down Expand Up @@ -158,23 +162,23 @@ class StreamMuxConfig(
}
}

override fun write(writer: BitBuffer) {
writer.put(audioMuxVersion, 1)
override fun write(output: BitBuffer) {
output.put(audioMuxVersion, 1)
if (audioMuxVersion == 1) {
writer.put(audioMuxVersionA, 1)
output.put(audioMuxVersionA, 1)
}
if (audioMuxVersionA == 0) {
writer.put(allStreamsSameTimeFraming!!)
writer.put(numSubFrames!!, 6)
writer.put(numProgram!!, 4) // numProgram
writer.put(numLayer!!, 3) // numLayer
output.put(allStreamsSameTimeFraming!!)
output.put(numSubFrames!!, 6)
output.put(numProgram!!, 4) // numProgram
output.put(numLayer!!, 3) // numLayer

writer.put(audioSpecificConfig!!)
output.put(audioSpecificConfig!!)

writer.put(frameLengthType!!, 3)
writer.put(0xFF, 8) // latmBufferFullness
writer.put(0, 1) // otherDataPresent
writer.put(0, 1) // crcCheckPresent
output.put(frameLengthType!!, 3)
output.put(0xFF, 8) // latmBufferFullness
output.put(0, 1) // otherDataPresent
output.put(0, 1) // crcCheckPresent
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class ProgramConfigElement : BitBufferWriter() {
override val bitSize: Int
get() = TODO("Not yet implemented")

override fun write(writer: BitBuffer) {
override fun write(output: BitBuffer) {
TODO("Not yet implemented")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
*/
package io.github.thibaultbee.streampack.internal.utils.av.audio.aac.config

import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBufferWriter
import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBuffer
import io.github.thibaultbee.streampack.internal.utils.av.audio.ChannelConfiguration
import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBuffer
import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBufferWriter

data class ELDSpecificConfig(
val channelConfiguration: ChannelConfiguration,
Expand Down Expand Up @@ -46,7 +46,7 @@ data class ELDSpecificConfig(
}
}

override fun write(writer: BitBuffer) {
override fun write(output: BitBuffer) {
TODO("Not yet implemented")
}

Expand Down Expand Up @@ -120,10 +120,10 @@ data class ELDSpecificConfig(
class LdSbrHeader(
private val sbrHeaders: List<SbrHeader>
) : BitBufferWriter() {
override val size = 5 + sbrHeaders.size * 8
override val bitSize = (5 + sbrHeaders.size * 8) * Byte.SIZE_BITS

override fun write(writer: BitBuffer) {
sbrHeaders.forEach { it.write(writer) }
override fun write(output: BitBuffer) {
sbrHeaders.forEach { it.write(output) }
}

companion object {
Expand All @@ -134,17 +134,21 @@ data class ELDSpecificConfig(
ChannelConfiguration.CHANNEL_2 -> {
1
}

ChannelConfiguration.CHANNEL_3 -> {
2
}

ChannelConfiguration.CHANNEL_4,
ChannelConfiguration.CHANNEL_5,
ChannelConfiguration.CHANNEL_6 -> {
3
}

ChannelConfiguration.CHANNEL_8 -> {
4
}

else -> {
0
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ data class GASpecificConfig(
}
}

override fun write(writer: BitBuffer) {
override fun write(output: BitBuffer) {
TODO("Not yet implemented")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
*/
package io.github.thibaultbee.streampack.internal.utils.av.audio.aac.config

import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBufferWriter
import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBuffer
import io.github.thibaultbee.streampack.internal.utils.av.buffer.BitBufferWriter

data class SbrHeader(
val bsAmpRes: Boolean,
Expand All @@ -33,7 +33,9 @@ data class SbrHeader(
val bsInterpolFreq: Boolean? = null,
val bsSmoothingMode: Boolean? = null
) : BitBufferWriter() {
override fun write(writer: BitBuffer) {
override val bitSize = 0

override fun write(output: BitBuffer) {
TODO("Not yet implemented")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,15 @@ import java.nio.ByteBuffer
* For sub classes of a [ByteBufferWriter] that need to write a [ByteBuffer] to a [BitBuffer]
*/
abstract class BitBufferWriter : ByteBufferWriter() {
abstract val bitSize: Int
override val size by lazy { (bitSize + Byte.SIZE_BITS - 1) / Byte.SIZE_BITS }

override fun write(output: ByteBuffer) {
val writer = BitBuffer(output)
write(writer)
}

abstract fun write(writer: BitBuffer)
abstract fun write(output: BitBuffer)

fun toBitBuffer(): BitBuffer {
val buffer = ByteBuffer.allocate(size)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,9 @@ import io.github.thibaultbee.streampack.internal.utils.extensions.isAvcc
import io.github.thibaultbee.streampack.internal.utils.extensions.removeStartCode
import io.github.thibaultbee.streampack.internal.utils.extensions.startCodeSize
import java.nio.ByteBuffer
import kotlin.math.ceil

abstract class ByteBufferWriter {
open val size: Int
get() = ceil(bitSize.toFloat() / Byte.SIZE_BITS).toInt()
open val bitSize: Int
get() = size * Byte.SIZE_BITS
abstract val size: Int

open fun toByteBuffer(): ByteBuffer {
val output = ByteBuffer.allocate(size)
Expand Down

0 comments on commit d10f4b6

Please sign in to comment.