八月份所有文章 | 迟思堂工作室

FFMPEG基于内存的转码实例——输入输出视频均在内存

FFMPEG基于内存的转码实例——输入输出视频均在内存

我在6月份写了篇文章《FFMPEG基于内存的转码实例》,讲如何把视频转码后放到内存,然后通过网络发送出去。但该文章只完成了一半,即输入的数据依然是从磁盘文件中读取。在实际应用中,有很多数据是放到内存的,比如播放从服务器接收到的视频,就是在内存中的。时隔2个月,项目终于完成了,虽然在收尾阶段会花费大量时间,但也算空闲了点。于是就继续完善。

完成一个YUV文件播放器

完成一个YUV文件播放器

前面匆忙写了很多篇文章,虽然都很简单,但着实花了不少时间去研究的。几年前写了YUV转换RGB的代码,当时只限于转换成BMP来测试正确性。后来一直使用YUV Player Deluxe来看YUV文件,但其支持格式不够多。前段时间下定决定,将以前写的YUV转换代码完善一下,尽自己能力转换各种YUV格式。一来好久没练练MFC了(我在考虑要不要学C#),二来也写个工具自己使用。

我的YUV播放器MFC小笔记:unicode编码、宽字符

我的YUV播放器MFC小笔记:unicode编码、宽字符

以前的MFC工程,字符集都是基于多字节的,而现在这个工程,无意间使用unicode字符集,在其过程中,有诸多函数使用不同于以前。当然,建立项目后也是可以在项目属性中修改字符集的。这篇文章记录一下关于unicode工程的东西。回想来,这几天陆续写的MFC文章差多完结了。此系列估计不再写了。而昨天晚上发布的4.0版本,是完结版。这个工具也算是完成了。

我的YUV播放器MFC小笔记:添加删除自定义分辨率

我的YUV播放器MFC小笔记:添加删除自定义分辨率

在最初设计YUV播放参数时,就考虑参数的保存,即使用注册表方式,前文已述。但直到后来才解决几个技术问题,方得以写此文章。
分辨率使用下拉框形式,在程序启动时初始化,不在资源中写死。注册表使用一个string字段保存,用分号“;”隔开。读取后分词,放到CStringArray中,使用combox的AddString添加至下拉框。

我的YUV播放器MFC小笔记:注册表读写

我的YUV播放器MFC小笔记:注册表读写

在使用YUV Player Deluxe时,发现其可保存上一次的参数,研究之后,才知道它是使用注册表来实现的。下面是YUV播放器与注册表有关的函数接口,注册表与了我的大名外,其它值是参照YUV Player Deluxe的。在写这篇文章时,还没有空完全实现播放参数的保存,主要是用户自定义的分辨率的添加和删除,还要排序。有点工作量。

我的YUV播放器MFC小笔记:右键菜单事件和非标题实现鼠标拖动

我的YUV播放器MFC小笔记:右键菜单事件和非标题实现鼠标拖动
鼠标右键弹出菜单代码如下: // 右键菜单 void CYUVPlayerDlg::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu popMenu; CMenu *pPopup; popMenu.LoadMenu(IDR_MENU2); pPopup=popMenu.GetSubMenu(0); pPopup->EnableMenuItem(ID_R_OPEN, MF_BYCOMMAND|MF_ENABLED); pPopup->EnableMenuItem(ID_R_SETTING, MF_BYCOMMAND|MF...

YUV格式学习:Y转换成RGB24

YUV格式学习:Y转换成RGB24

除了各种YUV格式转换成RGB外,还有一种是只转Y到RGB,如果YUV只有Y分量,也就就是YUV400这个格式了。如果成RGB后,显示出来的图像就是灰度图(因为Y是亮度),也可以理解为黑白图吧。

YUV格式学习:YUV420P、YV12、NV12、NV21格式转换成RGB24

YUV格式学习:YUV420P、YV12、NV12、NV21格式转换成RGB24

对于YUV420的格式,网上有一大堆资料,这里就不说了。直奔主题,给出如何转换的函数,一如既往,只用代码说事。YUV420有打包格式(Packed),一如前文所述。同时还有平面格式(Planar),即Y、U、V是分开存储的,每个分量占一块地方,其中Y为width*height,而U、V合占Y的一半,该种格式每个像素占12比特。