Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Unified Diff: examples/dart/camera_video/lib/main.dart

Issue 1375733004: -Add a mojo service to get video frames from the camera through an android service (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: remove stale files. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: examples/dart/camera_video/lib/main.dart
diff --git a/examples/dart/camera_video/lib/main.dart b/examples/dart/camera_video/lib/main.dart
new file mode 100644
index 0000000000000000000000000000000000000000..678904d166b8b05c106693ba6c3dd1411afb35ca
--- /dev/null
+++ b/examples/dart/camera_video/lib/main.dart
@@ -0,0 +1,79 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This example makes use of mojo:camera which is available only when
+// running on Android. It repeatedly captures camera video frame images
+// and displays it in a mojo view.
+//
+// Example usage:
+// pub get
+// pub run sky_tools build
+// pub run sky_tools run_mojo --mojo-path=../../.. --android
+
+import 'dart:sky';
+import 'dart:typed_data';
+
+import 'package:mojo_services/mojo/camera.mojom.dart';
+import 'package:sky/services.dart';
+
+Image image = null;
+final CameraVideoServiceProxy cameraRoll = new CameraVideoServiceProxy.unbound();
+
+Picture paint(Rect paintBounds) {
+ PictureRecorder recorder = new PictureRecorder();
+ if (image != null) {
+ Canvas canvas = new Canvas(recorder, paintBounds);
+ canvas.translate(paintBounds.width / 2.0, paintBounds.height / 2.0);
+ canvas.scale(0.3, 0.3);
+ Paint paint = new Paint()..color = const Color.fromARGB(255, 0, 255, 0);
+ canvas.drawImage(image, new Point(-image.width / 2.0, -image.height / 2.0), paint);
+ }
+ return recorder.endRecording();
+}
+
+Scene composite(Picture picture, Rect paintBounds) {
+ final double devicePixelRatio = view.devicePixelRatio;
+ Rect sceneBounds = new Rect.fromLTWH(
+ 0.0, 0.0, view.width * devicePixelRatio, view.height * devicePixelRatio);
+ Float32List deviceTransform = new Float32List(16)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio
+ ..[10] = 1.0
+ ..[15] = 1.0;
+ SceneBuilder sceneBuilder = new SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(Offset.zero, picture, paintBounds)
+ ..pop();
+ return sceneBuilder.build();
+}
+
+void beginFrame(double timeStamp) {
+ Rect paintBounds = new Rect.fromLTWH(0.0, 0.0, view.width, view.height);
+ Picture picture = paint(paintBounds);
+ Scene scene = composite(picture, paintBounds);
+ view.scene = scene;
+}
+
+void drawNextPhoto() {
+ var future = cameraRoll.ptr.getVideoFrames();
+ future.then((response) {
+ if (response.content == null) {
+ drawNextPhoto();
+ return;
+ }
+ new ImageDecoder(response.content.handle.h, (frame) {
+ if (frame != null) {
+ image = frame;
+ view.scheduleFrame();
+ drawNextPhoto();
+ }
+ });
+ });
+}
+
+void main() {
+ view.setFrameCallback(beginFrame);
+ embedder.connectToService("mojo:camera", cameraRoll);
+ drawNextPhoto();
+}

Powered by Google App Engine
This is Rietveld 408576698