Skip to content

Commit a4f73c1

Browse files
Revert "Add byte streaming capability for the camera (flutter#965)"
This reverts commit b40042f.
1 parent 68b8d7a commit a4f73c1

7 files changed

Lines changed: 19 additions & 550 deletions

File tree

packages/camera/CHANGELOG.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
## 0.2.8
2-
3-
* Add access to the image stream from Dart.
4-
* Use `cameraController.startImageStream(listener)` to process the images.
5-
61
## 0.2.7
72

83
* Fix issue with crash when the physical device's orientation is unknown.

packages/camera/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ A Flutter plugin for iOS and Android allowing access to the device cameras.
88

99
* Display live camera preview in a widget.
1010
* Snapshots can be captured and saved to a file.
11-
* Record video.
12-
* Add access to the image stream from Dart.
1311

1412
## Installation
1513

packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java

Lines changed: 8 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -213,26 +213,6 @@ public void onMethodCall(MethodCall call, final Result result) {
213213
camera.stopVideoRecording(result);
214214
break;
215215
}
216-
case "startImageStream":
217-
{
218-
try {
219-
camera.startPreviewWithImageStream();
220-
result.success(null);
221-
} catch (CameraAccessException e) {
222-
result.error("CameraAccess", e.getMessage(), null);
223-
}
224-
break;
225-
}
226-
case "stopImageStream":
227-
{
228-
try {
229-
camera.startPreview();
230-
result.success(null);
231-
} catch (CameraAccessException e) {
232-
result.error("CameraAccess", e.getMessage(), null);
233-
}
234-
break;
235-
}
236216
case "dispose":
237217
{
238218
if (camera != null) {
@@ -278,8 +258,7 @@ private class Camera {
278258
private CameraDevice cameraDevice;
279259
private CameraCaptureSession cameraCaptureSession;
280260
private EventChannel.EventSink eventSink;
281-
private ImageReader pictureImageReader;
282-
private ImageReader imageStreamReader;
261+
private ImageReader imageReader;
283262
private int sensorOrientation;
284263
private boolean isFrontFacing;
285264
private String cameraName;
@@ -479,15 +458,9 @@ private void open(@Nullable final Result result) {
479458
if (result != null) result.error("cameraPermission", "Camera permission not granted", null);
480459
} else {
481460
try {
482-
pictureImageReader =
461+
imageReader =
483462
ImageReader.newInstance(
484463
captureSize.getWidth(), captureSize.getHeight(), ImageFormat.JPEG, 2);
485-
486-
// Used to steam image byte data to dart side.
487-
imageStreamReader =
488-
ImageReader.newInstance(
489-
previewSize.getWidth(), previewSize.getHeight(), ImageFormat.YUV_420_888, 2);
490-
491464
cameraManager.openCamera(
492465
cameraName,
493466
new CameraDevice.StateCallback() {
@@ -580,7 +553,7 @@ private void takePicture(String filePath, @NonNull final Result result) {
580553
return;
581554
}
582555

583-
pictureImageReader.setOnImageAvailableListener(
556+
imageReader.setOnImageAvailableListener(
584557
new ImageReader.OnImageAvailableListener() {
585558
@Override
586559
public void onImageAvailable(ImageReader reader) {
@@ -598,7 +571,7 @@ public void onImageAvailable(ImageReader reader) {
598571
try {
599572
final CaptureRequest.Builder captureBuilder =
600573
cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
601-
captureBuilder.addTarget(pictureImageReader.getSurface());
574+
captureBuilder.addTarget(imageReader.getSurface());
602575
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getMediaOrientation());
603576

604577
cameraCaptureSession.capture(
@@ -724,7 +697,7 @@ private void startPreview() throws CameraAccessException {
724697
surfaces.add(previewSurface);
725698
captureRequestBuilder.addTarget(previewSurface);
726699

727-
surfaces.add(pictureImageReader.getSurface());
700+
surfaces.add(imageReader.getSurface());
728701

729702
cameraDevice.createCaptureSession(
730703
surfaces,
@@ -754,107 +727,6 @@ public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession
754727
null);
755728
}
756729

757-
private void startPreviewWithImageStream() throws CameraAccessException {
758-
closeCaptureSession();
759-
760-
SurfaceTexture surfaceTexture = textureEntry.surfaceTexture();
761-
surfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
762-
763-
captureRequestBuilder =
764-
cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
765-
766-
List<Surface> surfaces = new ArrayList<>();
767-
768-
Surface previewSurface = new Surface(surfaceTexture);
769-
surfaces.add(previewSurface);
770-
captureRequestBuilder.addTarget(previewSurface);
771-
772-
surfaces.add(imageStreamReader.getSurface());
773-
captureRequestBuilder.addTarget(imageStreamReader.getSurface());
774-
775-
cameraDevice.createCaptureSession(
776-
surfaces,
777-
new CameraCaptureSession.StateCallback() {
778-
@Override
779-
public void onConfigured(@NonNull CameraCaptureSession session) {
780-
if (cameraDevice == null) {
781-
sendErrorEvent("The camera was closed during configuration.");
782-
return;
783-
}
784-
try {
785-
cameraCaptureSession = session;
786-
captureRequestBuilder.set(
787-
CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
788-
cameraCaptureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null);
789-
} catch (CameraAccessException e) {
790-
sendErrorEvent(e.getMessage());
791-
}
792-
}
793-
794-
@Override
795-
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
796-
sendErrorEvent("Failed to configure the camera for streaming images.");
797-
}
798-
},
799-
null);
800-
801-
registerImageStreamEventChannel();
802-
}
803-
804-
private void registerImageStreamEventChannel() {
805-
final EventChannel imageStreamChannel =
806-
new EventChannel(registrar.messenger(), "plugins.flutter.io/camera/imageStream");
807-
808-
imageStreamChannel.setStreamHandler(
809-
new EventChannel.StreamHandler() {
810-
@Override
811-
public void onListen(Object o, EventChannel.EventSink eventSink) {
812-
setImageStreamImageAvailableListener(eventSink);
813-
}
814-
815-
@Override
816-
public void onCancel(Object o) {
817-
imageStreamReader.setOnImageAvailableListener(null, null);
818-
}
819-
});
820-
}
821-
822-
private void setImageStreamImageAvailableListener(final EventChannel.EventSink eventSink) {
823-
imageStreamReader.setOnImageAvailableListener(
824-
new ImageReader.OnImageAvailableListener() {
825-
@Override
826-
public void onImageAvailable(final ImageReader reader) {
827-
Image img = reader.acquireLatestImage();
828-
if (img == null) return;
829-
830-
List<Map<String, Object>> planes = new ArrayList<>();
831-
for (Image.Plane plane : img.getPlanes()) {
832-
ByteBuffer buffer = plane.getBuffer();
833-
834-
byte[] bytes = new byte[buffer.remaining()];
835-
buffer.get(bytes, 0, bytes.length);
836-
837-
Map<String, Object> planeBuffer = new HashMap<>();
838-
planeBuffer.put("bytesPerRow", plane.getRowStride());
839-
planeBuffer.put("bytesPerPixel", plane.getPixelStride());
840-
planeBuffer.put("bytes", bytes);
841-
842-
planes.add(planeBuffer);
843-
}
844-
845-
Map<String, Object> imageBuffer = new HashMap<>();
846-
imageBuffer.put("width", img.getWidth());
847-
imageBuffer.put("height", img.getHeight());
848-
imageBuffer.put("format", img.getFormat());
849-
imageBuffer.put("planes", planes);
850-
851-
eventSink.success(imageBuffer);
852-
img.close();
853-
}
854-
},
855-
null);
856-
}
857-
858730
private void sendErrorEvent(String errorDescription) {
859731
if (eventSink != null) {
860732
Map<String, String> event = new HashMap<>();
@@ -878,13 +750,9 @@ private void close() {
878750
cameraDevice.close();
879751
cameraDevice = null;
880752
}
881-
if (pictureImageReader != null) {
882-
pictureImageReader.close();
883-
pictureImageReader = null;
884-
}
885-
if (imageStreamReader != null) {
886-
imageStreamReader.close();
887-
imageStreamReader = null;
753+
if (imageReader != null) {
754+
imageReader.close();
755+
imageReader = null;
888756
}
889757
if (mediaRecorder != null) {
890758
mediaRecorder.reset();

0 commit comments

Comments
 (0)