목차
CONFIDENTIAL

cvsCamCtrl Library

CREVIS cvsCamCtrl 라이브러리의 API, 자료형, Feature 조회, 확장 레지스터 기능 안내

Version: 1.2.0Date: 2026. 3. 12

1. 개요#

cvsCamCtrl는 CREVIS에서 제공하는 가상 프레임그래버 라이브러리입니다. 본 문서는 첨부된 cvsCamCtrl.h 헤더를 기준으로 API, 상수, 구조체, 열거형, Feature 메타데이터 조회 기능, 모듈 기반 확장 레지스터 접근 기능까지 포함하여 정리한 프로그래머 가이드입니다.

1.1 문서 기준#

  • 헤더 우선 원칙: 함수 시그니처, 타입, 기본값, enum/struct 정의는 첨부된 cvsCamCtrl.h 선언을 우선 기준으로 삼았습니다.

대표적인 기본 사용 순서는 다음과 같습니다.

ST_InitSystem();
ST_UpdateDevice();            // 또는 ST_UpdateDeviceWithTimeout()
ST_OpenDevice(...);
ST_InitBuffer(...);

/* 연속 취득 */
ST_AcqStart(hDevice);
ST_GrabImage(...);           // 또는 ST_GrabImageAsync(...)
ST_AcqStop(hDevice);

/* 단발 취득 */
ST_SingleGrabImage(...);

ST_FreeBuffer(...);
ST_CloseDevice(hDevice);
ST_FreeSystem();

1.2 헤더 리비전 이력#

버전 날짜 주요 변경 사항
1.0.0 2024-08-22 초기 릴리스
1.0.4 2024-08-22 1.0.1~1.0.3 포함
ST_IsConnectable() 추가
로그 기능 추가
자동 버퍼 리사이징
Grab 콜백 방식 변경
벤더 필터링 추가
resend packet 수 조정
1.0.5 2025-01-23 ST_UpdateDevice() 타임아웃 설정 기능 추가
1.0.7 2025-06-12 동기/비동기 Grab 관련 기능 추가(ST_GrabImageAsync 포함)
BU-A040M-30 지원 추가
1.0.8 2025-09-02 SingleGrabImageGrabImageSync 반환값 수정
SingleGrabImage 모델 분기 추가
CvsAccessTypeST_OpenDeviceMulticast 추가
패킷 자동 협상 수정
방화벽 설정과 무관한 GEV 동작 보강
1.0.9 2025-09-17 BU-A040M-30 특정 분기 오류 수정
1.1.0 2025-09-29 베이스 라이브러리 업데이트
1.1.1 2025-10-31 이미지 스트림 파라미터 제어 추가
CVS_IMAGE 중복 정의 점검
기본 버퍼 개수 16 -> 4 변경
ST_GrabImageAsync() 파라미터/오동작 수정
ST_GrabStartAsync 제거
1.1.2 2025-12-02 호출 규약 명시 수정
ST_UpdateDevice/ST_UpdateDeviceWithTimeout 분리
1.1.3 2026-01-27 GEV stream packet resend 관련 파라미터 수정
1.1.4 2026-03-04 BU-A040M-30 특정 모델 버그 수정
1.2.0 2026-03-11 CXP 인터페이스 지원
ST_GetEnumInterface 추가
모듈 기반 확장 레지스터/파라미터 함수(ST_*RegEx, ST_*ParamEx) 추가
Feature 목록/메타데이터 조회 함수 추가

2. 정의 및 상수#

이 섹션에서는 이벤트 ID, 오류 코드, 장치 정보 상수, XML 버전, 가시성 수준, 모듈 식별 매크로, 색상 변환 코드 조합용 비트 필드를 설명합니다.

2.1 이벤트 정의#

이벤트는 Grab 이벤트와 장치 이벤트로 구분됩니다. Grab 이벤트는 이미지 획득 흐름에서 발생하고, 장치 이벤트는 장치 상태나 인터페이스 상태 변화에서 발생합니다.

2.1.1 Grab 이벤트#

이름 설명
EVENT_NEW_IMAGE 0x0 새 이미지가 정상적으로 수신됨
EVENT_GRAB_ERROR 0x1 Grab 과정에서 오류 발생
EVENT_GRAB_TIMEOUT 0x2 지정 시간 내 Grab이 완료되지 않음

2.1.2 장치 이벤트#

일부 이벤트는 특정 인터페이스에서만 지원됩니다. 헤더 주석 기준 인터페이스 범위는 GEV, U3V 또는 CXP 관련 속성으로 구분됩니다.

이름 설명 비고
EVENT_DEVICE_DISCONNECT 0x0010 장치 연결 해제 감지 GEV, U3V
EVENT_EXPOSURE_END 0x0014 노출(Exposure) 종료 GEV, U3V
EVENT_ACQUISITION_TRANSFER_START 0x0018 이미지 데이터 전송 시작 GEV
EVENT_ACQUISITION_TRANSFER_END 0x001C 이미지 데이터 전송 종료 GEV
EVENT_OVER_TRIGGER 0x0020 과도한 트리거 감지 GEV
EVENT_OVER_TRIGGER_START_MISSED 0x0024 트리거 시작 이벤트 누락 감지 U3V
EVENT_OVER_TRIGGER_END_MISSED 0x0028 트리거 종료 이벤트 누락 감지 U3V
EVENT_TRIGGER_START 0x002C 트리거 시작 감지 U3V
EVENT_WARNING_TEMPERATURE_STATE 0x0030 온도 경고 상태 U3V
EVENT_CRITICAL_TEMPERATURE_STATE 0x0034 온도 위험 상태 U3V

2.2 오류 코드 정의#

일반적으로 0은 정상, 음수 값은 오류를 의미합니다.

이름 설명
MCAM_ERR_OK 0 정상
MCAM_ERR_ERROR -1001 일반 오류
MCAM_ERR_NOT_INITIALIZED -1002 초기화되지 않음
MCAM_ERR_NOT_IMPLEMENTED -1003 구현되지 않음
MCAM_ERR_BUSY -1004 장치 사용 중
MCAM_ERR_STATE_ERROR -1005 상태 오류
MCAM_ERR_NOT_CONNECTED -1006 연결되지 않음
MCAM_ERR_NOT_FOUND -1007 찾을 수 없음
MCAM_ERR_NO_MORE_ITEM -1008 더 이상 항목 없음
MCAM_ERR_INVALID_PARAMETER -1009 잘못된 매개변수
MCAM_ERR_FILE_ERROR -1010 파일 오류
MCAM_ERR_TIMEOUT -1011 시간 초과
MCAM_ERR_ABORTED -1012 작업 중단
MCAM_ERR_BUFFER_TOO_SMALL -1013 버퍼 크기 부족
MCAM_ERR_CANNOT_OPEN_FILE -1014 파일 열기 실패
MCAM_ERR_THREAD_ERROR -1015 스레드 오류
MCAM_ERR_INVALID_DATA_FORMAT -1016 잘못된 데이터 형식
MCAM_ERR_NOT_ENOUGH_MEMORY -1017 메모리 부족
MCAM_ERR_CANCEL -1018 취소됨
MCAM_ERR_PENDING -1019 대기 중
MCAM_ERR_NO_LICENSE -1020 라이선스 없음
MCAM_ERR_CANT_READ_MANIFEST -1021 매니페스트 읽기 실패
MCAM_ERR_NOT_SUPPORTED -1022 지원되지 않음
MCAM_ERR_ERR_OVERFLOW -1023 오버플로우 오류
MCAM_ERR_IMAGE_ERROR -1024 이미지 오류
MCAM_ERR_MISSING_PACKETS -1025 누락된 패킷
MCAM_ERR_TOO_MANY_RESENDS -1026 재전송 횟수 초과
MCAM_ERR_RESENDS_FAILURE -1027 재전송 실패
MCAM_ERR_TOO_MANY_CONSECUTIVE_RESENDS -1028 연속 재전송 초과
MCAM_ERR_AUTO_ABORTED -1029 자동 중단
MCAM_ERR_BAD_VERSION -1030 잘못된 버전
MCAM_ERR_NO_MORE_ENTRY -1031 더 이상 엔트리 없음
MCAM_ERR_NO_AVAILABLE_DATA -1032 사용 가능한 데이터 없음
MCAM_ERR_NETWORK_ERROR -1033 네트워크 오류
MCAM_ERR_RESYNC -1034 재동기화 필요
MCAM_ERR_CORRUPTED_DATA -1035 손상된 데이터
MCAM_ERR_GENICAM_XML_ERROR -1036 GenICam XML 오류
MCAM_ERR_NO_DEVICE -1037 장치 없음
MCAM_ERR_NO_SYSTEM -1038 시스템 없음
MCAM_ERR_NOT_OPEN_SYSTEM -1039 시스템이 열려 있지 않음

2.3 장치 정보 정의#

장치 정보 상수는 ST_GetEnumDeviceInfo()에서 조회할 정보 종류를 지정할 때 사용합니다.

이름 설명 비고
MCAM_DEVICEINFO_USER_ID 10000 사용자 ID -
MCAM_DEVICEINFO_MODEL_NAME 10001 모델명 -
MCAM_DEVICEINFO_SERIAL_NUMBER 10002 시리얼 번호 -
MCAM_DEVICEINFO_DEVICE_VERSION 10003 장치 버전 -
MCAM_DEVICEINFO_MAC_ADDRESS 10004 MAC 주소 GEV
MCAM_DEVICEINFO_IP_ADDRESS 10005 IP 주소 GEV
MCAM_DEVICEINFO_CURRENT_SPEED 10006 현재 링크 속도 U3V
MCAM_DEVICEINFO_ACCESS_STATUS 10007 접근 상태 CXP
MCAM_DEVICEINFO_LINKED_CHANNEL 10008 링크된 채널 수 CXP

2.4 XML 버전#

이름 설명
XML_VERSION_1_0 0 GenICam XML 1.0 형식
XML_VERSION_1_1 1 GenICam XML 1.1 형식

2.5 파라미터 가시성#

이름 설명
VISIBILITY_BEGINNER 0 초보자 수준 - 기본적인 설정만 표시
VISIBILITY_EXPERT 1 전문가 수준 - 고급 설정 표시
VISIBILITY_GURU 2 최고 수준 - 모든 설정 표시
VISIBILITY_INVISIBLE 3 보이지 않음

2.6 모듈 식별 매크로#

헤더에는 모듈 식별용 매크로도 함께 정의되어 있습니다. 모듈 기반 확장 API에서는 별도의 CvsModuleType 열거형을 주로 사용합니다.

이름 설명 비고
DeviceModule 0 장치 모듈 식별값 identify a device module
DataStreamModule 1 데이터 스트림 모듈 식별값 identify a data stream module
RemoteDeviceModule 2 원격 장치 모듈 식별값 identify a remote device module

2.7 색상 변환 비트 필드 정의#

ConvertColor 값은 아래 비트 필드 상수들을 조합하여 구성됩니다.

분류 이름 설명
소스 픽셀 계열 SRCPIXELMONO 0x00010000 Mono 입력
소스 픽셀 계열 SRCPIXELBAYERBG 0x00020000 BayerBG 입력
소스 픽셀 계열 SRCPIXELBAYERGB 0x00040000 BayerGB 입력
소스 픽셀 계열 SRCPIXELBAYERRG 0x00080000 BayerRG 입력
소스 픽셀 계열 SRCPIXELBAYERGR 0x000A0000 BayerGR 입력
소스 픽셀 계열 SRCPIXELYUV 0x000C0000 YUV 입력
소스 픽셀 계열 SRCPIXELRGB 0x000E0000 RGB 입력
비트 수 SRCPIXEL8BIT 0x00001000 8-bit 입력
비트 수 SRCPIXEL10BIT 0x00002000 10-bit 입력
비트 수 SRCPIXEL12BIT 0x00004000 12-bit 입력
비트 수 SRCPIXEL16BIT 0x00008000 16-bit 입력
비트 수 SRCPIXEL24BIT 0x0000A000 24-bit 입력
패킹 SRCPIXELNONE 0x00000100 패킹 없음
패킹 SRCPIXELPACKED 0x00000200 Packed 형식
출력 색 공간 DSTPIXELGRAY 0x00000010 GRAY 출력
출력 색 공간 DSTPIXELBGR 0x00000020 BGR 출력
출력 색 공간 DSTPIXELRGB 0x00000030 RGB 출력
필터 DSTFILTERNONE 0x00000000 필터 없음
필터 DSTFILTER3X3 0x00000001 3x3 필터 적용

