完成一个YUV文件播放器
前面匆忙写了很多篇文章,虽然都很简单,但着实花了不少时间去研究的。几年前写了YUV转换RGB的代码,当时只限于转换成BMP来测试正确性。后来一直使用YUV Player Deluxe来看YUV文件,但其支持格式不够多。前段时间下定决定,将以前写的YUV转换代码完善一下,尽自己能力转换各种YUV格式。一来好久没练练MFC了(我在考虑要不要学C#),二来也写个工具自己使用。
说话的,你不是在做项目吗?你不是经常加班加点吗?怎么还有时间做?看官有所不知,小子能力有限,项目包罗万象,小子无法通晓所有模块,有的时候要等其它人完成,小子爱莫能助。二来,小子所用都是中午别人休息时间,或晚上深夜时间,或周末别人喝咖啡、玩桌游的时间。作为技术人,靠写代码打发时间,其何哀耶。
目前该工具已经完成了。估计以后可能不再更新了。
一、功能
1、支持目前本人所了解、研究过的YUV格式,包括:
YUV400,界面中表示为Y。
YUV420平面格式:YUV420(I420);YV12;
YUV422平面格式:YUV422(I422);YV16;
YUV444格式:YUV444;
YUV422交织格式:YUY2(YUYV);YVYU;UYVY;VYUY;
半平面格式:NV12(也叫YUV420SP);NV21;NV16(也叫YUV422SP);NV61
2、系统预留部分分辨率,同时支持自定义高宽,但无法保存。
3、支持不同帧率播放,支持循环播放。
4、支持向前向后逐帧跳转,支持第一帧、最后一帧跳转。
5、支持窗口缩放。
6、支持保存YUV文件或BMP图片文件。
7、自动解析文件名,得到分辨率、YUV格式。示例:yuv_qcif_yuv420sp.yuv,将解析到qcif分辨率,即176×144,格式为NV 12。yuv_25x250.yuyv,得到分辨率为25×250,格式为YUYV。
二、使用
直接将YUV文件拖到播放器里即可。
三、参考
1、参考yuvview源码的播放、暂停线程部分代码。(注:最新版本使用timer实现播放,不再使用线程)
2、界面风格设计参考YUV Player Duxe。
3、其它MFC有关的用法、技巧,由本人通过网络搜索而得。
四、设计
1、YUV转换RGB独立成接口函数,方便使用,不与任何平台、工具有关联。
2、设置界面使用非模态对话框,通过不同窗口类传递参数。所有参数均在设置对话框类中实现。
3、独立文件打开、内存分配、读取文件函数,使用帧索引值来定位每一帧,实现逐帧定位,同时也是播放的主要判断依据。
4、使用不同的内存存储YUV数据及转换后的RGB数据,可保存成YUV文件或BMP图片。
5、播放、暂停、停止,使用Timer来控制。
6、使用picture控件显示图片,GDI+实现。
v2.0版本界面如下:
2015.8.18 v4.0发布
工程源码使用github仓库,欢迎下载使用:。
李迟 2015.8.21
如果本文对阁下有帮助,可赞助笔者以输出更多好文章。
支付宝[email protected] 或 微信fly_camel_fly 均可。感谢!
本文固定链接: /programming-under-windows/my-yuvplayer.html
十分感谢!!!
2016-11-28 下午10:56