Skip to content

Commit

Permalink
feat(core): made AVCCBufferWriter support AVCC frame
Browse files Browse the repository at this point in the history
  • Loading branch information
ThibaultBee committed Nov 30, 2023
1 parent ae34b8a commit 89e9b5d
Showing 1 changed file with 25 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package io.github.thibaultbee.streampack.internal.utils.av.buffer

import io.github.thibaultbee.streampack.internal.utils.extensions.isAnnexB
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
Expand Down Expand Up @@ -51,12 +53,31 @@ class PassthroughBufferWriter(private val buffer: ByteBuffer) : ByteBufferWriter
* A class that convert a [ByteBuffer] to an AVCC format.
*/
class AVCCBufferWriter(private val buffer: ByteBuffer) : ByteBufferWriter() {
override val size = buffer.remaining() - buffer.startCodeSize + 4
override val size = computeSize()

private val isAvcc = buffer.isAvcc
private val isAnnexB = buffer.isAnnexB

private fun computeSize(): Int {
return if (isAvcc) {
buffer.remaining()
} else if (isAnnexB) {
buffer.remaining() - buffer.startCodeSize + 4
} else {
throw IllegalArgumentException("Buffer must be in AVCC or AnnexB format")
}
}

override fun write(output: ByteBuffer) {
val noStartCodeBuffer = buffer.removeStartCode()
output.putInt(noStartCodeBuffer.remaining())
output.put(noStartCodeBuffer)
if (isAvcc) {
output.put(buffer)
} else if (isAnnexB) {
val noStartCodeBuffer = buffer.removeStartCode()
output.putInt(noStartCodeBuffer.remaining())
output.put(noStartCodeBuffer)
} else {
throw IllegalArgumentException("Buffer must be in AVCC or AnnexB format")
}
}
}

0 comments on commit 89e9b5d

Please sign in to comment.