HOME
Shop
  • English
  • 简体中文
HOME
Shop
  • English
  • 简体中文
  • Product Series

    • FPGA+ARM

      • GM-3568JHF

        • 1. Introduction

          • About GM-3568JHF
        • 2. Quick Start

          • 00 Introduction
          • 01 Environment Setup
          • 02 Compilation Instructions
          • 03 Flashing Guide
          • 04 Debug Tools
          • 05 Software Update
          • 06 View Information
          • 07 Test Commands
          • 08 App Compilation
          • 09 Source Code Acquisition
        • 3. Peripherals and Interfaces

          • 01 USB
          • 02 Display and Touch
          • 03 Ethernet
          • 04 WIFI
          • 05 Bluetooth
          • 06 TF-Card
          • 07 Audio
          • 08 Serial Port
          • 09 CAN
          • 10 RTC
        • 4. Application Development

          • 01 UART read and write case
          • 02 Key detection case
          • 03 LED light flashing case
          • 04 MIPI screen detection case
          • 05 Read USB device information example
          • 06 FAN Detection Case
          • 07 FPGA FSPI Communication Case
          • 08 FPGA DMA read and write case
          • 09 GPS debugging case
          • 10 Ethernet Test Cases
          • 11 RS485 reading and writing examples
          • 12 FPGA IIC read and write examples
          • 13 PN532 NFC card reader case
          • 14 TF card reading and writing case
        • 5. QT Development

          • 01 ARM64 cross compiler environment construction
          • 02 QT program added automatic startup service
        • 6. RKNN_NPU Development

          • 01 RK3568 NPU Overview
          • 02 Development Environment Setup
          • Run Official YOLOv5 Example
          • Model Conversion Detailed Explanation
          • Run Custom Model on Board
        • 7. FPGA Development

          • ARM and FPGA Communication
          • /fpga-arm/GM-3568JHF/FPGA/ch02-FPGA-Development-Manual.html
        • 8. Others

          • 01 Modification of the root directory file system
          • 02 System auto-start service
        • 9. Download

          • Download Resources
    • ShimetaPi

      • M4-R1

        • 1. Introduction

          • 1.1 About M4-R1
        • 2. Quick Start

          • 2.1 OpenHarmony Overview
          • 2.2 Image Burning
          • 2.3 Development Environment Preparation
          • 2.4 Hello World Application
        • 3. Application Development

          • 3.1 Getting Started

            • 3.1.1 ArkTS Language Overview
            • 3.1.2 UI Components (Part 1)
            • 3.1.3 UI Components (Part 2)
            • 3.1.4 UI Components (Part 3)
          • 3.2 Advanced

            • 3.2.1 Getting Started Guide
            • 3.2.2 Usage of Third Party Libraries
            • 3.2.3 Deployment of the Application
            • 3.2.4 Factory Reset
            • 3.2.5 System Debug
            • 3.2.6 APP Stability Testing
            • 3.2.7 Application Testing
          • 3.3 Getting Docs

            • 3.3.1 Official Website Information
          • 3.4 Development Instructions

            • 3.4.1 Full SDK
            • 3.4.2 Introduction of Third Party Libraries
            • 3.4.3 Introduction of HDC Tool
            • 3.4.4 Restore Factory Mode
            • 3.4.5 Update System API
          • 3.5 First Application

            • 3.5.1 First ArkTS App
          • 3.6 Application Demo

            • 3.6.1 UART Tool
            • 3.6.2 Graphics Tablet
            • 3.6.3 Digital Clock
            • 3.6.4 WIFI Tool
        • 4. Device Development

          • 4.1 Ubuntu Environment Development

            • 4.1.1 Environment Setup
            • 4.1.2 Download Source Code
            • 4.1.3 Compile Source Code
          • 4.2 Using DevEco Device Tool

            • 4.2.1 Tool Introduction
            • 4.2.2 Environment Construction
            • 4.2.3 Import SDK
            • 4.2.4 Function Introduction
        • 5. Peripherals and Interfaces

          • 5.1 Raspberry Pi Interfaces
          • 5.2 GPIO Interface
          • 5.3 I2C Interface
          • 5.4 SPI Communication
          • 5.5 PWM Control
          • 5.6 Serial Port Communication
          • 5.7 TF Card Slot
          • 5.8 Display Screen
          • 5.9 Touch Screen
          • 5.10 Audio
          • 5.11 RTC
          • 5.12 Ethernet
          • 5.13 M.2
          • 5.14 MINI PCIE
          • 5.15 Camera
          • 5.16 WIFI BT
          • 5.17 HAT
        • 6. FAQ

          • 6.1 Download Link
      • M5-R1

        • 1. Introduction

          • M5-R1 Development Documentation
        • 2. Quick Start

          • OpenHarmony Overview
          • Image Burning
          • Development Environment Preparation
          • Hello World Application and Deployment
        • 3. Peripherals and Interfaces

          • 3.1 Raspberry Pi Interfaces
          • 3.2 GPIO Interface
          • 3.3 I2C Interface
          • 3.4 SPI Communication
          • 3.5 PWM Control
          • 3.6 Serial Port Communication
          • 3.7 TF Card Slot
          • 3.8 Display Screen
          • 3.9 Touch Screen
          • 3.10 Audio
          • 3.11 RTC
          • 3.12 Ethernet
          • 3.13 M.2
          • 3.14 MINI PCIE
          • 3.15 Camera
          • 3.16 WIFI BT
          • 3.17 HAT
        • 4. Application Development

          • 4.1 Getting Started

            • 4.1.1 ArkTS Language Overview
            • 4.1.2 UI Components (Part 1)
            • 4.1.3 UI Components (Part 2)
            • 4.1.4 UI Components (Part 3)
          • 4.2 Advanced

            • 4.2.1 Getting Started Guide
            • 4.2.2 Usage of Third Party Libraries
            • 4.2.3 Deployment of the Application
            • 4.2.4 Factory Reset
            • 4.2.5 System Debug
            • 4.2.6 APP Stability Testing
            • 4.2.7 Application Testing
        • 5. Device Development

          • 5.1 Environment Setup
          • 5.2 Download Source Code
          • 5.3 Compile Source Code
        • 6. Download

          • Data Download
    • OpenHarmony

      • SC-3568HA

        • 1. Introduction

          • 1.1 About SC-3568HA
        • 2. Quick Start

          • 2.1 OpenHarmony Overview
          • 2.2 Image Burning
          • 2.3 Development Environment Preparation
          • 2.4 Hello World Application
        • 3. Application Development

          • 3.1 ArkUI

            • 3.1.1 ArkTS Language Overview
            • 3.1.2 UI Components (Part 1)
            • 3.1.3 UI Components (Part 2)
            • 3.1.4 UI Components (Part 3)
          • 3.2 Advanced

            • 3.2.1 Getting Started Guide
            • 3.2.2 Usage of Third Party Libraries
            • 3.2.3 Deployment of the Application
            • 3.2.4 Factory Reset
            • 3.2.5 System Debug
            • 3.2.6 APP Stability Testing
            • 3.2.7 Application Testing
        • 4. Device Development

          • 4.1 Environment Setup
          • 4.2 Download Source Code
          • 4.3 Compile Source Code
        • 5. Peripherals and Interfaces

          • 5.1 Raspberry Pi Interfaces
          • 5.2 GPIO Interface
          • 5.3 I2C Interface
          • 5.4 SPI Communication
          • 5.5 PWM Control
          • 5.6 Serial Port Communication
          • 5.7 TF Card Slot
          • 5.8 Display Screen
          • 5.9 Touch Screen
          • 5.10 Audio
          • 5.11 RTC
          • 5.12 Ethernet
          • 5.13 M.2
          • 5.14 MINI PCIE
          • 5.15 Camera
          • 5.16 WIFI BT
          • 5.17 HAT
        • 6. FAQ

          • 6.1 Download Link
      • M-K1HSE

        • 1. Introduction

          • 1.1 Product Introduction
        • 2. Quick Start

          • 2.1 Debug Tool Installation
          • 2.2 Development Environment Setup
          • 2.3 Source Code Download
          • 2.4 Build Instructions
          • 2.5 Flashing Guide
          • 2.6 APT Update Sources
          • 2.7 View Board Info
          • 2.8 CLI LED and Key Test
          • 2.9 GCC Build Programs
        • 3. Application Development

          • 3.1 Basic Application Development

            • 3.1.1 Development Environment Preparation
            • 3.1.2 First Application HelloWorld
            • 3.1.3 Develop HAR Package
          • 3.2 Peripheral Application Cases

            • 3.2.1 UART Read/Write
            • 3.2.2 Key Demo
            • 3.2.3 LED Flash
        • 4. Peripherals and Interfaces

          • 4.1 Standard Peripherals

            • 4.1.1 USB
            • 4.1.2 Display and Touch
            • 4.1.3 Ethernet
            • 4.1.4 WIFI
            • 4.1.5 Bluetooth
            • 4.1.6 TF Card
            • 4.1.7 Audio
            • 4.1.8 Serial Port
            • 4.1.9 CAN
            • 4.1.10 RTC
          • 4.2 Interfaces

            • 4.2.1 Audio
            • 4.2.2 RS485
            • 4.2.3 Display
            • 4.2.4 Touch
        • 5. System Customization Development

          • 5.1 System Porting
          • 5.2 System Customization
          • 5.3 Driver Development
          • 5.4 System Debugging
          • 5.5 OTA Upgrade
        • 6. Download

          • 6.1 Download
    • EVS-Camera

      • CF-NRS1

        • 1. Introduction

          • 1.1 About CF-NRS1
          • 1.2 Event-Based Concepts
          • 1.3 Quick Start
          • 1.4 Resources
        • 2. Development

          • 2.1 Development Overview

            • 2.1.1 Shimetapi Hybrid Camera SDK Introduction
          • 2.2 Environment & API

            • 2.2.1 Environment Overview
            • 2.2.2 Development API Overview
          • 2.3 Linux Development

            • 2.3.1 Linux SDK Introduction
            • 2.3.2 Linux SDK API
            • 2.3.3 Linux Algorithm
            • 2.3.4 Linux Algorithm API
          • 2.4 Service & Web

            • 2.4.1 EVS Server
            • 2.4.2 Time Server
            • 2.4.3 EVS Web
        • 3. Download

          • 3.1 Download
        • 4. Common Problems

          • 4.1 Common Problems
      • CF-CRA2

        • 1. Introduction

          • 1.1 About CF-CRA2
        • 2. Download

          • 2.1 Download
      • EVS Module

        • 1. Related Concepts
        • 2. Hardware Preparation and Environment Configuration
        • 3. Example Program User Guide
        • Resources Download
    • AI-model

      • 1684XB-32T

        • 1. Introduction

          • AIBOX-1684XB-32 Introduction
        • 2. Quick Start

          • First time use
          • Network Configuration
          • Disk usage
          • Memory allocation
          • Fan Strategy
          • Firmware Upgrade
          • Cross-Compilation
          • Model Quantization
        • 3. Application Development

          • 3.1 Development Introduction

            • Sophgo SDK Development
            • SOPHON-DEMO Introduction
          • 3.2 Large Language Models

            • Deploying Llama3 Example
            • /ai-model/AIBOX-1684XB-32/application-development/LLM/Sophon_LLM_api_server-Development-AIBOX-1684XB-32.html
            • /ai-model/AIBOX-1684XB-32/application-development/LLM/MiniCPM-V-2_6-AIBOX-1684XB-32.html
            • /ai-model/AIBOX-1684XB-32/application-development/LLM/Qwen-2-5-VL-demo-Development-AIBOX-1684XB-32.html
            • /ai-model/AIBOX-1684XB-32/application-development/LLM/Qwen-3-chat-demo-Development-AIBOX-1684XB-32.html
            • /ai-model/AIBOX-1684XB-32/application-development/LLM/Qwen3-Qwen Agent-MCP.html
            • /ai-model/AIBOX-1684XB-32/application-development/LLM/Qwen3-langchain-AI Agent.html
          • 3.3 Deep Learning

            • ResNet (Image Classification)
            • LPRNet (License Plate Recognition)
            • SAM (Universal Image Segmentation Foundation Model)
            • YOLOv5 (Object Detection)
            • OpenPose (Human Keypoint Detection)
            • PP-OCR (Optical Character Recognition)
        • 4. Download

          • Resource Download
      • 1684X-416T

        • 1. Introduction

          • AIBOX-1684X-416 Introduction
        • 2. Demo Simple Operation Guide

          • Simple instructions for using shimeta smart monitoring demo
      • RDK-X5

        • 1. Introduction

          • RDK-X5 Hardware Introduction
        • 2. Quick Start

          • RDK-X5 Quick Start
        • 3. Application Development

          • 3.1 AI Online Model Development

            • AI Online Development - Experiment01
            • AI Online Development - Experiment02
            • AI Online Development - Experiment03
            • AI Online Development - Experiment04
            • AI Online Development - Experiment05
            • AI Online Development - Experiment06
          • 3.2 Large Language Models (Voice)

            • Voice LLM Application - Experiment01
            • Voice LLM Application - Experiment02
            • Voice LLM Application - Experiment03
            • Voice LLM Application - Experiment04
            • Voice LLM Application - Experiment05
            • Voice LLM Application - Experiment06
          • 3.3 40pin-IO Development

            • 40pin IO Development - Experiment01
            • 40pin IO Development - Experiment02
            • 40pin IO Development - Experiment03
            • 40pin IO Development - Experiment04
            • 40pin IO Development - Experiment05
            • 40pin IO Development - Experiment06
            • 40pin IO Development - Experiment07
          • 3.4 USB Module Development

            • USB Module Usage - Experiment01
            • USB Module Usage - Experiment02
          • 3.5 Machine Vision

            • Machine Vision Technology Development - Experiment01
            • Machine Vision Technology Development - Experiment02
            • Machine Vision Technology Development - Experiment03
            • Machine Vision Technology Development - Experiment04
          • 3.6 ROS2 Base Development

            • ROS2 Basic Development - Experiment01
            • ROS2 Basic Development - Experiment02
            • ROS2 Basic Development - Experiment03
            • ROS2 Basic Development - Experiment04
      • RDK-S100

        • 1. Introduction

          • 1.1 About RDK-S100
        • 2. Quick Start

          • 2.1 First Use
        • 3. Application Development

          • 3.1 AI Online Model Development

            • 3.1.1 Volcano Engine Doubao AI
            • 3.1.2 Image Analysis
            • 3.1.3 Multimodal Visual Analysis
            • 3.1.4 Multimodal Image Comparison
            • 3.1.5 Multimodal Document Analysis
            • 3.1.6 Camera AI Vision Analysis
          • 3.2 Large Language Models

            • 3.2.1 Speech Recognition
            • 3.2.2 Voice Conversation
            • 3.2.3 Multimodal Image Analysis
            • 3.2.4 Multimodal Image Comparison
            • 3.2.5 Multimodal Document Analysis
            • 3.2.6 Multimodal Vision Application
          • 3.3 40pin-IO Development

            • 3.3.1 GPIO Output LED Blink
            • 3.3.2 GPIO Input
            • 3.3.3 Key Control LED
            • 3.3.4 PWM Output
            • 3.3.5 Serial Output
            • 3.3.6 I2C Experiment
          • 3.4 USB Module Development

            • 3.4.1 USB Voice Module
            • 3.4.2 Sound Source Localization
          • 3.5 Machine Vision

            • 3.5.1 USB Camera
            • 3.5.2 Image Processing Basics
            • 3.5.3 Object Detection
            • 3.5.4 Image Segmentation
          • 3.6 ROS2 Base Development

            • 3.6.1 Environment Setup
            • 3.6.2 Create and Build Workspace
            • 3.6.3 ROS2 Topic Communication
            • 3.6.4 ROS2 Camera Application
    • Core-Board

      • C-3568BQ

        • 1. Introduction

          • C-3568BQ Introduction
      • C-3588LQ

        • 1. Introduction

          • C-3588LQ Introduction
      • GC-3568JBAF

        • 1. Introduction

          • GC-3568JBAF Introduction
      • C-K1BA

        • 1. Introduction

          • C-K1BA Introduction

