Search in sources :

Example 1 with CalledByNative

use of tv.danmaku.ijk.media.player.annotations.CalledByNative in project developmentDependencyLibrary by MatchlessBrother.

the class IjkMediaPlayer method onNativeInvoke.

@CalledByNative
private static boolean onNativeInvoke(Object weakThiz, int what, Bundle args) {
    DebugLog.ifmt(TAG, "onNativeInvoke %d", what);
    if (weakThiz == null || !(weakThiz instanceof WeakReference<?>))
        throw new IllegalStateException("<null weakThiz>.onNativeInvoke()");
    @SuppressWarnings("unchecked") WeakReference<IjkMediaPlayer> weakPlayer = (WeakReference<IjkMediaPlayer>) weakThiz;
    IjkMediaPlayer player = weakPlayer.get();
    if (player == null)
        throw new IllegalStateException("<null weakPlayer>.onNativeInvoke()");
    OnNativeInvokeListener listener = player.mOnNativeInvokeListener;
    if (listener != null && listener.onNativeInvoke(what, args))
        return true;
    switch(what) {
        case OnNativeInvokeListener.CTRL_WILL_CONCAT_RESOLVE_SEGMENT:
            {
                OnControlMessageListener onControlMessageListener = player.mOnControlMessageListener;
                if (onControlMessageListener == null)
                    return false;
                int segmentIndex = args.getInt(OnNativeInvokeListener.ARG_SEGMENT_INDEX, -1);
                if (segmentIndex < 0)
                    throw new InvalidParameterException("onNativeInvoke(invalid segment index)");
                String newUrl = onControlMessageListener.onControlResolveSegmentUrl(segmentIndex);
                if (newUrl == null)
                    throw new RuntimeException(new IOException("onNativeInvoke() = <NULL newUrl>"));
                args.putString(OnNativeInvokeListener.ARG_URL, newUrl);
                return true;
            }
        default:
            return false;
    }
}
Also used : InvalidParameterException(java.security.InvalidParameterException) WeakReference(java.lang.ref.WeakReference) IOException(java.io.IOException) CalledByNative(tv.danmaku.ijk.media.player.annotations.CalledByNative)

Example 2 with CalledByNative

use of tv.danmaku.ijk.media.player.annotations.CalledByNative in project developmentDependencyLibrary by MatchlessBrother.

the class IjkMediaPlayer method postEventFromNative.

/*
     * Called from native code when an interesting event happens. This method
     * just uses the EventHandler system to post the event back to the main app
     * thread. We use a weak reference to the original IjkMediaPlayer object so
     * that the native code is safe from the object disappearing from underneath
     * it. (This is the cookie passed to native_setup().)
     */
@CalledByNative
private static void postEventFromNative(Object weakThiz, int what, int arg1, int arg2, Object obj) {
    if (weakThiz == null)
        return;
    @SuppressWarnings("rawtypes") IjkMediaPlayer mp = (IjkMediaPlayer) ((WeakReference) weakThiz).get();
    if (mp == null) {
        return;
    }
    if (what == MEDIA_INFO && arg1 == MEDIA_INFO_STARTED_AS_NEXT) {
        // this acquires the wakelock if needed, and sets the client side
        // state
        mp.start();
    }
    if (mp.mEventHandler != null) {
        Message m = mp.mEventHandler.obtainMessage(what, arg1, arg2, obj);
        mp.mEventHandler.sendMessage(m);
    }
}
Also used : Message(android.os.Message) CalledByNative(tv.danmaku.ijk.media.player.annotations.CalledByNative)

Aggregations

CalledByNative (tv.danmaku.ijk.media.player.annotations.CalledByNative)2 Message (android.os.Message)1 IOException (java.io.IOException)1 WeakReference (java.lang.ref.WeakReference)1 InvalidParameterException (java.security.InvalidParameterException)1