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

Commit e341d4a8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer2: move SubtitleData listener into EventCallback"

parents dbc26e0e ba145fec
Loading
Loading
Loading
Loading
+15 −39
Original line number Diff line number Diff line
@@ -883,15 +883,6 @@ public abstract class MediaPlayer2 implements SubtitleController.Listener
    // This is a synchronous call.
    public abstract void clearPendingCommands();

    /**
     * Stops playback after playback has been started or paused.
     *
     * @throws IllegalStateException if the internal player engine has not been
     * initialized.
     * @hide
     */
    public void stop() { }

    //--------------------------------------------------------------------------
    // Explicit Routing
    //--------------------
@@ -1714,7 +1705,7 @@ public abstract class MediaPlayer2 implements SubtitleController.Listener
         * @param dsd the DataSourceDesc of this data source
         * @param timestamp the new media clock.
         */
        public void onMediaTimeChanged(
        public void onMediaTimeDiscontinuity(
                MediaPlayer2 mp, DataSourceDesc dsd, MediaTimestamp timestamp) { }

        /**
@@ -1725,44 +1716,34 @@ public abstract class MediaPlayer2 implements SubtitleController.Listener
         *        {@link #notifyWhenCommandLabelReached(Object)}.
         */
        public void onCommandLabelReached(MediaPlayer2 mp, @NonNull Object label) { }

        /**
         * Called when when a player subtitle track has new subtitle data available.
         * @param mp the player that reports the new subtitle data
         * @param dsd the DataSourceDesc of this data source
         * @param data the subtitle data
         */
        public void onSubtitleData(
                MediaPlayer2 mp, DataSourceDesc dsd, @NonNull SubtitleData data) { }
    }

    /**
     * Sets the callback to be invoked when the media source is ready for playback.
     *
     * @param eventCallback the callback that will be run
     * @param executor the executor through which the callback should be invoked
     * @param eventCallback the callback that will be run
     */
    // This is a synchronous call.
    public abstract void setEventCallback(@NonNull @CallbackExecutor Executor executor,
    public abstract void registerEventCallback(@NonNull @CallbackExecutor Executor executor,
            @NonNull EventCallback eventCallback);

    /**
     * Clears the {@link EventCallback}.
     */
    // This is a synchronous call.
    public abstract void clearEventCallback();

    /**
     * Interface definition of a callback to be invoked when a
     * track has data available.
     * Unregisters the {@link EventCallback}.
     *
     * @hide
     */
    public interface OnSubtitleDataListener
    {
        public void onSubtitleData(MediaPlayer2 mp, SubtitleData data);
    }

    /**
     * Register a callback to be invoked when a track has data available.
     *
     * @param listener the callback that will be run
     *
     * @hide
     * @param eventCallback the callback to be unregistered
     */
    // This is a synchronous call.
    public void setOnSubtitleDataListener(OnSubtitleDataListener listener) { }
    public abstract void unregisterEventCallback(EventCallback eventCallback);


    /* Do not change these values without updating their counterparts
@@ -2056,11 +2037,6 @@ public abstract class MediaPlayer2 implements SubtitleController.Listener
     */
    public static final int CALL_COMPLETED_SET_PLAYBACK_PARAMS = 24;

    /** The player just completed a call {@link #setPlaybackSpeed}.
     * @see android.media.MediaPlayer2.EventCallback#onCallCompleted
     */
    public static final int CALL_COMPLETED_SET_PLAYBACK_SPEED = 25;

    /** The player just completed a call {@link #setPlayerVolume}.
     * @see android.media.MediaPlayer2.EventCallback#onCallCompleted
     */
+20 −43
Original line number Diff line number Diff line
@@ -998,20 +998,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {

    private native int _getAudioStreamType() throws IllegalStateException;

    /**
     * Stops playback after playback has been started or paused.
     *
     * @throws IllegalStateException if the internal player engine has not been
     * initialized.
     * #hide
     */
    @Override
    public void stop() {
        stayAwake(false);
        _stop();
    }

    private native void _stop() throws IllegalStateException;

    //--------------------------------------------------------------------------
    // Explicit Routing
@@ -2059,9 +2045,9 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
    private int mSelectedSubtitleTrackIndex = -1;
    private Vector<InputStream> mOpenSubtitleSources;

    private OnSubtitleDataListener mSubtitleDataListener = new OnSubtitleDataListener() {
    private EventCallback mSubtitleDataCallback = new EventCallback() {
        @Override
        public void onSubtitleData(MediaPlayer2 mp, SubtitleData data) {
        public void onSubtitleData(MediaPlayer2 mp, DataSourceDesc dsd, SubtitleData data) {
            int index = data.getTrackIndex();
            synchronized (mIndexTrackPairs) {
                for (Pair<Integer, SubtitleTrack> p : mIndexTrackPairs) {
@@ -2085,7 +2071,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
            }
            mSelectedSubtitleTrackIndex = -1;
        }
        setOnSubtitleDataListener(null);
        unregisterEventCallback(mSubtitleDataCallback);
        if (track == null) {
            return;
        }
@@ -2105,7 +2091,8 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
                selectOrDeselectInbandTrack(mSelectedSubtitleTrackIndex, true);
            } catch (IllegalStateException e) {
            }
            setOnSubtitleDataListener(mSubtitleDataListener);
            final Executor executor = (runnable) -> mEventHandler.post(runnable);
            registerEventCallback(executor, mSubtitleDataCallback);
        }
        // no need to select out-of-band tracks
    }
@@ -2628,7 +2615,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
            mTimeProvider.close();
            mTimeProvider = null;
        }
        mOnSubtitleDataListener = null;

        // Modular DRM clean up
        mOnDrmConfigHelper = null;
@@ -2969,7 +2955,8 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {

                synchronized (mEventCbLock) {
                    for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) {
                        cb.first.execute(() -> cb.second.onTimedText(mMediaPlayer, mCurrentDSD, text));
                        cb.first.execute(() -> cb.second.onTimedText(
                                mMediaPlayer, mCurrentDSD, text));
                    }
                }
                return;
@@ -2977,15 +2964,16 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {

            case MEDIA_SUBTITLE_DATA:
            {
                OnSubtitleDataListener onSubtitleDataListener = mOnSubtitleDataListener;
                if (onSubtitleDataListener == null) {
                    return;
                }
                if (msg.obj instanceof Parcel) {
                    Parcel parcel = (Parcel) msg.obj;
                    SubtitleData data = new SubtitleData(parcel);
                    parcel.recycle();
                    onSubtitleDataListener.onSubtitleData(mMediaPlayer, data);
                    synchronized (mEventCbLock) {
                        for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) {
                            cb.first.execute(() -> cb.second.onSubtitleData(
                                    mMediaPlayer, mCurrentDSD, data));
                        }
                    }
                }
                return;
            }
@@ -3118,7 +3106,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
     * @param executor the executor through which the callback should be invoked
     */
    @Override
    public void setEventCallback(@NonNull @CallbackExecutor Executor executor,
    public void registerEventCallback(@NonNull @CallbackExecutor Executor executor,
            @NonNull EventCallback eventCallback) {
        if (eventCallback == null) {
            throw new IllegalArgumentException("Illegal null EventCallback");
@@ -3136,26 +3124,15 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
     * Clears the {@link EventCallback}.
     */
    @Override
    public void clearEventCallback() {
    public void unregisterEventCallback(EventCallback eventCallback) {
        synchronized (mEventCbLock) {
            mEventCallbackRecords.clear();
            for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) {
                if (cb.second == eventCallback) {
                    mEventCallbackRecords.remove(cb);
                }
            }
        }

    /**
     * Register a callback to be invoked when a track has data available.
     *
     * @param listener the callback that will be run
     *
     * @hide
     */
    @Override
    public void setOnSubtitleDataListener(OnSubtitleDataListener listener) {
        mOnSubtitleDataListener = listener;
    }

    private OnSubtitleDataListener mOnSubtitleDataListener;


    // Modular DRM begin

+0 −13
Original line number Diff line number Diff line
@@ -567,18 +567,6 @@ android_media_MediaPlayer2_start(JNIEnv *env, jobject thiz)
    process_media_player_call( env, thiz, mp->start(), NULL, NULL );
}

static void
android_media_MediaPlayer2_stop(JNIEnv *env, jobject thiz)
{
    ALOGV("stop");
    sp<MediaPlayer2> mp = getMediaPlayer(env, thiz);
    if (mp == NULL ) {
        jniThrowException(env, "java/lang/IllegalStateException", NULL);
        return;
    }
    process_media_player_call( env, thiz, mp->stop(), NULL, NULL );
}

static void
android_media_MediaPlayer2_pause(JNIEnv *env, jobject thiz)
{
@@ -1501,7 +1489,6 @@ static const JNINativeMethod gMethods[] = {
    {"_setBufferingParams", "(Landroid/media/BufferingParams;)V", (void *)android_media_MediaPlayer2_setBufferingParams},
    {"_prepare",            "()V",                              (void *)android_media_MediaPlayer2_prepare},
    {"_start",              "()V",                              (void *)android_media_MediaPlayer2_start},
    {"_stop",               "()V",                              (void *)android_media_MediaPlayer2_stop},
    {"native_getState",     "()I",                              (void *)android_media_MediaPlayer2_getState},
    {"getVideoWidth",       "()I",                              (void *)android_media_MediaPlayer2_getVideoWidth},
    {"getVideoHeight",      "()I",                              (void *)android_media_MediaPlayer2_getVideoHeight},