android UVCCamera close后再次open无图像问题
android usb摄像头使用开源库 UVCCamera部分型号摄像头在使用过程中出现close后再次open预览无图像问题,但退出整个app重新打开app又能正常出图
跟踪测试发现
private final USBMonitor.OnDeviceConnectListener mOnDeviceConnectListener = new USBMonitor.OnDeviceConnectListener() {
@Override
public void onAttach(final UsbDevice device) {
if(device.getDeviceSubclass() == 2)
new LogTools(TAG,"onAttach pid:" + device.getProductId() + " vid:" + device.getVendorId(),debug);
}
@Override
public void onConnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock, final boolean createNew) {
//new LogTools(TAG,"onConnect:" + device.toString(),debug);
int pid = device.getProductId();
int vid = device.getVendorId();
new LogTools(TAG,"onConnect pid:" + pid + " vid:" + vid,debug);
if((pid == CAM_ONE_PID) && (vid == CAM_ONE_VID)) {
//ctrlBlock.close();
usbControlBlocks.add(ctrlBlock);
mCameraHandler.open(ctrlBlock);
startPreview();
}
if((pid == CAM_TWO_PID) && (vid == CAM_TWO_VID)) {
//ctrlBlock.close();
usbControlBlocks.add(ctrlBlock);
mCameraHandler1.open(ctrlBlock);
startPreview1();
}
}
@Override
public void onDisconnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock) {
int pid = device.getProductId();
int vid = device.getVendorId();
new LogTools(TAG,"onDisconnect pid:" + pid + " vid:" + vid,debug);
}
@Override
public void onDettach(final UsbDevice device) {
//Toast.makeText(Main2.this, "USB_DEVICE_DETACHED", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(final UsbDevice device) {
}
};
在OnDeviceConnectListener中的onConnect函数中增加对UsbControlBlock的close操作后能正常出图,但在onConnect中直接调用ctrlBlock.close()会导致其它问题,所以先把ctrlBlock保存下来,在预览结束时进行close,这样处理,close后等至少5秒再次open基本上每次都能正常出图
if(usbControlBlocks.size() > 0) {
for (USBMonitor.UsbControlBlock usbControlBlock: usbControlBlocks) {
usbControlBlock.close();
}
usbControlBlocks.clear();
}
mCameraHandler.stopRecording();
mCameraHandler.close();
mCameraHandler1.stopRecording();
mCameraHandler1.close();
如果有其它的解决办法,欢迎讨论.