Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ final class ImageReaderSurfaceProducer
TextureRegistry.ImageConsumer,
TextureRegistry.OnTrimMemoryListener {
private static final String TAG = "ImageReaderSurfaceProducer";
private static final int MAX_IMAGES = 4;
private static final int MAX_IMAGES = 5;

// Flip when debugging to see verbose logs.
private static final boolean VERBOSE_LOGS = false;
Expand Down Expand Up @@ -467,10 +467,11 @@ private class PerImageReader {
} catch (IllegalStateException e) {
Log.e(TAG, "onImageAvailable acquireLatestImage failed: " + e);
}
if (released || closed) {
if (image == null) {
return;
}
if (image == null) {
if (released || closed) {
image.close();
return;
}
onImage(reader, image);
Expand All @@ -490,6 +491,9 @@ PerImage queueImage(Image image) {
// If we fall too far behind we will skip some frames.
while (imageQueue.size() > 2) {
PerImage r = imageQueue.removeFirst();
if (VERBOSE_LOGS) {
Log.i(TAG, "" + reader.hashCode() + " force closed image=" + r.image.hashCode());
}
r.image.close();
}
return perImage;
Expand Down Expand Up @@ -529,14 +533,15 @@ PerImageReader getOrCreatePerImageReader(ImageReader reader) {
r = new PerImageReader(reader);
perImageReaders.put(reader, r);
imageReaderQueue.add(r);
if (VERBOSE_LOGS) {
Log.i(TAG, "imageReaderQueue#=" + imageReaderQueue.size());
}
}
return r;
}

void pruneImageReaderQueue() {
if (VERBOSE_LOGS) {
Log.i(TAG, "Pruning image reader queue length=" + imageReaderQueue.size());
}
boolean change = false;
// Prune nodes from the head of the ImageReader queue.
while (imageReaderQueue.size() > 1) {
PerImageReader r = imageReaderQueue.peekFirst();
Expand All @@ -547,8 +552,9 @@ void pruneImageReaderQueue() {
imageReaderQueue.removeFirst();
perImageReaders.remove(r.reader);
r.close();
change = true;
}
if (VERBOSE_LOGS) {
if (change && VERBOSE_LOGS) {
Log.i(TAG, "Pruned image reader queue length=" + imageReaderQueue.size());
}
}
Expand All @@ -569,7 +575,9 @@ void onImage(ImageReader reader, Image image) {
long queueDelta = now - lastQueueTime;
Log.i(
TAG,
"enqueued image="
""
+ reader.hashCode()
+ " enqueued image="
+ queuedImage.image.hashCode()
+ " queueDelta="
+ deltaMillis(queueDelta));
Expand Down Expand Up @@ -598,7 +606,9 @@ PerImage dequeueImage() {
long scheduleDelay = now - lastScheduleTime;
Log.i(
TAG,
"dequeued image="
""
+ reader.reader.hashCode()
+ " dequeued image="
+ r.image.hashCode()
+ " queuedFor= "
+ deltaMillis(queuedFor)
Expand All @@ -612,6 +622,14 @@ PerImage dequeueImage() {
}
}
if (lastDequeuedImage != null) {
if (VERBOSE_LOGS) {
Log.i(
TAG,
""
+ lastReaderDequeuedFrom.reader.hashCode()
+ " closing image="
+ lastDequeuedImage.image.hashCode());
}
// We must keep the last image dequeued open until we are done presenting it.
// We have just dequeued a new image (r). Close the previously dequeued image.
lastDequeuedImage.image.close();
Expand Down Expand Up @@ -642,6 +660,9 @@ private void releaseInternal() {
private void cleanup() {
synchronized (lock) {
for (PerImageReader pir : perImageReaders.values()) {
if (lastReaderDequeuedFrom == pir) {
lastReaderDequeuedFrom = null;
}
pir.close();
}
perImageReaders.clear();
Expand Down Expand Up @@ -730,6 +751,9 @@ public int getHeight() {
@Override
public Surface getSurface() {
PerImageReader pir = getActiveReader();
if (VERBOSE_LOGS) {
Log.i(TAG, "" + pir.reader.hashCode() + " returning surface to render a new frame.");
}
return pir.reader.getSurface();
}

Expand Down Expand Up @@ -762,7 +786,13 @@ private PerImageReader getActiveReader() {
if (createNewReader) {
createNewReader = false;
// Create a new ImageReader and add it to the queue.
return getOrCreatePerImageReader(createImageReader());
ImageReader reader = createImageReader();
if (VERBOSE_LOGS) {
Log.i(
TAG,
"" + reader.hashCode() + " created w=" + requestedWidth + " h=" + requestedHeight);
}
return getOrCreatePerImageReader(reader);
}
return imageReaderQueue.peekLast();
}
Expand Down