[Android] [PATCH 1/2] Refactor thumbnailer
Geoffrey Métais
geoffrey.metais at gmail.com
Fri Dec 5 11:23:47 CET 2014
- Remove hardcoded MainActivity references, use VideoBrowserInterface instead
- add getJobsCount() method
- add ability to change displaying VideoBrowser
- Do not create Bitmap if we don't have thumbnail
---
vlc-android/src/org/videolan/vlc/Thumbnailer.java | 66 ++++++++++++++--------
.../vlc/gui/video/VideoBrowserInterface.java | 4 ++
.../videolan/vlc/gui/video/VideoGridFragment.java | 12 ++++
3 files changed, 59 insertions(+), 23 deletions(-)
diff --git a/vlc-android/src/org/videolan/vlc/Thumbnailer.java b/vlc-android/src/org/videolan/vlc/Thumbnailer.java
index 7e92819..22280d6 100644
--- a/vlc-android/src/org/videolan/vlc/Thumbnailer.java
+++ b/vlc-android/src/org/videolan/vlc/Thumbnailer.java
@@ -32,7 +32,6 @@ import java.util.concurrent.locks.ReentrantLock;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.LibVlcException;
import org.videolan.libvlc.Media;
-import org.videolan.vlc.gui.MainActivity;
import org.videolan.vlc.gui.video.VideoBrowserInterface;
import org.videolan.vlc.util.BitmapUtil;
import org.videolan.vlc.util.VLCInstance;
@@ -104,6 +103,14 @@ public class Thumbnailer implements Runnable {
}
/**
+ * Gives the count of pending thumbnails
+ * @return totalCount
+ */
+ public int getJobsCount(){
+ return totalCount;
+ }
+
+ /**
* Add a new id of the file browser item to create its thumbnail.
* @param id the if of the file browser item.
*/
@@ -129,14 +136,17 @@ public class Thumbnailer implements Runnable {
Log.d(TAG, "Thumbnailer started");
while (!isStopping) {
- mVideoBrowser.resetBarrier();
+ if (mVideoBrowser != null)
+ mVideoBrowser.resetBarrier();
lock.lock();
// Get the id of the file browser item to create its thumbnail.
boolean interrupted = false;
while (mItems.size() == 0) {
try {
- MainActivity.hideProgressBar();
- MainActivity.clearTextInfo();
+ if (mVideoBrowser != null) {
+ mVideoBrowser.hideProgressBar();
+ mVideoBrowser.clearTextInfo();
+ }
totalCount = 0;
notEmpty.await();
} catch (InterruptedException e) {
@@ -153,17 +163,16 @@ public class Thumbnailer implements Runnable {
Media item = mItems.poll();
lock.unlock();
- MainActivity.showProgressBar();
-
- MainActivity.sendTextInfo(String.format("%s %s", mPrefix, item.getFileName()), count, total);
+ if (mVideoBrowser != null) {
+ mVideoBrowser.showProgressBar();
+ mVideoBrowser.sendTextInfo(String.format("%s %s", mPrefix, item.getFileName()), count, total);
+ }
count++;
int width = (int) (120 * mDensity);
int height = (int) (75 * mDensity);
- // Get the thumbnail.
- Bitmap thumbnail = Bitmap.createBitmap(width, height, Config.ARGB_8888);
- //Log.i(TAG, "create new bitmap for: " + item.getName());
+ //Get bitmap
byte[] b = mLibVlc.getThumbnail(item.getLocation(), width, height);
if (b == null) {// We were not able to create a thumbnail for this item, store a dummy
@@ -171,30 +180,41 @@ public class Thumbnailer implements Runnable {
continue;
}
+ // Create the bitmap
+ Bitmap thumbnail = Bitmap.createBitmap(width, height, Config.ARGB_8888);
+
thumbnail.copyPixelsFromBuffer(ByteBuffer.wrap(b));
Log.i(TAG, "Thumbnail created for " + item.getFileName());
MediaDatabase.setPicture(item, thumbnail);
// Post to the file browser the new item.
- mVideoBrowser.setItemToUpdate(item);
+ if (mVideoBrowser != null) {
+ mVideoBrowser.setItemToUpdate(item);
- // Wait for the file browser to process the change.
- try {
- mVideoBrowser.await();
- } catch (InterruptedException e) {
- Log.i(TAG, "interruption probably requested by stop()");
- break;
- } catch (BrokenBarrierException e) {
- Log.e(TAG, "Unexpected BrokenBarrierException");
- e.printStackTrace();
- break;
+ // Wait for the file browser to process the change.
+ try {
+ mVideoBrowser.await();
+ } catch (InterruptedException e) {
+ Log.i(TAG, "interruption probably requested by stop()");
+ break;
+ } catch (BrokenBarrierException e) {
+ Log.e(TAG, "Unexpected BrokenBarrierException");
+ e.printStackTrace();
+ break;
+ }
}
}
/* cleanup */
- MainActivity.hideProgressBar();
- MainActivity.clearTextInfo();
+ if (mVideoBrowser != null) {
+ mVideoBrowser.hideProgressBar();
+ mVideoBrowser.clearTextInfo();
+ }
mVideoBrowser = null;
Log.d(TAG, "Thumbnailer stopped");
}
+
+ public void setVideoBrowser(VideoBrowserInterface browser){
+ mVideoBrowser = browser;
+ }
}
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoBrowserInterface.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoBrowserInterface.java
index 89dc6ae..69219ab 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoBrowserInterface.java
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoBrowserInterface.java
@@ -21,4 +21,8 @@ public interface VideoBrowserInterface {
public void await() throws InterruptedException, BrokenBarrierException;
public void updateItem();
public void updateList();
+ public void showProgressBar();
+ public void hideProgressBar();
+ public void clearTextInfo();
+ public void sendTextInfo(String info, int progress, int max);
}
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
index 185aace..76bb1aa 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
@@ -442,6 +442,18 @@ public class VideoGridFragment extends SherlockGridFragment implements IBrowser,
}
@Override
+ public void showProgressBar() {}
+
+ @Override
+ public void hideProgressBar() {}
+
+ @Override
+ public void clearTextInfo() {}
+
+ @Override
+ public void sendTextInfo(String info, int progress, int max) { }
+
+ @Override
public void sortBy(int sortby) {
mVideoAdapter.sortBy(sortby);
}
--
1.9.1
More information about the Android
mailing list