3. 구조체 정의#

3.1 CVS_IMAGE 구조체#

이미지 데이터의 기본 속성을 저장하는 구조체입니다.

정의

typedef struct _cvsImage
{
	int32_t width;    /**< The image width in pixels. */
	int32_t height;    /**< The image height in pixels. */
	int32_t step;    /**< The number of bytes per image row. */
	int32_t channels;    /**< The number of channels per pixel. */
	void* pImage;    /**< Pointer to the image memory. */
} CVS_IMAGE;

필드

이름 타입 설명
width int32_t 이미지 너비(px)
height int32_t 이미지 높이(px)
step int32_t 이미지 한 줄당 바이트 수(stride)
channels int32_t 픽셀당 채널 수
pImage void* 이미지 데이터 메모리 포인터

3.2 CVS_BUFFER 구조체#

Grab 결과 버퍼와 메타데이터를 저장하는 구조체입니다.

정의

typedef struct _cvsBuffer
{
	bool isAllocated;    /**< Indicates whether the buffer memory is allocated. */
	uint64_t blockID;    /**< The block ID of the buffer. */
	uint64_t timestamp;    /**< The timestamp of the buffer. */
	uint32_t size;    /**< The size of the buffer in bytes. */
	CVS_IMAGE image;    /**< The image data contained in the buffer. */
} CVS_BUFFER;

필드

이름 타입 설명
isAllocated bool 버퍼 메모리 할당 여부
blockID uint64_t 버퍼 블록 ID
timestamp uint64_t 버퍼 타임스탬프
size uint32_t 버퍼 크기(Byte)
image CVS_IMAGE 버퍼에 포함된 이미지 데이터

3.3 CVS_EVENT 구조체#

장치 이벤트의 ID, 시각, 데이터 포인터를 저장하는 구조체입니다.

정의

typedef struct _cvsEvent
{
	int id;    /**< The event ID. */
	uint64_t timestamp;    /**< The event timestamp. */
	const void* data;    /**< Pointer to the event data. */
	uint32_t dataLength;    /**< The length of the event data in bytes. */
} CVS_EVENT;

필드

이름 타입 설명
id int 이벤트 ID
timestamp uint64_t 이벤트 타임스탬프
data const void* 이벤트 데이터 포인터
dataLength uint32_t 이벤트 데이터 길이(Byte)

3.4 CVS_FEATURE 구조체#

Feature 목록을 열거할 때 사용하는 요약 구조체입니다.

정의

typedef struct _cvsFeature
{
	char name[256];    /**< The feature name. */
	char category[256];    /**< The parent category name. */
	CvsFeatureType type;    /**< The feature type. */
} CVS_FEATURE;

필드

이름 타입 설명
name[256] char Feature 이름
category[256] char 상위 카테고리 이름
type CvsFeatureType Feature 타입

3.5 CVS_FEATURE_INFO 구조체#

모든 Feature 타입에서 공통으로 사용하는 메타데이터 구조체입니다.

정의

typedef struct _cvsFeatureInfo
{
	char name[256];    /**< The feature name. */
	char displayName[256];    /**< The display name of the feature. */
	char toolTip[512];    /**< The tooltip text of the feature. */
	char description[512];    /**< The description of the feature. */
	CvsAccessMode accessMode;    /**< The access mode of the feature. */
	bool isReadable;    /**< Indicates whether the feature is readable. */
	bool isWritable;    /**< Indicates whether the feature is writable. */
	CvsVisibility visibility;    /**< The visibility level of the feature. */
} CVS_FEATURE_INFO;

필드

이름 타입 설명
name[256] char Feature 이름
displayName[256] char Feature 표시 이름
toolTip[512] char Feature 툴팁 텍스트
description[512] char Feature 설명
accessMode CvsAccessMode Feature 접근 모드
isReadable bool 읽기 가능 여부
isWritable bool 쓰기 가능 여부
visibility CvsVisibility Feature 가시성 수준

3.6 CVS_FEATURE_INTEGER_INFO 구조체#

정수형 Feature의 현재값과 범위 정보를 담는 구조체입니다.

정의

typedef struct _cvsFeatureIntegerInfo
{
	CVS_FEATURE_INFO common;    /**< Common feature information. */
	int64_t value;    /**< The current value of the integer feature. */
	int64_t min;    /**< The minimum value of the integer feature. */
	int64_t max;    /**< The maximum value of the integer feature. */
	int64_t inc;    /**< The increment value of the integer feature. */
	CvsRepresentation representation;    /**< The representation of the integer feature. */
	char unit[64];    /**< The unit of the integer feature. */
} CVS_FEATURE_INTEGER_INFO;

필드

이름 타입 설명
common CVS_FEATURE_INFO 공통 Feature 정보
value int64_t 현재 정수 값
min int64_t 정수형 최솟값
max int64_t 정수형 최댓값
inc int64_t 정수형 증가 단위
representation CvsRepresentation 정수형 표시 방식
unit[64] char 정수형 단위

3.7 CVS_FEATURE_FLOAT_INFO 구조체#

실수형 Feature의 현재값과 범위 정보를 담는 구조체입니다.

정의

typedef struct _cvsFeatureFloatInfo
{
	CVS_FEATURE_INFO common;    /**< Common feature information. */
	double value;    /**< The current value of the float feature. */
	double min;    /**< The minimum value of the float feature. */
	double max;    /**< The maximum value of the float feature. */
	CvsRepresentation representation;    /**< The representation of the float feature. */
	char unit[64];    /**< The unit of the float feature. */
} CVS_FEATURE_FLOAT_INFO;

필드

이름 타입 설명
common CVS_FEATURE_INFO 공통 Feature 정보
value double 현재 실수 값
min double 실수형 최솟값
max double 실수형 최댓값
representation CvsRepresentation 실수형 표시 방식
unit[64] char 실수형 단위

3.8 CVS_FEATURE_BOOLEAN_INFO 구조체#

불리언 Feature의 현재값을 담는 구조체입니다.

정의

typedef struct _cvsFeatureBooleanInfo
{
	CVS_FEATURE_INFO common;    /**< Common feature information. */
	bool value;    /**< The current value of the boolean feature. */
} CVS_FEATURE_BOOLEAN_INFO;

필드

이름 타입 설명
common CVS_FEATURE_INFO 공통 Feature 정보
value bool 현재 불리언 값

3.9 CVS_FEATURE_STRING_INFO 구조체#

문자열 Feature의 현재값을 담는 구조체입니다.

정의

typedef struct _cvsFeatureStringInfo
{
	CVS_FEATURE_INFO common;    /**< Common feature information. */
	char value[512];    /**< The current value of the string feature. */
} CVS_FEATURE_STRING_INFO;

필드

이름 타입 설명
common CVS_FEATURE_INFO 공통 Feature 정보
value[512] char 현재 문자열 값

3.10 CVS_FEATURE_ENUMERATION_INFO 구조체#

열거형 Feature의 현재 문자열/정수값과 항목 개수를 담는 구조체입니다.

정의

typedef struct _cvsFeatureEnumerationInfo
{
	CVS_FEATURE_INFO common;    /**< Common feature information. */
	char currentValue[256];    /**< The current string value of the enumeration feature. */
	int64_t currentIntValue;    /**< The current integer value of the enumeration feature. */
	int32_t entryCount;    /**< The number of available enumeration entries. */
} CVS_FEATURE_ENUMERATION_INFO;

필드

이름 타입 설명
common CVS_FEATURE_INFO 공통 Feature 정보
currentValue[256] char 현재 열거형 문자열 값
currentIntValue int64_t 현재 열거형 정수 값
entryCount int32_t 사용 가능한 열거형 항목 개수

3.11 CVS_FEATURE_ENUM_ENTRY_INFO 구조체#

개별 열거형 항목의 상세 메타데이터를 담는 구조체입니다.

정의

typedef struct _cvsFeatureEnumEntryInfo
{
	int32_t intValue;    /**< The integer value of the enumeration entry. */
	char stringValue[256];    /**< The string value of the enumeration entry. */
	char displayName[256];    /**< The display name of the enumeration entry. */
	char description[512];    /**< The description of the enumeration entry. */
	CvsAccessMode accessMode;    /**< The access mode of the enumeration entry. */
	CvsVisibility visibility;    /**< The visibility level of the enumeration entry. */
} CVS_FEATURE_ENUM_ENTRY_INFO;

필드

이름 타입 설명
intValue int32_t 열거형 항목의 정수 값
stringValue[256] char 열거형 항목의 문자열 값
displayName[256] char 열거형 항목 표시 이름
description[512] char 열거형 항목 설명
accessMode CvsAccessMode 열거형 항목 접근 모드
visibility CvsVisibility 열거형 항목 가시성 수준

3.12 CVS_FEATURE_COMMAND_INFO 구조체#

명령형 Feature의 공통 메타데이터를 담는 구조체입니다.

정의

typedef struct _cvsFeatureCommandInfo
{
	CVS_FEATURE_INFO common;    /**< Common feature information. */
} CVS_FEATURE_COMMAND_INFO;

필드

이름 타입 설명
common CVS_FEATURE_INFO 공통 Feature 정보

4. 열거형 정의#

4.1 색상 변환 (enum ConvertColor)#

ST_CvtColor()에서 사용하는 색상 변환 코드입니다. 값은 소스 픽셀 형식, 비트 수, 패킹 방식, 출력 색 공간, 필터 정보를 조합한 비트 필드로 구성됩니다.

색상 변환 코드는 아래와 같이 그룹별로 정리할 수 있습니다.

4.1.1 기본 RGB/BGR 변환

이름 설명
CVP_RGB2BGR 0x000EA120 RGB 형식을 BGR 색 공간으로 변환
CVP_BGR2RGB 0x000EA120 BGR 형식을 RGB 색 공간으로 변환

4.1.2 Bayer 8-bit

이름 설명
CVP_BayerBG2BGR 0x00021120 BayerBG 형식을 BGR 색 공간으로 변환
CVP_BayerGB2BGR 0x00041120 BayerGB 형식을 BGR 색 공간으로 변환
CVP_BayerRG2BGR 0x00081120 BayerRG 형식을 BGR 색 공간으로 변환
CVP_BayerGR2BGR 0x000A1120 BayerGR 형식을 BGR 색 공간으로 변환
CVP_BayerBG2RGB 0x00081120 BayerBG 형식을 RGB 색 공간으로 변환
CVP_BayerGB2RGB 0x000A1120 BayerGB 형식을 RGB 색 공간으로 변환
CVP_BayerRG2RGB 0x00021120 BayerRG 형식을 RGB 색 공간으로 변환
CVP_BayerGR2RGB 0x00041120 BayerGR 형식을 RGB 색 공간으로 변환
CVP_BayerBG2GRAY 0x00021110 BayerBG 형식을 GRAY 색 공간으로 변환
CVP_BayerGB2GRAY 0x00041110 BayerGB 형식을 GRAY 색 공간으로 변환
CVP_BayerRG2GRAY 0x00081110 BayerRG 형식을 GRAY 색 공간으로 변환
CVP_BayerGR2GRAY 0x000A1110 BayerGR 형식을 GRAY 색 공간으로 변환

4.1.3 Bayer 8-bit + 3x3

이름 설명
CVP_BayerBG2BGR_3x3 0x00021121 BayerBG 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGB2BGR_3x3 0x00041121 BayerGB 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerRG2BGR_3x3 0x00081121 BayerRG 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGR2BGR_3x3 0x000A1121 BayerGR 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerBG2RGB_3x3 0x00081121 BayerBG 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGB2RGB_3x3 0x000A1121 BayerGB 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerRG2RGB_3x3 0x00021121 BayerRG 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGR2RGB_3x3 0x00041121 BayerGR 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerBG2GRAY_3x3 0x00021111 BayerBG 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGB2GRAY_3x3 0x00041111 BayerGB 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerRG2GRAY_3x3 0x00081111 BayerRG 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGR2GRAY_3x3 0x000A1111 BayerGR 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환

4.1.4 Bayer 10-bit

