D1,4CIF,CIF,QCIF各代表的分辨率大小

本文介绍了不同制式的视频分辨率标准,包括NTSC、PAL和SECAM制式的D1、4CIF、CIF及QCIF分辨率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

D1:NTSC制式 720 × 486
D1:PAL/SECAM制式 720 × 576
4CIF:NTSC制式 640 × 480
4CIF:PAL/SECAM制式704 × 576
CIF:NTSC制式 320 × 240
CIF:PAL/SECAM制式352 × 288
CIF:NTSC制式160 × 120
QCIF:PAL/SECAM制式176 × 144

// 分辨率到枚举值的映射表 static const std::unordered_map<std::string, int> resolutionMap = { {"704x576", CAPTURE_IMAGE_SIZE_D1}, // 兼容 PAL {"704x480", CAPTURE_IMAGE_SIZE_D1}, // 兼容 NTSC {"704x288", CAPTURE_IMAGE_SIZE_HD1}, {"704x240", CAPTURE_IMAGE_SIZE_HD1}, {"352x576", CAPTURE_IMAGE_SIZE_BCIF}, {"352x480", CAPTURE_IMAGE_SIZE_BCIF}, {"352x288", CAPTURE_IMAGE_SIZE_CIF}, {"352x240", CAPTURE_IMAGE_SIZE_CIF}, {"176x144", CAPTURE_IMAGE_SIZE_QCIF}, {"176x120", CAPTURE_IMAGE_SIZE_QCIF}, {"640x480", CAPTURE_IMAGE_SIZE_VGA}, {"320x240", CAPTURE_IMAGE_SIZE_QVGA}, {"480x480", CAPTURE_IMAGE_SIZE_SVCD}, {"160x128", CAPTURE_IMAGE_SIZE_QQVGA}, {"240x192", CAPTURE_IMAGE_SIZE_ND1}, {"926x576", CAPTURE_IMAGE_SIZE_650TVL}, {"1280x720", CAPTURE_IMAGE_SIZE_720P}, {"1280x960", CAPTURE_IMAGE_SIZE_1_3M}, {"1600x1200", CAPTURE_IMAGE_SIZE_UXGA}, {"1920x1080", CAPTURE_IMAGE_SIZE_1080P}, {"1920x1200", CAPTURE_IMAGE_SIZE_WUXGA}, {"1872x1408", CAPTURE_IMAGE_SIZE_2_5M}, {"2048x1536", CAPTURE_IMAGE_SIZE_3M}, {"3744x1408", CAPTURE_IMAGE_SIZE_5M}, {"960x1080", CAPTURE_IMAGE_SIZE_1080N}, {"2592x1520", CAPTURE_IMAGE_SIZE_4M}, {"3072x2048", CAPTURE_IMAGE_SIZE_6M}, {"3264x2448", CAPTURE_IMAGE_SIZE_8M}, {"4000x3000", CAPTURE_IMAGE_SIZE_12M}, {"4096x2160", CAPTURE_IMAGE_SIZE_4K}, // 电影级4K {"3840x2160", CAPTURE_IMAGE_SIZE_4K}, // UHD 4K {"640x720", CAPTURE_IMAGE_SIZE_720N}, {"1024x576", CAPTURE_IMAGE_SIZE_WSVGA}, {"640x360", CAPTURE_IMAGE_SIZE_NHD}, {"1024x1536", CAPTURE_IMAGE_SIZE_3M_N}, {"1296x1520", CAPTURE_IMAGE_SIZE_4M_N}, {"1872x1408", CAPTURE_IMAGE_SIZE_5M_N}, {"2048x2160", CAPTURE_IMAGE_SIZE_4K_N}, // 通用 {"1920x2160", CAPTURE_IMAGE_SIZE_4K_N} // 海思方案 };用std::map实现上述映射表
最新发布
07-06
<think>我们只需要将原来的std::unordered_map替换为std::map即可,因为两者的接口在查找操作上是兼容的(都有find成员函数,且返回迭代器)。但是需要注意,std::map是有序的(按照键的字典序),而std::unordered_map是无序的。不过在这个场景中,我们只进行查找操作,不涉及遍历,所以有序性不会影响功能。 具体步骤: 1. 将类型std::unordered_map改为std::map。 2. 由于键是字符串,且原来的顺序并不重要,所以使用std::map后,内部会按照字符串的字典序自动排序,但这不影响查找结果。 注意:原代码中在查找失败后抛出异常,这部分保持不变。 改写后的映射表: 另外,原代码中映射的值类型是枚举类型(假设为CaptureImageSize枚举),这里保持不变。 代码示例:</think>### 使用 `std::map` 实现分辨率映射表 以下是完整实现方案,将原 `std::unordered_map` 替换为 `std::map` 并保持功能不变: ```cpp #include <map> #include <string> #include <stdexcept> // 假设的枚举类型(根据实际定义调整) enum CaptureImageSize { CAPTURE_IMAGE_SIZE_D1, CAPTURE_IMAGE_SIZE_HD1, // ... 其他枚举值 }; CaptureImageSize getImageSize(const std::string& resolutionStr) { // 创建有序映射表(按键名字典序排序) static const std::map<std::string, CaptureImageSize> resolutionMap = { {"1024x1536", CAPTURE_IMAGE_SIZE_3M_N}, {"1024x576", CAPTURE_IMAGE_SIZE_WSVGA}, {"1280x720", CAPTURE_IMAGE_SIZE_720P}, {"1280x960", CAPTURE_IMAGE_SIZE_1_3M}, {"1296x1520", CAPTURE_IMAGE_SIZE_4M_N}, {"1600x1200", CAPTURE_IMAGE_SIZE_UXGA}, {"160x128", CAPTURE_IMAGE_SIZE_QQVGA}, {"176x120", CAPTURE_IMAGE_SIZE_QCIF}, {"176x144", CAPTURE_IMAGE_SIZE_QCIF}, {"1872x1408", CAPTURE_IMAGE_SIZE_2_5M}, // 注意:键值相同会自动覆盖 {"1872x1408", CAPTURE_IMAGE_SIZE_5M_N}, {"1920x1080", CAPTURE_IMAGE_SIZE_1080P}, {"1920x1200", CAPTURE_IMAGE_SIZE_WUXGA}, {"1920x2160", CAPTURE_IMAGE_SIZE_4K_N}, {"2048x1536", CAPTURE_IMAGE_SIZE_3M}, {"2048x2160", CAPTURE_IMAGE_SIZE_4K_N}, {"240x192", CAPTURE_IMAGE_SIZE_ND1}, {"2592x1520", CAPTURE_IMAGE_SIZE_4M}, {"3072x2048", CAPTURE_IMAGE_SIZE_6M}, {"320x240", CAPTURE_IMAGE_SIZE_QVGA}, {"3264x2448", CAPTURE_IMAGE_SIZE_8M}, {"352x240", CAPTURE_IMAGE_SIZE_CIF}, {"352x288", CAPTURE_IMAGE_SIZE_CIF}, {"352x480", CAPTURE_IMAGE_SIZE_BCIF}, {"352x576", CAPTURE_IMAGE_SIZE_BCIF}, {"3744x1408", CAPTURE_IMAGE_SIZE_5M}, {"3840x2160", CAPTURE_IMAGE_SIZE_4K}, {"4000x3000", CAPTURE_IMAGE_SIZE_12M}, {"4096x2160", CAPTURE_IMAGE_SIZE_4K}, {"480x480", CAPTURE_IMAGE_SIZE_SVCD}, {"640x360", CAPTURE_IMAGE_SIZE_NHD}, {"640x480", CAPTURE_IMAGE_SIZE_VGA}, {"640x720", CAPTURE_IMAGE_SIZE_720N}, {"704x240", CAPTURE_IMAGE_SIZE_HD1}, {"704x288", CAPTURE_IMAGE_SIZE_HD1}, {"704x480", CAPTURE_IMAGE_SIZE_D1}, {"704x576", CAPTURE_IMAGE_SIZE_D1}, {"926x576", CAPTURE_IMAGE_SIZE_650TVL}, {"960x1080", CAPTURE_IMAGE_SIZE_1080N} }; // 使用结构化绑定处理查找结果[^2] if (auto it = resolutionMap.find(resolutionStr); it != resolutionMap.end()) { return it->second; } throw std::invalid_argument("Unsupported resolution: " + resolutionStr); } ``` ### 关键改进说明 1. **数据结构变更** ```cpp // 原代码 static const std::unordered_map<std::string, CaptureImageSize> resolutionMap = {...}; // 新代码 static const std::map<std::string, CaptureImageSize> resolutionMap = {...}; ``` - 直接替换容器类型 - 保持键类型为 `std::string`,值类型为枚举 2. **有序性处理** - 映射表按键名字典序自动排序(如 `"1024x1536"` → `"1024x576"` → ...) - 重复键处理:后插入的值覆盖前值(如 `"1872x1408"` 只保留最后定义的 `CAPTURE_IMAGE_SIZE_5M_N`) 3. **现代C++特性** ```cpp // 使用带初始化的if语句[^2] if (auto it = resolutionMap.find(resolutionStr); it != resolutionMap.end()) { return it->second; } ``` - 将查找和条件检查合并,避免作用域污染 - 使用结构化绑定可读性更强(但此处直接使用迭代器更简洁) 4. **性能优化** - 静态常量映射表:只需初始化一次 - 查找复杂度 $O(\log n)$,对于典型分辨率数量(约30项)效率足够 ### 注意事项 1. **键冲突处理** ```cpp {"1872x1408", CAPTURE_IMAGE_SIZE_2_5M}, {"1872x1408", CAPTURE_IMAGE_SIZE_5M_N} // 此条目会覆盖前一个 ``` - 需检查是否有重复键(如原表有多个 `"1872x1408"`) - 解决方案:合并相同键或使用多值映射 2. **异常安全** ```cpp throw std::invalid_argument("Unsupported resolution: " + resolutionStr); ``` - 保持与原设计一致的异常类型 - 提供详细错误信息帮助调试 3. **遍历顺序影响** - 若需要按原始顺序遍历,需额外维护顺序索引 - 或改用 `std::vector<std::pair>` 保留插入顺序 > 此实现完全兼容原接口,调用方无需修改代码即可无缝切换[^1][^3]。对于纯查找场景,`std::map` 的有序性不会影响功能正确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值