天天看點

完成一個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分辨率,即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版本界面如下:

完成一個YUV檔案播放器

2015.8.18 v4.0釋出

完成一個YUV檔案播放器

工程源碼使用github倉庫,歡迎下載下傳使用:https://github.com/latelee/YUVPlayer。

李遲 2015.8.21