/** * Returns a list of video filters that are available. * * \return a list of module descriptions. It should be freed with * ModuleDescription::moduleDescriptionListRelease() . In case of an * error, NULL is returned. * * \see ModuleDescription * * \see ModuleDescription::moduleDescriptionListRelease() */ std::vector<ModuleDescription> videoFilterList() { auto releaser = [](libvlc_module_description_t* ptr) { libvlc_module_description_list_release(ptr); }; auto ptr = std::unique_ptr<libvlc_module_description_t, decltype(releaser)>( libvlc_video_filter_list_get(*this), releaser ); if ( ptr == nullptr ) return {}; libvlc_module_description_t* p = ptr.get(); std::vector<ModuleDescription> res; while ( p != NULL ) { res.emplace_back( p ); p = p->p_next; } return res; }
static libvlc_module_description_t *module_description_list_get( libvlc_instance_t *p_instance, const char *capability ) { libvlc_module_description_t *p_list = NULL, *p_actual = NULL, *p_previous = NULL; size_t count; module_t **module_list = module_list_get( &count ); for (size_t i = 0; i < count; i++) { module_t *p_module = module_list[i]; if ( !module_provides( p_module, capability ) ) continue; p_actual = ( libvlc_module_description_t * ) malloc( sizeof( libvlc_module_description_t ) ); if ( p_actual == NULL ) { libvlc_printerr( "Not enough memory" ); libvlc_module_description_list_release( p_list ); module_list_free( module_list ); return NULL; } if ( p_list == NULL ) p_list = p_actual; const char* name = module_get_object( p_module ); const char* shortname = module_get_name( p_module, false ); const char* longname = module_get_name( p_module, true ); const char* help = module_get_help( p_module ); p_actual->psz_name = name ? strdup( name ) : NULL; p_actual->psz_shortname = shortname ? strdup( shortname ) : NULL; p_actual->psz_longname = longname ? strdup( longname ) : NULL; p_actual->psz_help = help ? strdup( help ) : NULL; p_actual->p_next = NULL; if ( p_previous ) p_previous->p_next = p_actual; p_previous = p_actual; } module_list_free( module_list ); VLC_UNUSED( p_instance ); return p_list; }
QList<VlcModuleDescription *> VlcInstance::videoFilterList() const { libvlc_module_description_t *original = libvlc_video_filter_list_get(_vlcInstance); if (original == NULL) { return QList<VlcModuleDescription *>(); } libvlc_module_description_t *list = original; QList<VlcModuleDescription *> videoFilters; do { VlcModuleDescription *module = new VlcModuleDescription(VlcModuleDescription::VideoFilter, list->psz_name); module->setLongName(list->psz_longname); module->setShortName(list->psz_shortname); module->setHelp(list->psz_help); videoFilters << module; list = list->p_next; } while (list->p_next); libvlc_module_description_list_release(original); return videoFilters; }
bool VLCVideoTextureObjChunk::createVLCInstance(libvlc_time_t start_time, bool play ) { libvlc_media_t *m; char const *vlc_argv[] = { "-I", "dumy", // No special interface "--ignore-config", // Don't use VLC's config "--quiet", // deactivates VLCs console outputs "--no-xlib", // tell VLC to not use Xlib "--no-video-title-show", // no titles }; int vlc_argc = sizeof(vlc_argv ) / sizeof(*vlc_argv ); // Initialize libVLC if (libvlc==NULL) { libvlc = libvlc_new(vlc_argc, vlc_argv); } else { if (vlcmediaplayer!=NULL) { ctx.idstr = NULL; libvlc_media_player_stop(vlcmediaplayer); libvlc_media_player_release(vlcmediaplayer); vlcmediaplayer = NULL; if (ctx.videothread!=NULL) { ctx.videothread->runFunction(NULL,NULL); // reset thread structure: isInititialized=false } ctx.videothread = NULL; } } m = libvlc_media_new_path(libvlc, getUrl().c_str()); vlcmediaplayer = libvlc_media_player_new_from_media(m); libvlc_media_release(m); ctx.idstr = strdup((std::string("video")+getVideoID()).c_str()); ctx.videothread = NULL; ctx.img = Image::create(); ctx.img->set(OSG::Image::OSG_BGR_PF,getWidth(), getHeight()); ctx.lock = Lock::create(); this->setImage(ctx.img); this->setTarget(GL_TEXTURE_2D); ctx.self = this; vlceventmgr = libvlc_media_player_event_manager( vlcmediaplayer ); // attach event to defined event handler callback libvlc_event_attach( vlceventmgr, libvlc_MediaPlayerEndReached, vlc_event, &ctx); libvlc_video_set_callbacks(vlcmediaplayer, vlc_lock, vlc_unlock, vlc_display, &ctx); libvlc_video_set_format(vlcmediaplayer, "RV24", getWidth(), getHeight(), getWidth()*3); if (getIsMaster()==false) libvlc_audio_set_mute(vlcmediaplayer, 1); #if 0 { SLOG << "available filters:" << std::endl; libvlc_module_description_t *list = libvlc_video_filter_list_get(libvlc); libvlc_module_description_t *iter = list; while(iter!=NULL) { SLOG << iter->psz_name << std::endl; iter = iter->p_next; } libvlc_module_description_list_release(list); } #endif libvlc_media_player_play(vlcmediaplayer); libvlc_media_player_set_time(vlcmediaplayer, start_time); if (!play) libvlc_media_player_pause(vlcmediaplayer); //not working? // add to static list //allVideoTextures.push_back(&ctx); lastSync=OSG::getTimeStamp(); return true; }