当前位置: 首页 > Windows程序, 业余研究 > 正文

完成一个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版本界面如下:

YUVPlayer-latleee.org

2015.8.18 v4.0发布

YUVPlayer-latleee.org

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

李迟 2015.8.21

本文固定链接: http://www.latelee.org/programming-under-windows/my-yuvplayer.html

如无特别说明,迟思堂工作室文章均为原创,转载请注明: 完成一个YUV文件播放器 | 迟思堂工作室

完成一个YUV文件播放器:目前有1 条留言

  1. 1楼
    xtzt:

    十分感谢!!!

    2016-11-28 下午10:56 [回复]

发表评论

*

快捷键:Ctrl+Enter