Generic YUV conversion (Visual Basic)
Generic YUV conversion provides the ability to convert any YUV format to any supported color space, using the YUV_PARAMS structure and adhering to the restrictions listed below. After defining the YUV format, you can proceed with the conversion normally, just like any other conversion. Use L_ClrConvert to perform the conversion and call L_ClrFree to free the conversion handle. Currently the conversion from any color space to Generic YUV is not supported.
Generic YUV conversion currently has the following restrictions:
1. |
No sub-sampling of Y is supported |
2. |
The number of Y elements must be a multiple of both U, and V. |
3. |
With non-planar formats, vertical sub-sampling of Y, U, and V is not supported. |
4. |
No alignment supported in planar format; line width must not contain additional bytes. |
5. |
The horizontal subsampling periods of U, and V must be multiples of each other, and the vertical subsampling periods of U, and V must be multiples of each other. |
Examples:
1. |
Converting Y41P to RGB using Generic YUV Conversion: |
Function GenericY41PToRGB(YUVData() As Byte, RGBData() As Byte, nWidth As Integer, nHeight As Integer) As Integer
Dim ret As Integer
Dim ClrHandle As Long
Dim cnvParam As CONVERSION_PARAMS
Dim pOff(12) As Long
pOff(0) = 1
pOff(1) = 3
pOff(2) = 5
pOff(3) = 7
pOff(4) = 8
pOff(5) = 9
pOff(6) = 10
pOff(7) = 11
pOff(8) = 0
pOff(9) = 4
pOff(10) = 2
pOff(11) = 6
'(1,3,5,7,8,9,10,11,0,4,2,6)
Dim YUVParamas As LPYUV_PARAMS
With YUVParamas
.uStructSize = Len(YUVParamas)
.nMask = 0
.nUh = 4
.nUv = 1
.nVh = 4
.nVv = 1
.pOffsets = VarPtr(pOff(0))
.nMacroPixel = 8
.nRange = YUVRANGE_FULL
.bPlanar = 0
End With
cnvParam.uStructSize = Len(cnvParam)
cnvParam.nQuantization = 0
cnvParam.nMethod = USE_BUILTIN
cnvParam.nActiveMethod = USE_BUILTIN
cnvParam.pCmykParams = 0
cnvParam.pLabParams = 0
cnvParam.pYuvParams = VarPtr(YUVParamas)
cnvParam.sInputProfile(0) = 0
cnvParam.sOutputProfile(0) = 0
ret = L_ClrInit (ClrHandle, CCS_YUV, CCS_RGB, cnvParam)
ret = L_ClrConvert (ClrHandle, YUVData(0), RGBData(0), nWidth, nHeight, 0, 0)
ret = L_ClrFree (ClrHandle)
GenericY41PToRGB = ret
End Function
2. |
Converting YVU9 (Planar) to RGB using Generic YUV Conversion: |
Function GenericYVU9ToRGB(YUVData() As Byte, RGBData() As Byte, nWidth As Integer, nHeight As Integer) As Integer
Dim ret As Integer
Dim ClrHandle As Long
Dim cnvParam As CONVERSION_PARAMS
Dim pOff(0) As Long
pOff(0) = PLANAR_YVU
Dim YUVParamas As LPYUV_PARAMS
With YUVParamas
.uStructSize = Len(YUVParamas)
.nMask = 0
.nUh = 4
.nUv = 1
.nVh = 4
.nVv = 1
.pOffsets = VarPtr(pOff(0))
.nMacroPixel = 8
.nRange = YUVRANGE_FULL
.bPlanar = 1
End With
cnvParam.uStructSize = Len(cnvParam)
cnvParam.nQuantization = 0
cnvParam.nMethod = USE_BUILTIN
cnvParam.nActiveMethod = USE_BUILTIN
cnvParam.pCmykParams = 0
cnvParam.pLabParams = 0
cnvParam.pYuvParams = VarPtr(YUVParamas)
cnvParam.sInputProfile(0) = 0
cnvParam.sOutputProfile(0) = 0
ret = L_ClrInit (ClrHandle, CCS_YUV, CCS_RGB, cnvParam)
ret = L_ClrConvert (ClrHandle, YUVData(0), RGBData(0), nWidth, nHeight, 0, 0)
ret = L_ClrFree (ClrHandle)
GenericYVU9ToRGB = ret
End Function