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

Commit ca5642cd authored by Peter Kalauskas's avatar Peter Kalauskas
Browse files

List drm HALs from manifest

To support lazy drm HALs, libmediadrm needs to list all available HALs
that are defined in the manifest. Otherwise, it will only list HALs that
are currently running. This change is necessary because lazy HALs do not
run until they are requested. Without this change, libmediadrm would not
be aware that the lazy HALs are present, and it would not know to call
getService() to start them.

Test: Run gts
Bug: 112386116
Change-Id: I9b41c60d574b9c8c857b8838a5bbdc64388c9ddb
parent 8292a716
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@
#include <binder/IServiceManager.h>
#include <binder/IServiceManager.h>


#include <android/hardware/drm/1.2/types.h>
#include <android/hardware/drm/1.2/types.h>
#include <android/hidl/manager/1.0/IServiceManager.h>
#include <android/hidl/manager/1.2/IServiceManager.h>
#include <hidl/ServiceManagement.h>
#include <hidl/ServiceManagement.h>


#include <media/EventMetric.h>
#include <media/EventMetric.h>
@@ -333,10 +333,10 @@ void DrmHal::cleanup() {
Vector<sp<IDrmFactory>> DrmHal::makeDrmFactories() {
Vector<sp<IDrmFactory>> DrmHal::makeDrmFactories() {
    Vector<sp<IDrmFactory>> factories;
    Vector<sp<IDrmFactory>> factories;


    auto manager = hardware::defaultServiceManager();
    auto manager = hardware::defaultServiceManager1_2();


    if (manager != NULL) {
    if (manager != NULL) {
        manager->listByInterface(drm::V1_0::IDrmFactory::descriptor,
        manager->listManifestByInterface(drm::V1_0::IDrmFactory::descriptor,
                [&factories](const hidl_vec<hidl_string> &registered) {
                [&factories](const hidl_vec<hidl_string> &registered) {
                    for (const auto &instance : registered) {
                    for (const auto &instance : registered) {
                        auto factory = drm::V1_0::IDrmFactory::getService(instance);
                        auto factory = drm::V1_0::IDrmFactory::getService(instance);
@@ -346,7 +346,7 @@ Vector<sp<IDrmFactory>> DrmHal::makeDrmFactories() {
                    }
                    }
                }
                }
            );
            );
        manager->listByInterface(drm::V1_1::IDrmFactory::descriptor,
        manager->listManifestByInterface(drm::V1_1::IDrmFactory::descriptor,
                [&factories](const hidl_vec<hidl_string> &registered) {
                [&factories](const hidl_vec<hidl_string> &registered) {
                    for (const auto &instance : registered) {
                    for (const auto &instance : registered) {
                        auto factory = drm::V1_1::IDrmFactory::getService(instance);
                        auto factory = drm::V1_1::IDrmFactory::getService(instance);