1. 程式人生 > >編碼和軟編碼的區別

編碼和軟編碼的區別

轉載:http://blog.csdn.net/charleslei/article/details/44599041

工作中,經常被問硬編碼、軟編碼怎麼區分的問題,還是對這個問題整理一下吧。

一、軟編碼和硬編碼如何區分

       軟編碼:使用CPU進行編碼

       硬編碼:使用非CPU進行編碼,如顯示卡GPU、專用的DSP、FPGA、ASIC晶片等

二、軟編碼和硬編碼比較

       軟編碼:實現直接、簡單,引數調整方便,升級易,但CPU負載重,效能較硬編碼低,低位元速率下質量通常比硬編碼要好一點。

       硬編碼:效能高,低位元速率下通常質量低於硬編碼器,但部分產品在GPU硬體平臺移植了優秀的軟編碼演算法(如X264)的,質量基本等同於軟編碼。

三、目前的主流GPU加速平臺

       Intel、AMD、NVIDIA

四、目前主流的GPU平臺開發框架

       CUDA:NVIDIA的封閉程式設計框架,通過框架可以呼叫GPU計算資源

       AMD APP:AMD為自己的GPU提出的一套通用並行程式設計框架,標準開放,通過在CPU、GPU同時支援OpenCL框架,進行計算力融合。

       OpenCL:開放計算語言,為異構平臺編寫程式的該框架,異構平臺可包含CPU、GPU以及其他計算處理器,目標是使相同的運算能支援不同平臺硬體加速。

       Inel QuickSync:集成於Intel顯示卡中的專用視訊編解碼模組。

先寫到這,再深入的,讓研發的兄弟們寫吧。

————————————————————————————————————————————————————————————————

Android 實時視訊編碼—H.264硬編碼

1  硬編碼 & 軟編碼

硬編碼:通過呼叫Android系統自帶的Camera錄製視訊,實際上是呼叫了底層的高清編碼硬體模組,也即顯示卡,不使用CPU,速度快

軟編碼:使用CPU進行編碼,如常見C/C++程式碼,一般編譯生成的二進位制都是的,速度相對較慢。例如使用Android NDK編譯H264生成so庫,編寫jni介面,再使用java呼叫so庫。


————————————————————————————————————————————————————————————————

自己的理解:硬編碼 是指不通過cpu處理,直接通過硬體處理,獲得結果資料。 優點:速度快,效率高。 例如:H.264硬編碼軟編碼 是指通過cpu進行編碼,獲得結果資料。

android中的應用方法及各自優缺點:

1,軟編碼

應用ffmpeg+x264的開原始碼,用進行編譯後,對android返回的YUV12資料進行編碼;

優點:編碼方式靈活,能做多種開發,可以適用各種格式YUV12,NV12的編碼;

缺點:手機發熱嚴重!!軟編碼5分鐘後,手機變得非常燙手。

2,硬編碼

應用androidsdk,也就是medieacodec的程式碼,對手機進行硬編碼。

優點:手機沒有發熱問題,測試30分鐘,手機沒有發現發熱問題;

缺點:

1)識別手機的編碼方式困難

實驗過多種手機,華為B199,華為榮耀6,紅米移動版,紅米電信版,小米2S

發現每種手機出來的YUV碼流都不一致;

華為B199,華為榮耀6,紅米電信版,小米2S只支援YUVNV21格式編碼;(型別21)

紅米移動版只支援YU12的格式編碼;(型別19

2)硬編碼後偏色問題

華為B199(高通),紅米電信版(高通),小米2(高通)硬編碼後,顏色良好,沒有偏色問題;

華為榮耀6(海思),紅米移動版(聯發科)硬編碼後,嚴重偏色,不知道這幾個手機的YUVUV得結構到底是怎麼樣的?

總結:

1、軟編碼只適用短時間攝像,並且應用多樣化的場景,如秒拍、美拍等;

2、硬編碼用於長時間攝像,但是隻能用於適應性好的手機,如高通CPU的手機系列;

自己感覺華為海思,聯發科在晶片的圖形對外支援上還比較欠缺,畢竟是二流廠商;