mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-14 10:46:51 -07:00
Render to TextureView on Android
This commit is contained in:
parent
2c838736e7
commit
d1fe315220
4 changed files with 30 additions and 16 deletions
|
@ -25,6 +25,8 @@
|
|||
|
||||
#include <string.h>
|
||||
|
||||
#define INPUT_BUFFER_TIMEOUT_MS 10
|
||||
|
||||
static void *android_chiaki_video_decoder_output_thread_func(void *user);
|
||||
|
||||
ChiakiErrorCode android_chiaki_video_decoder_init(AndroidChiakiVideoDecoder *decoder, ChiakiLog *log)
|
||||
|
@ -105,11 +107,11 @@ void android_chiaki_video_decoder_video_sample(uint8_t *buf, size_t buf_size, vo
|
|||
|
||||
while(buf_size > 0)
|
||||
{
|
||||
ssize_t codec_buf_index = AMediaCodec_dequeueInputBuffer(decoder->codec, 100); // TODO: lower timeout?
|
||||
ssize_t codec_buf_index = AMediaCodec_dequeueInputBuffer(decoder->codec, INPUT_BUFFER_TIMEOUT_MS * 1000);
|
||||
if(codec_buf_index < 0)
|
||||
{
|
||||
// TODO: handle better
|
||||
CHIAKI_LOGE(decoder->log, "Failed to get input buffer");
|
||||
// TODO: report corrupt
|
||||
goto beach;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package com.metallic.chiaki.stream
|
||||
|
||||
import android.graphics.SurfaceTexture
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Surface
|
||||
import android.view.SurfaceHolder
|
||||
import android.view.TextureView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
|
@ -39,23 +42,28 @@ class StreamActivity : AppCompatActivity()
|
|||
viewModel.init(connectInfo)
|
||||
}
|
||||
|
||||
surfaceView.holder.addCallback(object: SurfaceHolder.Callback {
|
||||
override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int)
|
||||
textureView.surfaceTextureListener = object: TextureView.SurfaceTextureListener {
|
||||
override fun onSurfaceTextureAvailable(surface: SurfaceTexture, width: Int, height: Int)
|
||||
{
|
||||
Log.i("StreamActivity", "surfaceChanged")
|
||||
if(viewModel.surfaceTexture != null)
|
||||
return
|
||||
viewModel.surfaceTexture = surface
|
||||
viewModel.session?.setSurface(Surface(surface))
|
||||
}
|
||||
|
||||
override fun surfaceDestroyed(holder: SurfaceHolder)
|
||||
override fun onSurfaceTextureDestroyed(surface: SurfaceTexture): Boolean
|
||||
{
|
||||
Log.i("StreamActivity", "surfaceDestroyed!!!!!")
|
||||
// return false if we want to keep the surface texture
|
||||
return viewModel.surfaceTexture == null
|
||||
}
|
||||
|
||||
override fun surfaceCreated(holder: SurfaceHolder)
|
||||
{
|
||||
Log.i("StreamActivity", "surfaceCreated")
|
||||
viewModel.session?.setSurface(holder.surface)
|
||||
}
|
||||
})
|
||||
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture, width: Int, height: Int) {}
|
||||
override fun onSurfaceTextureUpdated(surface: SurfaceTexture) {}
|
||||
}
|
||||
|
||||
val surfaceTexture = viewModel.surfaceTexture
|
||||
if(surfaceTexture != null)
|
||||
textureView.surfaceTexture = surfaceTexture
|
||||
|
||||
viewModel.state.observe(this, Observer {
|
||||
stateTextView.text = "$it"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.metallic.chiaki.stream
|
||||
|
||||
import android.graphics.SurfaceTexture
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
|
@ -22,6 +23,8 @@ class StreamViewModel: ViewModel()
|
|||
private val _state = MutableLiveData<StreamState>(StreamStateIdle)
|
||||
val state: LiveData<StreamState> get() = _state
|
||||
|
||||
var surfaceTexture: SurfaceTexture? = null
|
||||
|
||||
fun init(connectInfo: ConnectInfo)
|
||||
{
|
||||
if(isInitialized)
|
||||
|
@ -54,5 +57,6 @@ class StreamViewModel: ViewModel()
|
|||
super.onCleared()
|
||||
session?.stop()
|
||||
session?.dispose()
|
||||
surfaceTexture?.release()
|
||||
}
|
||||
}
|
|
@ -6,8 +6,8 @@
|
|||
android:layout_height="match_parent"
|
||||
tools:context=".stream.StreamActivity">
|
||||
|
||||
<SurfaceView
|
||||
android:id="@+id/surfaceView"
|
||||
<TextureView
|
||||
android:id="@+id/textureView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/stateTextView"
|
||||
|
@ -17,7 +17,7 @@
|
|||
android:id="@+id/stateTextView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/surfaceView"
|
||||
app:layout_constraintTop_toBottomOf="@id/textureView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
Add table
Add a link
Reference in a new issue