/** * Create a new media player event for a given native event. * * @param event native event * @param eventMask bit mask of enabled events (i.e. events to send notifications for) * @return media player event, or <code>null</code> if the native event type is not enabled or otherwise could not be handled */ public MediaListPlayerEvent newMediaListPlayerEvent(libvlc_event_t evt, int eventMask) { // Create an event suitable for the native event type... MediaListPlayerEvent result = null; switch (evt.type) { // === Events relating to the media list player ========================= case libvlc_event_e.libvlc_MediaListPlayerNextItemSet: // if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_CHANGED)) { IntPtr media = evt.u.item; result = new MediaListPlayerNextItemSetEvent(mediaListPlayer, media, mediaListPlayer.Mrl(media)); // } break; // === Events relating to the current media ============================= case libvlc_event_e.libvlc_MediaMetaChanged: // if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_META_CHANGED)) { result = new MediaListMediaMetaChangedEvent(mediaListPlayer, evt.u.meta_type); // } break; case libvlc_event_e.libvlc_MediaSubItemAdded: // if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_SUB_ITEM_ADDED)) { result = new MediaListMediaSubItemAddedEvent(mediaListPlayer, evt.u.new_child); // } break; case libvlc_event_e.libvlc_MediaDurationChanged: // if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_DURATION_CHANGED)) { result = new MediaListMediaDurationChangedEvent(mediaListPlayer, evt.u.new_duration); // } break; case libvlc_event_e.libvlc_MediaParsedChanged: // if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_PARSED_CHANGED)) { result = new MediaListMediaParsedChangedEvent(mediaListPlayer, evt.u.new_status); // } break; case libvlc_event_e.libvlc_MediaFreed: // if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_FREED)) { result = new MediaListMediaFreedEvent(mediaListPlayer); // } break; case libvlc_event_e.libvlc_MediaStateChanged: // if(MediaPlayerEventType.set(eventMask, MediaPlayerEventType.MEDIA_STATE_CHANGED)) { result = new MediaListMediaStateChangedEvent(mediaListPlayer, evt.u.new_state); // } break; } return(result); }
private void HandleEvent(IntPtr evt, IntPtr data) { if (eventListenerList.Count > 0) { libvlc_event_t e = (libvlc_event_t)Marshal.PtrToStructure(evt, typeof(libvlc_event_t)); // Create a new media player event for the native event // MediaListPlayerEvent mediaListPlayerEvent = eventFactory.newMediaListPlayerEvent(e, eventMask); MediaListPlayerEvent mediaListPlayerEvent = eventFactory.newMediaListPlayerEvent(e, 0); Logger.Trace("mediaListPlayerEvent={}", mediaListPlayerEvent); if (mediaListPlayerEvent != null) { listenersService.Submit(new NotifyListenersRunnable(this, mediaListPlayerEvent)); } } } // FIXME refactor part to separate raiseEvent like main player?
/** * * * @param mediaListPlayer * @param mediaListPlayerEvent */ public NotifyListenersRunnable(DefaultMediaListPlayer mediaListPlayer, MediaListPlayerEvent mediaListPlayerEvent) { this.mediaListPlayer = mediaListPlayer; this.mediaListPlayerEvent = mediaListPlayerEvent; }