이름 설명
CVP_BayerBG10ToBGR 0x00022120 BayerBG10 형식을 BGR 색 공간으로 변환
CVP_BayerGB10ToBGR 0x00042120 BayerGB10 형식을 BGR 색 공간으로 변환
CVP_BayerRG10ToBGR 0x00082120 BayerRG10 형식을 BGR 색 공간으로 변환
CVP_BayerGR10ToBGR 0x000A2120 BayerGR10 형식을 BGR 색 공간으로 변환
CVP_BayerBG10ToRGB 0x00082120 BayerBG10 형식을 RGB 색 공간으로 변환
CVP_BayerGB10ToRGB 0x000A2120 BayerGB10 형식을 RGB 색 공간으로 변환
CVP_BayerRG10ToRGB 0x00022120 BayerRG10 형식을 RGB 색 공간으로 변환
CVP_BayerGR10ToRGB 0x00042120 BayerGR10 형식을 RGB 색 공간으로 변환
CVP_BayerBG10ToGRAY 0x00022110 BayerBG10 형식을 GRAY 색 공간으로 변환
CVP_BayerGB10ToGRAY 0x00042110 BayerGB10 형식을 GRAY 색 공간으로 변환
CVP_BayerRG10ToGRAY 0x00082110 BayerRG10 형식을 GRAY 색 공간으로 변환
CVP_BayerGR10ToGRAY 0x000A2110 BayerGR10 형식을 GRAY 색 공간으로 변환

4.1.5 Bayer 10-bit + 3x3

이름 설명
CVP_BayerBG10ToBGR_3x3 0x00022121 BayerBG10 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGB10ToBGR_3x3 0x00042121 BayerGB10 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerRG10ToBGR_3x3 0x00082121 BayerRG10 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGR10ToBGR_3x3 0x000A2121 BayerGR10 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerBG10ToRGB_3x3 0x00082121 BayerBG10 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGB10ToRGB_3x3 0x000A2121 BayerGB10 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerRG10ToRGB_3x3 0x00022121 BayerRG10 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGR10ToRGB_3x3 0x00042121 BayerGR10 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerBG10ToGRAY_3x3 0x00022111 BayerBG10 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGB10ToGRAY_3x3 0x00042111 BayerGB10 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerRG10ToGRAY_3x3 0x00082111 BayerRG10 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGR10ToGRAY_3x3 0x000A2111 BayerGR10 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환

4.1.6 Bayer 10-bit Packed

이름 설명
CVP_BayerBG10pToBGR 0x00022220 BayerBG10Packed 형식을 BGR 색 공간으로 변환
CVP_BayerGB10pToBGR 0x00042220 BayerGB10Packed 형식을 BGR 색 공간으로 변환
CVP_BayerRG10pToBGR 0x00082220 BayerRG10Packed 형식을 BGR 색 공간으로 변환
CVP_BayerGR10pToBGR 0x000A2220 BayerGR10Packed 형식을 BGR 색 공간으로 변환
CVP_BayerBG10pToRGB 0x00082220 BayerBG10Packed 형식을 RGB 색 공간으로 변환
CVP_BayerGB10pToRGB 0x000A2220 BayerGB10Packed 형식을 RGB 색 공간으로 변환
CVP_BayerRG10pToRGB 0x00022220 BayerRG10Packed 형식을 RGB 색 공간으로 변환
CVP_BayerGR10pToRGB 0x00042220 BayerGR10Packed 형식을 RGB 색 공간으로 변환
CVP_BayerBG10pToGRAY 0x00022210 BayerBG10Packed 형식을 GRAY 색 공간으로 변환
CVP_BayerGB10pToGRAY 0x00042210 BayerGB10Packed 형식을 GRAY 색 공간으로 변환
CVP_BayerRG10pToGRAY 0x00082210 BayerRG10Packed 형식을 GRAY 색 공간으로 변환
CVP_BayerGR10pToGRAY 0x000A2210 BayerGR10Packed 형식을 GRAY 색 공간으로 변환

4.1.7 Bayer 10-bit Packed + 3x3

이름 설명
CVP_BayerBG10pToBGR_3x3 0x00022221 BayerBG10Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGB10pToBGR_3x3 0x00042221 BayerGB10Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerRG10pToBGR_3x3 0x00082221 BayerRG10Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGR10pToBGR_3x3 0x000A2221 BayerGR10Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerBG10pToRGB_3x3 0x00082221 BayerBG10Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGB10pToRGB_3x3 0x000A2221 BayerGB10Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerRG10pToRGB_3x3 0x00022221 BayerRG10Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGR10pToRGB_3x3 0x00042221 BayerGR10Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerBG10pToGRAY_3x3 0x00022211 BayerBG10Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGB10pToGRAY_3x3 0x00042211 BayerGB10Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerRG10pToGRAY_3x3 0x00082211 BayerRG10Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGR10pToGRAY_3x3 0x000A2211 BayerGR10Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환

4.1.8 Bayer 12-bit

이름 설명
CVP_BayerBG12ToRGB 0x00024120 BayerBG12 형식을 RGB 색 공간으로 변환
CVP_BayerGB12ToRGB 0x00044120 BayerGB12 형식을 RGB 색 공간으로 변환
CVP_BayerRG12ToRGB 0x00084120 BayerRG12 형식을 RGB 색 공간으로 변환
CVP_BayerGR12ToRGB 0x000A4120 BayerGR12 형식을 RGB 색 공간으로 변환
CVP_BayerBG12ToBGR 0x00084120 BayerBG12 형식을 BGR 색 공간으로 변환
CVP_BayerGB12ToBGR 0x000A4120 BayerGB12 형식을 BGR 색 공간으로 변환
CVP_BayerRG12ToBGR 0x00024120 BayerRG12 형식을 BGR 색 공간으로 변환
CVP_BayerGR12ToBGR 0x00044120 BayerGR12 형식을 BGR 색 공간으로 변환
CVP_BayerBG12ToGRAY 0x00024110 BayerBG12 형식을 GRAY 색 공간으로 변환
CVP_BayerGB12ToGRAY 0x00044110 BayerGB12 형식을 GRAY 색 공간으로 변환
CVP_BayerRG12ToGRAY 0x00084110 BayerRG12 형식을 GRAY 색 공간으로 변환
CVP_BayerGR12ToGRAY 0x000A4110 BayerGR12 형식을 GRAY 색 공간으로 변환

4.1.9 Bayer 12-bit + 3x3

이름 설명
CVP_BayerBG12ToBGR_3x3 0x00024121 BayerBG12 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGB12ToBGR_3x3 0x00044121 BayerGB12 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerRG12ToBGR_3x3 0x00084121 BayerRG12 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGR12ToBGR_3x3 0x000A4121 BayerGR12 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerBG12ToRGB_3x3 0x00084121 BayerBG12 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGB12ToRGB_3x3 0x000A4121 BayerGB12 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerRG12ToRGB_3x3 0x00024121 BayerRG12 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGR12ToRGB_3x3 0x00044121 BayerGR12 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerBG12ToGRAY_3x3 0x00024111 BayerBG12 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGB12ToGRAY_3x3 0x00044111 BayerGB12 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerRG12ToGRAY_3x3 0x00084111 BayerRG12 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGR12ToGRAY_3x3 0x000A4111 BayerGR12 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환

4.1.10 Bayer 12-bit Packed

이름 설명
CVP_BayerBG12pToBGR 0x00024220 BayerBG12Packed 형식을 BGR 색 공간으로 변환
CVP_BayerGB12pToBGR 0x00044220 BayerGB12Packed 형식을 BGR 색 공간으로 변환
CVP_BayerRG12pToBGR 0x00084220 BayerRG12Packed 형식을 BGR 색 공간으로 변환
CVP_BayerGR12pToBGR 0x000A4220 BayerGR12Packed 형식을 BGR 색 공간으로 변환
CVP_BayerBG12pToRGB 0x00084220 BayerBG12Packed 형식을 RGB 색 공간으로 변환
CVP_BayerGB12pToRGB 0x000A4220 BayerGB12Packed 형식을 RGB 색 공간으로 변환
CVP_BayerRG12pToRGB 0x00024220 BayerRG12Packed 형식을 RGB 색 공간으로 변환
CVP_BayerGR12pToRGB 0x00044220 BayerGR12Packed 형식을 RGB 색 공간으로 변환
CVP_BayerBG12pToGRAY 0x00024210 BayerBG12Packed 형식을 GRAY 색 공간으로 변환
CVP_BayerGB12pToGRAY 0x00044210 BayerGB12Packed 형식을 GRAY 색 공간으로 변환
CVP_BayerRG12pToGRAY 0x00084210 BayerRG12Packed 형식을 GRAY 색 공간으로 변환
CVP_BayerGR12pToGRAY 0x000A4210 BayerGR12Packed 형식을 GRAY 색 공간으로 변환

4.1.11 Bayer 12-bit Packed + 3x3

이름 설명
CVP_BayerBG12pToBGR_3x3 0x00024221 BayerBG12Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGB12pToBGR_3x3 0x00044221 BayerGB12Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerRG12pToBGR_3x3 0x00084221 BayerRG12Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerGR12pToBGR_3x3 0x000A4221 BayerGR12Packed 형식을 3x3 필터를 사용하여 BGR 색 공간으로 변환
CVP_BayerBG12pToRGB_3x3 0x00084221 BayerBG12Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGB12pToRGB_3x3 0x000A4221 BayerGB12Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerRG12pToRGB_3x3 0x00024221 BayerRG12Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerGR12pToRGB_3x3 0x00044221 BayerGR12Packed 형식을 3x3 필터를 사용하여 RGB 색 공간으로 변환
CVP_BayerBG12pToGRAY_3x3 0x00024211 BayerBG12Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGB12pToGRAY_3x3 0x00044211 BayerGB12Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerRG12pToGRAY_3x3 0x00084211 BayerRG12Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환
CVP_BayerGR12pToGRAY_3x3 0x000A4211 BayerGR12Packed 형식을 3x3 필터를 사용하여 GRAY 색 공간으로 변환

4.1.12 YUV 변환

이름 설명
CVP_YUV422pToRGB 0x000C8230 YUV422Packed 형식을 RGB 색 공간으로 변환

4.1.13 Mono 비트 축소

이름 설명
CVP_Mono10ToMono8 0x00012110 Mono10 형식을 Mono8 형식으로 변환
CVP_Mono12ToMono8 0x00014110 Mono12 형식을 Mono8 형식으로 변환
CVP_Mono10pToMono8 0x00012210 Mono10Packed 형식을 Mono8 형식으로 변환
CVP_Mono12pToMono8 0x00014210 Mono12Packed 형식을 Mono8 형식으로 변환

4.2 모듈 타입 (enum CvsModuleType)#

확장 레지스터/Feature API에서 접근 대상 모듈을 지정할 때 사용하는 열거형입니다.

이름 설명
ModuleInterface 0 인터페이스 모듈
ModuleDevice 1 장치 모듈
ModuleRemoteDevice 2 원격 장치 모듈
ModuleDataStream 3 데이터 스트림 모듈
ModuleUnknown 999 알 수 없는 모듈 타입

4.3 Feature 타입 (enum CvsFeatureType)#

Feature 노드의 데이터 타입을 나타내는 열거형입니다.

이름 설명
TypeInteger 0 정수형 Feature
TypeEnum 1 열거형 Feature
TypeBoolean 2 불리언 Feature
TypeString 3 문자열 Feature
TypeCommand 4 명령형 Feature
TypeFloat 5 실수형 Feature
TypeRegister 6 레지스터 Feature
TypeUndefined 999 정의되지 않은 Feature 타입

4.4 액세스 권한 (enum CvsAccessType)#

장치를 열 때 사용하는 액세스 권한을 정의하는 열거형입니다.

이름 설명
AccessUnknown 0 알 수 없는 액세스 타입
AccessOpen 1 기본 오픈 모드
AccessControl 2 제어 권한 모드
AccessExclusive 3 배타적 액세스 모드
AccessReadOnly 4 읽기 전용 액세스 모드

4.5 액세스 모드 (enum CvsAccessMode)#

Feature의 읽기/쓰기 가능 상태를 나타내는 열거형입니다.

이름 설명
NI 0 구현되지 않음
NA 1 사용 불가
WO 2 쓰기 전용
RO 3 읽기 전용
RW 4 읽기/쓰기 가능
_UndefinedAccesMode 5 객체가 아직 초기화되지 않음
_CycleDetectAccesMode 6 내부 액세스 모드 순환 감지용

4.6 가시성 (enum CvsVisibility)#

Feature의 UI 노출 수준을 나타내는 열거형입니다.

이름 설명
Beginner 0 항상 표시
Expert 1 Expert/Guru 수준에서 표시
Guru 2 Guru 수준에서 표시
Invisible 3 표시되지 않음
_UndefinedVisibility 99 객체가 아직 초기화되지 않음

