diff options
author | Andreas Huber <andih@google.com> | 2012-04-25 15:57:43 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2012-04-26 10:43:31 -0700 |
commit | f2855b3df5994e165b29025c4c49d8e7d634c034 (patch) | |
tree | f9350506e0775e657e79319c744072087831d7a8 /media/jni/android_media_MediaExtractor.cpp | |
parent | 9b593a67f1e93896af4ef1050e485fb84bd5dd4f (diff) |
The MediaExtractor can now unselect tracks and has more control over seeking.
Change-Id: I12c28bf31fe9fb4057352999fa38213ae289a417
related-to-bug: 6276111
Diffstat (limited to 'media/jni/android_media_MediaExtractor.cpp')
-rw-r--r-- | media/jni/android_media_MediaExtractor.cpp | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp index 051833161c23..9e1920ca8dfc 100644 --- a/media/jni/android_media_MediaExtractor.cpp +++ b/media/jni/android_media_MediaExtractor.cpp @@ -96,8 +96,13 @@ status_t JMediaExtractor::selectTrack(size_t index) { return mImpl->selectTrack(index); } -status_t JMediaExtractor::seekTo(int64_t timeUs) { - return mImpl->seekTo(timeUs); +status_t JMediaExtractor::unselectTrack(size_t index) { + return mImpl->unselectTrack(index); +} + +status_t JMediaExtractor::seekTo( + int64_t timeUs, MediaSource::ReadOptions::SeekMode mode) { + return mImpl->seekTo(timeUs, mode); } status_t JMediaExtractor::advance() { @@ -281,8 +286,25 @@ static void android_media_MediaExtractor_selectTrack( } } +static void android_media_MediaExtractor_unselectTrack( + JNIEnv *env, jobject thiz, jint index) { + sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz); + + if (extractor == NULL) { + jniThrowException(env, "java/lang/IllegalStateException", NULL); + return; + } + + status_t err = extractor->unselectTrack(index); + + if (err != OK) { + jniThrowException(env, "java/lang/IllegalArgumentException", NULL); + return; + } +} + static void android_media_MediaExtractor_seekTo( - JNIEnv *env, jobject thiz, jlong timeUs) { + JNIEnv *env, jobject thiz, jlong timeUs, jint mode) { sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz); if (extractor == NULL) { @@ -290,7 +312,13 @@ static void android_media_MediaExtractor_seekTo( return; } - extractor->seekTo(timeUs); + if (mode < MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC + || mode > MediaSource::ReadOptions::SEEK_CLOSEST) { + jniThrowException(env, "java/lang/IllegalArgumentException", NULL); + return; + } + + extractor->seekTo(timeUs, (MediaSource::ReadOptions::SeekMode)mode); } static jboolean android_media_MediaExtractor_advance( @@ -648,7 +676,10 @@ static JNINativeMethod gMethods[] = { { "selectTrack", "(I)V", (void *)android_media_MediaExtractor_selectTrack }, - { "seekTo", "(J)V", (void *)android_media_MediaExtractor_seekTo }, + { "unselectTrack", "(I)V", + (void *)android_media_MediaExtractor_unselectTrack }, + + { "seekTo", "(JI)V", (void *)android_media_MediaExtractor_seekTo }, { "advance", "()Z", (void *)android_media_MediaExtractor_advance }, |