Commit 9d997cdf authored by Thomas Guillem's avatar Thomas Guillem Committed by Jean-Baptiste Kempf

mediacodec: factorize release_output_buffer

Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent a2ea54f0
...@@ -709,6 +709,23 @@ static void CloseDecoder(vlc_object_t *p_this) ...@@ -709,6 +709,23 @@ static void CloseDecoder(vlc_object_t *p_this)
free(p_sys); free(p_sys);
} }
/*****************************************************************************
* ReleaseOutputBuffer
*****************************************************************************/
static int ReleaseOutputBuffer(decoder_t *p_dec, JNIEnv *env, int i_index,
bool b_render)
{
decoder_sys_t *p_sys = p_dec->p_sys;
(*env)->CallVoidMethod(env, p_sys->codec, p_sys->release_output_buffer,
i_index, b_render);
if (CHECK_EXCEPTION()) {
msg_Err(p_dec, "Exception in MediaCodec.releaseOutputBuffer");
return -1;
}
return 0;
}
/***************************************************************************** /*****************************************************************************
* vout callbacks * vout callbacks
*****************************************************************************/ *****************************************************************************/
...@@ -716,7 +733,6 @@ static void UnlockPicture(picture_t* p_pic, bool b_render) ...@@ -716,7 +733,6 @@ static void UnlockPicture(picture_t* p_pic, bool b_render)
{ {
picture_sys_t *p_picsys = p_pic->p_sys; picture_sys_t *p_picsys = p_pic->p_sys;
decoder_t *p_dec = p_picsys->priv.hw.p_dec; decoder_t *p_dec = p_picsys->priv.hw.p_dec;
decoder_sys_t *p_sys = p_dec->p_sys;
if (!p_picsys->priv.hw.b_valid) if (!p_picsys->priv.hw.b_valid)
return; return;
...@@ -735,10 +751,7 @@ static void UnlockPicture(picture_t* p_pic, bool b_render) ...@@ -735,10 +751,7 @@ static void UnlockPicture(picture_t* p_pic, bool b_render)
/* Release the MediaCodec buffer. */ /* Release the MediaCodec buffer. */
JNIEnv *env = NULL; JNIEnv *env = NULL;
jni_attach_thread(&env, THREAD_NAME); jni_attach_thread(&env, THREAD_NAME);
(*env)->CallVoidMethod(env, p_sys->codec, p_sys->release_output_buffer, i_index, b_render); ReleaseOutputBuffer(p_dec, env, i_index, b_render);
if (CHECK_EXCEPTION())
msg_Err(p_dec, "Exception in MediaCodec.releaseOutputBuffer (DisplayBuffer)");
jni_detach_thread(); jni_detach_thread();
p_picsys->priv.hw.b_valid = false; p_picsys->priv.hw.b_valid = false;
...@@ -847,11 +860,8 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, picture_t **pp_pic, jlong ti ...@@ -847,11 +860,8 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, picture_t **pp_pic, jlong ti
if (index >= 0) { if (index >= 0) {
if (!p_sys->pixel_format) { if (!p_sys->pixel_format) {
msg_Warn(p_dec, "Buffers returned before output format is set, dropping frame"); msg_Warn(p_dec, "Buffers returned before output format is set, dropping frame");
(*env)->CallVoidMethod(env, p_sys->codec, p_sys->release_output_buffer, index, false); if (ReleaseOutputBuffer(p_dec, env, index, false) != 0)
if (CHECK_EXCEPTION()) {
msg_Err(p_dec, "Exception in MediaCodec.releaseOutputBuffer");
return -1; return -1;
}
continue; continue;
} }
...@@ -861,12 +871,8 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, picture_t **pp_pic, jlong ti ...@@ -861,12 +871,8 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, picture_t **pp_pic, jlong ti
picture_t *p_pic = *pp_pic; picture_t *p_pic = *pp_pic;
picture_sys_t *p_picsys = p_pic->p_sys; picture_sys_t *p_picsys = p_pic->p_sys;
int i_prev_index = p_picsys->priv.hw.i_index; int i_prev_index = p_picsys->priv.hw.i_index;
(*env)->CallVoidMethod(env, p_sys->codec, p_sys->release_output_buffer, i_prev_index, false); if (ReleaseOutputBuffer(p_dec, env, i_prev_index, false) != 0)
if (CHECK_EXCEPTION()) {
msg_Err(p_dec, "Exception in MediaCodec.releaseOutputBuffer " \
"(GetOutput, overwriting previous picture)");
return -1; return -1;
}
// No need to lock here since the previous picture was not sent. // No need to lock here since the previous picture was not sent.
InsertInflightPicture(p_dec, NULL, i_prev_index); InsertInflightPicture(p_dec, NULL, i_prev_index);
...@@ -930,11 +936,8 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, picture_t **pp_pic, jlong ti ...@@ -930,11 +936,8 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, picture_t **pp_pic, jlong ti
} }
} else { } else {
msg_Warn(p_dec, "NewPicture failed"); msg_Warn(p_dec, "NewPicture failed");
(*env)->CallVoidMethod(env, p_sys->codec, p_sys->release_output_buffer, index, false); if (ReleaseOutputBuffer(p_dec, env, index, false) != 0)
if (CHECK_EXCEPTION()) {
msg_Err(p_dec, "Exception in MediaCodec.releaseOutputBuffer (GetOutput)");
return -1; return -1;
}
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment