com.aliyun.svideosdk.multirecorder

## Interface AliyunICameraCapture

- All Superinterfaces:
    AliyunIBaseCapture

      public interface AliyunICameraCapture
      extends AliyunIBaseCapture

  摄像头录制接口 v3.22.0 新增

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `addImage(EffectImage effectImage)` 添加贴图素材,如果需要使用文字贴图，可以通过Bitmap工具把文字转成贴图 通过接口`setEffectView(float, float, float, float, EffectBase)` 调整贴图的位置
    `int` | `addPaster(EffectPaster effectPaster)` 添加人脸动图，人脸动图与普通动图要严格区分，如果把普通动图素材当作人脸动图使用，则会出现动图不显示的情况，要使用人脸动图，必须先设置 rotation，通过`setRotation(int)`实现。rotation的具体计算方式，请参考Demo中的代码。 添加普通动图不能使用该接口，而需要使用`addPaster(EffectPaster, float, float, float, float, float, boolean)`
    `int` | `addPaster(EffectPaster effectPaster, float sx, float sy, float sw, float sh, float rotation, boolean flip)` 添加普通动图，人脸动图可以当作普通动图，但是普通动图不能当作人脸动图 注意 `AliyunIRecorder#setEffectView(float, float, float, float, EffectBase)`的执行效果会和此函数的执行效果进行叠加
    `int` | `applyAnimationFilter(EffectFilter effectFilter)` 设置动效滤镜，通过`EffectFilter.Builder`来构建滤镜资源对象
    `int` | `applyFilter(EffectFilter effectFilter)` 设置滤镜效果
    `int` | `getBeautyLevel()` 获取当前美颜度
    `int` | `getCameraCount()` 获取摄像头数量
    `float` | `getCurrentExposureCompensationRatio()` 获取当前曝光度的比例值
    `java.util.List<Camera.Size>` | `getSupportedPictureSize()` 获取当前摄像头支持的照片尺寸
    `java.util.SortedSet<Size>` | `getSupportedPictureSizes()` 获取当前摄像头支持的照片尺寸
    `void` | `needFaceTrackInternal(boolean need)` 是否需要开启内置人脸识别
    `void` | `removeAnimationFilter(EffectFilter effectFilter)` 删除动效滤镜
    `void` | `removeFilter()` 删除滤镜效果
    `void` | `removeImage(EffectImage effectImage)` 删除贴图
    `void` | `removePaster(EffectPaster effectPaster)` 删除动图素材，普通动图和人脸动图都通过该接口移除
    `int` | `resizePreviewSize(int width, int height)` 重新设置预览窗口大小（可以实现动态切换预览画幅）
    `void` | `setAutoPreviewAfterTakePhoto(boolean autoPreviewAfterTakePhoto)` 设置拍照后是否继续预览
    `void` | `setBeautyLevel(int level)` 设置美颜度
    `void` | `setBeautyStatus(boolean on)` 设置美颜开/关
    `void` | `setCamera(CameraType camera)` 设置开启预览时的摄像头类型。仅在第一次打开时生效，后面如果要切换摄像头使用`switchCamera()`
    `void` | `setCameraCaptureDataMode(int captureDataMode)` 设置Camera 数据回调方式
    `void` | `setCameraParam(CameraParam cameraParam)` 设置摄像头预览参数
    `void` | `setDisplayView(SurfaceView displayView)` 设置显示预览的`SurfaceView`
    `int` | `setEffectView(float xRatio, float yRatio, float widthRatio, float heightRatio, EffectBase effectBase)` 设置特效信息（位置，大小） widthRatio和heightRatio参数需要符合素材宽高/屏幕宽高的比例 比如： 素材的宽高为200，300， 屏幕的宽高为 540，720 sw = (float)200/540, sh = (float)300/720。sx,sy是归一化的屏幕比例参数，坐标是以资源的中心点作为锚点的
    `int` | `setExposureCompensationRatio(float value)` 设置曝光度比例
    `void` | `setFaceDetectRotation(int rotation)` 设置单独的人脸识别角度,如果使用本接口，请不要使用setRotation
    `int` | `setFaces(float[][] faces)` 设置人脸坐标点，而二维组每个元素，代表一张脸的6个特征点。
    `void` | `setFaceTrackInternalMaxFaceCount(int maxFaceCount)` 设置内置人脸识别的最大识别数，最大为3个，大于3个为3个
    `int` | `setFaceTrackInternalModelPath(java.lang.String path)` 设置人脸识别模型文件夹路径 这里必须是包含模型文件的目录路径，模型文件的文件名不能修改
    `void` | `setFocus(float xRatio, float yRatio)` 设置对焦点，仅当`setFocusMode(int)` 的参数为`CameraParam.FOCUS_MODE_AUTO`时有效
    `void` | `setFocus(Point point)` Deprecated.
    `void` | `setFocusMode(int mode)` 设置聚焦模式
    `boolean` | `setLight(FlashType flashType)` 设置闪光灯模式
    `void` | `setOnChoosePictureSizeCallBack(OnChoosePictureSizeCallback callback)` 设置拍照分辨率回调
    `void` | `setOnFaceDetectInfoListener(OnFaceDetectInfoListener listener)` 设置人脸检测信息变化的回调，当人脸检测信息发生改变时将触发 `OnFaceDetectInfoListener.onFaceInfoChange(FaceDetectInfo)`
    `void` | `setOnFrameCallback(OnFrameCallback callback)` 设置采集帧回调，每采集一帧数据都通过该回调返回帧数据
    `void` | `setOnTextureIdCallback(OnTextureIdCallback callback)` 设置纹理ID回调
    `void` | `setOutputFlip(boolean flip)` 设置摄像头录制输出视频是否进行镜像处理 注意：仅对输出视频有效，预览不改变
    `int` | `setPictureSize(int width, int height)` 设置照片尺寸
    `void` | `setRecordRotation(int rotation)` 设置单独的录制视频角度,如果使用本接口，请不要使用setRotation 如果需要根据传感器角度来设置录制角度,需要加上计算 if (rotation == 90 || rotation == 270) { rotation = (rotation + 90) % 360; if (mAliyunCamera.getCameraInfo().facing == CameraInfo.CAMERA_FACING_BACK) { rotation += 180; rotation %= 360; } } else if (rotation == 0 || rotation == 180) { rotation = (rotation + 270) % 360; }
    `void` | `setRotation(int rotation)` 设置传感器的角度值，如果传感器返回的角度值不是0，90，180，270四个值中的，需要根据范围来确定 Sets the rotation angle of the gyro sensor.
    `void` | `setShutterSound(boolean bNeedShutterSound)` 设置拍照时是否存在咔嚓声
    `int` | `setZoom(float rate)` 设置摄像头缩放比例
    `void` | `snapshot(boolean needBitmap, OnPictureCallback pictureCallback)` 预览画面截图（包含特效） 该接口为异步接口，通过`OnPictureCallback#onPicture(byte[])` 返回图像数据； 再根据是否转换为 bitmap 回调`OnPictureCallback.onPicture(Bitmap)`
    `int` | `startPreviewAfterTakePicture()` 默认情况时,拍照结束会自动启动预览,故默认情况下用户不必调用 startPreviewAfterTakePicture; 若拍照结束后不自启预览时,用户需要手动调用 startPreviewAfterTakePicture 来启动预览.
    `int` | `switchCamera()` 切换摄像头
    `FlashType` | `switchLight()` 切换闪光灯
    `void` | `takePhoto(boolean needBitmap, OnPictureCallback pictureCallback)` 系统相机拍照（不包含特效） 该接口为异步接口，通过`OnPictureCallback#onPicture(byte[])` 返回图像数据； 再根据是否转换为 bitmap 回调`OnPictureCallback.onPicture(Bitmap)`
    `int` | `updateAnimationFilter(EffectFilter effectFilter)` 更新动效滤镜，通过`EffectFilter.Builder`来构建滤镜资源对象

    - ### Methods inherited from interface com.aliyun.svideosdk.multirecorder.AliyunIBaseCapture

      `captureId, removeBorder, setBorderParam, setProperty, updateLayout`

