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

Commit 162ee49e authored by Gloria Wang's avatar Gloria Wang
Browse files

- Add another parameter in notify() to be able to send timed text sample

through listener during video playback.
- Add OnTimedTextListener in the MediaPlayer
For feature request 800939.

Change-Id: I65072c27acb4c0037109a72be38c73e9f667420f
parent a58ee55f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ struct MyClient : public BnMediaPlayerClient {
        : mEOS(false) {
    }

    virtual void notify(int msg, int ext1, int ext2) {
    virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) {
        Mutex::Autolock autoLock(mLock);

        if (msg == MEDIA_ERROR || msg == MEDIA_PLAYBACK_COMPLETE) {
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ class IMediaPlayerClient: public IInterface
public:
    DECLARE_META_INTERFACE(MediaPlayerClient);

    virtual void notify(int msg, int ext1, int ext2) = 0;
    virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) = 0;
};

// ----------------------------------------------------------------------------
+5 −3
Original line number Diff line number Diff line
@@ -55,7 +55,8 @@ enum player_type {


// callback mechanism for passing messages to MediaPlayer object
typedef void (*notify_callback_f)(void* cookie, int msg, int ext1, int ext2);
typedef void (*notify_callback_f)(void* cookie,
        int msg, int ext1, int ext2, const Parcel *obj);

// abstract base class - use MediaPlayerInterface
class MediaPlayerBase : public RefBase
@@ -159,9 +160,10 @@ public:
        mCookie = cookie; mNotify = notifyFunc;
    }

    void        sendEvent(int msg, int ext1=0, int ext2=0) {
    void        sendEvent(int msg, int ext1=0, int ext2=0,
                          const Parcel *obj=NULL) {
        Mutex::Autolock autoLock(mNotifyLock);
        if (mNotify) mNotify(mCookie, msg, ext1, ext2);
        if (mNotify) mNotify(mCookie, msg, ext1, ext2, obj);
    }

private:
+3 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ enum media_event_type {
    MEDIA_BUFFERING_UPDATE  = 3,
    MEDIA_SEEK_COMPLETE     = 4,
    MEDIA_SET_VIDEO_SIZE    = 5,
    MEDIA_TIMED_TEXT        = 99,
    MEDIA_ERROR             = 100,
    MEDIA_INFO              = 200,
};
@@ -129,7 +130,7 @@ enum media_player_states {
class MediaPlayerListener: virtual public RefBase
{
public:
    virtual void notify(int msg, int ext1, int ext2) = 0;
    virtual void notify(int msg, int ext1, int ext2, const Parcel *obj) = 0;
};

class MediaPlayer : public BnMediaPlayerClient,
@@ -166,7 +167,7 @@ public:
            status_t        setLooping(int loop);
            bool            isLooping();
            status_t        setVolume(float leftVolume, float rightVolume);
            void            notify(int msg, int ext1, int ext2);
            void            notify(int msg, int ext1, int ext2, const Parcel *obj = NULL);
    static  sp<IMemory>     decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat);
    static  sp<IMemory>     decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat);
            status_t        invoke(const Parcel& request, Parcel *reply);
+40 −0
Original line number Diff line number Diff line
@@ -1120,6 +1120,7 @@ public class MediaPlayer
        mOnErrorListener = null;
        mOnInfoListener = null;
        mOnVideoSizeChangedListener = null;
        mOnTimedTextListener = null;
        _release();
    }

@@ -1301,6 +1302,7 @@ public class MediaPlayer
    private static final int MEDIA_BUFFERING_UPDATE = 3;
    private static final int MEDIA_SEEK_COMPLETE = 4;
    private static final int MEDIA_SET_VIDEO_SIZE = 5;
    private static final int MEDIA_TIMED_TEXT = 99;
    private static final int MEDIA_ERROR = 100;
    private static final int MEDIA_INFO = 200;

@@ -1369,6 +1371,11 @@ public class MediaPlayer
                }
                // No real default action so far.
                return;
            case MEDIA_TIMED_TEXT:
                if (mOnTimedTextListener != null) {
                    mOnTimedTextListener.onTimedText(mMediaPlayer, (String)msg.obj);
                }
                return;

            case MEDIA_NOP: // interface test message - ignore
                break;
@@ -1545,6 +1552,39 @@ public class MediaPlayer

    private OnVideoSizeChangedListener mOnVideoSizeChangedListener;

    /**
     * Interface definition of a callback to be invoked when a
     * timed text is available for display.
     * {@hide}
     */
    public interface OnTimedTextListener
    {
        /**
         * Called to indicate the video size
         *
         * @param mp             the MediaPlayer associated with this callback
         * @param text           the timed text sample which contains the
         *                       text needed to be displayed.
         * {@hide}
         */
        public void onTimedText(MediaPlayer mp, String text);
    }

    /**
     * Register a callback to be invoked when a timed text is available
     * for display.
     *
     * @param listener the callback that will be run
     * {@hide}
     */
    public void setOnTimedTextListener(OnTimedTextListener listener)
    {
        mOnTimedTextListener = listener;
    }

    private OnTimedTextListener mOnTimedTextListener;


    /* Do not change these values without updating their counterparts
     * in include/media/mediaplayer.h!
     */
Loading