Callback机制_实现(2)
2016-05-04 16:09
204 查看
1) application层定义callback函数:
定义接口:
vim vendor/semc/frameworks/base/libs/camera-extension/api/src/com/sonyericsson/cameraextension/CameraExtension.java
public interface ObjectTrackingCallback {
void onObjectTracked(ObjectTrackingResult objectTrackingResult);
}
定义callback函数,是真实处理底层数据的函数:
vim vendor/semc/packages/apps/camera-addons/CameraUI/src/com/sonyericsson/android/camera/controller/ObjectTracking.java
private class ObjectTrackingCallback implements CameraExtension.ObjectTrackingCallback {
@Override
public void onObjectTracked(ObjectTrackingResult result) {
……
if (mShouldWaitForLost) {
if (!result.mIsLost) {
// Ignore detect object event for wait next lost event.
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "onObjectTracked: ignore detect.");
return;
} else {
// Restart object tracking after lost event.
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "onObjectTracked: restart.");
mController.mCameraDevice.stopObjectTrackingCallback();
startTracking(mPosition);
mShouldWaitForLost = false;
}
}
// Ignore continuous lost event.
if (mIsAlreadyLost && result.mIsLost) {
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "onObjectTracked: ignore lost");
return;
}
mIsAlreadyLost = result.mIsLost;
if (result.mIsLost) {
mHandler.startTimeoutCount();
} else {
mHandler.stopTimeoutCount();
Executor.postEvent(ControllerEvent.EV_OBJECT_TRACKING, 0,
result.mRectOfTrackedObject);
}
}
}
调用java接口函数注册callback函数:
private void startTracking(Rect position) {
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "startTracking: " + position);
mCallback = new ObjectTrackingCallback(); //callback函数
mController.mCameraWindow.startObjectTrackingAnimation(position);
mController.mCameraDevice.startObjectTracking(
PositionConverter.getInstance().convertFaceToDevice(position),
mCallback); //传递callback函数
}
vim vendor/semc/packages/apps/camera-addons/CameraUI/src/com/sonyericsson/android/camera/device/CameraDevice.java
public void startObjectTracking(Rect position, ObjectTrackingCallback cb) {
…… //接口函数-frameworks层提供
mCameraExtension.setObjectTrackingCallback(cb //cb即为上面传递下来的callback函数,
CameraDeviceUtil.OBJECT_TRACKING_LOW_PASS_FILTER_STRENGTH,
CameraDeviceUtil.OBJECT_TRACKING_MINIMAL_INTERVAL_MS);
mCameraExtension.startObjectTracking();
mCameraExtension.selectObject(position.centerX(), position.centerY());
mIsObjectTrackingRunning = true;
……
new EachCameraStatusPublisher(mCameraActivity, mCameraId)
.put(new ObjectTracking(ObjectTracking.Value.ON))
.publish();
}
实现用于注册callback函数的java接口函数:
vim vendor/semc/frameworks/base/libs/camera-extension/api/src/com/sonyericsson/cameraextension/CameraExtension.java
public final void setObjectTrackingCallback(
final ObjectTrackingCallback cb,
int lowPassFilterStrength,
int minimumIntervalMilliSec) {
if (mIsReleased) {
return;
}
mObjectTrackingCallback = cb; //获得application层传下的callback函数指针
if (Integer.MAX_VALUE < minimumIntervalMilliSec) {
minimumIntervalMilliSec = minimumIntervalMilliSec;
}
/* ++ Somc-integrate-CameraExtension-01 */
//setObjectTrackingLowPassFilterPrameters(lowPassFilterStrength, minimumIntervalMilliSec);
if (mCamera != null) {
if (mObjectTrackingFWCallback == null) {
mObjectTrackingFWCallback = new OTCallback(); //又一callback函数
} //调用另一注册函数注册另一个callback函数2(双callback)
mCamera.setObjectTrackingLowPassFilterPrameters(mObjectTrackingFWCallback,
lowPassFilterStrength, minimumIntervalMilliSec);
}
/* -- Somc-integrate-CameraExtension-01 */
}
2) 接口层定义callback函数:
定义接口:
vim frameworks/base/core/java/android/hardware/Camera.java
public interface ObjectTrackingFWCallback {
void onObjectTrackingFWCallback(ObjectTrackingResult objectTrackingResult, Camera camera);
};
定义callback函数,是真实处理底层数据的函数:
vim vendor/semc/frameworks/base/libs/camera-extension/api/src/com/sonyericsson/cameraextension/CameraExtension.java
class OTCallback implements Camera.ObjectTrackingFWCallback {
public void onObjectTrackingFWCallback(Camera.ObjectTrackingResult objectTrackingResult,
Camera camera) {
if (mObjectTrackingCallback != null && objectTrackingResult != null) {
……
if (mObjectTrackingResult == null)
mObjectTrackingResult = new ObjectTrackingResult();
mObjectTrackingResult.mRectOfTrackedObject = new android.graphics.Rect(
objectTrackingResult.mRectOfTrackedObject.left, objectTrackingResult.mRectOfTrackedObject.top,
objectTrackingResult.mRectOfTrackedObject.right, objectTrackingResult.mRectOfTrackedObject.bottom);
mObjectTrackingResult.mIsLost = objectTrackingResult.mIsLost;
mObjectTrackingCallback.onObjectTracked(mObjectTrackingResult);
} //由上述处理可知,callback2将得到的数据传递给callback1—>传至application
}
}
实现用于注册callback的接口函数:
vim frameworks/base/core/java/android/hardware/Camera.java
public void setObjectTrackingLowPassFilterPrameters(ObjectTrackingFWCallback cb, int lowPassFilterStrength, int minimumIntervalMilliSec){
mObjectTrackingFWCallback = cb;
_setObjectTrackingLowPassFilterPrameters(lowPassFilterStrength, minimumIntervalMilliSec);
}
接下来通过handler机制将client端得到的数据传给当前callback函数(mObjectTrackingFWCallback)。
定义接口:
vim vendor/semc/frameworks/base/libs/camera-extension/api/src/com/sonyericsson/cameraextension/CameraExtension.java
public interface ObjectTrackingCallback {
void onObjectTracked(ObjectTrackingResult objectTrackingResult);
}
定义callback函数,是真实处理底层数据的函数:
vim vendor/semc/packages/apps/camera-addons/CameraUI/src/com/sonyericsson/android/camera/controller/ObjectTracking.java
private class ObjectTrackingCallback implements CameraExtension.ObjectTrackingCallback {
@Override
public void onObjectTracked(ObjectTrackingResult result) {
……
if (mShouldWaitForLost) {
if (!result.mIsLost) {
// Ignore detect object event for wait next lost event.
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "onObjectTracked: ignore detect.");
return;
} else {
// Restart object tracking after lost event.
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "onObjectTracked: restart.");
mController.mCameraDevice.stopObjectTrackingCallback();
startTracking(mPosition);
mShouldWaitForLost = false;
}
}
// Ignore continuous lost event.
if (mIsAlreadyLost && result.mIsLost) {
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "onObjectTracked: ignore lost");
return;
}
mIsAlreadyLost = result.mIsLost;
if (result.mIsLost) {
mHandler.startTimeoutCount();
} else {
mHandler.stopTimeoutCount();
Executor.postEvent(ControllerEvent.EV_OBJECT_TRACKING, 0,
result.mRectOfTrackedObject);
}
}
}
调用java接口函数注册callback函数:
private void startTracking(Rect position) {
if (CameraLogger.DEBUG) CameraLogger.d(TAG, "startTracking: " + position);
mCallback = new ObjectTrackingCallback(); //callback函数
mController.mCameraWindow.startObjectTrackingAnimation(position);
mController.mCameraDevice.startObjectTracking(
PositionConverter.getInstance().convertFaceToDevice(position),
mCallback); //传递callback函数
}
vim vendor/semc/packages/apps/camera-addons/CameraUI/src/com/sonyericsson/android/camera/device/CameraDevice.java
public void startObjectTracking(Rect position, ObjectTrackingCallback cb) {
…… //接口函数-frameworks层提供
mCameraExtension.setObjectTrackingCallback(cb //cb即为上面传递下来的callback函数,
CameraDeviceUtil.OBJECT_TRACKING_LOW_PASS_FILTER_STRENGTH,
CameraDeviceUtil.OBJECT_TRACKING_MINIMAL_INTERVAL_MS);
mCameraExtension.startObjectTracking();
mCameraExtension.selectObject(position.centerX(), position.centerY());
mIsObjectTrackingRunning = true;
……
new EachCameraStatusPublisher(mCameraActivity, mCameraId)
.put(new ObjectTracking(ObjectTracking.Value.ON))
.publish();
}
实现用于注册callback函数的java接口函数:
vim vendor/semc/frameworks/base/libs/camera-extension/api/src/com/sonyericsson/cameraextension/CameraExtension.java
public final void setObjectTrackingCallback(
final ObjectTrackingCallback cb,
int lowPassFilterStrength,
int minimumIntervalMilliSec) {
if (mIsReleased) {
return;
}
mObjectTrackingCallback = cb; //获得application层传下的callback函数指针
if (Integer.MAX_VALUE < minimumIntervalMilliSec) {
minimumIntervalMilliSec = minimumIntervalMilliSec;
}
/* ++ Somc-integrate-CameraExtension-01 */
//setObjectTrackingLowPassFilterPrameters(lowPassFilterStrength, minimumIntervalMilliSec);
if (mCamera != null) {
if (mObjectTrackingFWCallback == null) {
mObjectTrackingFWCallback = new OTCallback(); //又一callback函数
} //调用另一注册函数注册另一个callback函数2(双callback)
mCamera.setObjectTrackingLowPassFilterPrameters(mObjectTrackingFWCallback,
lowPassFilterStrength, minimumIntervalMilliSec);
}
/* -- Somc-integrate-CameraExtension-01 */
}
2) 接口层定义callback函数:
定义接口:
vim frameworks/base/core/java/android/hardware/Camera.java
public interface ObjectTrackingFWCallback {
void onObjectTrackingFWCallback(ObjectTrackingResult objectTrackingResult, Camera camera);
};
定义callback函数,是真实处理底层数据的函数:
vim vendor/semc/frameworks/base/libs/camera-extension/api/src/com/sonyericsson/cameraextension/CameraExtension.java
class OTCallback implements Camera.ObjectTrackingFWCallback {
public void onObjectTrackingFWCallback(Camera.ObjectTrackingResult objectTrackingResult,
Camera camera) {
if (mObjectTrackingCallback != null && objectTrackingResult != null) {
……
if (mObjectTrackingResult == null)
mObjectTrackingResult = new ObjectTrackingResult();
mObjectTrackingResult.mRectOfTrackedObject = new android.graphics.Rect(
objectTrackingResult.mRectOfTrackedObject.left, objectTrackingResult.mRectOfTrackedObject.top,
objectTrackingResult.mRectOfTrackedObject.right, objectTrackingResult.mRectOfTrackedObject.bottom);
mObjectTrackingResult.mIsLost = objectTrackingResult.mIsLost;
mObjectTrackingCallback.onObjectTracked(mObjectTrackingResult);
} //由上述处理可知,callback2将得到的数据传递给callback1—>传至application
}
}
实现用于注册callback的接口函数:
vim frameworks/base/core/java/android/hardware/Camera.java
public void setObjectTrackingLowPassFilterPrameters(ObjectTrackingFWCallback cb, int lowPassFilterStrength, int minimumIntervalMilliSec){
mObjectTrackingFWCallback = cb;
_setObjectTrackingLowPassFilterPrameters(lowPassFilterStrength, minimumIntervalMilliSec);
}
接下来通过handler机制将client端得到的数据传给当前callback函数(mObjectTrackingFWCallback)。
相关文章推荐
- KMP 算法实现
- MyEclipse下Maven的安装配置
- POJ 2240 Arbitrage
- JS只能输入数字,数字和字母等的正则表达式
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- Web前端新人笔记之height、min-height的区别详解
- php环境配置
- 第十七课预期策略选择——C#计算器编程教学
- 数据结构与算法--初探门径
- JS转换HTML转义符
- 《淘宝技术这十年》重读笔记
- 跟王老师学异常(九):Log4j基本使用方法
- 数组中的逆序对(归并的思想)
- ffmpeg强制使用TCP方式读取rtsp流
- mysql导出视图没有权限
- JQuery Form AjaxSubmit
- android listview+popuwindow动态显示遇到的问题
- 欢迎使用CSDN-markdown编辑器
- jmeter语言设置
- javaweb学习总结(四十七)——监听器(Listener)在开发中的应用