Android视频录制之NV21和NV12
從Camera.PreviewCallback接口回調(diào)方法onPreviewFrame(byte[] data, Camera camera)回調(diào)的data數(shù)據(jù),為NV21圖像數(shù)據(jù),而Android手機識別的是NV12圖像數(shù)據(jù),所以需要將NV21轉(zhuǎn)化為NV12圖像數(shù)據(jù)。NV21圖像數(shù)據(jù)包括三塊區(qū)域數(shù)據(jù),分別為Y、V、U三塊,一個XY像素的圖片,他的NV21數(shù)據(jù)大小為 **byte[XY3/2]**,其中byte[XY]為Y區(qū)域,剩下的1/2U和V區(qū)域各占1/4;“Y”表示明亮度,“U”和“V”則是色度、濃度。
可以發(fā)現(xiàn)NV21和NV12數(shù)據(jù)唯一的區(qū)別就是V、U區(qū)域的不同,而Y區(qū)域數(shù)據(jù)是相同的。其實data數(shù)據(jù)只是一個一維數(shù)組,但是為了更好理解所以排列成這樣。所以NV21->NV12的數(shù)據(jù)變化其實就是矩陣數(shù)據(jù)的變化。以下各圖分別表示NV12數(shù)據(jù)的旋轉(zhuǎn)(僅提供90度和270度變化)和鏡像變化。
經(jīng)過NV12的鏡像變化可以為上圖所示的數(shù)據(jù)展示,NV12的鏡像變化是分區(qū)域的,不是矩陣完全鏡像變化,是按照Y,VU區(qū)域兩個區(qū)域分別變化的,而VU是作為一個整體。其實如果你仔細(xì)點你會發(fā)現(xiàn)NV12的鏡像矩陣是NV21的完全鏡像矩陣,所以如果你真的要自己完成矩陣的這兩步變化,可以直接將NV21進行完全矩陣變化,兩步合成一步,可以節(jié)省一部分的時間。
其實矩陣的變化,我自己已經(jīng)完成了,但是最終的視頻有一定的問題,就是視頻中有的幀會出現(xiàn)縱向的分割線,所以自己的方法擱置了,采用了libyuv框架完成的。libyuv才用的是將NV21變成I420,然后通過對I420進行變化,然后將I420變成NV12數(shù)據(jù)。所以你是打算自己寫NV21的數(shù)據(jù)變化嗎?希望這些可以幫助到你。
總結(jié)
以上是生活随笔為你收集整理的Android视频录制之NV21和NV12的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】线性回归实战案例三:股票数据
- 下一篇: 群晖windows文件服务器,小白玩群晖