Commit 703cfc64 authored by Adrien Maglo's avatar Adrien Maglo

mediacodec: wait to have the first frame successfully decoded to set the started flag

This is an attempt to fix a common crash in closeDecoder() we did not manage to reproduce with our devices.
parent 48ae43a9
...@@ -523,7 +523,14 @@ static int OpenDecoder(vlc_object_t *p_this) ...@@ -523,7 +523,14 @@ static int OpenDecoder(vlc_object_t *p_this)
(*env)->ExceptionClear(env); (*env)->ExceptionClear(env);
goto error; goto error;
} }
p_sys->started = true;
/* WARNING: we should normally set the started flag here, just after the start() call.
However, as libstagefright is asynchronous and is not entirely initialized after
the start() call, we wait to have successfully decoded the first frame before
setting this flag in order to try to avoid a crash happening during the module
CloseDecoder() function.
Note: calling release() without having called stop() does not seem to be an issue. */
//p_sys->started = true;
p_sys->input_buffers = (*env)->CallObjectMethod(env, p_sys->codec, p_sys->get_input_buffers); p_sys->input_buffers = (*env)->CallObjectMethod(env, p_sys->codec, p_sys->get_input_buffers);
p_sys->output_buffers = (*env)->CallObjectMethod(env, p_sys->codec, p_sys->get_output_buffers); p_sys->output_buffers = (*env)->CallObjectMethod(env, p_sys->codec, p_sys->get_output_buffers);
...@@ -941,6 +948,7 @@ static picture_t *DecodeVideo(decoder_t *p_dec, block_t **pp_block) ...@@ -941,6 +948,7 @@ static picture_t *DecodeVideo(decoder_t *p_dec, block_t **pp_block)
(*env)->CallVoidMethod(env, p_sys->codec, p_sys->queue_input_buffer, index, 0, size, ts, 0); (*env)->CallVoidMethod(env, p_sys->codec, p_sys->queue_input_buffer, index, 0, size, ts, 0);
(*env)->DeleteLocalRef(env, buf); (*env)->DeleteLocalRef(env, buf);
p_sys->decoded = true; p_sys->decoded = true;
p_sys->started = true;
break; break;
} }
if (!p_pic) if (!p_pic)
......
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