summaryrefslogtreecommitdiff
path: root/media/jni/android_media_MediaExtractor.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-04-25 15:57:43 -0700
committerAndreas Huber <andih@google.com>2012-04-26 10:43:31 -0700
commitf2855b3df5994e165b29025c4c49d8e7d634c034 (patch)
treef9350506e0775e657e79319c744072087831d7a8 /media/jni/android_media_MediaExtractor.cpp
parent9b593a67f1e93896af4ef1050e485fb84bd5dd4f (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.cpp41
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 },