4.7 표현 방식 (enum CvsRepresentation)#

숫자/논리값을 UI에서 어떻게 표시할지 나타내는 열거형입니다.

이름 설명
Linear 0 선형 슬라이더
Logarithmic 1 로그 슬라이더
Boolean 2 체크 박스
PureNumber 3 10진수 입력
HexNumber 4 16진수 입력
IPV4Address 5 IPv4 주소
MACAddress 6 MAC 주소
_UndefinedRepresentation 999 정의되지 않은 표현 방식

5. 함수#

이 섹션에서는 콜백, 시스템 관리, 장치 연결, Grab, 레지스터 제어, Feature 조회, 파일 입출력, 버퍼 관리까지 전체 API를 설명합니다.

아래 예제는 C++ 기준의 최소 사용 예입니다. hDeviceST_OpenDevice() 성공 후 얻은 유효한 핸들을 의미하며, 예제의 노드 이름(Width, ExposureTime, PixelFormat, DeviceUserID 등)은 실제 장치 XML/GenICam feature 구성에 따라 달라질 수 있습니다. 문자열 조회 함수는 필요 시 2-pass 방식으로 실제 버퍼 크기를 먼저 확인하십시오.

5.1 콜백 함수 정의#

라이브러리에서 제공하는 콜백 함수 형식입니다.

5.1.1 GrabCallback#

Grab 이벤트가 발생할 때 호출되는 콜백 함수 형식입니다.

형식

typedef void (WINAPI* GrabCallback)(int32_t eventID, const CVS_BUFFER* pBuffer, void* pUserDefine);

매개변수

이름 입출력 타입 설명
eventID IN int32_t 발생한 Grab 이벤트 ID입니다.
pBuffer IN const CVS_BUFFER* Grab된 이미지 버퍼 포인터입니다.
pUserDefine IN void* 사용자 정의 데이터 포인터입니다.

반환값

  • 없음 (void)

예제

void WINAPI OnGrab(int32_t eventID, const CVS_BUFFER* pBuffer, void* pUserDefine)
{
    if (eventID == EVENT_NEW_IMAGE && pBuffer != nullptr)
    {
        printf("frame: %d x %d, blockID=%llu\n",
               pBuffer->image.width,
               pBuffer->image.height,
               (unsigned long long)pBuffer->blockID);
    }
}

5.1.2 EventCallback#

장치 이벤트가 발생할 때 호출되는 콜백 함수 형식입니다.

형식

typedef void (WINAPI* EventCallback)(const CVS_EVENT* pEvent, void* pUserDefine);

매개변수

이름 입출력 타입 설명
pEvent IN const CVS_EVENT* 장치 이벤트 정보 구조체 포인터입니다.
pUserDefine IN void* 사용자 정의 데이터 포인터입니다.

반환값

  • 없음 (void)

예제

void WINAPI OnDeviceEvent(const CVS_EVENT* pEvent, void* pUserDefine)
{
    if (pEvent == nullptr)
        return;

    printf("eventID=%d, timestamp=%llu, payload=%u bytes\n",
           pEvent->id,
           (unsigned long long)pEvent->timestamp,
           pEvent->dataLength);
}

5.2 시스템 관리#

시스템 초기화와 해제, 초기화 상태 확인 관련 함수입니다.

5.2.1 ST_InitSystem#

시스템을 초기화합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_InitSystem();

매개변수

없음

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

CVS_ERROR err = ST_InitSystem();
if (err != MCAM_ERR_OK)
{
    printf("ST_InitSystem failed: %d\n", err);
}

5.2.2 ST_FreeSystem#

시스템 리소스를 해제합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_FreeSystem();

매개변수

없음

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

CVS_ERROR err = ST_FreeSystem();
if (err != MCAM_ERR_OK)
{
    printf("ST_FreeSystem failed: %d\n", err);
}

5.2.3 ST_IsInitSystem#

시스템이 초기화되었는지 확인합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_IsInitSystem(bool* pFlag);

매개변수

이름 입출력 타입 설명
pFlag OUT bool* 초기화 상태를 저장할 불리언 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

bool initialized = false;
CVS_ERROR err = ST_IsInitSystem(&initialized);
if (err == MCAM_ERR_OK)
{
    printf("initialized = %s\n", initialized ? "true" : "false");
}

5.3 장치 검색 및 정보 조회#

장치 검색, 열거, 인터페이스 및 기본 정보 조회 관련 함수입니다.

5.3.1 ST_GetAvailableCameraNum#

사용 가능한 카메라 개수를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetAvailableCameraNum(uint32_t* pNum);

매개변수

이름 입출력 타입 설명
pNum OUT uint32_t* 사용 가능한 카메라 수를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

// 전제: ST_UpdateDevice() 또는 ST_UpdateDeviceWithTimeout()를 먼저 호출합니다.
uint32_t cameraCount = 0;
CVS_ERROR err = ST_GetAvailableCameraNum(&cameraCount);
if (err == MCAM_ERR_OK)
{
    printf("cameraCount = %u\n", cameraCount);
}

5.3.2 ST_UpdateDevice#

장치 목록을 갱신합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_UpdateDevice();

매개변수

없음

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 1.1.2 리비전부터 ST_UpdateDevice()ST_UpdateDeviceWithTimeout()가 분리되었습니다.

예제

CVS_ERROR err = ST_UpdateDevice();
if (err != MCAM_ERR_OK)
{
    printf("ST_UpdateDevice failed: %d\n", err);
}

5.3.3 ST_UpdateDeviceWithTimeout#

타임아웃을 지정하여 장치 목록을 갱신합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_UpdateDeviceWithTimeout(uint32_t uTimeout);

매개변수

이름 입출력 타입 설명
uTimeout IN uint32_t 타임아웃 값(ms)입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

uint32_t timeoutMs = 3000;
CVS_ERROR err = ST_UpdateDeviceWithTimeout(timeoutMs);
if (err != MCAM_ERR_OK)
{
    printf("ST_UpdateDeviceWithTimeout failed: %d\n", err);
}

5.3.4 ST_GetEnumDeviceID#

