簡體   English   中英

原始 yuv420p 數據上的 sws_scale

[英]sws_scale on raw yuv420p data

我正在從我的樹莓派獲取 yuv420p 格式的相機數據。 我正在嘗試使用sws_scale將它們轉換為 RGBA 格式。 所以這就是我初始化上下文的方式:

_sws_context = sws_getContext(CAMERA_WIDTH, CAMERA_HEIGHT, AV_PIX_FMT_YUV420P,
                                      CAMERA_WIDTH, CAMERA_HEIGHT, AV_PIX_FMT_RGBA, 0, nullptr, nullptr, nullptr);

我現在對如何設置sws_scale的數據和行大小有點困惑。 從相機我只是得到一個沒有進一步結構的普通字節數組。 我想我必須以某種方式將其細分為平面。 我的第一種方法是根本不將它分開,基本上有這樣的東西(基於以下事實:

const uint8_t *src_data[] = {data.data()};
const int src_strides[] = {(int) std::ceil((CAMERA_WIDTH * 6) / 8)};

這是基於:

2x2 像素網格有 12 位

所以我假設一條線會使用其中的一半。 但這會導致分段錯誤。 所以我想我必須以某種方式將src_datasrc_strides拆分到各自的 YUV 平面中,但我不確定如何做到這一點,特別是因為 YUV420 數據的一個像素每個平面使用的字節少於一個字節......

事實證明它比我想象的要簡單:飛機一個接一個,這也使步伐非常明顯:

        const auto y = data.data();
        const auto u = y + CAMERA_WIDTH * CAMERA_HEIGHT;
        const auto v = u + (CAMERA_WIDTH * CAMERA_HEIGHT) / 4;

        const auto stride_y = CAMERA_WIDTH;
        const auto stride_u = CAMERA_WIDTH / 2;
        const auto stride_v = CAMERA_WIDTH / 2;

暫無
暫無

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

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