Camera

Taking SC-3568HA as an example, this board supports USB camera and MIPI camera

The MIPI camera connection is as follows:

TOOL

Currently, the board supports two MIPI cameras: GC8034 and OV5695.

1. MIPI camera DTS configuration

  • arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0.dtsi
    &i2c4 {
        status = "okay";

        gc8034: gc8034@37 {
            compatible = "galaxycore,gc8034";
            reg = <0x37>;
            clocks = <&cru CLK_CIF_OUT>;//CLK_CAM0_OUT>;
            clock-names = "xvclk";
            power-domains = <&power RK3568_PD_VI>;
            pinctrl-names = "default";
            pinctrl-0 = <&cif_clk>;
            reset-gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
            pwdn-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>;
            rockchip,grf = <&grf>;
            rockchip,camera-module-index = <0>;
            rockchip,camera-module-facing = "back";
            rockchip,camera-module-name = "RK-CMK-8M-2-v1";
            rockchip,camera-module-lens-name = "CK8401";
            port {
                gc8034_out: endpoint {
                    remote-endpoint = <&mipi_in_ucam1>;
                    data-lanes = <1 2 3 4>;
                };
            };
        };

        ......

        ov5695: ov5695@36 {
            status = "okay";
            compatible = "ovti,ov5695";
            reg = <0x36>;
            clocks = <&cru CLK_CIF_OUT>;
            clock-names = "xvclk";
            power-domains = <&power RK3568_PD_VI>;
            pinctrl-names = "default";
            pinctrl-0 = <&cif_clk>;
            reset-gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
            pwdn-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>;
            rockchip,camera-module-index = <0>;
            rockchip,camera-module-facing = "back";
            rockchip,camera-module-name = "TongJu";
            rockchip,camera-module-lens-name = "CHT842-MD";
            port {
                ov5695_out: endpoint {
                    remote-endpoint = <&mipi_in_ucam2>;
                    data-lanes = <1 2>;
                };
            };
        };
    };

