Example #1
0
// NOTE: support to be called from read_thread
static int
inject_callback(void *opaque, int what, void *data, size_t data_size)
{
    JNIEnv     *env     = NULL;
    jobject     jbundle = NULL;
    int         ret     = -1;
    SDL_JNI_SetupThreadEnv(&env);

    jobject weak_thiz = (jobject) opaque;
    if (weak_thiz == NULL )
        goto fail;

    switch (what) {
    case IJKAVINJECT_CONCAT_RESOLVE_SEGMENT: {
        ret = _onNativeControlResolveSegment(env, weak_thiz, what, data, data_size);
        break;
    }
    case IJKAVINJECT_ON_TCP_OPEN:
    case IJKAVINJECT_ON_HTTP_OPEN:
    case IJKAVINJECT_ON_HTTP_RETRY:
    case IJKAVINJECT_ON_LIVE_RETRY: {
        IJKAVInject_OnUrlOpenData *real_data = (IJKAVInject_OnUrlOpenData *) data;
        jbundle = ASDK_Bundle__init(env);
        if (SDL_JNI_CatchException(env) || !jbundle) {
            ALOGE("%s: ASDK_Bundle__init failed\n", __func__);
            goto fail;
        }

        ASDK_Bundle__putString_c(env, jbundle,  "url",           real_data->url);
        ASDK_Bundle__putInt_c(env, jbundle,     "segment_index", real_data->segment_index);
        ASDK_Bundle__putInt_c(env, jbundle,     "retry_counter", real_data->retry_counter);

        if (!(*env)->CallStaticBooleanMethod(env, g_clazz.clazz, g_clazz.jmid_onNativeInvoke, weak_thiz, what, jbundle))
            goto fail;

        ASDK_Bundle__getString_cbuf(env, jbundle, "url", real_data->url, sizeof(real_data->url));
        ret = 0;
        break;
    }
    default: {
        goto fail;
    }
    }

fail:
    SDL_JNI_CatchException(env);
    SDL_JNI_DeleteLocalRefP(env, &jbundle);
    return ret;
}
Example #2
0
// NOTE: support to be called from read_thread
static int
format_control_message(void *opaque, int type, void *data, size_t data_size)
{
    JNIEnv *env = NULL;
    SDL_JNI_SetupThreadEnv(&env);

    jobject weak_thiz = (jobject) opaque;
    if (weak_thiz == NULL )
        return -1;

    switch (type) {
    case IJKAVF_CM_RESOLVE_SEGMENT_CONCAT:
        return _onNativeControlResolveSegmentConcat(env, weak_thiz, type, data, data_size);
    case IJKAVF_CM_RESOLVE_SEGMENT:
        return _onNativeControlResolveSegment(env, weak_thiz, type, data, data_size);
    case IJKAVF_CM_RESOLVE_SEGMENT_OFFLINE:
        return _onNativeControlResolveSegmentOffline(env, weak_thiz, type, data, data_size);
    default: {
        return -1;
    }
    }

    return -1;
}