YUV420P/I420 stride 計算方式

這兩天做一個 H.265 編碼測試的功能,編碼器需要手動輸入 raw yuv frame 的 stride (也可以稱作 pitch)數組大小,這個倒是讓我一愣,做了這麼久的音視頻編解碼的工作,長時間使用 ffmpeg,或者 x264 的上層接口去封裝一個視頻幀,竟然對這個該如何賦值給搞不清楚了,這個如果配置不對的話,那麼編碼出來的視頻幀將是花屏的,所以在此還是鞏固一下基礎知識吧。

stride 可以稱之爲“跨距”,可以理解爲每個 (Y、U、V)每個分量在每一行所佔的字節數,這裏我們拿 I420 做爲例子,我們知道 I420 的數據存儲方式爲平面存儲,即Y、U、V 分開存儲,如下圖示:

1240

p_w_picpath.png

這樣我們可以直觀的看出,Y 分量每一行的字節數爲圖像的寬度 img_width,而由於 U 分量和 V 分量爲每兩行 Y 像素共享一行 U 和 V 像素,所以 U 和 V 分量在每一行所佔的字節數爲 圖像寬度的一半,即 img_widht / 2,即:

int y_stride = img_width;
int u_stride = img_width / 2;
int v_stride = img_width / 2;

以上計算方式僅適用於 I420 / YUV420P 色彩空間格式的視頻幀數據,其它格式請參照 stride 的定義應該就可以很快的確定各個分量的大小了。


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