2. Camera test

Test using the camera application that comes with the HarmonyOS:

TOOL

Test preview, photo taking and video recording are all normal

3. Camera API usage and practice

3.1 How to use the standard API

Warning

This module provides developers with a set of simple and easy - to - understand camera service interfaces. By calling these interfaces, developers can develop camera applications. The applications can access and operate the camera hardware to achieve basic operations such as previewing, taking photos, and recording videos. Moreover, through the combination of interfaces, more operations can be completed, such as controlling the flash and exposure time, focusing or adjusting the focus, etc.

  • Camera standard interface

    @ohos.multimedia.camera (camera management) (system interface)

  • API Usage Instructions

When developing with camera-related APIs, you need to first understand how to create your first open Harmony project. Related documents: Hello World application and deployment

When using an API, you need to pay attention to the following points:

  • API permission description
  • Parameters and return values of the API
  • When an error occurs during API calls, refer to the API error codes and general error codes
  • Correct use of API examples

As shown in the figure below, this is the standard API document

TOOL
  • Official standard development documents

Tips

Camera official standard API development document

3.2 Community Demo

  • Introduction

In order to help developers develop and learn more quickly using the board, we have provided a WiFi-related usage example on gitee. Each project is an independent DevEco Studio project. Developers can import the project into DevEco Studio and understand the usage of the API involved in the application example by browsing the code, compiling the project, installing and running the application example.

