完成一个YUV文件播放器 | 迟思堂工作室
A-A+

完成一个YUV文件播放器

2015-08-21 13:07 Windows程序, 业余研究 评论 1 条 阅读 1,906 次

前面匆忙写了很多篇文章,虽然都很简单,但着实花了不少时间去研究的。几年前写了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分辨率,即176x144,格式为NV 12。yuv_25x250.yuyv,得到分辨率为25x250,格式为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版本界面如下:

YUVPlayer-latleee.org

2015.8.18 v4.0发布

YUVPlayer-latleee.org

工程源码使用github仓库,欢迎下载使用:https://github.com/latelee/YUVPlayer

李迟 2015.8.21



如果本文对阁下有帮助,不妨赞助笔者以输出更多好文章,谢谢!
donate




1 条留言  访客:1 条  博主:0 条

  1. xtzt

    十分感谢!!!

给我留言