ImageReader.NewInstance Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Overloads
NewInstance(Int32, Int32, ImageFormatType, Int32) |
Create a new reader for images of the desired size and format. |
NewInstance(Int32, Int32, ImageFormatType, Int32, Int64) |
Create a new reader for images of the desired size, format and consumer usage flag. |
NewInstance(Int32, Int32, ImageFormatType, Int32)
Create a new reader for images of the desired size and format.
[Android.Runtime.Register("newInstance", "(IIII)Landroid/media/ImageReader;", "")]
public static Android.Media.ImageReader NewInstance (int width, int height, Android.Graphics.ImageFormatType format, int maxImages);
[<Android.Runtime.Register("newInstance", "(IIII)Landroid/media/ImageReader;", "")>]
static member NewInstance : int * int * Android.Graphics.ImageFormatType * int -> Android.Media.ImageReader
Parameters
- width
- Int32
The default width in pixels of the Images that this reader will produce.
- height
- Int32
The default height in pixels of the Images that this reader will produce.
- format
- ImageFormatType
The format of the Image that this reader will produce. This
must be one of the android.graphics.ImageFormat
or
android.graphics.PixelFormat
constants. Note that not
all formats are supported, like ImageFormat.NV21.
- maxImages
- Int32
The maximum number of images the user will want to
access simultaneously. This should be as small as possible to
limit memory use. Once maxImages Images are obtained by the
user, one of them has to be released before a new Image will
become available for access through
#acquireLatestImage()
or #acquireNextImage()
.
Must be greater than 0.
Returns
- Attributes
Remarks
Create a new reader for images of the desired size and format.
The maxImages
parameter determines the maximum number of Image
objects that can be be acquired from the ImageReader
simultaneously. Requesting more buffers will use up more memory, so it is important to use only the minimum number necessary for the use case.
The valid sizes and formats depend on the source of the image data.
If the format
is ImageFormat#PRIVATE PRIVATE
, the created ImageReader
will produce images that are not directly accessible by the application. The application can still acquire images from this ImageReader
, and send them to the android.hardware.camera2.CameraDevice camera
for reprocessing via ImageWriter
interface. However, the Image#getPlanes() getPlanes()
will return an empty array for ImageFormat#PRIVATE PRIVATE
format images. The application can check if an existing reader's format by calling #getImageFormat()
.
ImageFormat#PRIVATE PRIVATE
format ImageReader ImageReaders
are more efficient to use when application access to image data is not necessary, compared to ImageReaders using other format such as ImageFormat#YUV_420_888 YUV_420_888
.
Java documentation for android.media.ImageReader.newInstance(int, int, int, int)
.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
See also
Applies to
NewInstance(Int32, Int32, ImageFormatType, Int32, Int64)
Create a new reader for images of the desired size, format and consumer usage flag.
[Android.Runtime.Register("newInstance", "(IIIIJ)Landroid/media/ImageReader;", "", ApiSince=29)]
public static Android.Media.ImageReader NewInstance (int width, int height, Android.Graphics.ImageFormatType format, int maxImages, long usage);
[<Android.Runtime.Register("newInstance", "(IIIIJ)Landroid/media/ImageReader;", "", ApiSince=29)>]
static member NewInstance : int * int * Android.Graphics.ImageFormatType * int * int64 -> Android.Media.ImageReader
Parameters
- width
- Int32
The default width in pixels of the Images that this reader will produce.
- height
- Int32
The default height in pixels of the Images that this reader will produce.
- format
- ImageFormatType
The format of the Image that this reader will produce. This must be one of the
android.graphics.ImageFormat
or android.graphics.PixelFormat
constants. Note that not all formats are supported, like ImageFormat.NV21.
- maxImages
- Int32
The maximum number of images the user will want to access simultaneously.
This should be as small as possible to limit memory use. Once maxImages Images are
obtained by the user, one of them has to be released before a new Image will
become available for access through #acquireLatestImage()
or
#acquireNextImage()
. Must be greater than 0.
- usage
- Int64
The intended usage of the images produced by this ImageReader. See the usages
on HardwareBuffer
for a list of valid usage bits. See also
HardwareBuffer#isSupported(int, int, int, int, long)
for checking
if a combination is supported. If it's not supported this will throw
an IllegalArgumentException
.
Returns
- Attributes
Remarks
Create a new reader for images of the desired size, format and consumer usage flag.
The maxImages
parameter determines the maximum number of Image
objects that can be be acquired from the ImageReader
simultaneously. Requesting more buffers will use up more memory, so it is important to use only the minimum number necessary for the use case.
The valid sizes and formats depend on the source of the image data.
The format and usage flag combination describes how the buffer will be used by consumer end-points. For example, if the application intends to send the images to android.media.MediaCodec
or android.media.MediaRecorder
for hardware video encoding, the format and usage flag combination needs to be ImageFormat#PRIVATE PRIVATE
and HardwareBuffer#USAGE_VIDEO_ENCODE
. When an ImageReader
object is created with a valid size and such format/usage flag combination, the application can send the Image images
to an ImageWriter
that is created with the input android.view.Surface
provided by the android.media.MediaCodec
or android.media.MediaRecorder
.
If the format
is ImageFormat#PRIVATE PRIVATE
, the created ImageReader
will produce images that are not directly accessible by the application. The application can still acquire images from this ImageReader
, and send them to the android.hardware.camera2.CameraDevice camera
for reprocessing, or to the android.media.MediaCodec
/ android.media.MediaRecorder
for hardware video encoding via ImageWriter
interface. However, the Image#getPlanes() getPlanes()
will return an empty array for ImageFormat#PRIVATE PRIVATE
format images. The application can check if an existing reader's format by calling #getImageFormat()
.
ImageFormat#PRIVATE PRIVATE
format ImageReader ImageReaders
are more efficient to use when application access to image data is not necessary, compared to ImageReaders using other format such as ImageFormat#YUV_420_888 YUV_420_888
.
Note that not all format and usage flag combinations are supported by the ImageReader
. Below are the supported combinations by the ImageReader
(assuming the consumer end-points support the such image consumption, e.g., hardware video encoding). <table> <tr> <th>Format</th> <th>Compatible usage flags</th> </tr> <tr> <td>non-android.graphics.ImageFormat#PRIVATE PRIVATE
formats defined by android.graphics.ImageFormat ImageFormat
or android.graphics.PixelFormat PixelFormat
</td> <td>HardwareBuffer#USAGE_CPU_READ_RARELY
or HardwareBuffer#USAGE_CPU_READ_OFTEN
</td> </tr> <tr> <td>android.graphics.ImageFormat#PRIVATE
</td> <td>HardwareBuffer#USAGE_VIDEO_ENCODE
or HardwareBuffer#USAGE_GPU_SAMPLED_IMAGE
, or combined</td> </tr> </table> Using other combinations may result in IllegalArgumentException
. Additionally, specifying HardwareBuffer#USAGE_CPU_WRITE_RARELY
or HardwareBuffer#USAGE_CPU_WRITE_OFTEN
and writing to the ImageReader's buffers might break assumptions made by some producers, and should be used with caution.
If the ImageReader
is used as an output target for a android.hardware.camera2.CameraDevice
, and if the usage flag contains HardwareBuffer#USAGE_VIDEO_ENCODE
, the timestamps of the Image images
produced by the ImageReader
won't be in the same timebase as android.os.SystemClock#elapsedRealtimeNanos
, even if android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
is android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
. Instead, the timestamps will be roughly in the same timebase as in android.os.SystemClock#uptimeMillis
, so that A/V synchronization could work for video recording. In this case, the timestamps from the ImageReader
with HardwareBuffer#USAGE_VIDEO_ENCODE
usage flag may not be directly comparable with timestamps of other streams or capture result metadata.
Java documentation for android.media.ImageReader.newInstance(int, int, int, int, long)
.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.