diff options
author | Lajos Molnar <lajos@google.com> | 2015-07-01 16:35:49 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2015-07-16 17:09:20 -0700 |
commit | d08debcf42d820fa8ef9916077a7bfc0a36f2db5 (patch) | |
tree | 4923d9a9db4571a465e7b7b678b621c247b973cb /media/jni/android_media_MediaSync.cpp | |
parent | 6f561a24c97d25a858cf98eef5c502ef8d80cfc1 (diff) |
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
Diffstat (limited to 'media/jni/android_media_MediaSync.cpp')
-rw-r--r-- | media/jni/android_media_MediaSync.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaSync.cpp b/media/jni/android_media_MediaSync.cpp index 8e0ed641eb0d..893c41472e07 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<JMediaSync> sync = getMediaSync(env, thiz); + if (sync == NULL) { + throwExceptionAsNecessary(env, INVALID_OPERATION); + return; + } + + sync->flush(); +} + static void android_media_MediaSync_native_init(JNIEnv *env) { ScopedLocalRef<jclass> 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 }, |