From d08debcf42d820fa8ef9916077a7bfc0a36f2db5 Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Wed, 1 Jul 2015 16:35:49 -0700 Subject: MediaSync: fix flush handling and deadlock - clear pending video frames - flush audio track - reset clock - restart audio track after flush - don't hold lock during callback Bug: 22234976 Change-Id: I681df950b67d7f9f77a9c5783279f1c8c91be856 --- media/jni/android_media_MediaSync.cpp | 16 ++++++++++++++++ media/jni/android_media_MediaSync.h | 2 ++ 2 files changed, 18 insertions(+) (limited to 'media/jni') diff --git a/media/jni/android_media_MediaSync.cpp b/media/jni/android_media_MediaSync.cpp index 8e0ed64..893c414 100644 --- a/media/jni/android_media_MediaSync.cpp +++ b/media/jni/android_media_MediaSync.cpp @@ -102,6 +102,10 @@ float JMediaSync::getVideoFrameRate() { return mSync->getVideoFrameRate(); } +void JMediaSync::flush() { + mSync->flush(); +} + status_t JMediaSync::updateQueuedAudioData( int sizeInBytes, int64_t presentationTimeUs) { return mSync->updateQueuedAudioData(sizeInBytes, presentationTimeUs); @@ -464,6 +468,16 @@ static jobject android_media_MediaSync_getSyncParams(JNIEnv *env, jobject thiz) return scs.asJobject(env, gSyncParamsFields); } +static void android_media_MediaSync_native_flush(JNIEnv *env, jobject thiz) { + sp sync = getMediaSync(env, thiz); + if (sync == NULL) { + throwExceptionAsNecessary(env, INVALID_OPERATION); + return; + } + + sync->flush(); +} + static void android_media_MediaSync_native_init(JNIEnv *env) { ScopedLocalRef clazz(env, env->FindClass("android/media/MediaSync")); CHECK(clazz.get() != NULL); @@ -524,6 +538,8 @@ static JNINativeMethod gMethods[] = { "()J", (void *)android_media_MediaSync_native_getPlayTimeForPendingAudioFrames }, + { "native_flush", "()V", (void *)android_media_MediaSync_native_flush }, + { "native_init", "()V", (void *)android_media_MediaSync_native_init }, { "native_setup", "()V", (void *)android_media_MediaSync_native_setup }, diff --git a/media/jni/android_media_MediaSync.h b/media/jni/android_media_MediaSync.h index 22c77c7..6f80885 100644 --- a/media/jni/android_media_MediaSync.h +++ b/media/jni/android_media_MediaSync.h @@ -49,6 +49,8 @@ struct JMediaSync : public RefBase { status_t setVideoFrameRateHint(float rate); float getVideoFrameRate(); + void flush(); + sp getMediaClock(); protected: -- cgit v1.1