지정한 열거 인덱스의 장치 ID를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumDeviceID(uint32_t EnumNum, char* pDeviceID, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
EnumNum IN uint32_t 장치의 열거 인덱스입니다.
pDeviceID OUT char* 장치 ID를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

uint32_t enumIndex = 0;
char deviceID[256] = {};
uint32_t size = sizeof(deviceID);

CVS_ERROR err = ST_GetEnumDeviceID(enumIndex, deviceID, &size);
if (err == MCAM_ERR_OK)
{
    printf("deviceID = %s\n", deviceID);
}

5.3.5 ST_GetEnumDeviceInfo#

지정한 열거 인덱스의 장치 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumDeviceInfo(uint32_t EnumNum, int32_t DeviceInfoCmd, char* pDeviceInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
EnumNum IN uint32_t 장치의 열거 인덱스입니다.
DeviceInfoCmd IN int32_t 조회할 장치 정보 명령 값입니다.
pDeviceInfo OUT char* 장치 정보를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

uint32_t enumIndex = 0;
char modelName[256] = {};
uint32_t size = sizeof(modelName);

CVS_ERROR err = ST_GetEnumDeviceInfo(
    enumIndex,
    MCAM_DEVICEINFO_MODEL_NAME,
    modelName,
    &size
);

if (err == MCAM_ERR_OK)
{
    printf("modelName = %s\n", modelName);
}

5.3.6 ST_GetEnumInterface#

지정한 열거 인덱스의 인터페이스를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumInterface(uint32_t EnumNum, char* pInterface, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
EnumNum IN uint32_t 장치의 열거 인덱스입니다.
pInterface OUT char* 인터페이스 정보를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

uint32_t enumIndex = 0;
char interfaceName[64] = {};
uint32_t size = sizeof(interfaceName);

CVS_ERROR err = ST_GetEnumInterface(enumIndex, interfaceName, &size);
if (err == MCAM_ERR_OK)
{
    printf("interface = %s\n", interfaceName);
}

5.4 장치 연결 및 제어#

장치 연결, 오픈 상태 확인, 인터페이스 조회 관련 함수입니다.

5.4.1 ST_IsConnectable#

장치가 연결 가능한 상태인지 확인합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_IsConnectable(uint32_t EnumNum, bool* pFlag);

매개변수

이름 입출력 타입 설명
EnumNum IN uint32_t 장치의 열거 인덱스입니다.
pFlag OUT bool* 연결 가능 여부를 저장할 불리언 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

uint32_t enumIndex = 0;
bool connectable = false;

CVS_ERROR err = ST_IsConnectable(enumIndex, &connectable);
if (err == MCAM_ERR_OK)
{
    printf("connectable = %s\n", connectable ? "true" : "false");
}

5.4.2 ST_OpenDevice#

장치를 엽니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_OpenDevice(uint32_t EnumNum, int32_t* hDevice, bool isDetailedLog = false);

매개변수

이름 입출력 타입 설명
EnumNum IN uint32_t 장치의 열거 인덱스입니다.
hDevice OUT int32_t* 장치 핸들을 저장할 정수 변수 포인터입니다.
isDetailedLog IN bool 상세 로그 활성화 여부입니다. 기본값은 false입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

uint32_t enumIndex = 0;
int32_t hDevice = 0;

CVS_ERROR err = ST_OpenDevice(enumIndex, &hDevice, false);
if (err == MCAM_ERR_OK)
{
    printf("hDevice = %d\n", hDevice);
}

5.4.3 ST_OpenDeviceMulticast#

멀티캐스트 모드로 장치를 엽니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_OpenDeviceMulticast(uint32_t EnumNum, int32_t* hDevice, CvsAccessType AccessType, const char* IPAddress, uint32_t DataPort, bool isDetailedLog = false);

매개변수

이름 입출력 타입 설명
EnumNum IN uint32_t 장치의 열거 인덱스입니다.
hDevice OUT int32_t* 장치 핸들을 저장할 정수 변수 포인터입니다.
AccessType IN CvsAccessType 멀티캐스트 또는 공유 액세스 권한입니다.
IPAddress IN const char* 멀티캐스트 그룹 주소 또는 대상 IP 주소입니다. NULL 또는 빈 문자열이면 라이브러리 기본 정책을 사용합니다.
DataPort IN uint32_t 데이터 스트림 수신 포트 번호입니다. 0이면 라이브러리가 적절한 값을 선택할 수 있습니다.
isDetailedLog IN bool 상세 로그 활성화 여부입니다. 기본값은 false입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • IPAddress는 멀티캐스트 그룹 주소 또는 대상 IP 주소로 사용됩니다.
  • DataPort0이면 라이브러리가 적절한 포트를 선택할 수 있습니다.
  • 헤더 주석 기준으로 AccessControl 권한은 하나의 제어 노드만 가질 수 있습니다.
  • 멀티캐스트 환경에서는 네트워크 장비의 IGMP Snooping 설정이 필요할 수 있습니다.

예제

uint32_t enumIndex = 0;
int32_t hDevice = 0;

CVS_ERROR err = ST_OpenDeviceMulticast(
    enumIndex,
    &hDevice,
    AccessReadOnly,
    "239.192.1.1",
    1042,
    false
);

if (err == MCAM_ERR_OK)
{
    printf("multicast open success, hDevice = %d\n", hDevice);
}

5.4.4 ST_IsOpenDevice#

장치가 열려 있는지 확인합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_IsOpenDevice(int32_t hDevice, bool* pFlag);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pFlag OUT bool* 장치 오픈 상태를 저장할 불리언 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
bool isOpen = false;

CVS_ERROR err = ST_IsOpenDevice(hDevice, &isOpen);
if (err == MCAM_ERR_OK)
{
    printf("isOpen = %s\n", isOpen ? "true" : "false");
}

5.4.5 ST_CloseDevice#

장치를 닫습니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_CloseDevice(int32_t hDevice);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 닫을 장치 핸들입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_CloseDevice(hDevice);
if (err != MCAM_ERR_OK)
{
    printf("ST_CloseDevice failed: %d\n", err);
}

5.4.6 ST_GetInterface#

장치의 인터페이스를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetInterface(int32_t hDevice, char* pInterface, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pInterface OUT char* 인터페이스 정보를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
char interfaceName[64] = {};
uint32_t size = sizeof(interfaceName);

CVS_ERROR err = ST_GetInterface(hDevice, interfaceName, &size);
if (err == MCAM_ERR_OK)
{
    printf("interface = %s\n", interfaceName);
}

5.5 이미지 획득 및 설정#

이미지 획득 시작/중지와 Grab 동작 설정 관련 함수입니다.

5.5.1 ST_AcqStart#

장치에서 Acquisition을 시작합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_AcqStart(int32_t hDevice);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 전제: 필요하다면 ST_InitBuffer()와 콜백 등록을 먼저 수행합니다.
CVS_ERROR err = ST_AcqStart(hDevice);
if (err != MCAM_ERR_OK)
{
    printf("ST_AcqStart failed: %d\n", err);
}

5.5.2 ST_AcqStop#

장치에서 Acquisition을 중지합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_AcqStop(int32_t hDevice);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 전제: ST_AcqStart()로 취득을 시작한 상태입니다.
CVS_ERROR err = ST_AcqStop(hDevice);
if (err != MCAM_ERR_OK)
{
    printf("ST_AcqStop failed: %d\n", err);
}

5.5.3 ST_DoAbortGrab#

장치에서 진행 중인 Grab을 중단합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_DoAbortGrab(int32_t hDevice);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 전제: Grab 대기 중이거나 취득 중인 상태입니다.
CVS_ERROR err = ST_DoAbortGrab(hDevice);
if (err != MCAM_ERR_OK)
{
    printf("ST_DoAbortGrab failed: %d\n", err);
}

5.5.4 ST_SetGrabTimeout#

장치의 Grab 타임아웃을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetGrabTimeout(int32_t hDevice, uint32_t Timeout);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Timeout IN uint32_t Grab 타임아웃 값(ms)입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
uint32_t timeoutMs = 2000;

CVS_ERROR err = ST_SetGrabTimeout(hDevice, timeoutMs);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetGrabTimeout failed: %d\n", err);
}

5.5.5 ST_GetGrabTimeout#

장치의 Grab 타임아웃을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetGrabTimeout(int32_t hDevice, uint32_t* pTimeout);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pTimeout OUT uint32_t* 현재 Grab 타임아웃 값(ms)을 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
uint32_t timeoutMs = 0;

CVS_ERROR err = ST_GetGrabTimeout(hDevice, &timeoutMs);
if (err == MCAM_ERR_OK)
{
    printf("grab timeout = %u ms\n", timeoutMs);
}

5.5.6 ST_SetBufferCount#

장치의 내부 버퍼 개수를 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetBufferCount(int32_t hDevice, uint32_t BufferCount);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
BufferCount IN uint32_t 설정할 내부 버퍼 개수입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
uint32_t bufferCount = 8;

CVS_ERROR err = ST_SetBufferCount(hDevice, bufferCount);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetBufferCount failed: %d\n", err);
}

5.5.7 ST_GetBufferCount#

장치의 내부 버퍼 개수를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetBufferCount(int32_t hDevice, uint32_t* pBufferCount);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pBufferCount OUT uint32_t* 현재 내부 버퍼 개수를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
uint32_t bufferCount = 0;

CVS_ERROR err = ST_GetBufferCount(hDevice, &bufferCount);
if (err == MCAM_ERR_OK)
{
    printf("bufferCount = %u\n", bufferCount);
}

5.6 이미지 처리 및 상태 확인#

이미지 취득 결과 확인과 통계 조회 관련 함수입니다.

5.6.1 ST_GrabImage#

장치에서 이미지를 Grab합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GrabImage(int32_t hDevice, CVS_BUFFER* pBuffer);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pBuffer OUT CVS_BUFFER* 획득한 이미지 데이터를 저장할 CVS_BUFFER 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • ST_AcqStart()가 시작된 상태에서 사용하십시오.
  • ST_InitBuffer()로 버퍼를 먼저 초기화한 뒤 호출하는 것이 안전합니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_BUFFER buffer = {};

if (ST_InitBuffer(hDevice, &buffer, 0) == MCAM_ERR_OK &&
    ST_AcqStart(hDevice) == MCAM_ERR_OK)
{
    CVS_ERROR err = ST_GrabImage(hDevice, &buffer);
    if (err == MCAM_ERR_OK)
    {
        printf("grabbed: %d x %d\n", buffer.image.width, buffer.image.height);
    }

    ST_AcqStop(hDevice);
    ST_FreeBuffer(&buffer);
}

5.6.2 ST_GrabImageAsync#

장치에서 이미지를 비동기로 Grab합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GrabImageAsync(int32_t hDevice, CVS_BUFFER* pBuffer);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pBuffer OUT CVS_BUFFER* 획득한 이미지 데이터를 저장할 CVS_BUFFER 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 비동기 Grab 지원은 1.0.7 이후 추가되었습니다.
  • 1.1.1에서 ST_GrabImageAsync()의 파라미터와 동작이 조정되었습니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_BUFFER buffer = {};

if (ST_InitBuffer(hDevice, &buffer, 0) == MCAM_ERR_OK &&
    ST_AcqStart(hDevice) == MCAM_ERR_OK)
{
    CVS_ERROR err = ST_GrabImageAsync(hDevice, &buffer);
    if (err == MCAM_ERR_OK)
    {
        printf("async image ready: %d x %d\n", buffer.image.width, buffer.image.height);
    }

    ST_AcqStop(hDevice);
    ST_FreeBuffer(&buffer);
}

5.6.3 ST_SingleGrabImage#

장치에서 단일 이미지를 Grab합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SingleGrabImage(int32_t hDevice, CVS_BUFFER* pBuffer);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pBuffer OUT CVS_BUFFER* 획득한 이미지 데이터를 저장할 CVS_BUFFER 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 연속 획득을 시작하지 않고 단발성으로 이미지를 취득할 때 사용합니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_BUFFER buffer = {};

if (ST_InitBuffer(hDevice, &buffer, 0) == MCAM_ERR_OK)
{
    CVS_ERROR err = ST_SingleGrabImage(hDevice, &buffer);
    if (err == MCAM_ERR_OK)
    {
        printf("single shot: %d x %d\n", buffer.image.width, buffer.image.height);
    }

    ST_FreeBuffer(&buffer);
}

5.6.4 ST_GetImageAvailable#

장치에서 이미지가 사용 가능한지 확인합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetImageAvailable(int32_t hDevice, uint32_t* pFlag);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pFlag OUT uint32_t* 이미지 사용 가능 상태를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 출력 타입은 uint32_t*이며, 일반적으로 0이 아닌 값이면 사용 가능 상태로 해석합니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 전제: ST_AcqStart() 이후에 폴링하는 상황입니다.
uint32_t available = 0;

CVS_ERROR err = ST_GetImageAvailable(hDevice, &available);
if (err == MCAM_ERR_OK)
{
    printf("image available = %u\n", available);
}

5.6.5 ST_GetGrabCount#

장치의 Grab 개수와 오류 개수를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetGrabCount(int32_t hDevice, uint64_t* Count, uint64_t* ErrorCount);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Count OUT uint64_t* 획득한 이미지 개수를 저장할 변수 포인터입니다.
ErrorCount OUT uint64_t* Grab 오류 개수를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
uint64_t count = 0;
uint64_t errorCount = 0;

CVS_ERROR err = ST_GetGrabCount(hDevice, &count, &errorCount);
if (err == MCAM_ERR_OK)
{
    printf("grabCount=%llu, errorCount=%llu\n",
           (unsigned long long)count,
           (unsigned long long)errorCount);
}

5.6.6 ST_GetFrameRate#

장치의 프레임 속도를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFrameRate(int32_t hDevice, double* FrameRate);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
FrameRate OUT double* 프레임 속도를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
double frameRate = 0.0;

CVS_ERROR err = ST_GetFrameRate(hDevice, &frameRate);
if (err == MCAM_ERR_OK)
{
    printf("frameRate = %.3f fps\n", frameRate);
}

5.6.7 ST_GetBandwidth#

장치의 대역폭을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetBandwidth(int32_t hDevice, double* Bandwidth);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Bandwidth OUT double* 대역폭 값을 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
double bandwidth = 0.0;

CVS_ERROR err = ST_GetBandwidth(hDevice, &bandwidth);
if (err == MCAM_ERR_OK)
{
    printf("bandwidth = %.3f\n", bandwidth);
}

5.6.8 ST_GetLastError#

장치의 마지막 오류 코드를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetLastError(int32_t hDevice);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.

반환값

  • 장치의 마지막 오류 코드 (MCAM_ERR_*)

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 예시: 일부러 잘못된 노드명을 사용해 오류를 발생시킨 뒤 마지막 오류를 확인합니다.
(void)ST_SetIntReg(hDevice, "InvalidNodeName", 1);

CVS_ERROR lastError = ST_GetLastError(hDevice);
printf("lastError = %d\n", lastError);

5.6.9 ST_GetLastErrorDescription#

장치의 마지막 오류 설명 문자열을 조회합니다.

시그니처

CVS_IMPORT_EXPORT const char* WINAPI ST_GetLastErrorDescription(int32_t hDevice);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.

반환값

  • 마지막 오류에 대한 설명 문자열

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 예시: 마지막 오류 문자열을 바로 조회합니다.
(void)ST_SetIntReg(hDevice, "InvalidNodeName", 1);

const char* description = ST_GetLastErrorDescription(hDevice);
printf("lastErrorDescription = %s\n", description != nullptr ? description : "(null)");

5.7 로그 및 설정 관리#

상세 로그 활성화 상태를 제어하는 함수입니다.

5.7.1 ST_SetDetailedLog#

장치의 상세 로그 활성화 여부를 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetDetailedLog(int32_t hDevice, bool Flag);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Flag IN bool 상세 로그를 활성화하려면 true, 비활성화하려면 false를 지정합니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_SetDetailedLog(hDevice, true);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetDetailedLog failed: %d\n", err);
}

5.7.2 ST_GetDetailedLog#

장치의 상세 로그 활성화 여부를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetDetailedLog(int32_t hDevice, bool* pFlag);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pFlag OUT bool* 상세 로그 활성화 상태를 저장할 불리언 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
bool enabled = false;

CVS_ERROR err = ST_GetDetailedLog(hDevice, &enabled);
if (err == MCAM_ERR_OK)
{
    printf("detailedLog = %s\n", enabled ? "true" : "false");
}

5.8 레지스터 제어#

기본 레지스터 값을 읽고 쓰는 함수입니다.

5.8.1 ST_SetIntReg#

정수형 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetIntReg(int32_t hDevice, const char* NodeName, int64_t val);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 정수형 레지스터 노드 이름입니다.
val IN int64_t 설정할 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 노드 이름은 실제 장치 XML에 맞게 변경합니다.
CVS_ERROR err = ST_SetIntReg(hDevice, "Width", 1920);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetIntReg failed: %d\n", err);
}

5.8.2 ST_GetIntReg#

