簡體   English   中英

使用Stagefright庫在Android中進行H264 HW加速解碼

[英]H264 HW accelerated decoding in Android using stagefright library

我正在嘗試使用帶有Stagefright庫的硬件對h264視頻進行解碼。

我在這里用了一個例子。 我在MedaBuffer獲取解碼數據。 用於渲染MediaBuffer->data()我試圖AwesomeLocalRenderer在AwesomePlayer.cpp。

但是屏幕上的圖像失真

這是原始圖片和崩潰圖片的鏈接

並在示例中也嘗試過`

sp<MetaData> metaData = mVideoBuffer->meta_data();
int64_t timeUs = 0;
metaData->findInt64(kKeyTime, &timeUs);
native_window_set_buffers_timestamp(mNativeWindow.get(), timeUs * 1000);
err = mNativeWindow->queueBuffer(mNativeWindow.get(), 
mVideoBuffer->graphicBuffer().get(), -1);`

但是我的本機代碼崩潰了。 我無法獲得真實的照片或它損壞或黑屏。

提前致謝。

如果您使用的是HW加速解碼器,則組件輸出端口上的分配將基於本Native Window 換句話說,輸出緩沖區基本上是由Stagefright框架傳遞的gralloc句柄。 (參考: OMXCodec::allocateOutputBuffersFromNativeWindow )。 因此, MediaBuffer將返回的MediaBuffer解釋為普通的YUV緩沖區。

如果是AwesomeLocalRenderer ,則在調用mTarget->render時,框架將執行軟件顏色轉換,如下所示。 如果跟蹤代碼流,您會發現MediaBuffer內容直接解釋為YUV緩沖區。

對於HW加速編解碼器,您應該使用AwesomeNativeWindowRenderer 如果您有使用AwesomeLocalRenderer特殊條件,請突出顯示相同的內容。 我可以適當地優化此響應。

PS:出於調試目的,您還可以參考此問題該問題捕獲了轉儲YUV數據並進行分析的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM