[FAQ10059] 在连拍过程中松开拍照键连拍不停止 Download
Platform:MT6589MT6572MT6582
Branch:JB2JB3JB5
FAQ Content
[DESCRIPTION]
进入camera长按拍照进行连拍,概率性出现松开拍照键连拍不停止的问题,可以按以下方法修改。
此问题属于performance问题,eng版本比user版本会多做一些mtklog等其他的操作,本身loading就比较重,所以performance相对来讲会差一些,建议修改后在user版本上进行测试。
[SOLUTION]
1、在InputDispatcher.cpp中做如下修改:
void InputDispatcher::notifyMotion(const NotifyMotionArgs* args) {
#if DEBUG_INBOUND_EVENT_DETAILS
ALOGD("notifyMotion - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, "
"action=0x%x, flags=0x%x, metaState=0x%x, buttonState=0x%x, edgeFlags=0x%x, "
"xPrecision=%f, yPrecision=%f, downTime=%lld",
args->eventTime, args->deviceId, args->source, args->policyFlags,
args->action, args->flags, args->metaState, args->buttonState,
args->edgeFlags, args->xPrecision, args->yPrecision, args->downTime);
for (uint32_t i = 0; i < args->pointerCount; i++) {
ALOGD(" Pointer %d: id=%d, toolType=%d, "
"x=%f, y=%f, pressure=%f, size=%f, "
"touchMajor=%f, touchMinor=%f, toolMajor=%f, toolMinor=%f, "
"orientation=%f",
i, args->pointerProperties[i].id,
args->pointerProperties[i].toolType,
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION));
}
#endif
//add start
bool isEmpty = mInboundQueue.isEmpty();
if (!isEmpty)
{
EventEntry *tail = static_cast(mInboundQueue.tail);
if (tail != NULL && tail->type == EventEntry::TYPE_MOTION )
{
MotionEntry* tailEntry = static_cast(tail);
if (tailEntry->action == args->action
&& tailEntry->downTime == args->downTime
&& tailEntry->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X) == args->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X)
&& tailEntry->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y) == args->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y)
)
{
ALOGD("MTK debug notifyMotion drop motion event because of same x and y, action =0x%x ",args->action);
return;
}
}
}
ALOGD("MTK debug notifyMotion not drop ");
//add end
if (!validateMotionEvent(args->action, args->pointerCount, args->pointerProperties)) {
return;
}
。。。。
}
2、 在orientationManager.java中添加以下两个函数:
public void enableOrientationManager(){
mOrientationListener.enable();
}
public void disableOrientationManager(){
mOrientationListener.disable();
}
3、 在AbstractGalleryActivity.java中添加以下两个函数:
public void enableOrientationManager(){
mOrientationManager.enableOrientationManager();
}
public void disableOrientationManager(){
mOrientationManager.disableOrientationManager();
}
4、在apps/Camera/src/com/android/camera/Camera.java中添加如下代码:
public void enableOrientationListener() {
mOrientationListener.enable();
}
public void disableOrientationListener() {
mOrientationListener.disable();
}
@Override
public void enableOrientationManager(){
super.enableOrientationManager();
}
@Override
public void disableOrientationManager(){
super.disableOrientationManager();
}
5、在apps/Camera/src/com/android/camera/actor/PhotoActor.java中:
5.1、在onBurstSaveDone()中做如下修改:
public void onBurstSaveDone() {
if (!mCameraClosed && !mCamera.isImageCaptureIntent()) {
mCamera.cancelContinuousShot();
restartPreview(false);
}
//add start
mCamera.enableOrientationListener();
mCamera.enableOrientationManager();
//add end
mSavingPictures = false;
}
5.2、在onShutterButtonLongPressed()中做如下修改:
mMemoryManager.initMemory();
mContinuousShotPerformed = true;
mCurrentShotsNum = 0;
//add start
mCamera.disableOrientationListener();
mCamera.disableOrientationManager();
//add end
mCamera.applyContinousShot();
mCamera.getThumbnailManager().setRefreshInterval(THUMBNAIL_REFRESH_CONTINUOUS);
mCamera.getFocusManager().clearFocusOnContinuous();
mCamera.getFocusManager().doSnap();