정수형 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetIntReg(int32_t hDevice, const char* NodeName, int64_t* pVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 정수형 레지스터 노드 이름입니다.
pVal OUT int64_t* 조회 결과를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
int64_t value = 0;

CVS_ERROR err = ST_GetIntReg(hDevice, "Width", &value);
if (err == MCAM_ERR_OK)
{
    printf("Width = %lld\n", (long long)value);
}

5.8.3 ST_SetFloatReg#

실수형 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetFloatReg(int32_t hDevice, const char* NodeName, double fVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 실수형 레지스터 노드 이름입니다.
fVal IN double 설정할 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_SetFloatReg(hDevice, "ExposureTime", 5000.0);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetFloatReg failed: %d\n", err);
}

5.8.4 ST_GetFloatReg#

실수형 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFloatReg(int32_t hDevice, const char* NodeName, double* pFval);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 실수형 레지스터 노드 이름입니다.
pFval OUT double* 조회 결과를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
double value = 0.0;

CVS_ERROR err = ST_GetFloatReg(hDevice, "ExposureTime", &value);
if (err == MCAM_ERR_OK)
{
    printf("ExposureTime = %.3f\n", value);
}

5.8.5 ST_SetBoolReg#

불리언 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetBoolReg(int32_t hDevice, const char* NodeName, bool bVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 불리언 레지스터 노드 이름입니다.
bVal IN bool 설정할 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_SetBoolReg(hDevice, "GammaEnable", true);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetBoolReg failed: %d\n", err);
}

5.8.6 ST_GetBoolReg#

불리언 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetBoolReg(int32_t hDevice, const char* NodeName, bool* pBval);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 불리언 레지스터 노드 이름입니다.
pBval OUT bool* 조회 결과를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
bool value = false;

CVS_ERROR err = ST_GetBoolReg(hDevice, "GammaEnable", &value);
if (err == MCAM_ERR_OK)
{
    printf("GammaEnable = %s\n", value ? "true" : "false");
}

5.8.7 ST_SetEnumReg#

열거형 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetEnumReg(int32_t hDevice, const char* NodeName, const char* val);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
val IN const char* 설정할 문자열 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_SetEnumReg(hDevice, "PixelFormat", "Mono8");
if (err != MCAM_ERR_OK)
{
    printf("ST_SetEnumReg failed: %d\n", err);
}

5.8.8 ST_GetEnumReg#

열거형 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumReg(int32_t hDevice, const char* NodeName, char* pInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
pInfo OUT char* 조회 결과를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
char value[256] = {};
uint32_t size = sizeof(value);

CVS_ERROR err = ST_GetEnumReg(hDevice, "PixelFormat", value, &size);
if (err == MCAM_ERR_OK)
{
    printf("PixelFormat = %s\n", value);
}

5.8.9 ST_SetStrReg#

문자열 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetStrReg(int32_t hDevice, const char* NodeName, char* val);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 문자열 레지스터 노드 이름입니다.
val IN char* 설정할 문자열 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 선언상 입력 인수 타입은 char*입니다. 호출 코드 작성 시 헤더 선언을 그대로 따르십시오.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
char userId[] = "LineA_Camera01";

CVS_ERROR err = ST_SetStrReg(hDevice, "DeviceUserID", userId);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetStrReg failed: %d\n", err);
}

5.8.10 ST_GetStrReg#

문자열 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetStrReg(int32_t hDevice, const char* NodeName, char* pInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 문자열 레지스터 노드 이름입니다.
pInfo OUT char* 조회 결과를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
char value[512] = {};
uint32_t size = sizeof(value);

CVS_ERROR err = ST_GetStrReg(hDevice, "DeviceUserID", value, &size);
if (err == MCAM_ERR_OK)
{
    printf("DeviceUserID = %s\n", value);
}

5.8.11 ST_SetCmdReg#

명령 레지스터를 실행합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetCmdReg(int32_t hDevice, const char* NodeName);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 명령 레지스터 노드 이름입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 예시 노드는 장치에 따라 다를 수 있습니다.
CVS_ERROR err = ST_SetCmdReg(hDevice, "UserSetLoad");
if (err != MCAM_ERR_OK)
{
    printf("ST_SetCmdReg failed: %d\n", err);
}

5.9 레지스터 정보 조회#

레지스터 범위와 열거형 항목 정보를 조회하는 함수입니다.

5.9.1 ST_GetIntRegRange#

정수형 레지스터의 범위를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetIntRegRange(int32_t hDevice, const char* NodeName, int64_t* pMin, int64_t* pMax, int64_t* pInc);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 정수형 레지스터 노드 이름입니다.
pMin OUT int64_t* 최솟값을 저장할 변수 포인터입니다.
pMax OUT int64_t* 최댓값을 저장할 변수 포인터입니다.
pInc OUT int64_t* 증가 단위를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
int64_t minValue = 0;
int64_t maxValue = 0;
int64_t increment = 0;

CVS_ERROR err = ST_GetIntRegRange(hDevice, "Width", &minValue, &maxValue, &increment);
if (err == MCAM_ERR_OK)
{
    printf("Width range: min=%lld, max=%lld, inc=%lld\n",
           (long long)minValue,
           (long long)maxValue,
           (long long)increment);
}

5.9.2 ST_GetFloatRegRange#

실수형 레지스터의 범위를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFloatRegRange(int32_t hDevice, const char* NodeName, double* pMin, double* pMax);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 실수형 레지스터 노드 이름입니다.
pMin OUT double* 최솟값을 저장할 변수 포인터입니다.
pMax OUT double* 최댓값을 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
double minValue = 0.0;
double maxValue = 0.0;

CVS_ERROR err = ST_GetFloatRegRange(hDevice, "ExposureTime", &minValue, &maxValue);
if (err == MCAM_ERR_OK)
{
    printf("ExposureTime range: min=%.3f, max=%.3f\n", minValue, maxValue);
}

5.9.3 ST_GetEnumEntrySize#

열거형 레지스터 항목 개수를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumEntrySize(int32_t hDevice, const char* NodeName, int32_t* pVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
pVal OUT int32_t* 항목 개수를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
int32_t entryCount = 0;

CVS_ERROR err = ST_GetEnumEntrySize(hDevice, "PixelFormat", &entryCount);
if (err == MCAM_ERR_OK)
{
    printf("PixelFormat entryCount = %d\n", entryCount);
}

5.9.4 ST_GetEnumEntryIntValue#

열거형 항목의 정수값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumEntryIntValue(int32_t hDevice, const char* NodeName, int32_t EntryIdx, int32_t* pVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
EntryIdx IN int32_t 조회할 열거형 항목 인덱스입니다.
pVal OUT int32_t* 정수 값을 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
int32_t intValue = 0;

CVS_ERROR err = ST_GetEnumEntryIntValue(hDevice, "PixelFormat", 0, &intValue);
if (err == MCAM_ERR_OK)
{
    printf("entry[0].intValue = %d\n", intValue);
}

5.9.5 ST_GetEnumEntryValue#

열거형 항목의 문자열 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumEntryValue(int32_t hDevice, const char* NodeName, int32_t EntryIdx, char* pInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
EntryIdx IN int32_t 조회할 열거형 항목 인덱스입니다.
pInfo OUT char* 열거형 항목 문자열 값을 저장할 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
char value[256] = {};
uint32_t size = sizeof(value);

CVS_ERROR err = ST_GetEnumEntryValue(hDevice, "PixelFormat", 0, value, &size);
if (err == MCAM_ERR_OK)
{
    printf("entry[0].value = %s\n", value);
}

5.10 파라미터 읽기 및 쓰기#

주소 기반 파라미터 읽기/쓰기 함수입니다.

5.10.1 ST_ReadParam#

장치에서 파라미터를 읽습니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_ReadParam(int32_t hDevice, unsigned char* pBuffer, int64_t Address, int64_t Length);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pBuffer OUT unsigned char* 파라미터 데이터를 저장할 버퍼입니다.
Address IN int64_t 파라미터 주소입니다.
Length IN int64_t 읽을 바이트 수입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 주소와 길이는 실제 장치 매뉴얼에 맞게 지정합니다.
unsigned char buffer[16] = {};
int64_t address = 0x1000;
int64_t length = sizeof(buffer);

CVS_ERROR err = ST_ReadParam(hDevice, buffer, address, length);
if (err == MCAM_ERR_OK)
{
    printf("read %lld bytes from 0x%llX\n",
           (long long)length,
           (long long)address);
}

5.10.2 ST_WriteParam#

장치에 파라미터를 씁니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_WriteParam(int32_t hDevice, const unsigned char* pBuffer, int64_t Address, int64_t Length);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pBuffer IN const unsigned char* 기록할 파라미터 데이터 버퍼입니다.
Address IN int64_t 파라미터 주소입니다.
Length IN int64_t 쓸 바이트 수입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 주소와 데이터 형식은 실제 장치 매뉴얼에 맞게 지정합니다.
unsigned char buffer[4] = {0x01, 0x02, 0x03, 0x04};
int64_t address = 0x1000;
int64_t length = sizeof(buffer);

CVS_ERROR err = ST_WriteParam(hDevice, buffer, address, length);
if (err != MCAM_ERR_OK)
{
    printf("ST_WriteParam failed: %d\n", err);
}

5.11 확장 레지스터 및 파라미터 제어#

모듈 기반 확장 레지스터/파라미터 접근 함수입니다.

5.11.1 ST_SetIntRegEx#

지정한 모듈의 정수형 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetIntRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, int64_t val);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 정수형 레지스터 노드 이름입니다.
val IN int64_t 설정할 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;

CVS_ERROR err = ST_SetIntRegEx(hDevice, moduleType, "Width", 1920);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetIntRegEx failed: %d\n", err);
}

5.11.2 ST_GetIntRegEx#

지정한 모듈의 정수형 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetIntRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, int64_t* pVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 정수형 레지스터 노드 이름입니다.
pVal OUT int64_t* 조회 결과를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
int64_t value = 0;

CVS_ERROR err = ST_GetIntRegEx(hDevice, moduleType, "Width", &value);
if (err == MCAM_ERR_OK)
{
    printf("Width = %lld\n", (long long)value);
}

5.11.3 ST_SetFloatRegEx#

지정한 모듈의 실수형 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetFloatRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, double fVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 실수형 레지스터 노드 이름입니다.
fVal IN double 설정할 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;

CVS_ERROR err = ST_SetFloatRegEx(hDevice, moduleType, "ExposureTime", 5000.0);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetFloatRegEx failed: %d\n", err);
}

5.11.4 ST_GetFloatRegEx#

지정한 모듈의 실수형 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFloatRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, double* pFval);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 실수형 레지스터 노드 이름입니다.
pFval OUT double* 조회 결과를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
double value = 0.0;

CVS_ERROR err = ST_GetFloatRegEx(hDevice, moduleType, "ExposureTime", &value);
if (err == MCAM_ERR_OK)
{
    printf("ExposureTime = %.3f\n", value);
}

5.11.5 ST_SetBoolRegEx#

지정한 모듈의 불리언 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetBoolRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, bool bVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 불리언 레지스터 노드 이름입니다.
bVal IN bool 설정할 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;

CVS_ERROR err = ST_SetBoolRegEx(hDevice, moduleType, "GammaEnable", true);
if (err != MCAM_ERR_OK)
{
    printf("ST_SetBoolRegEx failed: %d\n", err);
}

5.11.6 ST_GetBoolRegEx#

지정한 모듈의 불리언 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetBoolRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, bool* pBval);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 불리언 레지스터 노드 이름입니다.
pBval OUT bool* 조회 결과를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
bool value = false;

CVS_ERROR err = ST_GetBoolRegEx(hDevice, moduleType, "GammaEnable", &value);
if (err == MCAM_ERR_OK)
{
    printf("GammaEnable = %s\n", value ? "true" : "false");
}

5.11.7 ST_SetEnumRegEx#

지정한 모듈의 열거형 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetEnumRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, const char* val);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
val IN const char* 설정할 문자열 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;

CVS_ERROR err = ST_SetEnumRegEx(hDevice, moduleType, "PixelFormat", "Mono8");
if (err != MCAM_ERR_OK)
{
    printf("ST_SetEnumRegEx failed: %d\n", err);
}

5.11.8 ST_GetEnumRegEx#

지정한 모듈의 열거형 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, char* pInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
pInfo OUT char* 조회 결과를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
char value[256] = {};
uint32_t size = sizeof(value);

CVS_ERROR err = ST_GetEnumRegEx(hDevice, moduleType, "PixelFormat", value, &size);
if (err == MCAM_ERR_OK)
{
    printf("PixelFormat = %s\n", value);
}

5.11.9 ST_SetStrRegEx#

지정한 모듈의 문자열 레지스터 값을 설정합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetStrRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, const char* val);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 문자열 레지스터 노드 이름입니다.
val IN const char* 설정할 문자열 값입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;

CVS_ERROR err = ST_SetStrRegEx(hDevice, moduleType, "DeviceUserID", "LineA_Camera01");
if (err != MCAM_ERR_OK)
{
    printf("ST_SetStrRegEx failed: %d\n", err);
}

5.11.10 ST_GetStrRegEx#

지정한 모듈의 문자열 레지스터 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetStrRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, char* pInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 문자열 레지스터 노드 이름입니다.
pInfo OUT char* 조회 결과를 저장할 문자열 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
char value[512] = {};
uint32_t size = sizeof(value);

CVS_ERROR err = ST_GetStrRegEx(hDevice, moduleType, "DeviceUserID", value, &size);
if (err == MCAM_ERR_OK)
{
    printf("DeviceUserID = %s\n", value);
}

5.11.11 ST_SetCmdRegEx#

지정한 모듈의 명령 레지스터를 실행합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_SetCmdRegEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 명령 레지스터 노드 이름입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;

// 예시 노드는 장치 XML에 따라 다를 수 있습니다.
CVS_ERROR err = ST_SetCmdRegEx(hDevice, moduleType, "UserSetLoad");
if (err != MCAM_ERR_OK)
{
    printf("ST_SetCmdRegEx failed: %d\n", err);
}

5.11.12 ST_GetIntRegRangeEx#

