//
// Copyright (C) 2020 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(xaCreateEngine);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(xaQueryNumSupportedEngineInterfaces);
DEFINE_INTERCEPTABLE_STUB_FUNCTION(xaQuerySupportedEngineInterfaces);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_ANDROIDBUFFERQUEUESOURCE);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_AUDIODECODERCAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_AUDIOENCODER);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_AUDIOENCODERCAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_AUDIOIODEVICECAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_CAMERA);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_CAMERACAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_CONFIGEXTENSION);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_DEVICEVOLUME);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_DYNAMICINTERFACEMANAGEMENT);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_DYNAMICSOURCE);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_ENGINE);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_EQUALIZER);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_IMAGECONTROLS);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_IMAGEDECODERCAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_IMAGEEFFECTS);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_IMAGEENCODER);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_IMAGEENCODERCAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_LED);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_METADATAEXTRACTION);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_METADATAINSERTION);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_METADATATRAVERSAL);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_NULL);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_OBJECT);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_OUTPUTMIX);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_PLAY);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_PLAYBACKRATE);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_PREFETCHSTATUS);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_RADIO);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_RDS);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_RECORD);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_SEEK);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_SNAPSHOT);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_STREAMINFORMATION);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_THREADSYNC);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_VIBRA);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_VIDEODECODERCAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_VIDEOENCODER);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_VIDEOENCODERCAPABILITIES);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_VIDEOPOSTPROCESSING);
DEFINE_INTERCEPTABLE_STUB_VARIABLE(XA_IID_VOLUME);

static void __attribute__((constructor(0))) init_stub_library() {
  INIT_INTERCEPTABLE_STUB_FUNCTION("libOpenMAXAL.so", xaCreateEngine);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libOpenMAXAL.so", xaQueryNumSupportedEngineInterfaces);
  INIT_INTERCEPTABLE_STUB_FUNCTION("libOpenMAXAL.so", xaQuerySupportedEngineInterfaces);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_ANDROIDBUFFERQUEUESOURCE);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_AUDIODECODERCAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_AUDIOENCODER);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_AUDIOENCODERCAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_AUDIOIODEVICECAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_CAMERA);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_CAMERACAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_CONFIGEXTENSION);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_DEVICEVOLUME);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_DYNAMICINTERFACEMANAGEMENT);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_DYNAMICSOURCE);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_ENGINE);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_EQUALIZER);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_IMAGECONTROLS);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_IMAGEDECODERCAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_IMAGEEFFECTS);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_IMAGEENCODER);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_IMAGEENCODERCAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_LED);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_METADATAEXTRACTION);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_METADATAINSERTION);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_METADATATRAVERSAL);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_NULL);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_OBJECT);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_OUTPUTMIX);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_PLAY);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_PLAYBACKRATE);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_PREFETCHSTATUS);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_RADIO);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_RDS);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_RECORD);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_SEEK);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_SNAPSHOT);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_STREAMINFORMATION);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_THREADSYNC);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_VIBRA);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_VIDEODECODERCAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_VIDEOENCODER);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_VIDEOENCODERCAPABILITIES);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_VIDEOPOSTPROCESSING);
  INIT_INTERCEPTABLE_STUB_VARIABLE("libOpenMAXAL.so", XA_IID_VOLUME);
}
// clang-format on
