我正在使用MediaCodec來解碼視頻,並使用sws_scale(來自ffmpeg)重新調整它。我可以處理一種特殊的顏色格式,例如。 YUV420P,並將其重新縮放至目標尺寸。但是我必須做一些準備工作,比如將lineize和memcpy的輸出緩衝區設置爲三個普通切片(data [0],data [1],data [2]),並且解碼器輸出的顏色格式在不同的設備上有所不同。如果我得到colorformat,ffmpeg中是否有方法自動重新調整它的大小而不進行特殊處理(當然,顏色格式應該由ffmpeg支持)?如何從任何顏色格式的MediaCodec輸出中縮放YUV圖像?
回答
swscale/libavutil沒有直接採用OMX(MediaCodec)顏色格式的功能,您需要手動映射格式。但是,您不需要將輸出緩衝區memcpy分成三個單獨的緩衝區,只需將三個數據指針data [0],data [1]和data [2]設置爲從MediaCodec指向輸出緩衝區(同一點在緩衝區中,否則您將會使用memcpied)。
正常的顏色格式(如YUV420P和NV12)應該可以正常工作,您只需要設置格式常量之間的映射。但是一些MediaCodec解碼器(特別是Qualcomm解碼器)通常使用專有的平鋪格式,這需要更多的努力來解讀,而swscale不直接支持該解碼器,您需要自己解讀。
這只是一個基於我在Raspberry Pi上的OMX經驗的直觀建議,但是,您可以檢查Stagefright庫是否提供任何類似於NDK的C/C++接口的OMX--在這種情況下,如果沒有隻有一個解碼器組件和一個調整大小組件(例如Raspberry Pi有component),那麼你可以製作一個OMX管道,然後組件可以自動協商這些格式,但這只是一個假設,我從來沒有深入研究過Stagefright自己,我知道它的意圖是從Java級別通過MediaCodec和其他類,但仍然可以看看。如果Stagefright具有這樣的API,我可以提供一些OMX包裝代碼,以簡化我爲Raspberry Pi製作的組件的使用,因爲從頭開始構建OMX代碼是相當多的工作。
編輯
我沒多一些谷歌搜索這個,因爲它似乎interresting,發現了一個NDK媒體sample - 以及它似乎是Broadcom公司執行OMX的不同之處很多,所以還是大多數的東西會被需要從scracth構建。你能解釋一下爲什麼你需要這樣做嗎?如果目標只是顯示解碼流,則可以在Java級別設置預覽表面,所以我認爲解碼的內容是其他的。
感謝Rudolfs.I在考慮使用Stagefright之前,但我只是不知道如何開始我的工作。首先它需要在android平臺下構建Stagefright代碼。其次,它需要研究API。並且我們想要做什麼是Android開發團隊的工作。你同意嗎?所以我放棄了這個想法。 – 2014-10-17 07:49:26
你能解釋一下爲什麼你需要重新縮放?你打算如何處理解碼的視頻? – 2014-10-17 07:52:41
因爲我想將較小的比特率和大小的視頻文件轉碼爲上傳。所以我使用MediaCodec,但它不能直接更改大小。 – 2014-10-17 11:15:30
- 1. android-MediaCodec解碼器1080p輸出yuv格式
- 2. MediaCodec和輸出格式
- 3. Android的YUV圖像格式
- 4. 顏色在java中的縮放圖像重新縮放
- 5. Android imageview從縮放圖像中獲取像素顏色
- 6. 如何獲取像素縮放位圖上的顏色值?
- 7. Java中圖像的組合重新縮放和顏色縮減?
- 8. Android MediaCodec輸出格式:GLES外部紋理(YUV/NV12)到GLES紋理(RGB)
- 9. ffmpeg:RGB到YUV轉換失去顏色和縮放比例
- 10. Android中的YUV幀縮放
- 11. 如何使用WP中的任何jQuery縮放插件縮放附加圖像?
- 12. Java中的顏色縮放
- 13. 如何縮放邊緣顏色igraph?
- 14. YUV顏色間距
- 15. YUV圖像格式的掃描線
- 16. 縮放位圖輸出扭曲圖像
- 17. 如何用輸出顏色輸出()
- 18. 如何在ggplot中爲獨立圖層縮放顏色?
- 19. 如何找出圖像中的「特定像素的顏色」?
- 20. 如何調整YUV色彩空間中的圖像飽和度
- 21. 如何知道從縮放圖像
- 22. 從RGB到YUV的顏色轉換(YCoCg)
- 23. 如何將jdeveloper序列圖導出爲任何圖像格式?
- 24. 總是會縮放的背景圖像,以至於不會出現任何正常的背景顏色
- 25. JSP如何縮放圖像?
- 26. 如何縮放圖像?
- 27. 將YUV圖像格式轉換爲PNG
- 28. 如何從Java中的一組選定顏色中輸出隨機顏色? (Android)
- 29. 如何替換圖像中的顏色?
- 30. php平均顏色圖像PNG格式
謝謝,mstorsjo.Yes,我知道我需要在ffmpeg中用pix_fmt映射MediaCodec顏色格式。除此之外,我必須設置數據指針並處理dest數據指針。如果這可以通過傳遞pix_fmt,這將非常美妙。因爲有太多的格式需要處理。我發現av_image_alloc傳回的行可能有一些幫助,但其他版本的大小(與hight的關係)也來自不同的pix_fmt。你有什麼建議嗎? – 2014-10-17 07:32:14