지정한 모듈의 정수형 레지스터 범위를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetIntRegRangeEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, int64_t* pMin, int64_t* pMax, int64_t* pInc);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 정수형 레지스터 노드 이름입니다.
pMin OUT int64_t* 최솟값을 저장할 변수 포인터입니다.
pMax OUT int64_t* 최댓값을 저장할 변수 포인터입니다.
pInc OUT int64_t* 증가 단위를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
int64_t minValue = 0;
int64_t maxValue = 0;
int64_t increment = 0;

CVS_ERROR err = ST_GetIntRegRangeEx(hDevice, moduleType, "Width", &minValue, &maxValue, &increment);
if (err == MCAM_ERR_OK)
{
    printf("Width range: min=%lld, max=%lld, inc=%lld\n",
           (long long)minValue,
           (long long)maxValue,
           (long long)increment);
}

5.11.13 ST_GetFloatRegRangeEx#

지정한 모듈의 실수형 레지스터 범위를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFloatRegRangeEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, double* pMin, double* pMax);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 실수형 레지스터 노드 이름입니다.
pMin OUT double* 최솟값을 저장할 변수 포인터입니다.
pMax OUT double* 최댓값을 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
double minValue = 0.0;
double maxValue = 0.0;

CVS_ERROR err = ST_GetFloatRegRangeEx(hDevice, moduleType, "ExposureTime", &minValue, &maxValue);
if (err == MCAM_ERR_OK)
{
    printf("ExposureTime range: min=%.3f, max=%.3f\n", minValue, maxValue);
}

5.11.14 ST_GetEnumEntrySizeEx#

지정한 모듈의 열거형 레지스터 항목 개수를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumEntrySizeEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, int32_t* pVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
pVal OUT int32_t* 항목 개수를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
int32_t entryCount = 0;

CVS_ERROR err = ST_GetEnumEntrySizeEx(hDevice, moduleType, "PixelFormat", &entryCount);
if (err == MCAM_ERR_OK)
{
    printf("PixelFormat entryCount = %d\n", entryCount);
}

5.11.15 ST_GetEnumEntryIntValueEx#

지정한 모듈의 열거형 항목 정수값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumEntryIntValueEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, int32_t EntryIdx, int32_t* pVal);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
EntryIdx IN int32_t 조회할 열거형 항목 인덱스입니다.
pVal OUT int32_t* 정수 값을 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
int32_t intValue = 0;

CVS_ERROR err = ST_GetEnumEntryIntValueEx(hDevice, moduleType, "PixelFormat", 0, &intValue);
if (err == MCAM_ERR_OK)
{
    printf("entry[0].intValue = %d\n", intValue);
}

5.11.16 ST_GetEnumEntryValueEx#

