44//! [`AImage`]: https://developer.android.com/ndk/reference/group/media#aimage
55#![ cfg( feature = "api-level-24" ) ]
66
7- use crate :: media_error:: { construct, construct_never_null, MediaError , Result } ;
8- use crate :: native_window:: NativeWindow ;
9- use crate :: utils:: abort_on_panic;
10- use num_enum:: { FromPrimitive , IntoPrimitive } ;
11- use std:: { ffi:: c_void, fmt, mem:: MaybeUninit , ptr:: NonNull } ;
12-
137#[ cfg( feature = "api-level-26" ) ]
148use std:: os:: fd:: { FromRawFd , IntoRawFd , OwnedFd } ;
9+ use std:: { ffi:: c_void, fmt, mem:: MaybeUninit , ptr:: NonNull } ;
10+
11+ use num_enum:: { FromPrimitive , IntoPrimitive } ;
1512
1613#[ cfg( feature = "api-level-26" ) ]
1714use crate :: hardware_buffer:: { HardwareBuffer , HardwareBufferUsage } ;
15+ use crate :: media_error:: { construct, construct_never_null, MediaError , Result } ;
16+ use crate :: native_window:: NativeWindow ;
17+ use crate :: utils:: abort_on_panic;
18+ #[ cfg( feature = "api-level-34" ) ]
19+ use crate :: { data_space:: DataSpace , hardware_buffer_format:: HardwareBufferFormat } ;
1820
1921#[ repr( i32 ) ]
2022#[ derive( Copy , Clone , Debug , PartialEq , Eq , FromPrimitive , IntoPrimitive ) ]
2123#[ allow( non_camel_case_types) ]
2224#[ non_exhaustive]
25+ #[ doc( alias = "AIMAGE_FORMATS" ) ]
2326pub enum ImageFormat {
2427 RGBA_8888 = ffi:: AIMAGE_FORMATS :: AIMAGE_FORMAT_RGBA_8888 . 0 as i32 ,
2528 RGBX_8888 = ffi:: AIMAGE_FORMATS :: AIMAGE_FORMAT_RGBX_8888 . 0 as i32 ,
@@ -44,9 +47,13 @@ pub enum ImageFormat {
4447 __Unknown( i32 ) ,
4548}
4649
50+ #[ doc( alias = "AImageReader_ImageCallback" ) ]
51+ #[ doc( alias = "AImageReader_ImageListener" ) ]
4752pub type ImageListener = Box < dyn FnMut ( & ImageReader ) + Send > ;
4853
4954#[ cfg( feature = "api-level-26" ) ]
55+ #[ doc( alias = "AImageReader_BufferRemovedCallback" ) ]
56+ #[ doc( alias = "AImageReader_BufferRemovedListener" ) ]
5057pub type BufferRemovedListener = Box < dyn FnMut ( & ImageReader , & HardwareBuffer ) + Send > ;
5158
5259/// Result returned by:
@@ -108,6 +115,7 @@ impl AcquireResult<Image> {
108115/// A native [`AImageReader *`]
109116///
110117/// [`AImageReader *`]: https://developer.android.com/ndk/reference/group/media#aimagereader
118+ #[ doc( alias = "AImageReader" ) ]
111119pub struct ImageReader {
112120 inner : NonNull < ffi:: AImageReader > ,
113121 image_cb : Option < Box < ImageListener > > ,
@@ -144,6 +152,7 @@ impl ImageReader {
144152 self . inner . as_ptr ( )
145153 }
146154
155+ #[ doc( alias = "AImageReader_new" ) ]
147156 pub fn new ( width : i32 , height : i32 , format : ImageFormat , max_images : i32 ) -> Result < Self > {
148157 let inner = construct_never_null ( |res| unsafe {
149158 ffi:: AImageReader_new ( width, height, format. into ( ) , max_images, res)
@@ -153,6 +162,7 @@ impl ImageReader {
153162 }
154163
155164 #[ cfg( feature = "api-level-26" ) ]
165+ #[ doc( alias = "AImageReader_newWithUsage" ) ]
156166 pub fn new_with_usage (
157167 width : i32 ,
158168 height : i32 ,
@@ -174,6 +184,33 @@ impl ImageReader {
174184 Ok ( Self :: from_ptr ( inner) )
175185 }
176186
187+ #[ cfg( feature = "api-level-34" ) ]
188+ #[ doc( alias = "AImageReader_newWithDataSpace" ) ]
189+ pub fn new_with_data_space (
190+ width : i32 ,
191+ height : i32 ,
192+ usage : HardwareBufferUsage ,
193+ max_images : i32 ,
194+ format : HardwareBufferFormat ,
195+ data_space : DataSpace ,
196+ ) -> Result < Self > {
197+ let inner = construct_never_null ( |res| unsafe {
198+ ffi:: AImageReader_newWithDataSpace (
199+ width,
200+ height,
201+ usage. bits ( ) ,
202+ max_images,
203+ i32:: from ( format)
204+ . try_into ( )
205+ . expect ( "Unexpected sign bit in `format`" ) ,
206+ data_space. into ( ) ,
207+ res,
208+ )
209+ } ) ?;
210+
211+ Ok ( Self :: from_ptr ( inner) )
212+ }
213+
177214 #[ doc( alias = "AImageReader_setImageListener" ) ]
178215 pub fn set_image_listener ( & mut self , listener : ImageListener ) -> Result < ( ) > {
179216 let mut boxed = Box :: new ( listener) ;
@@ -444,6 +481,13 @@ impl Image {
444481 unsafe { ffi:: AImage_deleteAsync ( self . as_ptr ( ) , release_fence_fd. into_raw_fd ( ) ) } ;
445482 std:: mem:: forget ( self ) ;
446483 }
484+
485+ #[ cfg( feature = "api-level-34" ) ]
486+ #[ doc( alias = "AImage_getDataSpace" ) ]
487+ pub fn data_space ( & self ) -> Result < DataSpace > {
488+ construct ( |res| unsafe { ffi:: AImage_getDataSpace ( self . as_ptr ( ) , res) } )
489+ . map ( DataSpace :: from)
490+ }
447491}
448492
449493impl Drop for Image {
0 commit comments