giteeCamera Example

Warning

When importing the community Demo project, developers need to pay attention to whether the local development environment is consistent with that of the project, that is, whether the local SDK is the same as the project SDK.

  • Importing modules

When using the Camera standard API, the most important step is to import the Camera module to use the corresponding Camera API interface. Usually the module is imported in the file header, import the module: import camera from '@ohos.multimedia.camera'

  • API Introduction

  • camera.getCameraManager (get camera manager instance)

	getCameraManager(context: Context): CameraManager
  • getSupportedCameras (gets the camera device object that supports the specified camera)
	getSupportedCameras(): Array<CameraDevice>
  • getSupportedOutputCapability (query the output capabilities supported by the camera device)
	getSupportedOutputCapability(camera: CameraDevice): CameraOutputCapability
  • isCameraMuted (query the current disabled state of the camera)
	isCameraMuted(): boolean
  • createCameraInput (Use the CameraDevice object to create a CameraInput instance)
	createCameraInput(camera: CameraDevice): CameraInput
	Permission required: ohos.permission.CAMERA
  • createPreviewOutput (Create a preview output object)
	createPreviewOutput(profile: Profile, surfaceId: string): PreviewOutput
  • CameraInput.open (open the camera and get the status by registering a callback function)
	open(callback: AsyncCallback<void>): void
  • CameraInput.close (Close the camera and get the status by registering a callback function)
	close(callback: AsyncCallback<void>): void
  • CameraInput.on('error') (listens to CameraInput error events and gets the result by registering a callback function)
	on(type: ‘error’, camera: CameraDevice, callback: ErrorCallback): void
  • CameraInput.off('error') (cancel listening for CameraInput error events)
	off(type: ‘error’, camera: CameraDevice, callback?: ErrorCallback): void
  • Demo mainly implements source code

