Loading media/java/android/media/MediaSync.java +6 −2 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.view.Surface; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; import java.util.concurrent.TimeUnit; import java.util.LinkedList; import java.util.List; Loading Loading @@ -586,8 +587,9 @@ final public class MediaSync { audioBuffer.mSizeInBytes -= sizeWritten; } // TODO: wait time depends on fullness of audio track. postRenderAudio(10); long pendingTimeMs = TimeUnit.MICROSECONDS.toMillis( native_getPlayTimeForPendingAudioFrames()); postRenderAudio(pendingTimeMs / 2); } } }, delayMillis); Loading @@ -596,6 +598,8 @@ final public class MediaSync { private native final void native_updateQueuedAudioData( int sizeInBytes, long presentationTimeUs); private native final long native_getPlayTimeForPendingAudioFrames(); private final void postReturnByteBuffer(@NonNull final AudioBuffer audioBuffer) { synchronized(mCallbackLock) { if (mCallbackHandler != null) { Loading media/jni/android_media_MediaSync.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ status_t JMediaSync::updateQueuedAudioData( return mSync->updateQueuedAudioData(sizeInBytes, presentationTimeUs); } status_t JMediaSync::getPlayTimeForPendingAudioFrames(int64_t *outTimeUs) { return mSync->getPlayTimeForPendingAudioFrames(outTimeUs); } } // namespace android //////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -268,6 +272,21 @@ static jboolean android_media_MediaSync_native_getTimestamp( return JNI_TRUE; } static jlong android_media_MediaSync_native_getPlayTimeForPendingAudioFrames( JNIEnv *env, jobject thiz) { sp<JMediaSync> sync = getMediaSync(env, thiz); if (sync == NULL) { throwExceptionAsNecessary(env, INVALID_OPERATION); } int64_t playTimeUs = 0; status_t err = sync->getPlayTimeForPendingAudioFrames(&playTimeUs); if (err != NO_ERROR) { throwExceptionAsNecessary(env, err); } return (jlong)playTimeUs; } static void android_media_MediaSync_setSyncSettings(JNIEnv *env, jobject thiz, jobject settings) { Loading Loading @@ -387,6 +406,10 @@ static JNINativeMethod gMethods[] = { "(Landroid/media/MediaTimestamp;)Z", (void *)android_media_MediaSync_native_getTimestamp }, { "native_getPlayTimeForPendingAudioFrames", "()J", (void *)android_media_MediaSync_native_getPlayTimeForPendingAudioFrames }, { "native_init", "()V", (void *)android_media_MediaSync_native_init }, { "native_setup", "()V", (void *)android_media_MediaSync_native_setup }, Loading media/jni/android_media_MediaSync.h +2 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ struct JMediaSync : public RefBase { status_t setPlaybackRate(float rate); status_t getPlayTimeForPendingAudioFrames(int64_t *outTimeUs); sp<const MediaClock> getMediaClock(); protected: Loading Loading
media/java/android/media/MediaSync.java +6 −2 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.view.Surface; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; import java.util.concurrent.TimeUnit; import java.util.LinkedList; import java.util.List; Loading Loading @@ -586,8 +587,9 @@ final public class MediaSync { audioBuffer.mSizeInBytes -= sizeWritten; } // TODO: wait time depends on fullness of audio track. postRenderAudio(10); long pendingTimeMs = TimeUnit.MICROSECONDS.toMillis( native_getPlayTimeForPendingAudioFrames()); postRenderAudio(pendingTimeMs / 2); } } }, delayMillis); Loading @@ -596,6 +598,8 @@ final public class MediaSync { private native final void native_updateQueuedAudioData( int sizeInBytes, long presentationTimeUs); private native final long native_getPlayTimeForPendingAudioFrames(); private final void postReturnByteBuffer(@NonNull final AudioBuffer audioBuffer) { synchronized(mCallbackLock) { if (mCallbackHandler != null) { Loading
media/jni/android_media_MediaSync.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ status_t JMediaSync::updateQueuedAudioData( return mSync->updateQueuedAudioData(sizeInBytes, presentationTimeUs); } status_t JMediaSync::getPlayTimeForPendingAudioFrames(int64_t *outTimeUs) { return mSync->getPlayTimeForPendingAudioFrames(outTimeUs); } } // namespace android //////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -268,6 +272,21 @@ static jboolean android_media_MediaSync_native_getTimestamp( return JNI_TRUE; } static jlong android_media_MediaSync_native_getPlayTimeForPendingAudioFrames( JNIEnv *env, jobject thiz) { sp<JMediaSync> sync = getMediaSync(env, thiz); if (sync == NULL) { throwExceptionAsNecessary(env, INVALID_OPERATION); } int64_t playTimeUs = 0; status_t err = sync->getPlayTimeForPendingAudioFrames(&playTimeUs); if (err != NO_ERROR) { throwExceptionAsNecessary(env, err); } return (jlong)playTimeUs; } static void android_media_MediaSync_setSyncSettings(JNIEnv *env, jobject thiz, jobject settings) { Loading Loading @@ -387,6 +406,10 @@ static JNINativeMethod gMethods[] = { "(Landroid/media/MediaTimestamp;)Z", (void *)android_media_MediaSync_native_getTimestamp }, { "native_getPlayTimeForPendingAudioFrames", "()J", (void *)android_media_MediaSync_native_getPlayTimeForPendingAudioFrames }, { "native_init", "()V", (void *)android_media_MediaSync_native_init }, { "native_setup", "()V", (void *)android_media_MediaSync_native_setup }, Loading
media/jni/android_media_MediaSync.h +2 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ struct JMediaSync : public RefBase { status_t setPlaybackRate(float rate); status_t getPlayTimeForPendingAudioFrames(int64_t *outTimeUs); sp<const MediaClock> getMediaClock(); protected: Loading