38 lines
1.3 KiB
Go
38 lines
1.3 KiB
Go
package generator
|
|
|
|
const v210RowAlignment = 128
|
|
|
|
// V210ActiveLineSize returns the number of bytes containing pixel data in one
|
|
// v210 row, including the final partial six-pixel block when needed.
|
|
func V210ActiveLineSize(width int) int {
|
|
return (width + 5) / 6 * 16
|
|
}
|
|
|
|
// V210LineSize returns the MXL v210 row stride. MXL stores every row at a
|
|
// 128-byte boundary, equivalent to rounding the width up to 48 pixels.
|
|
func V210LineSize(width int) int {
|
|
return ((width + 47) / 48) * v210RowAlignment
|
|
}
|
|
|
|
// V210FrameSize returns the complete MXL payload size for a v210 frame.
|
|
func V210FrameSize(width, height int) int {
|
|
return V210LineSize(width) * height
|
|
}
|
|
|
|
// AlphaLineSize returns the byte stride of one packed 10-bit alpha row. Each
|
|
// little-endian 32-bit word contains three alpha samples and two unused bits.
|
|
func AlphaLineSize(width int) int {
|
|
return ((width + 2) / 3) * 4
|
|
}
|
|
|
|
// AlphaFrameSize returns the size of the alpha plane in a v210a frame.
|
|
func AlphaFrameSize(width, height int) int {
|
|
return AlphaLineSize(width) * height
|
|
}
|
|
|
|
// V210AFrameSize returns the total size of a v210a payload: the complete v210
|
|
// fill plane followed by the complete packed 10-bit alpha plane.
|
|
func V210AFrameSize(width, height int) int {
|
|
return V210FrameSize(width, height) + AlphaFrameSize(width, height)
|
|
}
|