AHardwareBuffer

AHardwareBuffer는 gralloc 버퍼를 래핑하는 공유 메모리 유형입니다. Android 10의 Neural Networks API(NNAPI)는 AHardwareBuffer의 사용을 지원합니다. 따라서 드라이버가 데이터를 복사하지 않고도 실행을 수행할 수 있어 앱의 성능과 전력 소비가 개선됩니다. 예를 들어 카메라 HAL 스택은 머신러닝 워크로드와 관련하여 카메라 NDK 및 미디어 NDK API에 의해 생성된 AHardwareBuffer 핸들을 사용하여 AHardwareBuffer 개체를 NNAPI에 전달할 수 있습니다. 자세한 내용은 ANeuralNetworksMemory_createFromAHardwareBuffer를 참조하세요.

NNAPI에 사용되는 AHardwareBuffer 개체는 이름이 hardware_buffer 또는 hardware_buffer_blob로 지정된 hidl_memory 구조를 통해 드라이버에 전달됩니다. hidl_memory 구조 hardware_buffer_blobAHARDWAREBUFFER_FORMAT_BLOB 형식의 AHardwareBuffer 개체만 표현합니다.

프레임워크에서 요구한 정보는 hidl_memory 구조의 hidl_handle 필드에서 인코딩됩니다. hidl_handle 필드는 AHardwareBuffer 또는 Gralloc 버퍼에 대한 모든 필수 메타데이터를 전부 인코딩하는 native_handle을 래핑합니다.

드라이버는 제공된 hidl_handle 필드를 제대로 디코딩하고 hidl_handle에 의해 설명된 메모리에 액세스해야 합니다. getSupportedOperations_1_2, getSupportedOperations_1_1 또는 getSupportedOperations 메서드가 호출되면 드라이버는 제공된 hidl_handle을 디코딩하고 hidl_handle에 의해 설명된 메모리에 액세스할 수 있는지를 감지해야 합니다. 모델 준비는 상수 피연산자에 사용되는 hidl_handle 필드가 지원되지 않을 경우 실패해야 합니다. 실행은 실행의 입력 또는 출력 피연산자에 사용되는 hidl_handle 필드가 지원되지 않는 경우 실패해야 합니다. 모델 준비 또는 실행이 실패할 경우 드라이버에서 GENERAL_FAILURE 오류를 반환하는 것이 좋습니다.