# AImageReader_BufferRemovedListener

A listener to the AHardwareBuffer removal event, use [AImageReader_setBufferRemovedListener](https://developer.android.com/ndk/reference/group/media#group___media_1ga067af6087a020665eaf4eb6c4f756977) to register the listener object to AImageReader.

## Summary

| ### Public attributes ||
|---|---|
| `https://developer.android.com/ndk/reference/struct/a-image-reader-buffer-removed-listener#struct_a_image_reader___buffer_removed_listener_1a8ae00d53f42caa3f84d72826af8e4dee` | `void *` Optional application context passed as the first parameter of the callback. |
| `https://developer.android.com/ndk/reference/struct/a-image-reader-buffer-removed-listener#struct_a_image_reader___buffer_removed_listener_1a682ff381aaa5d75600b26c783916e9a9` | `https://developer.android.com/ndk/reference/group/media#group___media_1gac6332947dfaeb120850f24681a2194dd` This callback is called when an old [AHardwareBuffer](https://developer.android.com/ndk/reference/group/a-hardware-buffer#group___a_hardware_buffer) is about to be removed from the image reader. |

## Public attributes

### context

Declared in `media/NdkImageReader.h`

```
void * AImageReader_BufferRemovedListener::context
```
Optional application context passed as the first parameter of the callback.

### onBufferRemoved

Declared in `media/NdkImageReader.h`

```
AImageReader_BufferRemovedCallback AImageReader_BufferRemovedListener::onBufferRemoved
```
This callback is called when an old [AHardwareBuffer](https://developer.android.com/ndk/reference/group/a-hardware-buffer#group___a_hardware_buffer) is about to be removed from the image reader.

Note that registering this callback is optional unless the user holds on extra reference to [AHardwareBuffer](https://developer.android.com/ndk/reference/group/a-hardware-buffer#group___a_hardware_buffer) returned from [AImage_getHardwareBuffer](https://developer.android.com/ndk/reference/group/media#group___media_1gabee7af9fd51c26229d05945509439c5b) by calling [AHardwareBuffer_acquire](https://developer.android.com/ndk/reference/group/a-hardware-buffer#group___a_hardware_buffer_1gab4bd20d385520934e627aac0aa3832ac) or creating external graphic objects, such as EglImage, from it.

If the callback is registered, the [AImageReader](https://developer.android.com/ndk/reference/group/media#group___media_1ga06ce56f62946cf7a9748ef80f75488d3) will hold on the last of its references to the [AHardwareBuffer](https://developer.android.com/ndk/reference/group/a-hardware-buffer#group___a_hardware_buffer) until this callback returns. User can use the callback to get notified that it becomes the last owner of the buffer. It is up to the user to decide to either 1) immediately release all of its references to the buffer; or 2) keep using the buffer and release it in future. Note that, if option 2 if used, user of this API is responsible to deallocate the buffer properly by calling [AHardwareBuffer_release](https://developer.android.com/ndk/reference/group/a-hardware-buffer#group___a_hardware_buffer_1ga671cf3ec426591b6c8b895591667f6e6).


**See also:**
[AHardwareBuffer_release](https://developer.android.com/ndk/reference/group/a-hardware-buffer#group___a_hardware_buffer_1ga671cf3ec426591b6c8b895591667f6e6)
**See also:**
[AImage_getHardwareBuffer](https://developer.android.com/ndk/reference/group/media#group___media_1gabee7af9fd51c26229d05945509439c5b)