Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e55ed3fa authored by Pawin Vongmasa's avatar Pawin Vongmasa
Browse files

Make Codec2 software service public

This CL makes the software Codec2 service present the public Codec2 HAL
interface, and makes the framework use it.

Test: make cts -j123 && cts-tradefed run cts-dev -m \
CtsMediaTestCases --compatibility:module-arg \
CtsMediaTestCases:include-annotation:\
android.platform.test.annotations.RequiresDevice

Bug: 112362730
Bug: 119853704

Change-Id: I047c6948a883a6e085d988a3fa542129ebb9571f
parent e8c8b435
Loading
Loading
Loading
Loading
+11 −3
Original line number Original line Diff line number Diff line
@@ -76,7 +76,11 @@ typedef std::array<std::shared_ptr<Codec2Client>, kNumClients> ClientList;


// Convenience methods to obtain known clients.
// Convenience methods to obtain known clients.
std::shared_ptr<Codec2Client> getClient(size_t index) {
std::shared_ptr<Codec2Client> getClient(size_t index) {
    return Codec2Client::CreateFromService(kClientNames[index]);
    uint32_t serviceMask = ::android::base::GetUintProperty(
            "debug.media.codec2", uint32_t(0));
    return Codec2Client::CreateFromService(
            kClientNames[index],
            (serviceMask & (1 << index)) != 0);
}
}


