全網首發:FFMpeg使用NVIDIA DECODER,解碼後的數據轉換爲YUV420P

參考:

https://blog.csdn.net/quantum7/article/details/107119487

  我們日常所用格式雖然是RGB,視頻喜歡YUV420。如上文所述,解碼後的數據是NV12,如何轉換爲YUV420P?

  • 自己寫代碼進行轉換。這個方法顯然是不可取的。
  • 調用已有函數。

  這個已有的函數在哪裏?這可沒有人說啊。怎麼辦?想起之前使用過ffplay,看看這個代碼如何處理的。

  • 先找到解碼函數,即得到的AVFrame。輸出一看,是NV12,確定不是YUV420P。
  • 找到刷屏的地方,使用的確實是YUV420P。
  • 跟蹤整個過程,確實看到某個地方,轉變爲YUV420P。具體處理代碼是:
//1280,1280,0
      ret = av_buffersrc_add_frame(       filt_in,  picture);
//0, 0, 0
      ret = av_buffersink_get_frame_flags(filt_out, picture, 0);
//1280, 640, 640

  這兩個函數好說,這兩個flter是什麼?怎麼初始化的?能不能精簡爲簡單參數?把代碼得到到吾測試代碼中,一通刪除修改,編譯通過,成功獲得YUV420P。

 

  有朋友問,性能怎樣?在640x360情況下,去掉、增加轉換,沒看出什麼變化。可能是分辨率不夠?解碼路數太少?

  能不能直出YUV420P,或者輸出時能直接用?各位如果找到了更好辦法,可通知一聲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章