use of com.facebook.common.references.CloseableReference in project fresco by facebook.
the class LocalVideoThumbnailProducerTest method testLocalVideoMiniThumbnailSuccess.
@Test
public void testLocalVideoMiniThumbnailSuccess() throws Exception {
when(mImageRequest.getPreferredWidth()).thenReturn(100);
when(mImageRequest.getPreferredHeight()).thenReturn(100);
when(mImageRequest.getSourceUri()).thenReturn(mLocalVideoUri);
when(android.media.ThumbnailUtils.createVideoThumbnail(mFile.getPath(), MediaStore.Images.Thumbnails.MINI_KIND)).thenReturn(mBitmap);
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
mCloseableReference = ((CloseableReference) invocation.getArguments()[0]).clone();
return null;
}
}).when(mConsumer).onNewResult(any(CloseableReference.class), eq(Consumer.IS_LAST));
mLocalVideoThumbnailProducer.produceResults(mConsumer, mProducerContext);
mExecutor.runUntilIdle();
assertEquals(1, mCloseableReference.getUnderlyingReferenceTestOnly().getRefCountTestOnly());
assertEquals(mBitmap, mCloseableReference.getUnderlyingReferenceTestOnly().get().getUnderlyingBitmap());
verify(mProducerListener).onProducerStart(mProducerContext, PRODUCER_NAME);
verify(mProducerListener).onProducerFinishWithSuccess(mProducerContext, PRODUCER_NAME, null);
verify(mProducerListener).onUltimateProducerReached(mProducerContext, PRODUCER_NAME, true);
}
use of com.facebook.common.references.CloseableReference in project fresco by facebook.
the class SingleUsePostprocessorProducerTest method setUp.
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mTestExecutorService = new TestExecutorService(new FakeClock());
mPostprocessorProducer = new PostprocessorProducer(mInputProducer, mPlatformBitmapFactory, mTestExecutorService);
when(mImageRequest.getPostprocessor()).thenReturn(mPostprocessor);
when(mProducerContext.getId()).thenReturn(mRequestId);
when(mProducerContext.getProducerListener()).thenReturn(mProducerListener);
when(mProducerContext.getImageRequest()).thenReturn(mImageRequest);
mResults = new ArrayList<>();
when(mPostprocessor.getName()).thenReturn(POSTPROCESSOR_NAME);
when(mProducerListener.requiresExtraMap(mProducerContext, PRODUCER_NAME)).thenReturn(true);
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
mResults.add(((CloseableReference<CloseableImage>) invocation.getArguments()[0]).clone());
return null;
}
}).when(mConsumer).onNewResult(any(CloseableReference.class), anyInt());
mInOrder = inOrder(mPostprocessor, mProducerListener, mConsumer);
mSourceBitmap = mock(Bitmap.class);
mSourceCloseableStaticBitmap = mock(CloseableStaticBitmap.class);
when(mSourceCloseableStaticBitmap.getUnderlyingBitmap()).thenReturn(mSourceBitmap);
mSourceCloseableImageRef = CloseableReference.<CloseableImage>of(mSourceCloseableStaticBitmap);
mDestinationBitmap = mock(Bitmap.class);
mDestinationCloseableBitmapRef = CloseableReference.of(mDestinationBitmap, mBitmapResourceReleaser);
}
use of com.facebook.common.references.CloseableReference in project fresco by facebook.
the class RepeatedPostprocessorProducerTest method setUp.
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mTestExecutorService = new TestExecutorService(new FakeClock());
mPostprocessorProducer = new PostprocessorProducer(mInputProducer, mPlatformBitmapFactory, mTestExecutorService);
mProducerContext = new SettableProducerContext(mImageRequest, mRequestId, mProducerListener, mock(Object.class), ImageRequest.RequestLevel.FULL_FETCH, false, /* isPrefetch */
false, /* isIntermediateResultExpected */
Priority.MEDIUM, mConfig);
when(mImageRequest.getPostprocessor()).thenReturn(mPostprocessor);
mResults = new ArrayList<>();
when(mPostprocessor.getName()).thenReturn(POSTPROCESSOR_NAME);
when(mProducerListener.requiresExtraMap(mProducerContext, PRODUCER_NAME)).thenReturn(true);
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
mResults.add(((CloseableReference<CloseableImage>) invocation.getArguments()[0]).clone());
return null;
}
}).when(mConsumer).onNewResult(any(CloseableReference.class), anyInt());
mInOrder = inOrder(mPostprocessor, mProducerListener, mConsumer);
}
use of com.facebook.common.references.CloseableReference in project gl-react-native by ProjectSeptemberInc.
the class GLImage method reloadImage.
private void reloadImage() {
if (pending != null && !pending.isFinished())
pending.close();
final Uri uri = src;
ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(uri).setAutoRotateEnabled(// I don't really understand why need to disable this. but it actually fixes the image is properly rotated according to EXIF data
false).build();
pending = Fresco.getImagePipeline().fetchDecodedImage(imageRequest, null);
pending.subscribe(new BaseBitmapDataSubscriber() {
@Override
protected void onNewResultImpl(@Nullable Bitmap bitmap) {
onLoad(bitmap);
}
@Override
protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
Log.e("GLImage", "Failed to load '" + uri.getPath() + "'", dataSource.getFailureCause());
}
}, decodeExecutor);
}
use of com.facebook.common.references.CloseableReference in project BigImageViewer by Piasy.
the class FrescoImageLoader method loadImage.
@SuppressLint("WrongThread")
@Override
public void loadImage(final int requestId, Uri uri, final Callback callback) {
ImageRequest request = ImageRequest.fromUri(uri);
final File localCache = getCacheFile(request);
if (localCache.exists()) {
mExecutorSupplier.forLocalStorageRead().execute(new Runnable() {
@Override
public void run() {
callback.onCacheHit(ImageInfoExtractor.getImageType(localCache), localCache);
callback.onSuccess(localCache);
}
});
} else {
// ensure `onStart` is called before `onProgress` and `onFinish`
callback.onStart();
// show 0 progress immediately
callback.onProgress(0);
ImagePipeline pipeline = Fresco.getImagePipeline();
DataSource<CloseableReference<PooledByteBuffer>> source = pipeline.fetchEncodedImage(request, true);
source.subscribe(new ImageDownloadSubscriber(mAppContext) {
@Override
protected void onProgress(int progress) {
callback.onProgress(progress);
}
@Override
protected void onSuccess(final File image) {
rememberTempFile(requestId, image);
callback.onFinish();
callback.onCacheMiss(ImageInfoExtractor.getImageType(image), image);
callback.onSuccess(image);
}
@Override
protected void onFail(final Throwable t) {
t.printStackTrace();
callback.onFail((Exception) t);
}
}, mExecutorSupplier.forBackgroundTasks());
cancel(requestId);
rememberSource(requestId, source);
}
}
Aggregations