這兩天作一個 H.265 編碼測試的功能,編碼器須要手動輸入 raw yuv frame 的 stride (也能夠稱做 pitch)數組大小,這個卻是讓我一愣,作了這麼久的音視頻編解碼的工做,長時間使用 ffmpeg,或者 x264 的上層接口去封裝一個視頻幀,居然對這個該如何賦值給搞不清楚了,這個若是配置不對的話,那麼編碼出來的視頻幀將是花屏的,因此在此仍是鞏固一下基礎知識吧。數組
stride 能夠稱之爲「跨距」,能夠理解爲每一個 (Y、U、V)每一個份量在每一行所佔的字節數,這裏咱們拿 I420 作爲例子,咱們知道 I420 的數據存儲方式爲平面存儲,即Y、U、V 分開存儲,以下圖示:app
p_w_picpath.pngide
這樣咱們能夠直觀的看出,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 的定義應該就能夠很快的肯定各個份量的大小了。編碼