Skip to content

Commit decb460

Browse files
Revert "Migrate CameraX from SurfaceTexture to SurfaceProducer." (flutter#6838)
Reverts flutter/packages#6462
1 parent 9ad2327 commit decb460

File tree

5 files changed

+42
-29
lines changed

5 files changed

+42
-29
lines changed

packages/camera/camera_android_camerax/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.6.5+5
2+
3+
* Reverts changes to support Impeller.
4+
15
## 0.6.5+4
26

37
* [Supports Impeller](https://docs.flutter.dev/release/breaking-changes/android-surface-plugins).

packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
package io.flutter.plugins.camerax;
66

77
import android.app.Activity;
8+
import android.graphics.SurfaceTexture;
89
import android.util.Size;
10+
import android.view.Surface;
911
import androidx.annotation.NonNull;
1012
import androidx.camera.core.CameraSelector;
1113
import androidx.camera.core.ImageAnalysis;
@@ -49,6 +51,11 @@ public class CameraXProxy {
4951
return new Preview.Builder();
5052
}
5153

54+
/** Creates a {@link Surface} instance from the specified {@link SurfaceTexture}. */
55+
public @NonNull Surface createSurface(@NonNull SurfaceTexture surfaceTexture) {
56+
return new Surface(surfaceTexture);
57+
}
58+
5259
/**
5360
* Creates an instance of the {@link SystemServicesFlutterApiImpl}.
5461
*

packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.flutter.plugins.camerax;
66

7+
import android.graphics.SurfaceTexture;
78
import android.util.Size;
89
import android.view.Surface;
910
import androidx.annotation.NonNull;
@@ -24,7 +25,7 @@ public class PreviewHostApiImpl implements PreviewHostApi {
2425
private final TextureRegistry textureRegistry;
2526

2627
@VisibleForTesting public @NonNull CameraXProxy cameraXProxy = new CameraXProxy();
27-
@VisibleForTesting public @Nullable TextureRegistry.SurfaceProducer flutterSurfaceProducer;
28+
@VisibleForTesting public @Nullable TextureRegistry.SurfaceTextureEntry flutterSurfaceTexture;
2829

2930
public PreviewHostApiImpl(
3031
@NonNull BinaryMessenger binaryMessenger,
@@ -61,11 +62,12 @@ public void create(
6162
@Override
6263
public @NonNull Long setSurfaceProvider(@NonNull Long identifier) {
6364
Preview preview = getPreviewInstance(identifier);
64-
flutterSurfaceProducer = textureRegistry.createSurfaceProducer();
65-
Preview.SurfaceProvider surfaceProvider = createSurfaceProvider(flutterSurfaceProducer);
65+
flutterSurfaceTexture = textureRegistry.createSurfaceTexture();
66+
SurfaceTexture surfaceTexture = flutterSurfaceTexture.surfaceTexture();
67+
Preview.SurfaceProvider surfaceProvider = createSurfaceProvider(surfaceTexture);
6668
preview.setSurfaceProvider(surfaceProvider);
6769

68-
return flutterSurfaceProducer.id();
70+
return flutterSurfaceTexture.id();
6971
}
7072

7173
/**
@@ -74,13 +76,13 @@ public void create(
7476
*/
7577
@VisibleForTesting
7678
public @NonNull Preview.SurfaceProvider createSurfaceProvider(
77-
@NonNull TextureRegistry.SurfaceProducer surfaceProducer) {
79+
@NonNull SurfaceTexture surfaceTexture) {
7880
return new Preview.SurfaceProvider() {
7981
@Override
8082
public void onSurfaceRequested(@NonNull SurfaceRequest request) {
81-
surfaceProducer.setSize(
83+
surfaceTexture.setDefaultBufferSize(
8284
request.getResolution().getWidth(), request.getResolution().getHeight());
83-
Surface flutterSurface = surfaceProducer.getSurface();
85+
Surface flutterSurface = cameraXProxy.createSurface(surfaceTexture);
8486
request.provideSurface(
8587
flutterSurface,
8688
Executors.newSingleThreadExecutor(),
@@ -131,8 +133,8 @@ String getProvideSurfaceErrorDescription(int resultCode) {
131133
*/
132134
@Override
133135
public void releaseFlutterSurfaceTexture() {
134-
if (flutterSurfaceProducer != null) {
135-
flutterSurfaceProducer.release();
136+
if (flutterSurfaceTexture != null) {
137+
flutterSurfaceTexture.release();
136138
}
137139
}
138140

packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PreviewTest.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import static org.mockito.Mockito.verify;
1414
import static org.mockito.Mockito.when;
1515

16+
import android.graphics.SurfaceTexture;
1617
import android.util.Size;
1718
import android.view.Surface;
1819
import androidx.camera.core.Preview;
@@ -85,60 +86,59 @@ public void create_createsPreviewWithCorrectConfiguration() {
8586
public void setSurfaceProviderTest_createsSurfaceProviderAndReturnsTextureEntryId() {
8687
final PreviewHostApiImpl previewHostApi =
8788
spy(new PreviewHostApiImpl(mockBinaryMessenger, testInstanceManager, mockTextureRegistry));
88-
final TextureRegistry.SurfaceProducer mockSurfaceProducer =
89-
mock(TextureRegistry.SurfaceProducer.class);
89+
final TextureRegistry.SurfaceTextureEntry mockSurfaceTextureEntry =
90+
mock(TextureRegistry.SurfaceTextureEntry.class);
91+
final SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class);
9092
final Long previewIdentifier = 5L;
91-
final Long surfaceProducerEntryId = 120L;
93+
final Long surfaceTextureEntryId = 120L;
9294

9395
previewHostApi.cameraXProxy = mockCameraXProxy;
9496
testInstanceManager.addDartCreatedInstance(mockPreview, previewIdentifier);
9597

96-
when(mockTextureRegistry.createSurfaceProducer()).thenReturn(mockSurfaceProducer);
97-
when(mockSurfaceProducer.id()).thenReturn(surfaceProducerEntryId);
98+
when(mockTextureRegistry.createSurfaceTexture()).thenReturn(mockSurfaceTextureEntry);
99+
when(mockSurfaceTextureEntry.surfaceTexture()).thenReturn(mockSurfaceTexture);
100+
when(mockSurfaceTextureEntry.id()).thenReturn(surfaceTextureEntryId);
98101

99102
final ArgumentCaptor<Preview.SurfaceProvider> surfaceProviderCaptor =
100103
ArgumentCaptor.forClass(Preview.SurfaceProvider.class);
104+
final ArgumentCaptor<Surface> surfaceCaptor = ArgumentCaptor.forClass(Surface.class);
101105

102106
// Test that surface provider was set and the surface texture ID was returned.
103-
assertEquals(previewHostApi.setSurfaceProvider(previewIdentifier), surfaceProducerEntryId);
107+
assertEquals(previewHostApi.setSurfaceProvider(previewIdentifier), surfaceTextureEntryId);
104108
verify(mockPreview).setSurfaceProvider(surfaceProviderCaptor.capture());
105-
verify(previewHostApi).createSurfaceProvider(mockSurfaceProducer);
109+
verify(previewHostApi).createSurfaceProvider(mockSurfaceTexture);
106110
}
107111

108112
@Test
109113
public void createSurfaceProvider_createsExpectedPreviewSurfaceProvider() {
110114
final PreviewHostApiImpl previewHostApi =
111115
new PreviewHostApiImpl(mockBinaryMessenger, testInstanceManager, mockTextureRegistry);
112-
final TextureRegistry.SurfaceProducer mockSurfaceProducer =
113-
mock(TextureRegistry.SurfaceProducer.class);
116+
final SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class);
114117
final Surface mockSurface = mock(Surface.class);
115118
final SurfaceRequest mockSurfaceRequest = mock(SurfaceRequest.class);
116119
final SurfaceRequest.Result mockSurfaceRequestResult = mock(SurfaceRequest.Result.class);
117120
final SystemServicesFlutterApiImpl mockSystemServicesFlutterApi =
118121
mock(SystemServicesFlutterApiImpl.class);
119122
final int resolutionWidth = 200;
120123
final int resolutionHeight = 500;
121-
final Long surfaceProducerEntryId = 120L;
122124

123125
previewHostApi.cameraXProxy = mockCameraXProxy;
126+
when(mockCameraXProxy.createSurface(mockSurfaceTexture)).thenReturn(mockSurface);
124127
when(mockSurfaceRequest.getResolution())
125128
.thenReturn(new Size(resolutionWidth, resolutionHeight));
126129
when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger))
127130
.thenReturn(mockSystemServicesFlutterApi);
128-
when(mockTextureRegistry.createSurfaceProducer()).thenReturn(mockSurfaceProducer);
129-
when(mockSurfaceProducer.id()).thenReturn(surfaceProducerEntryId);
130-
when(mockSurfaceProducer.getSurface()).thenReturn(mockSurface);
131131

132132
final ArgumentCaptor<Surface> surfaceCaptor = ArgumentCaptor.forClass(Surface.class);
133133
@SuppressWarnings("unchecked")
134134
final ArgumentCaptor<Consumer<SurfaceRequest.Result>> consumerCaptor =
135135
ArgumentCaptor.forClass(Consumer.class);
136136

137137
Preview.SurfaceProvider previewSurfaceProvider =
138-
previewHostApi.createSurfaceProvider(mockSurfaceProducer);
138+
previewHostApi.createSurfaceProvider(mockSurfaceTexture);
139139
previewSurfaceProvider.onSurfaceRequested(mockSurfaceRequest);
140140

141-
verify(mockSurfaceProducer).setSize(resolutionWidth, resolutionHeight);
141+
verify(mockSurfaceTexture).setDefaultBufferSize(resolutionWidth, resolutionHeight);
142142
verify(mockSurfaceRequest)
143143
.provideSurface(surfaceCaptor.capture(), any(Executor.class), consumerCaptor.capture());
144144

@@ -189,13 +189,13 @@ public void createSurfaceProvider_createsExpectedPreviewSurfaceProvider() {
189189
public void releaseFlutterSurfaceTexture_makesCallToReleaseFlutterSurfaceTexture() {
190190
final PreviewHostApiImpl previewHostApi =
191191
new PreviewHostApiImpl(mockBinaryMessenger, testInstanceManager, mockTextureRegistry);
192-
final TextureRegistry.SurfaceProducer mockSurfaceProducer =
193-
mock(TextureRegistry.SurfaceProducer.class);
192+
final TextureRegistry.SurfaceTextureEntry mockSurfaceTextureEntry =
193+
mock(TextureRegistry.SurfaceTextureEntry.class);
194194

195-
previewHostApi.flutterSurfaceProducer = mockSurfaceProducer;
195+
previewHostApi.flutterSurfaceTexture = mockSurfaceTextureEntry;
196196

197197
previewHostApi.releaseFlutterSurfaceTexture();
198-
verify(mockSurfaceProducer).release();
198+
verify(mockSurfaceTextureEntry).release();
199199
}
200200

201201
@Test

packages/camera/camera_android_camerax/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: camera_android_camerax
22
description: Android implementation of the camera plugin using the CameraX library.
33
repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
5-
version: 0.6.5+4
5+
version: 0.6.5+5
66

77
environment:
88
sdk: ^3.4.0

0 commit comments

Comments
 (0)