markdown
## 4.1 对象管理(Object Management)
EDSDK 中的所有对象都通过 引用计数机制(Reference Counting) 进行管理。
应用程序必须正确管理对象的生命周期,否则可能导致资源泄漏或 SDK 状态异常。
4.1.1 使用引用计数进行对象管理
(Object Management Using a Reference Counter)
markdown
### 4.1.1 使用引用计数进行对象管理
EDSDK 会为每一个对象维护一个引用计数:
- 当对象被创建或获取时,引用计数被设置为 1
- 当对象被程序继续使用时,应调用
EdsRetain增加引用计数 - 当对象不再需要时,必须调用
EdsRelease减少引用计数 - 当引用计数变为 0 时,对象会被 EDSDK 自动释放
markdown
引用计数变化规则:
- 创建 / 获取对象 → 引用计数 = 1
- EdsRetain → 引用计数 +1
- EdsRelease → 引用计数 −1
- 引用计数为 0 → 对象被自动销毁
⚠️ 开发者必须显式声明对象的使用与释放,否则可能造成内存泄漏。
4.1.2 退出库时释放资源
(Releasing Resources when Exiting the Library)
markdown
### 4.1.2 退出库时释放资源
当应用程序调用 EdsTerminateSDK 时:
- EDSDK 会释放所有由 SDK 分配的内部资源
- 包括仍然存在的对象引用
markdown
注意:
- `EdsTerminateSDK` 应只在应用程序生命周期内调用一次
- 必须确保在此之前不再使用任何 EDSDK 对象
4.2 属性(Properties)
markdown
## 4.2 属性(Properties)
属性(Property) 用于表示相机或图像对象的各种状态与参数,例如:
- 光圈值(Av)
- 快门速度(Tv)
- ISO
- 白平衡
- 图像质量
- 实时取景设置
属性可以附属于以下对象:
EdsCameraRefEdsImageRef
4.2.1 获取与设置属性
(Getting and Setting Properties)
markdown
### 4.2.1 获取与设置属性
EDSDK 提供以下 API 用于访问属性:
| API | 用途 |
|---|---|
EdsGetPropertyData |
获取属性值 |
EdsSetPropertyData |
设置属性值 |
EdsGetPropertySize |
获取属性数据大小与类型 |
EdsGetPropertyDesc |
获取可设置的属性取值范围 |
markdown
重要说明:
- 并非所有属性都可以在任意时刻获取或设置
- 可用性取决于:
- 相机型号
- 当前相机模式
- 其他属性的当前值
4.2.2 属性的对象依赖关系
markdown
### 4.2.2 属性的对象依赖关系
同一属性 ID,在不同对象上可能含义不同:
markdown
- EdsCameraRef:
表示当前相机的实时设置(例如当前 Av / Tv)
- EdsImageRef:
表示图像拍摄时记录下来的参数
示例说明:
markdown
- 从 EdsCameraRef 读取 Av → 当前相机光圈值
- 从 EdsImageRef 读取 Av → 图像拍摄时的光圈值
4.2.3 可设置属性列表
(Property Description)
markdown
### 4.2.3 可设置属性列表(Property Description)
某些属性具有 可设置取值范围,例如:
- 拍摄模式
- ISO
- 光圈
- 快门速度
- 白平衡
在设置这些属性之前,必须先调用:
markdown
EdsGetPropertyDesc
用于获取当前可用的取值列表。
markdown
⚠️ 开发注意事项:
- 直接设置不在可用列表中的值会导致 API 返回错误
- 可用取值可能会随相机状态变化而变化
4.3 相机状态(Camera Status)
markdown
## 4.3 相机状态(Camera Status)
通过 EDSDK 远程连接的相机,可能处于以下几种状态之一:
4.3.1 UI Lock(界面锁定)
markdown
### UI Lock(界面锁定)
- 相机本体的所有按键操作被禁用
- 仅接受来自主机 PC 的控制命令
- 用于避免用户在相机端操作引发冲突
4.3.2 UI Lock Release(解除界面锁定)
markdown
### UI Lock Release(解除界面锁定)
- 相机本体操作恢复可用
- PC 仍然可以向相机发送命令
- 存在潜在操作冲突风险
4.3.3 Direct Transfer(直接传输模式)
markdown
### Direct Transfer(直接传输模式)
- 相机正在执行直接传输操作
- 相机功能被限制为与传输相关的操作
- 当用户在相机端触发下载时,会向应用程序发送事件通知
4.3.4 Direct Transfer Release(结束直接传输)
markdown
### Direct Transfer Release(结束直接传输)
- 表示当前不处于直接传输状态
- 相机恢复正常控制流程
4.4 异步事件(Asynchronous Events)
markdown
## 4.4 异步事件(Asynchronous Events)
EDSDK 通过 异步事件机制 向应用程序通知以下变化:
- 文件创建 / 删除
- 属性变化
- 相机状态变化
- 拍摄完成
- 断开连接
4.4.1 事件处理机制
markdown
### 4.4.1 事件处理机制
- 应用程序需注册 回调函数(Callback)
- 当事件发生时,EDSDK 会在内部线程中调用回调函数
- 回调函数需要根据事件类型进行处理
markdown
注意:
- 回调函数中获取的对象同样需要调用 `EdsRelease`
- 不正确的事件处理极易导致资源泄漏
4.4.2 事件类型分类
markdown
### 4.4.2 事件类型分类
| 事件类型 | 说明 |
|---|---|
| 对象事件(Object Event) | 文件创建、删除、传输请求 |
| 属性事件(Property Event) | 相机属性变化 |
| 状态事件(State Event) | 相机状态变化、关机通知 |