JSVM是對輸出圖象做邊界擴展的, 擴展的方式是 左右32象素, 上下 64象素
注意:這是針對亮度值,色度值也進行相對尺度的擴展。對於4:2:0,每個色度空間大小仍是亮度值擴展後的1/4。對於4:2:0,存放順序是:先存放擴展後亮度值,再存放兩個擴展後的色度值。總的buffer大小爲其擴展後大小的和,就是 (m_uiLumaWidth+32*2)*( m_uiLumaHeigh+64*2)*(1.5)
它的成員有
UInt m_uiLumaOffset; //圖象Y分量左上角象素在擴展後緩衝區的偏移
UInt m_uiCbOffset; //圖象Cb分量左上角象素的偏移
UInt m_uiCrOffset; //圖象Cr分量左上角象素的偏移
UInt m_uiLumaHeight; //圖象高度
UInt m_uiLumaWidth; //圖象寬度
UInt m_uiLumaStride; //圖象跨度 = 寬度 + 32*2
UInt m_uiBufferSize; //擴展後緩衝區的大小
UInt m_auiCropping[4]; //圖象最終輸出的時候裁剪用的
舉例:假設輸出圖像的格式爲CIF352*288大小。
則m_uiLumaHeight = 288,m_uiLumaWidth = 352;擴展後的示意圖如下:
m_uiLumaOffset = (352+32+32)*64 + 32 = 26656;
注意,在內存空間裏,先存放亮度值,再存放色度值。擴展後整個亮度值佔用的空間大小爲LumaSize = (352+32+32)*(288+64+64) = 173056.
所以: m_uiCbOffset = LumaSize + (176+16+16)*32 + 16 = 173056 + 6672 = 179728.
下面計算Cr的Offset,它的前面已經存放了Luma和Cb採樣值。
CbSize = 173056/4 = 43264.
m_uiCrOffset = LumaSize + CbSize + (176+16+16)*32 + 16 = 173056 + 43264 + 6672=222992.
m_uiLumaStride 指的是亮度值的寬展後的跨度,就是擴展後的寬度
m_uiLumaStride = 352 + 32 + 32 = 416
m_uiBufferSize 爲擴展後總的大小 = LumaSize + CbSize + CrSize = 173056 + 43264*2 = 259584