public int enablePreviewEvents(
      int type, int memBuffer, int left, int top, int width, int height) {
    if (mPreview == null && mCamera == null) return MAAPI_consts.MA_CAMERA_RES_FAILED;

    if (mMoSyncPreviewEventEnabled) return MAAPI_consts.MA_CAMERA_RES_EVENTS_ALREADY_ENABLED;

    if (type == MAAPI_consts.MA_CAMERA_PREVIEW_FRAME) {
      if (mMoSyncPreviewAutoFocusEventEnabled)
        return MAAPI_consts.MA_CAMERA_RES_EVENTS_ALREADY_ENABLED;

      // enable preview frame events
      mMoSyncPreviewFrameEventEnabled = true;

    } else if (type == MAAPI_consts.MA_CAMERA_PREVIEW_AUTO_FOCUS) {
      if (mMoSyncPreviewFrameEventEnabled) return MAAPI_consts.MA_CAMERA_RES_EVENTS_ALREADY_ENABLED;

      // enable preview auto foucs events
      mMoSyncPreviewAutoFocusEventEnabled = true;

    } else return MAAPI_consts.MA_CAMERA_RES_FAILED;

    // Get the size of the preview and make sure the rect
    // ins't too big!
    // Camera.Parameters camParam = mCamera.getParameters();
    Camera.Size previewSize = mPreview.mPreviewSize;

    if (previewSize == null) {
      SYSLOG("Preview size is null");
      return MAAPI_consts.MA_CAMERA_RES_FAILED;
    }

    int w = previewSize.width;
    int h = previewSize.height;

    if ((left + width) > w) return MAAPI_consts.MA_CAMERA_RES_INVALID_PREVIEW_SIZE;
    if ((top + height) > h) return MAAPI_consts.MA_CAMERA_RES_INVALID_PREVIEW_SIZE;

    int sliceSize = width * height * 4;

    mMoSyncPreviewEventBuffer = mMoSyncThread.getMemorySlice(memBuffer, sliceSize).asIntBuffer();

    if (mMoSyncPreviewEventBuffer == null) return MAAPI_consts.MA_CAMERA_RES_FAILED;

    mPreviewEventBufferLeft = left;
    mPreviewEventBufferTop = top;
    mPreviewEventBufferRight = left + width;
    mPreviewEventBufferBottom = top + height;

    mMoSyncPreviewEventEnabled = true;

    return MAAPI_consts.MA_CAMERA_RES_OK;
  }