From 5f00a1b2b7b5abfd9bcde8234fee11c70930de17 Mon Sep 17 00:00:00 2001 From: Zhang Rui Date: Tue, 24 Jun 2014 15:54:46 +0800 Subject: [PATCH] android: fix mp.release() and mp.reset() --- ijkmedia/ijkplayer/android/ijkplayer_jni.c | 11 ++++++----- ijkmedia/ijkplayer/ff_ffmsg_queue.h | 5 +++-- ijkmedia/ijkplayer/ff_ffplay.c | 5 +++-- ijkmedia/ijkplayer/ijkplayer.c | 22 ---------------------- ijkmedia/ijkplayer/ijkplayer.h | 1 - 5 files changed, 12 insertions(+), 32 deletions(-) diff --git a/ijkmedia/ijkplayer/android/ijkplayer_jni.c b/ijkmedia/ijkplayer/android/ijkplayer_jni.c index 4b47d16c..06f589d0 100644 --- a/ijkmedia/ijkplayer/android/ijkplayer_jni.c +++ b/ijkmedia/ijkplayer/android/ijkplayer_jni.c @@ -249,18 +249,19 @@ IjkMediaPlayer_release(JNIEnv *env, jobject thiz) ijkmp_dec_ref_p(&mp); } +static void IjkMediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this); static void IjkMediaPlayer_reset(JNIEnv *env, jobject thiz) { MPTRACE("IjkMediaPlayer_reset"); IjkMediaPlayer *mp = jni_get_media_player(env, thiz); - JNI_CHECK_GOTO(mp, env, NULL, "mpjni: reset: null mp", LABEL_RETURN); + if (!mp) + return; - ijkmp_android_set_surface(env, mp, NULL); - ijkmp_reset(mp); + jobject weak_thiz = (jobject) ijkmp_set_weak_thiz(mp, NULL); - LABEL_RETURN: - ijkmp_dec_ref_p(&mp); + IjkMediaPlayer_release(env, thiz); + IjkMediaPlayer_native_setup(env, thiz, weak_thiz); } static void diff --git a/ijkmedia/ijkplayer/ff_ffmsg_queue.h b/ijkmedia/ijkplayer/ff_ffmsg_queue.h index a37879d1..c6ceb8b3 100644 --- a/ijkmedia/ijkplayer/ff_ffmsg_queue.h +++ b/ijkmedia/ijkplayer/ff_ffmsg_queue.h @@ -165,8 +165,6 @@ inline static void msg_queue_flush(MessageQueue *q) inline static void msg_queue_destroy(MessageQueue *q) { msg_queue_flush(q); - SDL_DestroyMutex(q->mutex); - SDL_DestroyCond(q->cond); SDL_LockMutex(q->mutex); while(q->recycle_msg) { @@ -176,6 +174,9 @@ inline static void msg_queue_destroy(MessageQueue *q) av_freep(&msg); } SDL_UnlockMutex(q->mutex); + + SDL_DestroyMutex(q->mutex); + SDL_DestroyCond(q->cond); } inline static void msg_queue_abort(MessageQueue *q) diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index 5f377310..8bef818b 100644 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -166,8 +166,6 @@ static void packet_queue_flush(PacketQueue *q) static void packet_queue_destroy(PacketQueue *q) { packet_queue_flush(q); - SDL_DestroyMutex(q->mutex); - SDL_DestroyCond(q->cond); SDL_LockMutex(q->mutex); while(q->recycle_pkt) { @@ -177,6 +175,9 @@ static void packet_queue_destroy(PacketQueue *q) av_freep(&pkt); } SDL_UnlockMutex(q->mutex); + + SDL_DestroyMutex(q->mutex); + SDL_DestroyCond(q->cond); } static void packet_queue_abort(PacketQueue *q) diff --git a/ijkmedia/ijkplayer/ijkplayer.c b/ijkmedia/ijkplayer/ijkplayer.c index 8673b91a..0b10dc7d 100644 --- a/ijkmedia/ijkplayer/ijkplayer.c +++ b/ijkmedia/ijkplayer/ijkplayer.c @@ -183,28 +183,6 @@ void ijkmp_shutdown(IjkMediaPlayer *mp) return ijkmp_shutdown_l(mp); } -void ijkmp_reset_l(IjkMediaPlayer *mp) -{ - assert(mp); - - ijkmp_shutdown_l(mp); - ffp_reset_internal(mp->ffplayer); - - av_freep(&mp->data_source); - ijkmp_change_state_l(mp, MP_STATE_IDLE); -} - -void ijkmp_reset(IjkMediaPlayer *mp) -{ - assert(mp); - - MPTRACE("ijkmp_reset()\n"); - pthread_mutex_lock(&mp->mutex); - ijkmp_reset_l(mp); - pthread_mutex_unlock(&mp->mutex); - MPTRACE("ijkmp_reset()=void\n"); -} - void ijkmp_inc_ref(IjkMediaPlayer *mp) { assert(mp); diff --git a/ijkmedia/ijkplayer/ijkplayer.h b/ijkmedia/ijkplayer/ijkplayer.h index 0df9f9fe..fbb6283c 100644 --- a/ijkmedia/ijkplayer/ijkplayer.h +++ b/ijkmedia/ijkplayer/ijkplayer.h @@ -173,7 +173,6 @@ int ijkmp_get_state(IjkMediaPlayer *mp); bool ijkmp_is_playing(IjkMediaPlayer *mp); long ijkmp_get_current_position(IjkMediaPlayer *mp); long ijkmp_get_duration(IjkMediaPlayer *mp); -void ijkmp_reset(IjkMediaPlayer *mp); void *ijkmp_set_weak_thiz(IjkMediaPlayer *mp, void *weak_thiz); -- GitLab