Java mCamera.setpreview{@override onPreviewFrame()}无效 我想录制视频并分析服务中的当前位图 所以我在onStartCommand函数中注册了surfaceHolder.addCallback 并在surfaceCreated函数中设置mCamera.setPreviewCallback 当我启动该服务时,onPreviewFrame功能似乎无法工作
我不知道为什么,有人能帮我一下吗 这是我的Java mCamera.setpreview{@override onPreviewFrame()}无效 我想录制视频并分析服务中的当前位图 所以我在onStartCommand函数中注册了surfaceHolder.addCallback 并在surfaceCreated函数中设置mCamera.setPreviewCallback 当我启动该服务时,onPreviewFrame功能似乎无法工作,java,android,Java,Android,我不知道为什么,有人能帮我一下吗 这是我的onStartCommand功能代码 @Override public int onStartCommand(Intent intent, int flags, int startId) { if (Util.checkCameraHardware(this)) { mCamera = Util.getCameraInstance(); if (mCamera != null) {
onStartCommand
功能代码
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (Util.checkCameraHardware(this)) {
mCamera = Util.getCameraInstance();
if (mCamera != null) {
SurfaceView sv = new SurfaceView(this);
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(1, 1,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
SurfaceHolder sh = sv.getHolder();
sv.setZOrderOnTop(true);
sh.setFormat(PixelFormat.TRANSPARENT);
sh.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
Camera.Parameters params = mCamera.getParameters();
mCamera.setParameters(params);
Camera.Parameters p = mCamera.getParameters();
List<Camera.Size> listSize;
listSize = p.getSupportedPreviewSizes();
Camera.Size mPreviewSize = listSize.get(2);
Log.v("TAG", "preview width = " + mPreviewSize.width
+ " preview height = " + mPreviewSize.height);
p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
listSize = p.getSupportedPictureSizes();
Camera.Size mPictureSize = listSize.get(2);
Log.v("TAG", "capture width = " + mPictureSize.width
+ " capture height = " + mPictureSize.height);
p.setPictureSize(mPictureSize.width, mPictureSize.height);
mCamera.setParameters(p);
try {
mCamera.setPreviewDisplay(holder);
/***************************************************************************/
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (_calibrationsLeft == -1)
return;
if (_calibrationsLeft > 0) {
// Doing calibration !
if (_currentFaceDetectionThread != null
&& _currentFaceDetectionThread.isAlive()) {
// Drop Frame
return;
}
// No face detection started or already finished
_processTimeForLastFrame = System.currentTimeMillis()
- _lastFrameStart;
_lastFrameStart = System.currentTimeMillis();
if (_currentFaceDetectionThread != null) {
_calibrationsLeft--;
updateMeasurement(_currentFaceDetectionThread.getCurrentFace());
if (_calibrationsLeft == 0) {
doneCalibrating();
return;
}
}
_currentFaceDetectionThread = new FaceDetectionThread(data,
_previewSize);
_currentFaceDetectionThread.start();
} else {
// Simple Measurement
if (_currentFaceDetectionThread != null
&& _currentFaceDetectionThread.isAlive()) {
// Drop Frame
return;
}
// No face detection started or already finished
_processTimeForLastFrame = System.currentTimeMillis()
- _lastFrameStart;
_lastFrameStart = System.currentTimeMillis();
if (_currentFaceDetectionThread != null)
updateMeasurement(_currentFaceDetectionThread.getCurrentFace());
_currentFaceDetectionThread = new FaceDetectionThread(data,
_previewSize);
_currentFaceDetectionThread.start();
}
}
});
/****************************************************************************/
} catch (IOException e) {
e.printStackTrace();
}
mCamera.startPreview();
MessageHUB.get().sendMessage(MessageHUB.LOG_PREVIEW, null);
mCamera.unlock();
calibrate();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
wm.addView(sv, params);
} else {
Log.d("TAG", "==== get Camera from service failed");
}
} else {
Log.d("TAG", "==== There is no camera hardware on device.");
}
return super.onStartCommand(intent, flags, startId);
}
@覆盖
公共int onStartCommand(Intent Intent、int标志、int startId){
如果(使用checkCameraHardware(本)){
mCamera=Util.getCameraInstance();
if(mCamera!=null){
SurfaceView sv=新的SurfaceView(本);
WindowManager wm=(WindowManager)getSystemService(Context.WINDOW\u服务);
WindowManager.LayoutParams params=新的WindowManager.LayoutParams(1,1,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG\u WATCH\u Out\u TOUCH,
像素格式(半透明);
SurfaceHolder sh=sv.getHolder();
sv.setZOrderOnTop(真);
sh.setFormat(PixelFormat.TRANSPARENT);
sh.addCallback(新的SurfaceHolder.Callback(){
@凌驾
已创建的公共空白表面(表面持有人){
Camera.Parameters params=mCamera.getParameters();
mCamera.setParameters(参数);
Camera.Parameters p=mCamera.getParameters();
列表大小;
listSize=p.getSupportedPreviewSizes();
Camera.Size mPreviewSize=listSize.get(2);
Log.v(“标记”、“预览宽度=“+mPreviewSize.width
+“预览高度=“+mPreviewSize.height”);
p、 setPreviewSize(mPreviewSize.width、mPreviewSize.height);
listSize=p.getSupportedPictureSizes();
Camera.Size=listSize.get(2);
Log.v(“标记”、“捕获宽度=“+mPictureSize.width
+“捕获高度=”+mPictureSize.height);
p、 setPictureSize(mPictureSize.width,mPictureSize.height);
mCamera.setParameters(p);
试一试{
mCamera.setPreviewDisplay(支架);
/***************************************************************************/
mCamera.setPreviewCallback(新的Camera.PreviewCallback(){
@凌驾
预览帧上的公共无效(字节[]数据,摄像头){
如果(_calibrationsLeft==-1)
返回;
如果(_calibrationsLeft>0){
//正在校准!
如果(_currentFaceDetectionThread!=null
&&\u currentFaceDetectionThread.isAlive()){
//升降架
返回;
}
//没有人脸检测开始或已经完成
_processTimeForLastFrame=System.currentTimeMillis()
-_last framestart;
_lastFrameStart=System.currentTimeMillis();
如果(_currentFaceDetectionThread!=null){
_校准左--;
updateMeasurement(_currentFaceDetectionThread.getCurrentFace());
如果(_calibrationsLeft==0){
完成校准();
返回;
}
}
_currentFaceDetectionThread=新的FaceDetectionThread(数据,
_预览大小);
_currentFaceDetectionThread.start();
}否则{
//简单测量
如果(_currentFaceDetectionThread!=null
&&\u currentFaceDetectionThread.isAlive()){
//升降架
返回;
}
//没有人脸检测开始或已经完成
_processTimeForLastFrame=System.currentTimeMillis()
-_last framestart;
_lastFrameStart=System.currentTimeMillis();
如果(_currentFaceDetectionThread!=null)
updateMeasurement(_currentFaceDetectionThread.getCurrentFace());
_currentFaceDetectionThread=新的FaceDetectionThread(数据,
_预览大小);
_currentFaceDetectionThread.start();
}
}
});
/****************************************************************************/
}捕获(IOE异常){
e、 printStackTrace();
}
mCamera.startPreview();
MessageHUB.get().sendMessage(MessageHUB.LOG\u预览,空);
mCamera.unlock()
mCamera.stopPreview();