camera.ets

	/*
	* Copyright (c) 2022 Huawei Device Co., Ltd.
	* Licensed under the Apache License, Version 2.0 (the "License");
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	*
	*     http://www.apache.org/licenses/LICENSE-2.0
	*
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
	*/

	import camera from '@ohos.multimedia.camera'
	import deviceInfo from '@ohos.deviceInfo'
	import fileio from '@ohos.fileio'
	import image from '@ohos.multimedia.image'
	import media from '@ohos.multimedia.media'
	import mediaLibrary from '@ohos.multimedia.mediaLibrary'
	import Logger from './Logger'
	import MediaUtils from './MediaUtils'

	const CameraMode = {
	MODE_PHOTO: 0, // 拍照模式
	MODE_VIDEO: 1 // 录像模式
	}

	const CameraSize = {
	WIDTH: 1920,
	HEIGHT: 1080
	}

	export default class CameraService {
	private tag: string = 'CameraService'
	private context: any = undefined
	private mediaUtil: MediaUtils = undefined
	private cameraManager: camera.CameraManager = undefined
	private cameras: Array<camera.CameraDevice> = undefined
	private cameraId: string = ''
	private cameraInput: camera.CameraInput = undefined
	private previewOutput: camera.PreviewOutput = undefined
	private photoOutPut: camera.PhotoOutput = undefined
	private captureSession: camera.CaptureSession = undefined
	private mReceiver: image.ImageReceiver = undefined
	private photoUri: string = ''
	private fileAsset: mediaLibrary.FileAsset = undefined
	private fd: number = -1
	private curMode = CameraMode.MODE_PHOTO
	private videoRecorder: media.VideoRecorder = undefined
	private videoOutput: camera.VideoOutput = undefined
	private handleTakePicture: (photoUri: string) => void = undefined
	private cameraOutputCapability: camera.CameraOutputCapability = undefined
	private videoConfig: any = {
		audioSourceType: 1,
		videoSourceType: 0,
		profile: {
		audioBitrate: 48000,
		audioChannels: 2,
		audioCodec: 'audio/mp4v-es',
		audioSampleRate: 48000,
		durationTime: 1000,
		fileFormat: 'mp4',
		videoBitrate: 48000,
		videoCodec: 'video/mp4v-es',
		videoFrameWidth: 640,
		videoFrameHeight: 480,
		videoFrameRate: 30
		},
		url: '',
		orientationHint: 0,
		location: {
		latitude: 30, longitude: 130
		},
		maxSize: 10000,
		maxDuration: 10000
	}

	constructor(context: any) {
		this.context = context
		this.mediaUtil = MediaUtils.getInstance(context)
		this.mReceiver = image.createImageReceiver(CameraSize.WIDTH, CameraSize.HEIGHT, 4, 8)
		Logger.debug(this.tag, 'createImageReceiver')
		this.mReceiver.on('imageArrival', () => {
		Logger.debug(this.tag, 'imageArrival')
		this.mReceiver.readNextImage((err, image) => {
			Logger.debug(this.tag, 'readNextImage')
			if (err || image === undefined) {
			Logger.error(this.tag, 'failed to get valid image')
			return
			}
			image.getComponent(4, (errMsg, img) => {
			Logger.debug(this.tag, 'getComponent')
			if (errMsg || img === undefined) {
				Logger.debug(this.tag, 'failed to get valid buffer')
				return
			}
			let buffer = new ArrayBuffer(4096)
			if (img.byteBuffer) {
				buffer = img.byteBuffer
			} else {
				Logger.error(this.tag, 'img.byteBuffer is undefined')
			}
			this.savePicture(buffer, image)
			})
		})
		})
	}

	async savePicture(buffer: ArrayBuffer, img: image.Image) {
		Logger.debug(this.tag, 'savePicture')
		this.fileAsset = await this.mediaUtil.createAndGetUri(mediaLibrary.MediaType.IMAGE)
		this.photoUri = this.fileAsset.uri
		Logger.debug(this.tag, `this.photoUri = ${this.photoUri}`)
		this.fd = await this.mediaUtil.getFdPath(this.fileAsset)
		Logger.debug(this.tag, `this.fd = ${this.fd}`)
		await fileio.write(this.fd, buffer)
		await this.fileAsset.close(this.fd)
		await img.release()
		Logger.debug(this.tag, 'save image done')
		if (this.handleTakePicture) {
		this.handleTakePicture(this.photoUri)
		}
	}

	async initCamera(surfaceId: string): Promise<boolean> {
		try {
		Logger.debug(this.tag, 'initCamera')
		await this.releaseCamera()
		Logger.debug(this.tag, `deviceInfo.deviceType = ${deviceInfo.deviceType}`)
		if (deviceInfo.deviceType === 'default') {
			this.videoConfig.videoSourceType = 1
		} else {
			this.videoConfig.videoSourceType = 0
		}
		this.cameraManager = await camera.getCameraManager(this.context)
		Logger.debug(this.tag, 'getCameraManager')
		this.cameras = await this.cameraManager.getSupportedCameras()
		Logger.debug(this.tag, `get cameras ${this.cameras.length}`)
		if (this.cameras.length === 0) {
			Logger.debug(this.tag, 'cannot get cameras')
			return
		}

		let cameraDevice = this.cameras[0]
		this.cameraInput = await this.cameraManager.createCameraInput(cameraDevice)
		this.cameraInput.open()
		Logger.debug(this.tag, 'createCameraInput')
		this.cameraOutputCapability = await this.cameraManager.getSupportedOutputCapability(cameraDevice)
		let previewProfile = this.cameraOutputCapability.previewProfiles[0]
		this.previewOutput = await this.cameraManager.createPreviewOutput(previewProfile, surfaceId)
		this.previewOutput.on('frameStart', () => {
			Logger.debug(this.tag, 'Preview frame started');
		})
		this.previewOutput.on('frameEnd', () => {
			Logger.debug(this.tag, 'Preview frame ended');
		})
		this.previewOutput.on('error', (previewOutputError) => {
			Logger.debug(this.tag, `Preview output error code: ${previewOutputError.code}`);
		})

		Logger.debug(this.tag, 'createPreviewOutput')
		let mSurfaceId = await this.mReceiver.getReceivingSurfaceId()
		let photoProfile = this.cameraOutputCapability.photoProfiles[0]
		this.photoOutPut = await this.cameraManager.createPhotoOutput(photoProfile, mSurfaceId)
		this.captureSession = await this.cameraManager.createCaptureSession()
		Logger.debug(this.tag, 'createCaptureSession')
		await this.captureSession.beginConfig()
		Logger.debug(this.tag, 'beginConfig')
		await this.captureSession.addInput(this.cameraInput)
		await this.captureSession.addOutput(this.previewOutput)
		await this.captureSession.addOutput(this.photoOutPut)
		await this.captureSession.commitConfig()
		await this.captureSession.start().then(() => {
			Logger.debug(this.tag, 'Promise returned to indicate the session start success.');
		}).catch((err) => {
			Logger.debug(this.tag, `Failed to start the session ${err.code}`);
			return false
		});

		Logger.debug(this.tag, 'captureSession start')
		} catch (error) {
		Logger.debug(this.tag, "error code:" + error.code )
		Logger.debug(this.tag, "error code:" + JSON.parse(error))
		return false
		}
		return true
	}

	setTakePictureCallback(callback) {
		this.handleTakePicture = callback
	}

	async takePicture() {
		Logger.debug(this.tag, 'takePicture')
		if (this.curMode === CameraMode.MODE_VIDEO) {
		this.curMode = CameraMode.MODE_PHOTO
		}
		let photoSettings = {
		rotation: camera.ImageRotation.ROTATION_0,
		quality: camera.QualityLevel.QUALITY_LEVEL_MEDIUM,
		location: { // 位置信息,经纬度
			latitude: 12.9698,
			longitude: 77.7500,
			altitude: 1000
		},
		mirror: false
		}
		await this.photoOutPut.capture(photoSettings)
		Logger.debug(this.tag, 'takePicture done')
		AppStorage.Set('isRefresh', true)
	}

	async startVideo() {
		Logger.debug(this.tag, 'startVideo begin')
		await this.captureSession.stop()
		await this.captureSession.beginConfig()
		if (this.curMode === CameraMode.MODE_PHOTO) {
		this.curMode = CameraMode.MODE_VIDEO
		if (this.photoOutPut) {
			await this.captureSession.removeOutput(this.photoOutPut)
			this.photoOutPut.release()
		}
		} else {
		if (this.videoOutput) {
			await this.captureSession.removeOutput(this.videoOutput)
		}
		}
		if (this.videoOutput) {
		await this.captureSession.removeOutput(this.videoOutput)
		await this.videoOutput.release()
		}
		this.fileAsset = await this.mediaUtil.createAndGetUri(mediaLibrary.MediaType.VIDEO)
		this.fd = await this.mediaUtil.getFdPath(this.fileAsset)
		this.videoRecorder = await media.createVideoRecorder()
		this.videoConfig.url = `fd://${this.fd}`
		await this.videoRecorder.prepare(this.videoConfig)
		let videoId = await this.videoRecorder.getInputSurface()
		let videoProfile = this.cameraOutputCapability.videoProfiles[0];
		this.videoOutput = await this.cameraManager.createVideoOutput(videoProfile, videoId)
		await this.captureSession.addOutput(this.videoOutput)
		await this.captureSession.commitConfig()
		await this.captureSession.start()
		await this.videoOutput.start()
		await this.videoRecorder.start()
		Logger.debug(this.tag, 'startVideo end')
	}

	async stopVideo() {
		Logger.debug(this.tag, 'stopVideo called')
		await this.videoRecorder.stop()
		await this.videoOutput.stop()
		await this.videoRecorder.release()
		await this.fileAsset.close(this.fd)
	}

	async releaseCamera() {
		Logger.debug(this.tag, 'releaseCamera')
		if (this.cameraInput) {
		await this.cameraInput.close()
		}
		if (this.previewOutput) {
		await this.previewOutput.release()
		}
		if (this.photoOutPut) {
		await this.photoOutPut.release()
		}
		if (this.videoOutput) {
		await this.videoOutput.release()
		}
		if (this.captureSession) {
		await this.captureSession.release()
			}
		}
	}

3.3 Code Compilation

Tips

The detailed process of code compilation can be seen in:Hello World application and deployment in the second part (building part of the first page)

3.4 Code running effect

Use the above standard API interface to implement Camera Demo, as shown in the following figure:

TOOL
Edit this page on GitHub
Last Updated:
Contributors: zsl, zwhuang
Prev
5.14 MINI PCIE
Next
5.16 WIFI BT