import android.hardware.camera2.params.OutputConfiguration;
import android.hardware.camera2.utils.HashCodeHelpers;
import android.hardware.camera2.utils.TypeReference;
+import android.hardware.camera2.utils.SurfaceUtils;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArraySet;
break;
}
}
+
+ if (!streamFound) {
+ // Check if we can match s by native object ID
+ long reqSurfaceId = SurfaceUtils.getSurfaceId(s);
+ for (int j = 0; j < configuredOutputs.size(); ++j) {
+ int streamId = configuredOutputs.keyAt(j);
+ OutputConfiguration outConfig = configuredOutputs.valueAt(j);
+ int surfaceId = 0;
+ for (Surface outSurface : outConfig.getSurfaces()) {
+ if (reqSurfaceId == SurfaceUtils.getSurfaceId(outSurface)) {
+ streamFound = true;
+ mStreamIdxArray[i] = streamId;
+ mSurfaceIdxArray[i] = surfaceId;
+ i++;
+ break;
+ }
+ surfaceId++;
+ }
+ if (streamFound) {
+ break;
+ }
+ }
+ }
+
if (!streamFound) {
mStreamIdxArray = null;
mSurfaceIdxArray = null;
LegacyExceptionUtils.throwOnError(nativeSetSurfaceDimens(surface, width, height));
}
- static long getSurfaceId(Surface surface) throws BufferQueueAbandonedException {
+ public static long getSurfaceId(Surface surface) throws BufferQueueAbandonedException {
checkNotNull(surface);
try {
return nativeGetSurfaceId(surface);
}
/**
+ * Get the native object id of a surface.
+ *
+ * @param surface The surface to be checked.
+ * @return the native object id of the surface, 0 if surface is not backed by a native object.
+ */
+ public static long getSurfaceId(Surface surface) {
+ try {
+ return LegacyCameraDevice.getSurfaceId(surface);
+ } catch (BufferQueueAbandonedException e) {
+ return 0;
+ }
+ }
+
+ /**
* Get the Surface size.
*
* @param surface The surface to be queried for size.