ClientList getClientList() {
ClientList getClientList() {
@@ -633,9 +637,13 @@ std::shared_ptr<Codec2Client> Codec2Client::CreateFromService(
            Base::tryGetService(instanceName);
            Base::tryGetService(instanceName);
    if (!baseStore) {
    if (!baseStore) {
        if (waitForService) {
        if (waitForService) {
            ALOGE("Codec2.0 service inaccessible. Check the device manifest.");
            ALOGW("Codec2.0 service \"%s\" inaccessible. "
                  "Check the device manifest.",
                  instanceName);
        } else {
        } else {
            ALOGW("Codec2.0 service not available right now. Try again later.");
            ALOGD("Codec2.0 service \"%s\" unavailable right now. "
                  "Try again later.",
                  instanceName);
        }
        }
        return nullptr;
        return nullptr;
    }
    }
+0 −55
Original line number Original line Diff line number Diff line
@@ -37,58 +37,3 @@ cc_binary {
    compile_multilib: "32",
    compile_multilib: "32",
}
}
cc_library_shared {
    name: "libcodec2_serviceregistrant",
    // need vendor version for update packaging, system version may have more dependencies
    vendor_available: true,
    srcs: [
        "C2SoftwareCodecServiceRegistrant.cpp",
    ],

    header_libs: [
        "libmedia_headers",
    ],

    shared_libs: [
        "android.hardware.media.c2@1.0",
        "libcodec2_hidl@1.0",
        "libcodec2_vndk",
        "liblog",
        "libutils",
    ],

    // Codecs
    runtime_libs: [
        "libcodec2_soft_avcdec",
        "libcodec2_soft_avcenc",
        "libcodec2_soft_aacdec",
        "libcodec2_soft_aacenc",
        "libcodec2_soft_amrnbdec",
        "libcodec2_soft_amrnbenc",
        "libcodec2_soft_amrwbdec",
        "libcodec2_soft_amrwbenc",
        "libcodec2_soft_hevcdec",
        "libcodec2_soft_g711alawdec",
        "libcodec2_soft_g711mlawdec",
        "libcodec2_soft_mpeg2dec",
        "libcodec2_soft_h263dec",
        "libcodec2_soft_h263enc",
        "libcodec2_soft_mpeg4dec",
        "libcodec2_soft_mpeg4enc",
        "libcodec2_soft_mp3dec",
        "libcodec2_soft_vorbisdec",
        "libcodec2_soft_opusdec",
        "libcodec2_soft_vp8dec",
        "libcodec2_soft_vp9dec",
        "libcodec2_soft_vp8enc",
        "libcodec2_soft_vp9enc",
        "libcodec2_soft_rawdec",
        "libcodec2_soft_flacdec",
        "libcodec2_soft_flacenc",
        "libcodec2_soft_gsmdec",
        "libcodec2_soft_xaacdec",
    ],

    compile_multilib: "32",
}
+7 −1
Original line number Original line Diff line number Diff line
@@ -26,6 +26,12 @@
/* static */ android::Mutex C2PlatformStorePluginLoader::sMutex;
/* static */ android::Mutex C2PlatformStorePluginLoader::sMutex;
/* static */ std::unique_ptr<C2PlatformStorePluginLoader> C2PlatformStorePluginLoader::sInstance;
/* static */ std::unique_ptr<C2PlatformStorePluginLoader> C2PlatformStorePluginLoader::sInstance;


namespace /* unnamed */ {

constexpr const char kStorePluginPath[] = "libc2plugin_store.so";

}  // unnamed

C2PlatformStorePluginLoader::C2PlatformStorePluginLoader(const char *libPath)
C2PlatformStorePluginLoader::C2PlatformStorePluginLoader(const char *libPath)
    : mCreateBlockPool(nullptr) {
    : mCreateBlockPool(nullptr) {
    mLibHandle = dlopen(libPath, RTLD_NOW | RTLD_NODELETE);
    mLibHandle = dlopen(libPath, RTLD_NOW | RTLD_NODELETE);
@@ -89,7 +95,7 @@ const std::unique_ptr<C2PlatformStorePluginLoader>& C2PlatformStorePluginLoader:
    android::Mutex::Autolock _l(sMutex);
    android::Mutex::Autolock _l(sMutex);
    if (!sInstance) {
    if (!sInstance) {
        ALOGV("Loading library");
        ALOGV("Loading library");
        sInstance.reset(new C2PlatformStorePluginLoader("libstagefright_ccodec_ext.so"));
        sInstance.reset(new C2PlatformStorePluginLoader(kStorePluginPath));
    }
    }
    return sInstance;
    return sInstance;
}
}
+56 −56
Original line number Original line Diff line number Diff line
@@ -798,65 +798,65 @@ C2PlatformComponentStore::C2PlatformComponentStore()
        mComponentsList.emplace_back(alias);
        mComponentsList.emplace_back(alias);
    };
    };
    // TODO: move this also into a .so so it can be updated
    // TODO: move this also into a .so so it can be updated
    emplace("c2.android.avc.decoder", "libstagefright_soft_c2avcdec.so");
    emplace("c2.android.avc.decoder", "libcodec2_soft_avcdec.so");
    emplace("c2.android.avc.encoder", "libstagefright_soft_c2avcenc.so");
    emplace("c2.android.avc.encoder", "libcodec2_soft_avcenc.so");
    emplace("c2.android.aac.decoder", "libstagefright_soft_c2aacdec.so");
    emplace("c2.android.aac.decoder", "libcodec2_soft_aacdec.so");
    emplace("c2.android.aac.encoder", "libstagefright_soft_c2aacenc.so");
    emplace("c2.android.aac.encoder", "libcodec2_soft_aacenc.so");
    emplace("c2.android.amrnb.decoder", "libstagefright_soft_c2amrnbdec.so");
    emplace("c2.android.amrnb.decoder", "libcodec2_soft_amrnbdec.so");
    emplace("c2.android.amrnb.encoder", "libstagefright_soft_c2amrnbenc.so");
    emplace("c2.android.amrnb.encoder", "libcodec2_soft_amrnbenc.so");
    emplace("c2.android.amrwb.decoder", "libstagefright_soft_c2amrwbdec.so");
    emplace("c2.android.amrwb.decoder", "libcodec2_soft_amrwbdec.so");
    emplace("c2.android.amrwb.encoder", "libstagefright_soft_c2amrwbenc.so");
    emplace("c2.android.amrwb.encoder", "libcodec2_soft_amrwbenc.so");
    emplace("c2.android.hevc.decoder", "libstagefright_soft_c2hevcdec.so");
    emplace("c2.android.hevc.decoder", "libcodec2_soft_hevcdec.so");
    emplace("c2.android.g711.alaw.decoder", "libstagefright_soft_c2g711alawdec.so");
    emplace("c2.android.g711.alaw.decoder", "libcodec2_soft_g711alawdec.so");
    emplace("c2.android.g711.mlaw.decoder", "libstagefright_soft_c2g711mlawdec.so");
    emplace("c2.android.g711.mlaw.decoder", "libcodec2_soft_g711mlawdec.so");
    emplace("c2.android.mpeg2.decoder", "libstagefright_soft_c2mpeg2dec.so");
    emplace("c2.android.mpeg2.decoder", "libcodec2_soft_mpeg2dec.so");
    emplace("c2.android.h263.decoder", "libstagefright_soft_c2h263dec.so");
    emplace("c2.android.h263.decoder", "libcodec2_soft_h263dec.so");
    emplace("c2.android.h263.encoder", "libstagefright_soft_c2h263enc.so");
    emplace("c2.android.h263.encoder", "libcodec2_soft_h263enc.so");
    emplace("c2.android.mpeg4.decoder", "libstagefright_soft_c2mpeg4dec.so");
    emplace("c2.android.mpeg4.decoder", "libcodec2_soft_mpeg4dec.so");
    emplace("c2.android.mpeg4.encoder", "libstagefright_soft_c2mpeg4enc.so");
    emplace("c2.android.mpeg4.encoder", "libcodec2_soft_mpeg4enc.so");
    emplace("c2.android.mp3.decoder", "libstagefright_soft_c2mp3dec.so");
    emplace("c2.android.mp3.decoder", "libcodec2_soft_mp3dec.so");
    emplace("c2.android.vorbis.decoder", "libstagefright_soft_c2vorbisdec.so");
    emplace("c2.android.vorbis.decoder", "libcodec2_soft_vorbisdec.so");
    emplace("c2.android.opus.decoder", "libstagefright_soft_c2opusdec.so");
    emplace("c2.android.opus.decoder", "libcodec2_soft_opusdec.so");
    emplace("c2.android.vp8.decoder", "libstagefright_soft_c2vp8dec.so");
    emplace("c2.android.vp8.decoder", "libcodec2_soft_vp8dec.so");
    emplace("c2.android.vp9.decoder", "libstagefright_soft_c2vp9dec.so");
    emplace("c2.android.vp9.decoder", "libcodec2_soft_vp9dec.so");
    emplace("c2.android.vp8.encoder", "libstagefright_soft_c2vp8enc.so");
    emplace("c2.android.vp8.encoder", "libcodec2_soft_vp8enc.so");
    emplace("c2.android.vp9.encoder", "libstagefright_soft_c2vp9enc.so");
    emplace("c2.android.vp9.encoder", "libcodec2_soft_vp9enc.so");
    emplace("c2.android.raw.decoder", "libstagefright_soft_c2rawdec.so");
    emplace("c2.android.raw.decoder", "libcodec2_soft_rawdec.so");
    emplace("c2.android.flac.decoder", "libstagefright_soft_c2flacdec.so");
    emplace("c2.android.flac.decoder", "libcodec2_soft_flacdec.so");
    emplace("c2.android.flac.encoder", "libstagefright_soft_c2flacenc.so");
    emplace("c2.android.flac.encoder", "libcodec2_soft_flacenc.so");
    emplace("c2.android.gsm.decoder", "libstagefright_soft_c2gsmdec.so");
    emplace("c2.android.gsm.decoder", "libcodec2_soft_gsmdec.so");
    emplace("c2.android.xaac.decoder", "libstagefright_soft_c2xaacdec.so");
    emplace("c2.android.xaac.decoder", "libcodec2_soft_xaacdec.so");


    // "Aliases"
    // "Aliases"
    // TODO: use aliases proper from C2Component::Traits
    // TODO: use aliases proper from C2Component::Traits
    emplace("OMX.google.h264.decoder", "libstagefright_soft_c2avcdec.so");
    emplace("OMX.google.h264.decoder", "libcodec2_soft_avcdec.so");
    emplace("OMX.google.h264.encoder", "libstagefright_soft_c2avcenc.so");
    emplace("OMX.google.h264.encoder", "libcodec2_soft_avcenc.so");
    emplace("OMX.google.aac.decoder", "libstagefright_soft_c2aacdec.so");
    emplace("OMX.google.aac.decoder", "libcodec2_soft_aacdec.so");
    emplace("OMX.google.aac.encoder", "libstagefright_soft_c2aacenc.so");
    emplace("OMX.google.aac.encoder", "libcodec2_soft_aacenc.so");
    emplace("OMX.google.amrnb.decoder", "libstagefright_soft_c2amrnbdec.so");
    emplace("OMX.google.amrnb.decoder", "libcodec2_soft_amrnbdec.so");
    emplace("OMX.google.amrnb.encoder", "libstagefright_soft_c2amrnbenc.so");
    emplace("OMX.google.amrnb.encoder", "libcodec2_soft_amrnbenc.so");
    emplace("OMX.google.amrwb.decoder", "libstagefright_soft_c2amrwbdec.so");
    emplace("OMX.google.amrwb.decoder", "libcodec2_soft_amrwbdec.so");
    emplace("OMX.google.amrwb.encoder", "libstagefright_soft_c2amrwbenc.so");
    emplace("OMX.google.amrwb.encoder", "libcodec2_soft_amrwbenc.so");
    emplace("OMX.google.hevc.decoder", "libstagefright_soft_c2hevcdec.so");
    emplace("OMX.google.hevc.decoder", "libcodec2_soft_hevcdec.so");
    emplace("OMX.google.g711.alaw.decoder", "libstagefright_soft_c2g711alawdec.so");
    emplace("OMX.google.g711.alaw.decoder", "libcodec2_soft_g711alawdec.so");
    emplace("OMX.google.g711.mlaw.decoder", "libstagefright_soft_c2g711mlawdec.so");
    emplace("OMX.google.g711.mlaw.decoder", "libcodec2_soft_g711mlawdec.so");
    emplace("OMX.google.mpeg2.decoder", "libstagefright_soft_c2mpeg2dec.so");
    emplace("OMX.google.mpeg2.decoder", "libcodec2_soft_mpeg2dec.so");
    emplace("OMX.google.h263.decoder", "libstagefright_soft_c2h263dec.so");
    emplace("OMX.google.h263.decoder", "libcodec2_soft_h263dec.so");
    emplace("OMX.google.h263.encoder", "libstagefright_soft_c2h263enc.so");
    emplace("OMX.google.h263.encoder", "libcodec2_soft_h263enc.so");
    emplace("OMX.google.mpeg4.decoder", "libstagefright_soft_c2mpeg4dec.so");
    emplace("OMX.google.mpeg4.decoder", "libcodec2_soft_mpeg4dec.so");
    emplace("OMX.google.mpeg4.encoder", "libstagefright_soft_c2mpeg4enc.so");
    emplace("OMX.google.mpeg4.encoder", "libcodec2_soft_mpeg4enc.so");
    emplace("OMX.google.mp3.decoder", "libstagefright_soft_c2mp3dec.so");
    emplace("OMX.google.mp3.decoder", "libcodec2_soft_mp3dec.so");
    emplace("OMX.google.vorbis.decoder", "libstagefright_soft_c2vorbisdec.so");
    emplace("OMX.google.vorbis.decoder", "libcodec2_soft_vorbisdec.so");
    emplace("OMX.google.opus.decoder", "libstagefright_soft_c2opusdec.so");
    emplace("OMX.google.opus.decoder", "libcodec2_soft_opusdec.so");
    emplace("OMX.google.vp8.decoder", "libstagefright_soft_c2vp8dec.so");
    emplace("OMX.google.vp8.decoder", "libcodec2_soft_vp8dec.so");
    emplace("OMX.google.vp9.decoder", "libstagefright_soft_c2vp9dec.so");
    emplace("OMX.google.vp9.decoder", "libcodec2_soft_vp9dec.so");
    emplace("OMX.google.vp8.encoder", "libstagefright_soft_c2vp8enc.so");
    emplace("OMX.google.vp8.encoder", "libcodec2_soft_vp8enc.so");
    emplace("OMX.google.vp9.encoder", "libstagefright_soft_c2vp9enc.so");
    emplace("OMX.google.vp9.encoder", "libcodec2_soft_vp9enc.so");
    emplace("OMX.google.raw.decoder", "libstagefright_soft_c2rawdec.so");
    emplace("OMX.google.raw.decoder", "libcodec2_soft_rawdec.so");
    emplace("OMX.google.flac.decoder", "libstagefright_soft_c2flacdec.so");
    emplace("OMX.google.flac.decoder", "libcodec2_soft_flacdec.so");
    emplace("OMX.google.flac.encoder", "libstagefright_soft_c2flacenc.so");
    emplace("OMX.google.flac.encoder", "libcodec2_soft_flacenc.so");
    emplace("OMX.google.gsm.decoder", "libstagefright_soft_c2gsmdec.so");
    emplace("OMX.google.gsm.decoder", "libcodec2_soft_gsmdec.so");
    emplace("OMX.google.xaac.decoder", "libstagefright_soft_c2xaacdec.so");
    emplace("OMX.google.xaac.decoder", "libcodec2_soft_xaacdec.so");
}
}


c2_status_t C2PlatformComponentStore::copyBuffer(
c2_status_t C2PlatformComponentStore::copyBuffer(
+1 −6
Original line number Original line Diff line number Diff line
@@ -146,6 +146,7 @@ cc_library_shared {


    shared_libs: [
    shared_libs: [
        "libaudioutils",
        "libaudioutils",
        "libbase",
        "libbinder",
        "libbinder",
        "libcamera_client",
        "libcamera_client",
        "libcutils",
        "libcutils",
@@ -206,12 +207,6 @@ cc_library_shared {
        "include",
        "include",
    ],
    ],


    // This is needed to make sure libcodec2 exists in all devices.
    // TODO: Remove this once the public CCodec is enabled.
    required: [
        "libcodec2",
    ],

    cflags: [
    cflags: [
        "-Wno-multichar",
        "-Wno-multichar",
        "-Werror",
        "-Werror",
Loading