- - ### Method Detail

    - #### setCamera

          void setCamera(CameraType camera)

      设置开启预览时的摄像头类型。仅在第一次打开时生效，后面如果要切换摄像头使用`switchCamera()`
      Parameters:
        `camera` -
      See Also:
        `CameraType.BACK`, `CameraType.FRONT`

    - #### setDisplayView

          void setDisplayView(SurfaceView displayView)

      设置显示预览的`SurfaceView`
      Parameters:
        `displayView` -

    - #### setCameraCaptureDataMode

          void setCameraCaptureDataMode(int captureDataMode)

      设置Camera 数据回调方式
      Parameters:
        `captureDataMode` -
      See Also:
        `CameraCaptureDataMode`

    - #### addPaster

          int addPaster(EffectPaster effectPaster)

      添加人脸动图，人脸动图与普通动图要严格区分，如果把普通动图素材当作人脸动图使用，则会出现动图不显示的情况，要使用人脸动图，必须先设置 rotation，通过`setRotation(int)`实现。rotation的具体计算方式，请参考Demo中的代码。 添加普通动图不能使用该接口，而需要使用`addPaster(EffectPaster, float, float, float, float, float, boolean)`
      Parameters:
        `effectPaster` -
      Returns:
        成功返回0，失败返回对应的ErrorCode
      See Also:
        `EffectPaster`

    - #### addPaster

          int addPaster(EffectPaster effectPaster,
                        float sx,
                        float sy,
                        float sw,
                        float sh,
                        float rotation,
                        boolean flip)

      添加普通动图，人脸动图可以当作普通动图，但是普通动图不能当作人脸动图 注意 `AliyunIRecorder#setEffectView(float, float, float, float, EffectBase)`的执行效果会和此函数的执行效果进行叠加
      Parameters:
        `effectPaster` -
        `sx` - 位置信息的x坐标（相对输出大小的比例值）
        `sy` - 位置信息的y坐标（相对输出大小的比例值）
        `sw` - 尺寸信息的宽度（相对输出大小的比例值）
        `sh` - 尺寸信息的高度（相对输出大小的比例值）
        `rotation` - 弧度
        `flip` - 是否反转
      Returns:
        成功返回0，失败返回对应的ErrorCode
      See Also:
        `setEffectView(float, float, float, float, EffectBase)`

    - #### removePaster

          void removePaster(EffectPaster effectPaster)

      删除动图素材，普通动图和人脸动图都通过该接口移除
      Parameters:
        `effectPaster` -

    - #### addImage

          int addImage(EffectImage effectImage)

      添加贴图素材,如果需要使用文字贴图，可以通过Bitmap工具把文字转成贴图 通过接口`setEffectView(float, float, float, float, EffectBase)` 调整贴图的位置
      Parameters:
        `effectImage` -
      Returns:
        成功返回0，失败返回对应的ErrorCode

    - #### removeImage

          void removeImage(EffectImage effectImage)

      删除贴图
      Parameters:
        `effectImage` -

    - #### applyFilter

          int applyFilter(EffectFilter effectFilter)

      设置滤镜效果
      Parameters:
        `effectFilter` -
      Returns:
        成功返回0，失败返回对应的Error Code

    - #### removeFilter

          void removeFilter()

      删除滤镜效果

    - #### applyAnimationFilter

          int applyAnimationFilter(EffectFilter effectFilter)

      设置动效滤镜，通过`EffectFilter.Builder`来构建滤镜资源对象
      Parameters:
        `effectFilter` -
      Returns:
        成功返回0，失败返回对应的Error Code

    - #### updateAnimationFilter

          int updateAnimationFilter(EffectFilter effectFilter)

      更新动效滤镜，通过`EffectFilter.Builder`来构建滤镜资源对象
      Parameters:
        `effectFilter` -
      Returns:
        成功返回0，失败返回对应的Error Code

    - #### removeAnimationFilter

          void removeAnimationFilter(EffectFilter effectFilter)

      删除动效滤镜
      Parameters:
        `effectFilter` -

    - #### getCameraCount

          int getCameraCount()

      获取摄像头数量
      Returns:
        设备可用摄像头数量

    - #### setCameraParam

          void setCameraParam(CameraParam cameraParam)

      设置摄像头预览参数
      Parameters:
        `cameraParam` -
      See Also:
        `CameraParam`

    - #### switchCamera

          int switchCamera()

      切换摄像头
      Returns:
        返回切换后的摄像头ID

    - #### switchLight

          FlashType switchLight()

      切换闪光灯
      Returns:
        当前闪光灯模式
      See Also:
        `FlashType.AUTO`, `FlashType.OFF`, `FlashType.ON`

    - #### setLight

          boolean setLight(FlashType flashType)

      设置闪光灯模式
      Parameters:
        `flashType` -
      Returns:
        true：成功，false：失败

    - #### setZoom

          int setZoom(float rate)

      设置摄像头缩放比例
      Parameters:
        `rate` -

    - #### setExposureCompensationRatio

          int setExposureCompensationRatio(float value)

      设置曝光度比例
      Parameters:
        `value` -

    - #### setFocusMode

          void setFocusMode(int mode)

      设置聚焦模式
      Parameters:
        `mode` -
      See Also:
        `CameraParam.FOCUS_MODE_CONTINUE`, `CameraParam.FOCUS_MODE_AUTO`

    - #### setFocus

          @Deprecated
          void setFocus(Point point)

      Deprecated.
      设置对焦点 Camera2 请使用`#setFocus(Point`
      Parameters:
        `point` - 点击事件时获取的屏幕坐标的绝对值

    - #### setFocus

          void setFocus(float xRatio,
                        float yRatio)

      设置对焦点，仅当`setFocusMode(int)` 的参数为`CameraParam.FOCUS_MODE_AUTO`时有效
      Parameters:
        `xRatio` - 坐标点x方向上相对预览显示窗口（并非屏幕大小）的比例值
        `yRatio` - 坐标点y方向上相对预览显示窗口（并非屏幕大小）的比例值

    - #### getBeautyLevel

          int getBeautyLevel()

      获取当前美颜度
      Returns:
        当前的美颜度级别

    - #### setBeautyLevel

          void setBeautyLevel(int level)

      设置美颜度
      Parameters:
        `level` - [0, 100]， 0表示没有美颜，100表示最大美颜度

    - #### setBeautyStatus

          void setBeautyStatus(boolean on)

      设置美颜开/关
      Parameters:
        `on` - true：开， false：关

    - #### setEffectView

          int setEffectView(float xRatio,
                            float yRatio,
                            float widthRatio,
                            float heightRatio,
                            EffectBase effectBase)

      设置特效信息（位置，大小） widthRatio和heightRatio参数需要符合素材宽高/屏幕宽高的比例 比如： 素材的宽高为200，300， 屏幕的宽高为 540，720 sw = (float)200/540, sh = (float)300/720。sx,sy是归一化的屏幕比例参数，坐标是以资源的中心点作为锚点的
      Parameters:
        `xRatio` - 位置信息的x坐标（比例值）
        `yRatio` - 位置信息的y坐标（比例值）
        `widthRatio` - 大小信息的宽度（比例值）
        `heightRatio` - 大小信息的高度（比例值）
        `effectBase` - 对应的特效素材

    - #### setOnFrameCallback

          void setOnFrameCallback(OnFrameCallback callback)

      设置采集帧回调，每采集一帧数据都通过该回调返回帧数据
      Parameters:
        `callback` -
      See Also:
        `OnFrameCallback`

    - #### setOnChoosePictureSizeCallBack

          void setOnChoosePictureSizeCallBack(OnChoosePictureSizeCallback callback)

      设置拍照分辨率回调
      Parameters:
        `callback` -

    - #### setFaces

          int setFaces(float[][] faces)

      设置人脸坐标点，而二维组每个元素，代表一张脸的6个特征点。
      Parameters:
        `faces` - nx6的二维数组，6表示6个特征点 point[i][0] => LEFT_EYE_X 左眼X point[i][1] => LEFT_EYE_Y 左眼Y point[i][2] => RIGHT_EYE_X 右眼X point[i][3] => RIGHT_EYE_Y 右眼Y point[i][4] => MOUTH_X 嘴部X point[i][5] => MOUTH_Y 嘴部Y 表示第i张脸的6个特征点。
      Returns:

    - #### setRotation

          void setRotation(int rotation)

      设置传感器的角度值，如果传感器返回的角度值不是0，90，180，270四个值中的，需要根据范围来确定 Sets the rotation angle of the gyro sensor. If the original angle is not one of the following values: 0, 90, 180, and 270, use the following method to determine the rotation angle.

               private int getSensorRotation() {
               int orientation = orientationDetector.getOrientation();
               int rotation = 90;
               if (orientation >= 45 && orientation < 135) {
               rotation = 180;
               }
               if (orientation >= 135 && orientation < 225) {
               rotation = 270;
               }
               if (orientation >= 225 && orientation < 315) {
               rotation = 0;
               }
               if (mCameraType == CameraType.FRONT) {
               if (rotation != 0) {
               rotation = 360 - rotation;
               }
               }
               return rotation;
               }

      Parameters:
        `rotation` - Do not use this method to control the angle when performing facial recognition or recording.
      See Also:
        `setFaceDetectRotation(int)`, `setRecordRotation(int)`

    - #### setFaceDetectRotation

          void setFaceDetectRotation(int rotation)

      设置单独的人脸识别角度,如果使用本接口，请不要使用setRotation
      See Also:
        `setRecordRotation(int)`, `setRotation(int)`

    - #### setRecordRotation

          void setRecordRotation(int rotation)

      设置单独的录制视频角度,如果使用本接口，请不要使用setRotation 如果需要根据传感器角度来设置录制角度,需要加上计算 if (rotation == 90 || rotation == 270) { rotation = (rotation + 90) % 360; if (mAliyunCamera.getCameraInfo().facing == CameraInfo.CAMERA_FACING_BACK) { rotation += 180; rotation %= 360; } } else if (rotation == 0 || rotation == 180) { rotation = (rotation + 270) % 360; }
      See Also:
        `AliyunIRecorder#setRotation(int)`, `AliyunIRecorder#setFaceDetectRotation(int)`

    - #### setOnTextureIdCallback

          void setOnTextureIdCallback(OnTextureIdCallback callback)

      设置纹理ID回调
      Parameters:
        `callback` -
      See Also:
        `OnTextureIdCallback`

    - #### setOnFaceDetectInfoListener

          void setOnFaceDetectInfoListener(OnFaceDetectInfoListener listener)

      设置人脸检测信息变化的回调，当人脸检测信息发生改变时将触发 `OnFaceDetectInfoListener.onFaceInfoChange(FaceDetectInfo)`
      Parameters:
        `listener` -

    - #### getCurrentExposureCompensationRatio

          float getCurrentExposureCompensationRatio()

      获取当前曝光度的比例值
      Returns:
        返回当前设置的曝光度比例值

    - #### takePhoto

          void takePhoto(boolean needBitmap,
                         OnPictureCallback pictureCallback)

      系统相机拍照（不包含特效） 该接口为异步接口，通过`OnPictureCallback#onPicture(byte[])` 返回图像数据； 再根据是否转换为 bitmap 回调`OnPictureCallback.onPicture(Bitmap)`
      Parameters:
        `needBitmap` - 是否需要生成Bitmap
        `pictureCallback` - 数据回调接口

    - #### snapshot

          void snapshot(boolean needBitmap,
                        OnPictureCallback pictureCallback)

      预览画面截图（包含特效） 该接口为异步接口，通过`OnPictureCallback#onPicture(byte[])` 返回图像数据； 再根据是否转换为 bitmap 回调`OnPictureCallback.onPicture(Bitmap)`
      Parameters:
        `needBitmap` - 是否需要生成Bitmap
        `pictureCallback` - 数据回调接口

    - #### needFaceTrackInternal

          void needFaceTrackInternal(boolean need)

      是否需要开启内置人脸识别
      Parameters:
        `need` -

    - #### setFaceTrackInternalModelPath

          int setFaceTrackInternalModelPath(java.lang.String path)

      设置人脸识别模型文件夹路径 这里必须是包含模型文件的目录路径，模型文件的文件名不能修改
      Parameters:
        `path` -
      Returns:
        `AliyunErrorCode.OK`-成功 `AliyunErrorCode.ERROR_INVALID_ARGUMENTS`-失败，文件无效（文件路径错误，或者文件损坏/不完整）

    - #### setFaceTrackInternalMaxFaceCount

          void setFaceTrackInternalMaxFaceCount(int maxFaceCount)

      设置内置人脸识别的最大识别数，最大为3个，大于3个为3个
      Parameters:
        `maxFaceCount` -

    - #### setShutterSound

          void setShutterSound(boolean bNeedShutterSound)

      设置拍照时是否存在咔嚓声
      Parameters:
        `bNeedShutterSound` - true: 有拍照时的咔嚓声, false: 无拍照时的咔嚓声; 默认为 true.

    - #### setAutoPreviewAfterTakePhoto

          void setAutoPreviewAfterTakePhoto(boolean autoPreviewAfterTakePhoto)

      设置拍照后是否继续预览
      Parameters:
        `autoPreviewAfterTakePhoto` - true: 拍照后启动预览, false: 拍照后停留在拍完后的照片; 默认为 true.
      See Also:
        `takePhoto(boolean, OnPictureCallback)`

    - #### getSupportedPictureSize

          java.util.List<Camera.Size> getSupportedPictureSize()

      获取当前摄像头支持的照片尺寸
      Returns:
        照片尺寸列表

    - #### getSupportedPictureSizes

          java.util.SortedSet<Size> getSupportedPictureSizes()

      获取当前摄像头支持的照片尺寸
      Returns:
        照片尺寸列表

    - #### setPictureSize

          int setPictureSize(int width,
                             int height)

      设置照片尺寸
      Parameters:
        `width` -
        `height` -
      Returns:
        状态码

    - #### startPreviewAfterTakePicture

          int startPreviewAfterTakePicture()

      默认情况时,拍照结束会自动启动预览,故默认情况下用户不必调用 startPreviewAfterTakePicture; 若拍照结束后不自启预览时,用户需要手动调用 startPreviewAfterTakePicture 来启动预览.

      拍照结束后是否自启动预览`setAutoPreviewAfterTakePhoto(boolean)`

    - #### resizePreviewSize

          int resizePreviewSize(int width,
                                int height)

      重新设置预览窗口大小（可以实现动态切换预览画幅）
      Parameters:
        `width` - 预览宽度
        `height` - 预览高度
      Returns:

    - #### setOutputFlip

          void setOutputFlip(boolean flip)

      设置摄像头录制输出视频是否进行镜像处理 注意：仅对输出视频有效，预览不改变
      Parameters:
        `flip` - 是否镜像