# 会è¯ç®¡ç†(C/C++) ç›¸æœºä½¿ç”¨é¢„è§ˆã€æ‹ç…§ã€å½•åƒã€å…ƒæ•°æ®åŠŸèƒ½å‰ï¼Œå‡éœ€è¦åˆ›å»ºç›¸æœºä¼šè¯ã€‚ 在会è¯ä¸ï¼Œå¯ä»¥å®Œæˆä»¥ä¸‹åŠŸèƒ½ï¼š - é…置相机的输入æµå’Œè¾“出æµã€‚ç›¸æœºåœ¨æ‹æ‘„å‰ï¼Œå¿…须完æˆè¾“入输出æµçš„é…置。 é…置输入æµå³æ·»åŠ è®¾å¤‡è¾“å…¥ï¼Œå¯¹ç”¨æˆ·è€Œè¨€ï¼Œç›¸å½“äºŽé€‰æ‹©è®¾å¤‡çš„æŸä¸€æ‘„åƒå¤´æ‹æ‘„ï¼›é…置输出æµï¼Œå³é€‰æ‹©æ•°æ®å°†ä»¥ä»€ä¹ˆå½¢å¼è¾“出。当应用需è¦å®žçްæ‹ç…§æ—¶ï¼Œè¾“出æµåº”é…置为预览æµå’Œæ‹ç…§æµï¼Œé¢„览æµçš„æ•°æ®å°†æ˜¾ç¤ºåœ¨XComponent组件上,æ‹ç…§æµçš„æ•°æ®å°†é€šè¿‡ImageReceiver接å£çš„能力ä¿å˜åˆ°ç›¸å†Œä¸ã€‚ - æ·»åŠ é—ªå…‰ç¯ã€è°ƒæ•´ç„¦è·ç‰é…置。具体支æŒçš„é…ç½®åŠæŽ¥å£è¯´æ˜Žè¯·å‚考[Camera APIå‚考](../../reference/apis-camera-kit/_o_h___camera.md)。 - 会è¯åˆ‡æ¢æŽ§åˆ¶ã€‚应用å¯ä»¥é€šè¿‡ç§»é™¤å’Œæ·»åŠ è¾“å‡ºæµçš„æ–¹å¼ï¼Œåˆ‡æ¢ç›¸æœºæ¨¡å¼ã€‚如当å‰ä¼šè¯çš„输出æµä¸ºæ‹ç…§æµï¼Œåº”用å¯ä»¥å°†æ‹ç…§æµç§»é™¤ï¼Œç„¶åŽæ·»åŠ è§†é¢‘æµä½œä¸ºè¾“出æµï¼Œå³å®Œæˆäº†æ‹ç…§åˆ°å½•åƒçš„切æ¢ã€‚ 完æˆä¼šè¯é…ç½®åŽï¼Œåº”用æäº¤å’Œå¼€å¯ä¼šè¯ï¼Œå¯ä»¥å¼€å§‹è°ƒç”¨ç›¸æœºç›¸å…³åŠŸèƒ½ã€‚ ## 开呿¥éª¤ 1. 导入NDK相关接å£ï¼Œå¯¼å…¥æ–¹æ³•如下。 ```c++ #include "hilog/log.h" #include "ohcamera/camera.h" #include "ohcamera/camera_input.h" #include "ohcamera/capture_session.h" #include "ohcamera/photo_output.h" #include "ohcamera/preview_output.h" #include "ohcamera/video_output.h" #include "ohcamera/camera_manager.h" ``` 2. 在CMake脚本ä¸é“¾æŽ¥ç›¸å…³åЍæ€åº“。 ```txt target_link_libraries(entry PUBLIC libohcamera.so libhilog_ndk.z.so) ``` 3. 调用cameraManagerç±»ä¸çš„[OH_CameraManager_CreateCaptureSession()](../../reference/apis-camera-kit/_o_h___camera.md#oh_cameramanager_createcapturesession)方法创建一个会è¯ã€‚ ```c++ Camera_Manager *cameraManager = nullptr; Camera_Input* cameraInput = nullptr; Camera_PreviewOutput* previewOutput = nullptr; Camera_PhotoOutput* photoOutput = nullptr; Camera_VideoOutput* videoOutput = nullptr; Camera_CaptureSession* captureSession = nullptr; Camera_ErrorCode ret = OH_CameraManager_CreateCaptureSession(cameraManager, &captureSession); if (captureSession == nullptr || ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CameraManager_CreateCaptureSession failed."); } ``` 4. 调用captureSessionç±»ä¸çš„[OH_CaptureSession_SetSessionMode()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_setsessionmode)方法é…ç½®ä¼šè¯æ¨¡å¼ã€‚ ```c++ ret = OH_CaptureSession_SetSessionMode(captureSession, NORMAL_PHOTO); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_SetSessionMode failed."); } ``` 5. 调用captureSessionç±»ä¸çš„[OH_CaptureSession_BeginConfig()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_beginconfig)方法é…置会è¯ã€‚ ```c++ ret = OH_CaptureSession_BeginConfig(captureSession); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_BeginConfig failed."); } ``` 6. 使能。å‘会è¯ä¸æ·»åŠ ç›¸æœºçš„è¾“å…¥æµå’Œè¾“出æµï¼Œè°ƒç”¨[OH_CaptureSession_AddInput()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_addinput)æ·»åŠ ç›¸æœºçš„è¾“å…¥æµï¼›è°ƒç”¨[OH_CaptureSession_AddPreviewOutput()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_addpreviewoutput)å’Œ[OH_CaptureSession_AddPhotoOutput()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_addphotooutput)æ·»åŠ ç›¸æœºçš„è¾“å‡ºæµã€‚以下示例代ç ä»¥æ·»åŠ é¢„è§ˆæµpreviewOutputå’Œæ‹ç…§æµphotoOutput为例,å³å½“剿¨¡å¼æ”¯æŒæ‹ç…§å’Œé¢„览。 调用captureSessionç±»ä¸çš„[OH_CaptureSession_CommitConfig()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_commitconfig)å’Œ[OH_CaptureSession_Start()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_start)方法æäº¤ç›¸å…³é…置,并å¯åŠ¨ä¼šè¯ã€‚ ```c++ // å‘会è¯ä¸æ·»åŠ ç›¸æœºè¾“å…¥æµ ret = OH_CaptureSession_AddInput(captureSession, cameraInput); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_AddInput failed."); } // å‘会è¯ä¸æ·»åŠ é¢„è§ˆè¾“å‡ºæµ ret = OH_CaptureSession_AddPreviewOutput(captureSession, previewOutput); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_AddPreviewOutput failed."); } // å‘会è¯ä¸æ·»åŠ æ‹ç…§è¾“å‡ºæµ ret = OH_CaptureSession_AddPhotoOutput(captureSession, photoOutput); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_AddPhotoOutput failed."); } // æäº¤ä¼šè¯é…ç½® ret = OH_CaptureSession_CommitConfig(captureSession); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_CommitConfig failed."); } // å¯åŠ¨ä¼šè¯ ret = OH_CaptureSession_Start(captureSession); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_Start failed."); } ``` 7. ä¼šè¯æŽ§åˆ¶ã€‚è°ƒç”¨captureSessionç±»ä¸çš„[OH_CaptureSession_Stop()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_stop)方法å¯ä»¥åœæ¢å½“å‰ä¼šè¯ã€‚调用[OH_CaptureSession_RemovePhotoOutput()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_removephotooutput)å’Œ[OH_CaptureSession_AddVideoOutput()](../../reference/apis-camera-kit/_o_h___camera.md#oh_capturesession_addvideooutput)方法å¯ä»¥å®Œæˆä¼šè¯åˆ‡æ¢æŽ§åˆ¶ã€‚以下示例代ç 以移除æ‹ç…§æµphotoOutputï¼Œæ·»åŠ è§†é¢‘æµvideoOutput为例,完æˆäº†æ‹ç…§åˆ°å½•åƒçš„切æ¢ã€‚ ```c++ ret = OH_CaptureSession_Stop(captureSession); if (ret == CAMERA_OK) { OH_LOG_INFO(LOG_APP, "OH_CaptureSession_Stop success "); } else { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_Stop failed. %d ", ret); } ret = OH_CaptureSession_BeginConfig(captureSession); if (ret != CAMERA_OK) { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_BeginConfig failed."); } // 从会è¯ä¸ç§»é™¤æ‹ç…§è¾“å‡ºæµ ret = OH_CaptureSession_RemovePhotoOutput(captureSession, photoOutput); if (ret == CAMERA_OK) { OH_LOG_INFO(LOG_APP, "OH_CaptureSession_RemovePhotoOutput success "); } else { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_RemovePhotoOutput failed. %d ", ret); } // å‘会è¯ä¸æ·»åŠ è§†é¢‘è¾“å‡ºæµ ret = OH_CaptureSession_AddVideoOutput(captureSession, videoOutput); if (ret == CAMERA_OK) { OH_LOG_INFO(LOG_APP, "OH_CaptureSession_RemovePhotoOutput success "); } else { OH_LOG_ERROR(LOG_APP, "OH_CaptureSession_RemovePhotoOutput failed. %d ", ret); } ```