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

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/input/CardboardVRDevice.java

Issue 829803003: Adding Chrome-side WebVR interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updates/cleanups before pulling in reviewers. Created 5 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
no sievers 2015/03/19 01:24:52 nit: 2015
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.content.browser.input;
6
7 import android.content.Context;
8 import android.os.Handler;
9 import android.os.HandlerThread;
10 import android.util.Log;
11
12 import com.google.vrtoolkit.cardboard.CardboardDeviceParams;
13 import com.google.vrtoolkit.cardboard.FieldOfView;
14 import com.google.vrtoolkit.cardboard.HeadMountedDisplay;
15 import com.google.vrtoolkit.cardboard.HeadMountedDisplayManager;
16 import com.google.vrtoolkit.cardboard.ScreenParams;
17 import com.google.vrtoolkit.cardboard.sensors.HeadTracker;
18 import com.google.vrtoolkit.cardboard.sensors.MagnetSensor;
19
20 import org.chromium.base.CalledByNative;
21 import org.chromium.base.JNINamespace;
22
23 /**
24 * This is the implementation of the C++ counterpart CardboardVRDevice.
25 */
26 @JNINamespace("content")
27 class CardboardVRDevice implements MagnetSensor.OnCardboardTriggerListener {
28 private static final String TAG = "CardboardVRDevice";
29 private HeadMountedDisplayManager mHMDManager;
30 private HeadTracker mHeadTracker;
31 private long mVrDevicePtr;
32 private HandlerThread mSensorObserverThread;
33 private Handler mSensorHandler;
34 private MagnetSensor mMagnetSensor;
35
36 @CalledByNative
37 private static CardboardVRDevice create(Context context, long vrDevicePtr) {
38 return new CardboardVRDevice(context, vrDevicePtr);
39 }
40
41 private CardboardVRDevice(Context context, long vrDevicePtr) {
42 mVrDevicePtr = vrDevicePtr;
43
44 mHMDManager = new HeadMountedDisplayManager(context);
45
46 mHeadTracker = HeadTracker.createFromContext(context);
47 mHeadTracker.setNeckModelEnabled(true);
48 mHeadTracker.startTracking();
49
50 mMagnetSensor = new MagnetSensor(context);
51 startObservingCardboardSensors();
52 }
53
54 @CalledByNative
55 private void getFieldOfView(float[] outFov) {
56 HeadMountedDisplay hmd = mHMDManager.getHeadMountedDisplay();
57 CardboardDeviceParams deviceParams = hmd.getCardboardDeviceParams();
58 FieldOfView fov = deviceParams.getLeftEyeMaxFov();
59 outFov[0] = fov.getTop();
60 outFov[1] = fov.getBottom();
61 outFov[2] = fov.getLeft();
62 outFov[3] = fov.getRight();
63 }
64
65 @CalledByNative
66 private float getIPD() {
67 HeadMountedDisplay hmd = mHMDManager.getHeadMountedDisplay();
68 CardboardDeviceParams deviceParams = hmd.getCardboardDeviceParams();
69 return deviceParams.getInterLensDistance();
70 }
71
72 @CalledByNative
73 private String getDeviceName() {
74 HeadMountedDisplay hmd = mHMDManager.getHeadMountedDisplay();
75 CardboardDeviceParams deviceParams = hmd.getCardboardDeviceParams();
76 return deviceParams.getVendor() + " " + deviceParams.getModel();
77 }
78
79 @CalledByNative
80 private void getScreenSize(int[] outSize) {
81 HeadMountedDisplay hmd = mHMDManager.getHeadMountedDisplay();
82 ScreenParams screenParams = hmd.getScreenParams();
83 outSize[0] = screenParams.getWidth();
84 outSize[1] = screenParams.getHeight();
85 }
86
87 @CalledByNative
88 private void getSensorState(float[] outMatrix) {
89 mHeadTracker.getLastHeadView(outMatrix, 0);
90 }
91
92 @CalledByNative
93 private void stopTracking() {
94 mHeadTracker.stopTracking();
95 stopObservingCardboardSensors();
96 }
97
98 @CalledByNative
99 private void resetSensor() {
100 mHeadTracker.resetTracker();
101 }
102
103 @Override
104 public void onCardboardTrigger() {
105 Log.d(TAG, "onCardboardTrigger");
no sievers 2015/03/19 01:24:52 that's spammy
106 nativeOnCardboardTrigger(mVrDevicePtr);
107 }
108
109 private native void nativeOnCardboardTrigger(long vrDevicePtr);
110
111 private void startObservingCardboardSensors() {
112 if (mSensorObserverThread != null)
113 return;
114 final CardboardVRDevice listener = this;
115
116 mSensorObserverThread = new HandlerThread("MagnetObserver");
117 mSensorObserverThread.start();
118
119 mSensorHandler = new Handler(mSensorObserverThread.getLooper());
120 mSensorHandler.post(new Runnable() {
121 @Override
122 public void run() {
123 mMagnetSensor.setOnCardboardTriggerListener(listener);
124 mMagnetSensor.start();
125 }
126 });
127 }
128
129 private void stopObservingCardboardSensors() {
130 final CardboardVRDevice listener = this;
no sievers 2015/03/19 01:24:52 unused var
131 mMagnetSensor.stop();
no sievers 2015/03/19 01:24:52 Is it ok to call this from a thread different than
132
133 if (mSensorObserverThread == null)
134 return;
135
136 mSensorObserverThread.quit();
137 try {
138 mSensorObserverThread.join();
139 } catch (InterruptedException e) {
140 Log.e(TAG, "Thread.join() exception: ", e);
141 }
142 mSensorObserverThread = null;
143 }
144 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698