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

Commit 86cdd73d authored by Chong Zhang's avatar Chong Zhang Committed by Android (Google) Code Review
Browse files

Merge "change onData() to take byte array of raw data"

parents d16f3be4 079fa968
Loading
Loading
Loading
Loading
+36 −13
Original line number Diff line number Diff line
@@ -1649,8 +1649,8 @@ public class MediaPlayer implements SubtitleController.Listener
                mFormat = MediaFormat.createSubtitleFormat(
                    MEDIA_MIMETYPE_TEXT_SUBRIP, language);
            } else if (mTrackType == MEDIA_TRACK_TYPE_SUBTITLE) {
                mFormat = MediaFormat.createSubtitleFormat(
                    MEDIA_MIMETYPE_TEXT_VTT, language);
                String mime = in.readString();
                mFormat = MediaFormat.createSubtitleFormat(mime, language);
                mFormat.setInteger(MediaFormat.KEY_IS_AUTOSELECT, in.readInt());
                mFormat.setInteger(MediaFormat.KEY_IS_DEFAULT, in.readInt());
                mFormat.setInteger(MediaFormat.KEY_IS_FORCED_SUBTITLE, in.readInt());
@@ -1683,12 +1683,40 @@ public class MediaPlayer implements SubtitleController.Listener
            dest.writeString(getLanguage());

            if (mTrackType == MEDIA_TRACK_TYPE_SUBTITLE) {
                dest.writeString(mFormat.getString(MediaFormat.KEY_MIME));
                dest.writeInt(mFormat.getInteger(MediaFormat.KEY_IS_AUTOSELECT));
                dest.writeInt(mFormat.getInteger(MediaFormat.KEY_IS_DEFAULT));
                dest.writeInt(mFormat.getInteger(MediaFormat.KEY_IS_FORCED_SUBTITLE));
            }
        }

        @Override
        public String toString() {
            StringBuilder out = new StringBuilder(128);
            out.append(getClass().getName());
            out.append('{');
            switch (mTrackType) {
            case MEDIA_TRACK_TYPE_VIDEO:
                out.append("VIDEO");
                break;
            case MEDIA_TRACK_TYPE_AUDIO:
                out.append("AUDIO");
                break;
            case MEDIA_TRACK_TYPE_TIMEDTEXT:
                out.append("TIMEDTEXT");
                break;
            case MEDIA_TRACK_TYPE_SUBTITLE:
                out.append("SUBTITLE");
                break;
            default:
                out.append("UNKNOWN");
                break;
            }
            out.append(", " + mFormat.toString());
            out.append("}");
            return out.toString();
        }

        /**
         * Used to read a TrackInfo from a Parcel.
         */
@@ -1792,16 +1820,11 @@ public class MediaPlayer implements SubtitleController.Listener
            }
            SubtitleTrack track = mInbandSubtitleTracks[index];
            if (track != null) {
                try {
                long runID = data.getStartTimeUs() + 1;
                    // TODO: move conversion into track
                    track.onData(new String(data.getData(), "UTF-8"), true /* eos */, runID);
                track.onData(data.getData(), true /* eos */, runID);
                track.setRunDiscardTimeMs(
                        runID,
                        (data.getStartTimeUs() + data.getDurationUs()) / 1000);
                } catch (java.io.UnsupportedEncodingException e) {
                    Log.w(TAG, "subtitle data for track " + index + " is not UTF-8 encoded: " + e);
                }
            }
        }
    };
@@ -1872,7 +1895,7 @@ public class MediaPlayer implements SubtitleController.Listener
                }
                scanner.close();
                mOutOfBandSubtitleTracks.add(track);
                track.onData(contents, true /* eos */, ~0 /* runID: keep forever */);
                track.onData(contents.getBytes(), true /* eos */, ~0 /* runID: keep forever */);
                return MEDIA_INFO_EXTERNAL_METADATA_UPDATE;
            }

+2 −4
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ public abstract class SubtitleTrack implements MediaTimeProvider.OnMediaTimeList
     * indicating the last section of the run.  Calls from different
     * runs must not be intermixed.
     *
     * @param data
     * @param data subtitle data byte buffer
     * @param eos true if this is the last section of the run.
     * @param runID mostly-unique ID for this run of data.  Subtitle cues
     *              with runID of 0 are discarded immediately after
@@ -92,10 +92,8 @@ public abstract class SubtitleTrack implements MediaTimeProvider.OnMediaTimeList
     *              with other runID-s are discarded at the end of the
     *              run, which defaults to the latest timestamp of
     *              any of its cues (with this runID).
     *
     * TODO use ByteBuffer
     */
    public abstract void onData(String data, boolean eos, long runID);
    public abstract void onData(byte[] data, boolean eos, long runID);

    /**
     * Called when adding the subtitle rendering widget to the view hierarchy,
+27 −20
Original line number Diff line number Diff line
@@ -563,7 +563,11 @@ class TtmlTrack extends SubtitleTrack implements TtmlNodeListener {
    }

    @Override
    public void onData(String data, boolean eos, long runID) {
    public void onData(byte[] data, boolean eos, long runID) {
        try {
            // TODO: handle UTF-8 conversion properly
            String str = new String(data, "UTF-8");

            // implement intermixing restriction for TTML.
            synchronized(mParser) {
                if (mCurrentRunID != null && runID != mCurrentRunID) {
@@ -572,7 +576,7 @@ class TtmlTrack extends SubtitleTrack implements TtmlNodeListener {
                            " in progress.  Cannot process run #" + runID);
                }
                mCurrentRunID = runID;
            mParsingData += data;
                mParsingData += str;
                if (eos) {
                    try {
                        mParser.parse(mParsingData, mCurrentRunID);
@@ -586,6 +590,9 @@ class TtmlTrack extends SubtitleTrack implements TtmlNodeListener {
                    mCurrentRunID = null;
                }
            }
        } catch (java.io.UnsupportedEncodingException e) {
            Log.w(TAG, "subtitle data is not UTF-8 encoded: " + e);
        }
    }

    @Override
+21 −15
Original line number Diff line number Diff line
@@ -1001,7 +1001,10 @@ class WebVttTrack extends SubtitleTrack implements WebVttCueListener {
    }

    @Override
    public void onData(String data, boolean eos, long runID) {
    public void onData(byte[] data, boolean eos, long runID) {
        try {
            String str = new String(data, "UTF-8");

            // implement intermixing restriction for WebVTT only for now
            synchronized(mParser) {
                if (mCurrentRunID != null && runID != mCurrentRunID) {
@@ -1010,7 +1013,7 @@ class WebVttTrack extends SubtitleTrack implements WebVttCueListener {
                            " in progress.  Cannot process run #" + runID);
                }
                mCurrentRunID = runID;
            mParser.parse(data);
                mParser.parse(str);
                if (eos) {
                    finishedRun(runID);
                    mParser.eos();
@@ -1018,6 +1021,9 @@ class WebVttTrack extends SubtitleTrack implements WebVttCueListener {
                    mCurrentRunID = null;
                }
            }
        } catch (java.io.UnsupportedEncodingException e) {
            Log.w(TAG, "subtitle data is not UTF-8 encoded: " + e);
        }
    }

    @Override