/** * Get the subItems MediaList associated with the Media. This Media should be alive (not released). * * @return subItems as a MediaList. This MediaList should be released with {@link #release()}. */ public MediaList subItems() { synchronized (this) { if (mSubItems != null) { mSubItems.retain(); return mSubItems; } } final MediaList subItems = new MediaList(this); synchronized (this) { mSubItems = subItems; mSubItems.retain(); return mSubItems; } }
/** * Create a MediaList from libVLC * @param libVLC a valid libVLC */ public MediaList(LibVLC libVLC) { super(libVLC); nativeNewFromLibVlc(libVLC); init(); }
private void init() { lock(); mCount = nativeGetCount(); for (int i = 0; i < mCount; ++i) mMediaArray.put(i, new Media(this, i)); unlock(); }
/** * * @param md Should not be released */ protected MediaList(MediaDiscoverer md) { super(md); nativeNewFromMediaDiscoverer(md); init(); }
/** * * @param m Should not be released */ protected MediaList(Media m) { super(m); nativeNewFromMedia(m); init(); }
/** * * @param ml Should not be released and locked * @param index index of the Media from the MediaList */ protected Media(MediaList ml, int index) { if (ml == null || ml.isReleased()) throw new IllegalArgumentException("MediaList is null or released"); if (!ml.isLocked()) throw new IllegalStateException("MediaList should be locked"); nativeNewFromMediaList(ml, index); mUri = UriFromMrl(nativeGetMrl()); }
@Override protected synchronized Event onEventNative(int eventType, long arg1, long arg2, float argf1) { if (mLocked) throw new IllegalStateException("already locked from event callback"); mLocked = true; Event event = null; int index; switch (eventType) { case Event.ItemAdded: index = (int) arg1; if (index != -1) { final Media media = insertMediaFromEvent(index); event = new Event(eventType, media, index); } break; case Event.ItemDeleted: index = (int) arg1; if (index != -1) { final Media media = removeMediaFromEvent(index); event = new Event(eventType, media, index); } break; case Event.EndReached: event = new Event(eventType, null, -1); break; } mLocked = false; return event; }
/** * Get the number or media. */ @MainThread public int getMediaCount() { return mBrowserMediaList != null ? mBrowserMediaList.getCount() : mDiscovererMediaArray.size(); }
private synchronized void lock() { if (mLocked) throw new IllegalStateException("already locked"); mLocked = true; nativeLock(); }
/** * Get a media at a specified index. Should be released with {@link #release()}. */ @MainThread public Media getMediaAt(int index) { if (index < 0 || index >= getMediaCount()) throw new IndexOutOfBoundsException(); final Media media = mBrowserMediaList != null ? mBrowserMediaList.getMediaAt(index) : mDiscovererMediaArray.get(index); media.retain(); return media; }
/** * Initialize the libVLC class. * * This function must be called before using any libVLC functions. * * @throws LibVlcException */ public void init(Context context) throws LibVlcException { Log.v(TAG, "Initializing LibVLC"); mDebugLogBuffer = new StringBuffer(); if (LibVlcUtil.isLibraryLoaded() && !mIsInitialized) { if(!LibVlcUtil.hasCompatibleCPU(context)) { Log.e(TAG, LibVlcUtil.getErrorMsg()); throw new LibVlcException(); } File cacheDir = context.getCacheDir(); mCachePath = (cacheDir != null) ? cacheDir.getAbsolutePath() : null; nativeInit(); mMediaList = mPrimaryList = new MediaList(this); mIsInitialized = true; } }
/** * * @param md Should not be released */ protected MediaList(MediaDiscoverer md) { nativeNewFromMediaDiscoverer(md); init(); }
/** * * @param m Should not be released */ protected MediaList(Media m) { super(m); nativeNewFromMedia(m); init(); }
/** * * @param ml Should not be released and locked * @param index index of the Media from the MediaList */ protected Media(MediaList ml, int index) { if (ml == null || ml.isReleased()) throw new IllegalArgumentException("MediaList is null or released"); if (!ml.isLocked()) throw new IllegalStateException("MediaList should be locked"); nativeNewFromMediaList(ml, index); mUri = UriFromMrl(nativeGetMrl()); }
@Override protected synchronized Event onEventNative(int eventType, long arg1, long arg2, float argf1) { if (mLocked) throw new IllegalStateException("already locked from event callback"); mLocked = true; Event event = null; int index; switch (eventType) { case Event.ItemAdded: index = (int) arg1; if (index != -1) { final Media media = insertMediaFromEvent(index); event = new Event(eventType, media, index); } break; case Event.ItemDeleted: index = (int) arg1; if (index != -1) { final Media media = removeMediaFromEvent(index); event = new Event(eventType, media, index); } break; case Event.EndReached: event = new Event(eventType, null, -1); break; } mLocked = false; return event; }
/** * Get the number or media. */ @MainThread public int getMediaCount() { return mBrowserMediaList != null ? mBrowserMediaList.getCount() : mDiscovererMediaArray.size(); }
private synchronized void lock() { if (mLocked) throw new IllegalStateException("already locked"); mLocked = true; nativeLock(); }
/** * Get a media at a specified index. Should be released with {@link #release()}. */ @MainThread public Media getMediaAt(int index) { if (index < 0 || index >= getMediaCount()) throw new IndexOutOfBoundsException(); final Media media = mBrowserMediaList != null ? mBrowserMediaList.getMediaAt(index) : mDiscovererMediaArray.get(index); media.retain(); return media; }
/** * Get the subItems MediaList associated with the Media. This Media should be alive (not released). * * @return subItems as a MediaList. This MediaList should be released with {@link #release()}. */ public MediaList subItems() { synchronized (this) { if (mSubItems != null) { mSubItems.retain(); return mSubItems; } } final MediaList subItems = new MediaList(this); synchronized (this) { mSubItems = subItems; mSubItems.retain(); return mSubItems; } }
private void init() { lock(); mCount = nativeGetCount(); for (int i = 0; i < mCount; ++i) mMediaArray.put(i, new Media(this, i)); unlock(); }