/*
 * Copyright (C) 2021 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.
 */


// these headers include the structure of needed function pointers
package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_av_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_av_license"],
}

cc_library_headers {
    name: "libmediaformatshaper_headers",
    export_include_dirs: ["include"],
    apex_available: [
        "//apex_available:platform",
        "com.android.media",
    ],
    min_sdk_version: "29",
    host_supported: true,
    target: {
        darwin: {
            enabled: false,
        },
    },
}

cc_defaults {
    name: "libmediaformatshaper_defaults",
    srcs: [
        "CodecProperties.cpp",
        "CodecSeeding.cpp",
        "FormatShaper.cpp",
        "ManageShapingCodecs.cpp",
        "VideoShaper.cpp",
        "VQApply.cpp",
    ],

    local_include_dirs: [
        "include",
    ],

    header_libs: [
        "libstagefright_headers",
    ],

    shared_libs: [
        "liblog",
        "libutils",
    ],

    cflags: [
        "-Werror",
        "-Wall",
        "-fvisibility=hidden",
        "-Wthread-safety",                      // enables GUARDED_BY()
    ],

    target: {
        android: {
            shared_libs: [
                "libmediandk#29",
            ],
        },
    },

    sanitize: {
        cfi: true,
        misc_undefined: [
            "unsigned-integer-overflow",
            "signed-integer-overflow",
        ],
    },
}

cc_library {
    name: "libmediaformatshaper",
    defaults: ["libmediaformatshaper_defaults"],

    min_sdk_version: "29",

    apex_available: [
        "//apex_available:platform",
        "com.android.media",
    ],

    version_script: "exports.lds",

}
