Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 250e65c2 authored by Santiago Seifert's avatar Santiago Seifert
Browse files

Add playback session id to MediaExtractor

Bug: 167036690
Test: atest CtsMediaHostTestCases
Change-Id: Id75166a2e5c1bebd236923d5b06d57c317e8de9e
parent b72c15b1
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -21856,7 +21856,7 @@ package android.media {
    ctor public MediaDrmResetException(String);
  }
  public final class MediaExtractor {
  public final class MediaExtractor implements android.media.metrics.PlaybackComponent {
    ctor public MediaExtractor();
    method public boolean advance();
    method protected void finalize();
@@ -21865,6 +21865,7 @@ package android.media {
    method public android.media.MediaExtractor.CasInfo getCasInfo(int);
    method public android.media.DrmInitData getDrmInitData();
    method public android.os.PersistableBundle getMetrics();
    method @NonNull public String getPlaybackId();
    method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo();
    method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo);
    method public int getSampleFlags();
@@ -21886,6 +21887,7 @@ package android.media {
    method public void setDataSource(@NonNull java.io.FileDescriptor) throws java.io.IOException;
    method public void setDataSource(@NonNull java.io.FileDescriptor, long, long) throws java.io.IOException;
    method public void setMediaCas(@NonNull android.media.MediaCas);
    method public void setPlaybackId(@NonNull String);
    method public void unselectTrack(int);
    field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2
    field public static final int SAMPLE_FLAG_PARTIAL_FRAME = 4; // 0x4
+19 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.annotation.Nullable;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.metrics.PlaybackComponent;
import android.net.Uri;
import android.os.IBinder;
import android.os.IHwBinder;
@@ -40,6 +41,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;

@@ -73,8 +75,10 @@ import java.util.stream.Collectors;
 * <p>This class requires the {@link android.Manifest.permission#INTERNET} permission
 * when used with network-based content.
 */
final public class MediaExtractor {
public final class MediaExtractor implements PlaybackComponent {

    public MediaExtractor() {
        mPlaybackId = "";
        native_setup();
    }

@@ -767,6 +771,18 @@ final public class MediaExtractor {
     */
    public native boolean hasCacheReachedEndOfStream();

    @Override
    public void setPlaybackId(@NonNull String playbackId) {
        mPlaybackId = Objects.requireNonNull(playbackId);
        native_setPlaybackId(playbackId);
    }

    @NonNull
    @Override
    public String getPlaybackId() {
        return mPlaybackId;
    }

    /**
     *  Return Metrics data about the current media container.
     *
@@ -784,6 +800,7 @@ final public class MediaExtractor {
        return bundle;
    }

    private native void native_setPlaybackId(String playbackId);
    private native PersistableBundle native_getMetrics();

    private static native final void native_init();
@@ -796,6 +813,7 @@ final public class MediaExtractor {
    }

    private MediaCas mMediaCas;
    private String mPlaybackId;

    private long mNativeContext;

+24 −1
Original line number Diff line number Diff line
@@ -282,7 +282,6 @@ status_t JMediaExtractor::getMetrics(Parcel *reply) const {
    return status;
}


status_t JMediaExtractor::getSampleMeta(sp<MetaData> *sampleMeta) {
    return mImpl->getSampleMeta(sampleMeta);
}
@@ -295,6 +294,10 @@ status_t JMediaExtractor::getAudioPresentations(size_t trackIdx,
        AudioPresentationCollection *presentations) const {
    return mImpl->getAudioPresentations(trackIdx, presentations);
}

status_t JMediaExtractor::setPlaybackId(const String8 &playbackId) {
    return mImpl->setPlaybackId(playbackId);
}
}  // namespace android

////////////////////////////////////////////////////////////////////////////////
@@ -920,6 +923,23 @@ android_media_MediaExtractor_native_getMetrics(JNIEnv * env, jobject thiz)
    return mybundle;
}

static void
android_media_MediaExtractor_native_setPlaybackId(
        JNIEnv * env, jobject thiz, jstring playbackIdJString)
{
    ALOGV("android_media_MediaExtractor_native_setPlaybackId");

    sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz);
    if (extractor == nullptr) {
        jniThrowException(env, "java/lang/IllegalStateException", nullptr);
    }

    const char* playbackId = env->GetStringUTFChars(playbackIdJString, nullptr);
    if (extractor->setPlaybackId(String8(playbackId)) != OK) {
        ALOGE("setPlaybackId failed");
    }
    env->ReleaseStringUTFChars(playbackIdJString, playbackId);
}

static const JNINativeMethod gMethods[] = {
    { "release", "()V", (void *)android_media_MediaExtractor_release },
@@ -990,6 +1010,9 @@ static const JNINativeMethod gMethods[] = {
    {"native_getMetrics",          "()Landroid/os/PersistableBundle;",
      (void *)android_media_MediaExtractor_native_getMetrics},

    { "native_setPlaybackId", "(Ljava/lang/String;)V",
      (void *)android_media_MediaExtractor_native_setPlaybackId},

    { "native_getAudioPresentations", "(I)Ljava/util/List;",
      (void *)android_media_MediaExtractor_getAudioPresentations },
};
+2 −0
Original line number Diff line number Diff line
@@ -70,6 +70,8 @@ struct JMediaExtractor : public RefBase {
    status_t getAudioPresentations(size_t trackIdx,
            AudioPresentationCollection *presentations) const;

    status_t setPlaybackId(const String8& playbackId);

protected:
    virtual ~JMediaExtractor();