public class YUVImage
extends java.lang.Object
YUVImage
instance
serves as the destination image for YUV encode and decompress-to-YUV
operations and as the source image for compress-from-YUV and YUV decode
operations.
Technically, the JPEG format uses the YCbCr colorspace (which technically is not a "colorspace" but rather a "color transform"), but per the convention of the digital video community, the TurboJPEG API uses "YUV" to refer to an image format consisting of Y, Cb, and Cr image planes.
Each plane is simply a 2D array of bytes, each byte representing the value of one of the components (Y, Cb, or Cr) at a particular location in the image. The width and height of each plane are determined by the image width, height, and level of chrominance subsampling. The luminance plane width is the image width padded to the nearest multiple of the horizontal subsampling factor (2 in the case of 4:2:0 and 4:2:2, 4 in the case of 4:1:1, 1 in the case of 4:4:4 or grayscale.) Similarly, the luminance plane height is the image height padded to the nearest multiple of the vertical subsampling factor (2 in the case of 4:2:0 or 4:4:0, 1 in the case of 4:4:4 or grayscale.) The chrominance plane width is equal to the luminance plane width divided by the horizontal subsampling factor, and the chrominance plane height is equal to the luminance plane height divided by the vertical subsampling factor.
For example, if the source image is 35 x 35 pixels and 4:2:2 subsampling is used, then the luminance plane would be 36 x 35 bytes, and each of the chrominance planes would be 18 x 35 bytes. If you specify a line padding of 4 bytes on top of this, then the luminance plane would be 36 x 35 bytes, and each of the chrominance planes would be 20 x 35 bytes.
Modifier and Type | Field and Description |
---|---|
protected long |
handle |
protected int |
yuvHeight |
protected int[] |
yuvOffsets |
protected int |
yuvPad |
protected byte[][] |
yuvPlanes |
protected int[] |
yuvStrides |
protected int |
yuvSubsamp |
protected int |
yuvWidth |
Constructor and Description |
---|
YUVImage(byte[][] planes,
int[] offsets,
int width,
int[] strides,
int height,
int subsamp)
Create a new
YUVImage instance from a set of existing image
planes. |
YUVImage(byte[] yuvImage,
int width,
int pad,
int height,
int subsamp)
Create a new
YUVImage instance from an existing unified image
buffer. |
YUVImage(int width,
int[] strides,
int height,
int subsamp)
Create a new
YUVImage instance backed by separate image
planes, and allocate memory for the image planes. |
YUVImage(int width,
int pad,
int height,
int subsamp)
Create a new
YUVImage instance backed by a unified image
buffer, and allocate memory for the image buffer. |
Modifier and Type | Method and Description |
---|---|
byte[] |
getBuf()
Returns the YUV image buffer (if this image is stored in a unified
buffer rather than separate image planes.)
|
int |
getHeight()
Returns the height of the YUV image (or subregion.)
|
int[] |
getOffsets()
Returns the offsets (in bytes) of each plane within the planes of a larger
YUV image.
|
int |
getPad()
Returns the line padding used in the YUV image buffer (if this image is
stored in a unified buffer rather than separate image planes.)
|
byte[][] |
getPlanes()
Returns the YUV image planes.
|
int |
getSize()
Returns the size (in bytes) of the YUV image buffer (if this image is
stored in a unified buffer rather than separate image planes.)
|
int[] |
getStrides()
Returns the number of bytes per line of each plane in the YUV image.
|
int |
getSubsamp()
Returns the level of chrominance subsampling used in the YUV image.
|
int |
getWidth()
Returns the width of the YUV image (or subregion.)
|
void |
setBuf(byte[][] planes,
int[] offsets,
int width,
int[] strides,
int height,
int subsamp)
Assign a set of image planes to this
YUVImage instance. |
void |
setBuf(byte[] yuvImage,
int width,
int pad,
int height,
int subsamp)
Assign a unified image buffer to this
YUVImage instance. |
protected long handle
protected byte[][] yuvPlanes
protected int[] yuvOffsets
protected int[] yuvStrides
protected int yuvPad
protected int yuvWidth
protected int yuvHeight
protected int yuvSubsamp
public YUVImage(int width, int[] strides, int height, int subsamp)
YUVImage
instance backed by separate image
planes, and allocate memory for the image planes.width
- width (in pixels) of the YUV imagestrides
- an array of integers, each specifying the number of bytes
per line in the corresponding plane of the YUV image. Setting the stride
for any plane to 0 is the same as setting it to the plane width (see
above
.) If strides
is null, then the
strides for all planes will be set to their respective plane widths. When
using this constructor, the stride for each plane must be equal to or
greater than the plane width.height
- height (in pixels) of the YUV imagesubsamp
- the level of chrominance subsampling to be used in the YUV
image (one of TJ.SAMP_*
)public YUVImage(int width, int pad, int height, int subsamp)
YUVImage
instance backed by a unified image
buffer, and allocate memory for the image buffer.width
- width (in pixels) of the YUV imagepad
- Each line of each plane in the YUV image buffer will be padded
to this number of bytes (must be a power of 2.)height
- height (in pixels) of the YUV imagesubsamp
- the level of chrominance subsampling to be used in the YUV
image (one of TJ.SAMP_*
)public YUVImage(byte[][] planes, int[] offsets, int width, int[] strides, int height, int subsamp)
YUVImage
instance from a set of existing image
planes.planes
- an array of buffers representing the Y, U (Cb), and V (Cr)
image planes (or just the Y plane, if the image is grayscale.) These
planes can be contiguous or non-contiguous in memory. Plane
i
should be at least offsets[i] +
TJ.planeSizeYUV
(i, width, strides[i], height, subsamp)
bytes in size.offsets
- If this YUVImage
instance represents a
subregion of a larger image, then offsets[i]
specifies the
offset (in bytes) of the subregion within plane i
of the
larger image. Setting this to null is the same as setting the offsets for
all planes to 0.width
- width (in pixels) of the new YUV image (or subregion)strides
- an array of integers, each specifying the number of bytes
per line in the corresponding plane of the YUV image. Setting the stride
for any plane to 0 is the same as setting it to the plane width (see
above
.) If strides
is null, then the
strides for all planes will be set to their respective plane widths. You
can adjust the strides in order to add an arbitrary amount of line padding
to each plane or to specify that this YUVImage
instance is a
subregion of a larger image (in which case, strides[i]
should
be set to the plane width of plane i
in the larger image.)height
- height (in pixels) of the new YUV image (or subregion)subsamp
- the level of chrominance subsampling used in the YUV
image (one of TJ.SAMP_*
)public YUVImage(byte[] yuvImage, int width, int pad, int height, int subsamp)
YUVImage
instance from an existing unified image
buffer.yuvImage
- image buffer that contains or will contain YUV planar
image data. Use TJ.bufSizeYUV(int, int, int, int)
to determine the minimum size for
this buffer. The Y, U (Cb), and V (Cr) image planes are stored
sequentially in the buffer (see above
for a description
of the image format.)width
- width (in pixels) of the YUV imagepad
- the line padding used in the YUV image buffer. For
instance, if each line in each plane of the buffer is padded to the
nearest multiple of 4 bytes, then pad
should be set to 4.height
- height (in pixels) of the YUV imagesubsamp
- the level of chrominance subsampling used in the YUV
image (one of TJ.SAMP_*
)public void setBuf(byte[][] planes, int[] offsets, int width, int[] strides, int height, int subsamp)
YUVImage
instance.planes
- an array of buffers representing the Y, U (Cb), and V (Cr)
image planes (or just the Y plane, if the image is grayscale.) These
planes can be contiguous or non-contiguous in memory. Plane
i
should be at least offsets[i] +
TJ.planeSizeYUV
(i, width, strides[i], height, subsamp)
bytes in size.offsets
- If this YUVImage
instance represents a
subregion of a larger image, then offsets[i]
specifies the
offset (in bytes) of the subregion within plane i
of the
larger image. Setting this to null is the same as setting the offsets for
all planes to 0.width
- width (in pixels) of the YUV image (or subregion)strides
- an array of integers, each specifying the number of bytes
per line in the corresponding plane of the YUV image. Setting the stride
for any plane to 0 is the same as setting it to the plane width (see
above
.) If strides
is null, then the
strides for all planes will be set to their respective plane widths. You
can adjust the strides in order to add an arbitrary amount of line padding
to each plane or to specify that this YUVImage
image is a
subregion of a larger image (in which case, strides[i]
should
be set to the plane width of plane i
in the larger image.)height
- height (in pixels) of the YUV image (or subregion)subsamp
- the level of chrominance subsampling used in the YUV
image (one of TJ.SAMP_*
)public void setBuf(byte[] yuvImage, int width, int pad, int height, int subsamp)
YUVImage
instance.yuvImage
- image buffer that contains or will contain YUV planar
image data. Use TJ.bufSizeYUV(int, int, int, int)
to determine the minimum size for
this buffer. The Y, U (Cb), and V (Cr) image planes are stored
sequentially in the buffer (see above
for a description
of the image format.)width
- width (in pixels) of the YUV imagepad
- the line padding used in the YUV image buffer. For
instance, if each line in each plane of the buffer is padded to the
nearest multiple of 4 bytes, then pad
should be set to 4.height
- height (in pixels) of the YUV imagesubsamp
- the level of chrominance subsampling used in the YUV
image (one of TJ.SAMP_*
)public int getWidth()
public int getHeight()
public int getPad()
public int[] getStrides()
public int[] getOffsets()
public int getSubsamp()
TJ.SAMP_*
.public byte[][] getPlanes()
public byte[] getBuf()
public int getSize()