0
我有兩個YV12格式的圖像緩衝區,需要將它們合併爲一個並排圖像。將兩個YV12圖像緩衝區合併爲一個並排圖像
(1920×1080)+(1920×1080)=(3840 * 1080)
YV12被分成3米單獨的平面上。
YYYYYYYY VV UU
像素格式是每像素12位。
我創建了一個方法,memcpy
s一個緩衝區(1920x1080)到一個更大的緩衝區(3840x1080),但它不起作用。
這是我的C++。
BYTE* source = buffer;
BYTE* destination = convertBuffer3D;
// copy over the Y
for (int x = 0; x < height; x++)
{
memcpy(destination, source, width);
destination += width * 2;
source += width;
}
// copy over the V
for (int x = 0; x < (height/2); x++)
{
memcpy(destination, source, width/2);
destination += width;
source += width/2;
}
// copy over the U
for (int x = 0; x < (height/2); x++)
{
memcpy(destination, source, width/2);
destination += width;
source += width/2;
}
我預計:
相反,我得到這樣的結果:
我缺少什麼?
代碼看起來約權。你可能錯過了其他的東西(跨越任何一個圖像被擴展?底部填充?)。 –
沒有擴展我們的填充。我的1920x1080圖像的總緩衝區大小是3110400(1920x1080x1.5),所以沒有額外的數據。 –
另外我想如果它是NV12而不是YV12,也會有類似的效果。然後你需要在循環之後簡單地檢查源和目標。如果它們是正確的,那麼問題不在於循環,而在於圖像結構與您期望的不同。 –