// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// An implementation of the subset of hardware buffers functionality required by
// NNAPI. The upstream implementation of hardware buffers can be found in the
// AOSP source file frameworks/native/libs/nativewindow/AHardwareBuffer.cpp. See
// https://android.googlesource.com/platform/frameworks/native/+/HEAD/libs/nativewindow/AHardwareBuffer.cpp

// Unused functions are left without any implementations. Should a future
// version of NNAPI need a new function, we will be notified through a link
// error.

// android/log.h contains __INTRODUCED_IN() macro and must be included before
// hardware_buffer.h
#include <android/log.h>
#include <vndk/hardware_buffer.h>

int AHardwareBuffer_allocate(const AHardwareBuffer_Desc* /*desc*/,
                             AHardwareBuffer** /*outBuffer*/) {
  return 0;
}

int AHardwareBuffer_createFromHandle(const AHardwareBuffer_Desc* /*desc*/,
                                     const native_handle_t* /*handle*/,
                                     int32_t /*method*/,
                                     AHardwareBuffer** /*outBuffer*/) {
  return 0;
}

void AHardwareBuffer_describe(const AHardwareBuffer* /*buffer*/,
                              AHardwareBuffer_Desc* /*outDesc*/) {}

const native_handle_t* AHardwareBuffer_getNativeHandle(
    const AHardwareBuffer* /*buffer*/) {
  return nullptr;
}

int AHardwareBuffer_lock(AHardwareBuffer* /*buffer*/,
                         uint64_t /*usage*/,
                         int32_t /*fence*/,
                         const ARect* /*rect*/,
                         void** /*outVirtualAddress*/) {
  return 0;
}

void AHardwareBuffer_release(AHardwareBuffer* /*buffer*/) {}

int AHardwareBuffer_unlock(AHardwareBuffer* /*buffer*/, int32_t* /*fence*/) {
  return 0;
}