지정한 모듈의 열거형 항목 문자열 값을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumEntryValueEx(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, int32_t EntryIdx, char* pInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
NodeName IN const char* 열거형 레지스터 노드 이름입니다.
EntryIdx IN int32_t 조회할 열거형 항목 인덱스입니다.
pInfo OUT char* 열거형 항목 문자열 값을 저장할 버퍼입니다.
pSize IN/OUT uint32_t* 버퍼 크기를 지정하고 호출 후 실제 크기를 돌려받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
char value[256] = {};
uint32_t size = sizeof(value);

CVS_ERROR err = ST_GetEnumEntryValueEx(hDevice, moduleType, "PixelFormat", 0, value, &size);
if (err == MCAM_ERR_OK)
{
    printf("entry[0].value = %s\n", value);
}

5.11.17 ST_ReadParamEx#

지정한 모듈에서 파라미터를 읽습니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_ReadParamEx(int32_t hDevice, CvsModuleType moduleType, unsigned char* pBuffer, int64_t Address, int64_t Length);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
pBuffer OUT unsigned char* 파라미터 데이터를 저장할 버퍼입니다.
Address IN int64_t 파라미터 주소입니다.
Length IN int64_t 읽을 바이트 수입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
// 주소와 길이는 실제 모듈의 register map에 맞게 지정합니다.
unsigned char buffer[16] = {};
int64_t address = 0x1000;
int64_t length = sizeof(buffer);

CVS_ERROR err = ST_ReadParamEx(hDevice, moduleType, buffer, address, length);
if (err == MCAM_ERR_OK)
{
    printf("read %lld bytes from module %d, address 0x%llX\n",
           (long long)length,
           (int)moduleType,
           (long long)address);
}

5.11.18 ST_WriteParamEx#

지정한 모듈에 파라미터를 씁니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_WriteParamEx(int32_t hDevice, CvsModuleType moduleType, const unsigned char* pBuffer, int64_t Address, int64_t Length);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 접근할 모듈 유형입니다.
pBuffer IN const unsigned char* 기록할 파라미터 데이터 버퍼입니다.
Address IN int64_t 파라미터 주소입니다.
Length IN int64_t 쓸 바이트 수입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
// 주소와 데이터 형식은 실제 모듈의 register map에 맞게 지정합니다.
unsigned char buffer[4] = {0x01, 0x02, 0x03, 0x04};
int64_t address = 0x1000;
int64_t length = sizeof(buffer);

CVS_ERROR err = ST_WriteParamEx(hDevice, moduleType, buffer, address, length);
if (err != MCAM_ERR_OK)
{
    printf("ST_WriteParamEx failed: %d\n", err);
}

5.12 Feature 및 메타데이터 조회#

Feature 목록, 상세 메타데이터, Feature 의존 관계를 조회하는 함수입니다.

5.12.1 ST_GetFeatureSize#

지정한 모듈의 Feature 개수를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFeatureSize(int32_t hDevice, CvsModuleType moduleType, uint32_t* pFeatureSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
pFeatureSize OUT uint32_t* 사용 가능한 Feature 개수를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • moduleType에는 CvsModuleType 값을 사용합니다. 일반적인 카메라 파라미터 조회는 ModuleRemoteDevice가 자주 사용됩니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
uint32_t featureCount = 0;

CVS_ERROR err = ST_GetFeatureSize(hDevice, moduleType, &featureCount);
if (err == MCAM_ERR_OK)
{
    printf("featureCount = %u\n", featureCount);
}

5.12.2 ST_GetFeatureList#

지정한 모듈의 Feature 목록에서 항목을 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFeatureList(int32_t hDevice, CvsModuleType moduleType, int32_t index, CVS_FEATURE* pFeatureList);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
index IN int32_t Feature 목록에서 조회할 인덱스입니다.
pFeatureList OUT CVS_FEATURE* Feature 정보를 저장할 CVS_FEATURE 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • Feature 목록을 순회할 때는 먼저 ST_GetFeatureSize()로 총 개수를 확인한 뒤 인덱스를 증가시키는 방식이 일반적입니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE feature = {};

CVS_ERROR err = ST_GetFeatureList(hDevice, moduleType, 0, &feature);
if (err == MCAM_ERR_OK)
{
    printf("name=%s, category=%s, type=%d\n",
           feature.name,
           feature.category,
           (int)feature.type);
}

5.12.3 ST_GetIntFeatureInfo#

정수형 Feature의 상세 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetIntFeatureInfo(int32_t hDevice, CvsModuleType moduleType, const char* FeatureName, CVS_FEATURE_INTEGER_INFO* pInfo);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
FeatureName IN const char* 정수형 Feature 이름입니다.
pInfo OUT CVS_FEATURE_INTEGER_INFO* 정수형 Feature 정보를 저장할 CVS_FEATURE_INTEGER_INFO 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE_INTEGER_INFO info = {};

CVS_ERROR err = ST_GetIntFeatureInfo(hDevice, moduleType, "Width", &info);
if (err == MCAM_ERR_OK)
{
    printf("Width: value=%lld, min=%lld, max=%lld, inc=%lld, unit=%s\n",
           (long long)info.value,
           (long long)info.min,
           (long long)info.max,
           (long long)info.inc,
           info.unit);
}

5.12.4 ST_GetFloatFeatureInfo#

실수형 Feature의 상세 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetFloatFeatureInfo(int32_t hDevice, CvsModuleType moduleType, const char* FeatureName, CVS_FEATURE_FLOAT_INFO* pInfo);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
FeatureName IN const char* 실수형 Feature 이름입니다.
pInfo OUT CVS_FEATURE_FLOAT_INFO* 실수형 Feature 정보를 저장할 CVS_FEATURE_FLOAT_INFO 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE_FLOAT_INFO info = {};

CVS_ERROR err = ST_GetFloatFeatureInfo(hDevice, moduleType, "ExposureTime", &info);
if (err == MCAM_ERR_OK)
{
    printf("ExposureTime: value=%.3f, min=%.3f, max=%.3f, unit=%s\n",
           info.value,
           info.min,
           info.max,
           info.unit);
}

5.12.5 ST_GetBoolFeatureInfo#

불리언 Feature의 상세 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetBoolFeatureInfo(int32_t hDevice, CvsModuleType moduleType, const char* FeatureName, CVS_FEATURE_BOOLEAN_INFO* pInfo);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
FeatureName IN const char* 불리언 Feature 이름입니다.
pInfo OUT CVS_FEATURE_BOOLEAN_INFO* 불리언 Feature 정보를 저장할 CVS_FEATURE_BOOLEAN_INFO 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE_BOOLEAN_INFO info = {};

CVS_ERROR err = ST_GetBoolFeatureInfo(hDevice, moduleType, "GammaEnable", &info);
if (err == MCAM_ERR_OK)
{
    printf("GammaEnable: value=%s, readable=%s, writable=%s\n",
           info.value ? "true" : "false",
           info.common.isReadable ? "true" : "false",
           info.common.isWritable ? "true" : "false");
}

5.12.6 ST_GetStrFeatureInfo#

문자열 Feature의 상세 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetStrFeatureInfo(int32_t hDevice, CvsModuleType moduleType, const char* FeatureName, CVS_FEATURE_STRING_INFO* pInfo);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
FeatureName IN const char* 문자열 Feature 이름입니다.
pInfo OUT CVS_FEATURE_STRING_INFO* 문자열 Feature 정보를 저장할 CVS_FEATURE_STRING_INFO 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE_STRING_INFO info = {};

CVS_ERROR err = ST_GetStrFeatureInfo(hDevice, moduleType, "DeviceUserID", &info);
if (err == MCAM_ERR_OK)
{
    printf("DeviceUserID: value=%s, displayName=%s\n",
           info.value,
           info.common.displayName);
}

5.12.7 ST_GetEnumFeatureInfo#

열거형 Feature의 상세 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumFeatureInfo(int32_t hDevice, CvsModuleType moduleType, const char* FeatureName, CVS_FEATURE_ENUMERATION_INFO* pInfo);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
FeatureName IN const char* 열거형 Feature 이름입니다.
pInfo OUT CVS_FEATURE_ENUMERATION_INFO* 열거형 Feature 정보를 저장할 CVS_FEATURE_ENUMERATION_INFO 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE_ENUMERATION_INFO info = {};

CVS_ERROR err = ST_GetEnumFeatureInfo(hDevice, moduleType, "PixelFormat", &info);
if (err == MCAM_ERR_OK)
{
    printf("PixelFormat: currentValue=%s, currentIntValue=%lld, entryCount=%d\n",
           info.currentValue,
           (long long)info.currentIntValue,
           info.entryCount);
}

5.12.8 ST_GetCommandFeatureInfo#

명령형 Feature의 상세 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetCommandFeatureInfo(int32_t hDevice, CvsModuleType moduleType, const char* FeatureName, CVS_FEATURE_COMMAND_INFO* pInfo);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
FeatureName IN const char* 명령형 Feature 이름입니다.
pInfo OUT CVS_FEATURE_COMMAND_INFO* 명령형 Feature 정보를 저장할 CVS_FEATURE_COMMAND_INFO 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE_COMMAND_INFO info = {};

CVS_ERROR err = ST_GetCommandFeatureInfo(hDevice, moduleType, "UserSetLoad", &info);
if (err == MCAM_ERR_OK)
{
    printf("command displayName=%s, accessMode=%d\n",
           info.common.displayName,
           (int)info.common.accessMode);
}

5.12.9 ST_GetEnumEntryInfo#

열거형 Feature 항목의 상세 정보를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetEnumEntryInfo(int32_t hDevice, CvsModuleType moduleType, const char* FeatureName, int32_t EntryIdx, CVS_FEATURE_ENUM_ENTRY_INFO* pInfo);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
FeatureName IN const char* 열거형 Feature 이름입니다.
EntryIdx IN int32_t 조회할 열거형 항목 인덱스입니다.
pInfo OUT CVS_FEATURE_ENUM_ENTRY_INFO* 열거형 항목 정보를 저장할 CVS_FEATURE_ENUM_ENTRY_INFO 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
CVS_FEATURE_ENUM_ENTRY_INFO info = {};

CVS_ERROR err = ST_GetEnumEntryInfo(hDevice, moduleType, "PixelFormat", 0, &info);
if (err == MCAM_ERR_OK)
{
    printf("entry[0]: value=%s, intValue=%d, displayName=%s\n",
           info.stringValue,
           info.intValue,
           info.displayName);
}

5.12.10 ST_GetDependingFeatureCount#

지정한 Feature 노드에 종속되는 Feature 개수를 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetDependingFeatureCount(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, uint32_t* pCount);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
NodeName IN const char* 기준이 되는 Feature 노드 이름입니다.
pCount OUT uint32_t* 종속 Feature 개수를 저장할 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
uint32_t count = 0;

CVS_ERROR err = ST_GetDependingFeatureCount(hDevice, moduleType, "TriggerMode", &count);
if (err == MCAM_ERR_OK)
{
    printf("depending feature count = %u\n", count);
}

5.12.11 ST_GetDependingFeatureName#

지정한 Feature 노드에 종속되는 Feature 이름을 인덱스로 조회합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_GetDependingFeatureName(int32_t hDevice, CvsModuleType moduleType, const char* NodeName, int32_t index, char* pInfo, uint32_t* pSize);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
moduleType IN CvsModuleType 조회할 모듈 유형입니다.
NodeName IN const char* 기준이 되는 Feature 노드 이름입니다.
index IN int32_t 조회할 종속 Feature 인덱스입니다.
pInfo OUT char* 종속 Feature 이름을 저장할 버퍼입니다.
pSize IN/OUT uint32_t* 입력 시 버퍼 크기, 출력 시 실제 기록 길이를 받는 변수 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CvsModuleType moduleType = ModuleRemoteDevice;
char featureName[256] = {};
uint32_t size = sizeof(featureName);

CVS_ERROR err = ST_GetDependingFeatureName(hDevice, moduleType, "TriggerMode", 0, featureName, &size);
if (err == MCAM_ERR_OK)
{
    printf("depending feature[0] = %s\n", featureName);
}

5.13 이미지 색상 변환#

이미지 색 공간 변환 함수입니다.

5.13.1 ST_CvtColor#

이미지를 한 색 공간에서 다른 색 공간으로 변환합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_CvtColor(CVS_BUFFER pSrc, CVS_BUFFER* pDest, int32_t code);

매개변수

이름 입출력 타입 설명
pSrc IN CVS_BUFFER 원본 버퍼입니다.
pDest OUT CVS_BUFFER* 대상 버퍼 포인터입니다.
code IN int32_t 색상 변환 코드입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 원본 버퍼와 대상 버퍼의 메모리 수명은 호출 중 유효해야 합니다.
  • 대상 버퍼는 변환 결과 형식에 맞는 채널 수와 크기로 준비하는 것이 좋습니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
// 예시: BayerRG 8-bit 입력을 BGR로 변환하는 경우
CVS_BUFFER src = {};
CVS_BUFFER dst = {};

if (ST_InitBuffer(hDevice, &src, 0) == MCAM_ERR_OK &&
    ST_InitBuffer(hDevice, &dst, 3) == MCAM_ERR_OK &&
    ST_SingleGrabImage(hDevice, &src) == MCAM_ERR_OK)
{
    CVS_ERROR err = ST_CvtColor(src, &dst, CVP_BayerRG2BGR);
    if (err == MCAM_ERR_OK)
    {
        printf("converted image: %d x %d, channels=%d\n",
               dst.image.width,
               dst.image.height,
               dst.image.channels);
    }

    ST_FreeBuffer(&src);
    ST_FreeBuffer(&dst);
}

5.14 XML 및 JSON 파일 관리#

장치 설정을 XML/JSON 파일로 가져오거나 내보내는 함수입니다.

5.14.1 ST_ImportXML#

XML 파일에서 설정을 가져옵니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_ImportXML(int32_t hDevice, const char* FileName);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
FileName IN const char* XML 파일 이름 또는 경로입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_ImportXML(hDevice, "camera_config.xml");
if (err != MCAM_ERR_OK)
{
    printf("ST_ImportXML failed: %d\n", err);
}

5.14.2 ST_ExportXML#

카메라 설정을 XML 파일로 내보냅니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_ExportXML(int32_t hDevice, const char* FileName, int Version = XML_VERSION_1_1, int Visibility = VISIBILITY_GURU);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
FileName IN const char* 내보낼 XML 파일 이름 또는 경로입니다.
Version IN int XML 버전입니다. 기본값은 XML_VERSION_1_1입니다.
Visibility IN int 내보낼 파라미터 가시성 수준입니다. 기본값은 VISIBILITY_GURU입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 기본값은 Version = XML_VERSION_1_1, Visibility = VISIBILITY_GURU입니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_ExportXML(
    hDevice,
    "camera_export.xml",
    XML_VERSION_1_1,
    VISIBILITY_GURU
);

if (err != MCAM_ERR_OK)
{
    printf("ST_ExportXML failed: %d\n", err);
}

5.14.3 ST_ImportJson#

장치용 JSON 설정 파일을 가져옵니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_ImportJson(int32_t hDevice, const char* FileName);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
FileName IN const char* JSON 파일 이름 또는 경로입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_ImportJson(hDevice, "camera_config.json");
if (err != MCAM_ERR_OK)
{
    printf("ST_ImportJson failed: %d\n", err);
}

5.14.4 ST_ExportJson#

장치 설정을 JSON 파일로 내보냅니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_ExportJson(int32_t hDevice, const char* FileName, int Visibility = VISIBILITY_GURU);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
FileName IN const char* 내보낼 JSON 파일 이름 또는 경로입니다.
Visibility IN int 내보낼 파라미터 가시성 수준입니다. 기본값은 VISIBILITY_GURU입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 기본값은 Visibility = VISIBILITY_GURU입니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_ExportJson(hDevice, "camera_export.json", VISIBILITY_GURU);
if (err != MCAM_ERR_OK)
{
    printf("ST_ExportJson failed: %d\n", err);
}

5.15 이벤트 및 콜백 관리#

Grab 이벤트 및 장치 이벤트 콜백 등록/해제 함수입니다.

5.15.1 ST_RegisterGrabCallback#

Grab 이벤트 콜백 함수를 등록합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_RegisterGrabCallback(int32_t hDevice, int32_t Event, GrabCallback grabCallback, void* UserData);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Event IN int32_t Grab 이벤트 ID입니다.
grabCallback IN GrabCallback 등록할 콜백 함수입니다.
UserData IN void* 사용자 정의 데이터 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

void WINAPI OnGrab(int32_t eventID, const CVS_BUFFER* pBuffer, void* pUserDefine)
{
    if (eventID == EVENT_NEW_IMAGE && pBuffer != nullptr)
    {
        printf("new image: %d x %d\n", pBuffer->image.width, pBuffer->image.height);
    }
}

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_RegisterGrabCallback(hDevice, EVENT_NEW_IMAGE, OnGrab, nullptr);
if (err != MCAM_ERR_OK)
{
    printf("ST_RegisterGrabCallback failed: %d\n", err);
}

5.15.2 ST_UnregisterGrabCallback#

Grab 이벤트 콜백 함수를 해제합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_UnregisterGrabCallback(int32_t hDevice, int32_t Event);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Event IN int32_t Grab 이벤트 ID입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_UnregisterGrabCallback(hDevice, EVENT_NEW_IMAGE);
if (err != MCAM_ERR_OK)
{
    printf("ST_UnregisterGrabCallback failed: %d\n", err);
}

5.15.3 ST_RegisterEventCallback#

장치 이벤트 콜백 함수를 등록합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_RegisterEventCallback(int32_t hDevice, int32_t Event, EventCallback eventCallback, void* UserData);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Event IN int32_t 장치 이벤트 ID입니다.
eventCallback IN EventCallback 등록할 콜백 함수입니다.
UserData IN void* 사용자 정의 데이터 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

void WINAPI OnDeviceEvent(const CVS_EVENT* pEvent, void* pUserDefine)
{
    if (pEvent != nullptr)
    {
        printf("event id=%d, timestamp=%llu\n",
               pEvent->id,
               (unsigned long long)pEvent->timestamp);
    }
}

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_RegisterEventCallback(hDevice, EVENT_DEVICE_DISCONNECT, OnDeviceEvent, nullptr);
if (err != MCAM_ERR_OK)
{
    printf("ST_RegisterEventCallback failed: %d\n", err);
}

5.15.4 ST_UnregisterEventCallback#

장치 이벤트 콜백 함수를 해제합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_UnregisterEventCallback(int32_t hDevice, int32_t Event);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
Event IN int32_t 장치 이벤트 ID입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_ERROR err = ST_UnregisterEventCallback(hDevice, EVENT_DEVICE_DISCONNECT);
if (err != MCAM_ERR_OK)
{
    printf("ST_UnregisterEventCallback failed: %d\n", err);
}

5.16 버퍼 관리#

CVS_BUFFER 메모리 준비와 해제를 위한 함수입니다.

5.16.1 ST_InitBuffer#

CVS_BUFFER 구조체를 초기화합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_InitBuffer(int32_t hDevice, CVS_BUFFER* pBuffer, int32_t channels = 0);

매개변수

이름 입출력 타입 설명
hDevice IN int32_t 장치 핸들입니다.
pBuffer OUT CVS_BUFFER* 초기화할 버퍼 구조체 포인터입니다.
channels IN int32_t 버퍼 채널 수입니다. 기본값은 0입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • channels = 0이면 카메라 설정에 맞춰 채널 수가 자동 결정되도록 설계되었습니다.
  • 이미지 획득 전에 버퍼를 먼저 준비하는 용도로 사용합니다.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_BUFFER buffer = {};

// channels 예시: 0(자동/원본 기준), 1(Gray), 3(BGR/RGB 용도)
CVS_ERROR err = ST_InitBuffer(hDevice, &buffer, 3);
if (err == MCAM_ERR_OK)
{
    printf("buffer initialized\n");
}

5.16.2 ST_FreeBuffer#

CVS_BUFFER 구조체를 해제합니다.

시그니처

CVS_IMPORT_EXPORT CVS_ERROR WINAPI ST_FreeBuffer(CVS_BUFFER* pBuffer);

매개변수

이름 입출력 타입 설명
pBuffer IN CVS_BUFFER* 해제할 버퍼 구조체 포인터입니다.

반환값

  • MCAM_ERR_OK: 성공
  • 그 외: 오류 코드

비고

  • 해제한 버퍼를 다시 사용하려면 ST_InitBuffer()를 다시 호출하십시오.

예제

int32_t hDevice = /* ST_OpenDevice() 성공 후 얻은 핸들 */ 0;
CVS_BUFFER buffer = {};

if (ST_InitBuffer(hDevice, &buffer, 0) == MCAM_ERR_OK)
{
    CVS_ERROR err = ST_FreeBuffer(&buffer);
    if (err != MCAM_ERR_OK)
    {
        printf("ST_FreeBuffer failed: %d\n", err);
    }
}

6. 주의사항#

  • 본 문서는 첨부된 헤더 선언을 기준으로 정리되었습니다. 실제 동작 세부사항은 배포된 DLL/SDK 버전에 따라 달라질 수 있습니다.
  • 일부 이벤트와 장치 정보는 인터페이스(GEV, U3V, CXP)에 따라 제공 여부가 달라질 수 있습니다.
  • 문자열/버퍼 인수는 호출 전에 충분한 크기의 메모리를 확보하고, pSize 계열 인수는 버퍼 크기와 실제 반환 크기를 함께 처리하도록 작성하는 것이 좋습니다.
  • ST_GrabImage(), ST_GrabImageAsync(), ST_SingleGrabImage(), ST_CvtColor() 사용 시 버퍼의 초기화와 메모리 해제 순서를 명확히 관리하십시오.
  • Feature 및 모듈 기반 API는 CvsModuleType 값과 대상 노드 이름이 정확해야 정상 동작합니다.

7. 라이선스 및 저작권#

본 라이브러리는 ©2000 - 2026 CREVIS CO., LTD.의 소유 입니다.

무단 복제 및 재배포는 제한될 수 있으니 라이선스 정책을 준수하십시오.