//
// Copyright (C) 2024 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

// clang-format off
#include "native_bridge_support/vdso/interceptable_functions.h"

DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_addTag);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_clearTags);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_delete);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_openStream);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setAllowedCapturePolicy);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setAttributionTag);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setBufferCapacityInFrames);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setChannelCount);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setChannelMask);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setContentType);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setDataCallback);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setDeviceId);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setDirection);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setErrorCallback);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setFormat);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setFramesPerDataCallback);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setInputPreset);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setIsContentSpatialized);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setPackageName);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setPerformanceMode);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setPresentationEndCallback);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setPrivacySensitive);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setSampleRate);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setSamplesPerFrame);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setSessionId);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setSharingMode);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setSpatializationBehavior);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStreamBuilder_setUsage);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_close);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_destroyTags);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getAllowedCapturePolicy);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getBufferCapacityInFrames);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getBufferSizeInFrames);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getChannelCount);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getChannelMask);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getContentType);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getDeviceId);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getDeviceIds);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getDirection);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getFormat);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getFramesPerBurst);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getFramesPerDataCallback);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getFramesRead);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getFramesWritten);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getHardwareChannelCount);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getHardwareFormat);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getHardwareSampleRate);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getInputPreset);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getOffloadDelay);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getOffloadPadding);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getPerformanceMode);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getSampleRate);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getSamplesPerFrame);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getSessionId);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getSharingMode);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getSpatializationBehavior);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getState);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getTimestamp);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getUsage);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_getXRunCount);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_isContentSpatialized);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_isMMapUsed);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_isPrivacySensitive);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_obtainTags);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_read);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_release);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_requestFlush);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_requestPause);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_requestStart);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_requestStop);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_setBufferSizeInFrames);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_setOffloadDelayPadding);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_setOffloadEndOfStream);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_waitForStateChange);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudioStream_write);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudio_convertResultToText);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudio_convertStreamStateToText);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudio_createStreamBuilder);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudio_getMMapPolicy);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudio_getPlatformMMapExclusivePolicy);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudio_getPlatformMMapPolicy);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(AAudio_setMMapPolicy);

static void __attribute__((constructor(0))) init_stub_library() {
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_addTag);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_clearTags);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_delete);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_openStream);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setAllowedCapturePolicy);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setAttributionTag);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setBufferCapacityInFrames);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setChannelCount);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setChannelMask);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setContentType);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setDataCallback);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setDeviceId);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setDirection);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setErrorCallback);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setFormat);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setFramesPerDataCallback);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setInputPreset);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setIsContentSpatialized);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setPackageName);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setPerformanceMode);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setPresentationEndCallback);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setPrivacySensitive);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setSampleRate);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setSamplesPerFrame);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setSessionId);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setSharingMode);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setSpatializationBehavior);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStreamBuilder_setUsage);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_close);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_destroyTags);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getAllowedCapturePolicy);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getBufferCapacityInFrames);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getBufferSizeInFrames);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getChannelCount);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getChannelMask);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getContentType);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getDeviceId);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getDeviceIds);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getDirection);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getFormat);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getFramesPerBurst);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getFramesPerDataCallback);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getFramesRead);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getFramesWritten);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getHardwareChannelCount);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getHardwareFormat);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getHardwareSampleRate);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getInputPreset);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getOffloadDelay);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getOffloadPadding);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getPerformanceMode);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getSampleRate);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getSamplesPerFrame);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getSessionId);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getSharingMode);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getSpatializationBehavior);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getState);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getTimestamp);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getUsage);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_getXRunCount);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_isContentSpatialized);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_isMMapUsed);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_isPrivacySensitive);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_obtainTags);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_read);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_release);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_requestFlush);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_requestPause);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_requestStart);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_requestStop);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_setBufferSizeInFrames);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_setOffloadDelayPadding);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_setOffloadEndOfStream);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_waitForStateChange);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudioStream_write);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudio_convertResultToText);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudio_convertStreamStateToText);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudio_createStreamBuilder);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudio_getMMapPolicy);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudio_getPlatformMMapExclusivePolicy);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudio_getPlatformMMapPolicy);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libaaudio.so", AAudio_setMMapPolicy);
}
// clang-format on
