jint Java_org_videolan_libvlc_MediaList_expandMedia(JNIEnv *env, jobject thiz, jobject libvlcJava, jint position, jobject children) { return (jint)expand_media_internal(env, (libvlc_instance_t*)(intptr_t)getLong(env, libvlcJava, "mLibVlcInstance"), children, (libvlc_media_t*)libvlc_media_player_get_media((libvlc_media_player_t*)(intptr_t)getLong(env, libvlcJava, "mInternalMediaPlayerInstance")) ); }
void Java_org_videolan_libvlc_MediaList_loadPlaylist(JNIEnv *env, jobject thiz, jobject libvlcJava, jstring mrl, jobject items) { const char* p_mrl = (*env)->GetStringUTFChars(env, mrl, NULL); libvlc_media_t *p_md = libvlc_media_new_location((libvlc_instance_t*)(intptr_t)getLong(env, libvlcJava, "mLibVlcInstance"), p_mrl); libvlc_media_add_option(p_md, ":demux=playlist,none"); libvlc_media_add_option(p_md, ":run-time=1"); struct stopped_monitor* monitor = malloc(sizeof(struct stopped_monitor)); pthread_mutex_init(&monitor->doneMutex, NULL); pthread_cond_init(&monitor->doneCondVar, NULL); monitor->stopped = false; pthread_mutex_lock(&monitor->doneMutex); libvlc_media_player_t* p_mp = libvlc_media_player_new((libvlc_instance_t*)(intptr_t)getLong(env, libvlcJava, "mLibVlcInstance")); libvlc_media_player_set_video_title_display(p_mp, libvlc_position_disable, 0); libvlc_event_manager_t* ev = libvlc_media_player_event_manager(p_mp); libvlc_event_attach(ev, libvlc_MediaPlayerEndReached, stopped_callback, monitor); libvlc_media_player_set_media(p_mp, p_md); libvlc_media_player_play(p_mp); struct timespec deadline; clock_gettime(CLOCK_REALTIME, &deadline); deadline.tv_sec += 2; /* If "VLC can't open the file", return */ int mp_alive = 1; while(!(monitor->stopped) && mp_alive) { pthread_cond_timedwait(&monitor->doneCondVar, &monitor->doneMutex, &deadline); mp_alive = libvlc_media_player_will_play(p_mp); } pthread_mutex_unlock(&monitor->doneMutex); pthread_mutex_destroy(&monitor->doneMutex); pthread_cond_destroy(&monitor->doneCondVar); free(monitor); libvlc_media_player_release(p_mp); expand_media_internal(env, (libvlc_instance_t*)(intptr_t)getLong(env, libvlcJava, "mLibVlcInstance"), items, p_md); (*env)->ReleaseStringUTFChars(env, mrl, p_mrl); }
/* TODO REMOVE */ jint Java_org_videolan_libvlc_MediaPlayer_expandMedia(JNIEnv *env, jobject thiz, jobject children) { jint ret; libvlc_media_t *p_md; vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz); if (!p_obj) return -1; p_md = libvlc_media_player_get_media(p_obj->u.p_mp); if (!p_md) return -1; ret = (jint)expand_media_internal(env, p_obj->p_libvlc, children, p_md); libvlc_media_release(p_md); return ret; }