Videoplayer sample: format, drop unused imports

This commit is contained in:
Dmitriy Dolovov
2020-12-06 18:20:39 +03:00
committed by Stanislav Erokhin
parent 0e0c8e274d
commit 8a83b37673
6 changed files with 14 additions and 19 deletions
@@ -153,7 +153,6 @@ private class VideoDecoder(
videoQueue.push(VideoFrame(buffer, scaledVideoFrame.linesize[0], ts))
}
}
}
private fun SampleFormat.toAVSampleFormat(): AVSampleFormat? = when (this) {
@@ -191,14 +190,14 @@ private class AudioDecoder(
private val maxAudioFrames = 5
init {
with (resampledAudioFrame) {
with(resampledAudioFrame) {
channels = output.channels
sample_rate = output.sampleRate
format = output.sampleFormat
channel_layout = output.channelLayout.convert()
}
with (audioCodecContext) {
with(audioCodecContext) {
setResampleOpt("in_channel_layout", channel_layout.convert())
setResampleOpt("out_channel_layout", output.channelLayout)
setResampleOpt("in_sample_rate", sample_rate)
@@ -226,12 +225,12 @@ private class AudioDecoder(
fun nextFrame(size: Int): AudioFrame? {
val frame = audioQueue.peek() ?: return null
val realSize = if (frame.position + size > frame.size) frame.size - frame.position else size
if (frame.position + realSize == frame.size) {
return audioQueue.pop()
return if (frame.position + realSize == frame.size) {
audioQueue.pop()
} else {
val result = AudioFrame(av_buffer_ref(frame.buffer)!!, frame.position, frame.size, frame.timeStamp)
frame.position += realSize
return result
result
}
}
@@ -241,7 +240,7 @@ private class AudioDecoder(
if (frameFinished.value != 0) {
// Put audio frame to decoder's queue.
swr_convert_frame(resampleContext, resampledAudioFrame.ptr, audioFrame.ptr).checkAVError()
with (resampledAudioFrame) {
with(resampledAudioFrame) {
val audioFrameSize = av_samples_get_buffer_size(null, channels, nb_samples, format, 1)
val buffer = av_buffer_alloc(audioFrameSize)!!
val ts = av_frame_get_best_effort_timestamp(audioFrame.ptr) *
@@ -6,7 +6,7 @@
package sample.videoplayer
class Queue<T>(val maxSize: Int) {
private val array = kotlin.arrayOfNulls<Any>(maxSize)
private val array = arrayOfNulls<Any>(maxSize)
private var head = 0
private var tail = 0
@@ -23,7 +23,7 @@ private fun SampleFormat.toSDLFormat(): SDL_AudioFormat? = when (this) {
SampleFormat.INVALID -> null
}
class SDLAudio(val player: VideoPlayer) : DisposableContainer() {
class SDLAudio(private val player: VideoPlayer) : DisposableContainer() {
private var state = State.STOPPED
fun start(audio: AudioOutput) {
@@ -67,7 +67,7 @@ class SDLAudio(val player: VideoPlayer) : DisposableContainer() {
private fun audioCallback(userdata: COpaquePointer?, buffer: CPointer<Uint8Var>?, length: Int) {
// This handler will be invoked in the audio thread, so reinit runtime.
kotlin.native.initRuntimeIfNeeded()
initRuntimeIfNeeded()
val decoder = DecoderWorker(Worker.fromCPointer(userdata))
var outPosition = 0
while (outPosition < length) {
@@ -8,7 +8,7 @@ package sample.videoplayer
import kotlinx.cinterop.*
import sdl.*
class SDLInput(val player: VideoPlayer) : DisposableContainer() {
class SDLInput(private val player: VideoPlayer) : DisposableContainer() {
private val event = arena.alloc<SDL_Event>().ptr
fun check() {
@@ -5,9 +5,6 @@
package sample.videoplayer
import ffmpeg.AV_PIX_FMT_NONE
import ffmpeg.AV_PIX_FMT_RGB24
import ffmpeg.AV_PIX_FMT_RGB32
import kotlinx.cinterop.*
import sdl.*
@@ -72,7 +69,7 @@ class SDLRendererWindow(windowPos: Dimensions, videoSize: Dimensions) : Disposab
SDL_CreateTexture(renderer, SDL_GetWindowPixelFormat(window), 0, videoSize.w, videoSize.h),
::SDL_DestroyTexture)
private val rect = sdlDisposable("calloc(SDL_Rect)",
SDL_calloc(1, SDL_Rect.size.convert()), ::SDL_free)
SDL_calloc(1, sizeOf<SDL_Rect>().convert()), ::SDL_free)
.reinterpret<SDL_Rect>()
init {
@@ -6,7 +6,6 @@
package sample.videoplayer
import ffmpeg.*
import kotlin.system.*
import kotlinx.cinterop.*
import platform.posix.*
import kotlinx.cli.*
@@ -32,12 +31,12 @@ enum class PlayMode {
val useAudio: Boolean get() = this != VIDEO
}
class VideoPlayer(val requestedSize: Dimensions?) : DisposableContainer() {
class VideoPlayer(private val requestedSize: Dimensions?) : DisposableContainer() {
private val decoder = disposable { DecoderWorker() }
private val video = disposable { SDLVideo() }
private val audio = disposable { SDLAudio(this) }
private val input = disposable { SDLInput(this) }
private val now = arena.alloc<platform.posix.timespec>().ptr
private val now = arena.alloc<timespec>().ptr
private var state = State.STOPPED
@@ -63,7 +62,7 @@ class VideoPlayer(val requestedSize: Dimensions?) : DisposableContainer() {
}
private fun getTime(): Double {
clock_gettime(platform.posix.CLOCK_MONOTONIC, now)
clock_gettime(CLOCK_MONOTONIC, now)
return now.pointed.tv_sec + now.pointed.tv_nsec / 1e9
}