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

Commit 079fa968 authored by Chong Zhang's avatar Chong Zhang
Browse files

change onData() to take byte array of raw data

conversion to UTF-8 if necessary will be handled by the renderer.

Bug: 15470448
Change-Id: I6d4a5e29e6af07f5c031197ea424f8f8e53cd05b
parent 54f6e80d
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