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

Commit 8f91543f authored by Chong Zhang's avatar Chong Zhang
Browse files

add media.swcodec service process

bug: 111407413
Change-Id: I8999ba4ec3f1b739ac5e6fc537b89e31a9536f3c
parent b4e880ab
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -63,6 +63,36 @@ LOCAL_INIT_RC := android.hardware.media.omx@1.0-service.rc

include $(BUILD_EXECUTABLE)

####################################################################

# service executable
include $(CLEAR_VARS)
# seccomp is not required for coverage build.
ifneq ($(NATIVE_COVERAGE),true)
LOCAL_REQUIRED_MODULES_arm := crash_dump.policy mediacodec.policy
LOCAL_REQUIRED_MODULES_x86 := crash_dump.policy mediacodec.policy
endif
LOCAL_SRC_FILES := main_swcodecservice.cpp
LOCAL_SHARED_LIBRARIES := \
    libavservices_minijail \
    libbase \
    libbinder \
    libcutils \
    libhidltransport \
    libhwbinder \
    liblog \
    libmedia \
    libutils \
    libziparchive \

LOCAL_MODULE := mediaswcodec
LOCAL_INIT_RC := mediaswcodec.rc
LOCAL_32_BIT_ONLY := true

include $(BUILD_EXECUTABLE)

####################################################################

# service seccomp policy
ifeq ($(TARGET_ARCH), $(filter $(TARGET_ARCH), x86 x86_64 arm arm64))
include $(CLEAR_VARS)
+14 −30
Original line number Diff line number Diff line
@@ -48,21 +48,6 @@ int main(int argc __unused, char** argv)

    ::android::hardware::configureRpcThreadpool(64, false);

    // Registration of customized codec services
    void *registrantLib = dlopen(
            "libmedia_codecserviceregistrant.so",
            RTLD_NOW | RTLD_LOCAL);
    if (registrantLib) {
        RegisterCodecServicesFunc registerCodecServices =
                reinterpret_cast<RegisterCodecServicesFunc>(
                dlsym(registrantLib, "RegisterCodecServices"));
        if (registerCodecServices) {
            registerCodecServices();
        } else {
            LOG(WARNING) << "Cannot register additional services "
                    "-- corrupted library.";
        }
    } else {
    // Default codec services
    using namespace ::android::hardware::media::omx::V1_0;
    sp<IOmxStore> omxStore = new implementation::OmxStore();
@@ -79,7 +64,6 @@ int main(int argc __unused, char** argv)
    } else {
        LOG(INFO) << "IOmx HAL service created.";
    }
    }

    ::android::hardware::joinRpcThreadpool();
}
+66 −0
Original line number Diff line number Diff line
/*
**
** Copyright 2018, 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.
*/

#include <android-base/logging.h>

// from LOCAL_C_INCLUDES
#include "minijail.h"

#include <binder/ProcessState.h>
#include <hidl/HidlTransportSupport.h>
#include <media/CodecServiceRegistrant.h>
#include <dlfcn.h>

using namespace android;

// TODO: replace policy with software codec-only policies
// Must match location in Android.mk.
static const char kSystemSeccompPolicyPath[] =
        "/system/etc/seccomp_policy/mediacodec.policy";
static const char kVendorSeccompPolicyPath[] =
        "/vendor/etc/seccomp_policy/mediacodec.policy";

int main(int argc __unused, char** /*argv*/)
{
    LOG(INFO) << "media swcodec service starting";
    signal(SIGPIPE, SIG_IGN);
    SetUpMinijail(kSystemSeccompPolicyPath, kVendorSeccompPolicyPath);

    android::ProcessState::self()->startThreadPool();

    ::android::hardware::configureRpcThreadpool(64, false);

    // Registration of customized codec services
    void *registrantLib = dlopen(
            "libmedia_codecserviceregistrant.so",
            RTLD_NOW | RTLD_LOCAL);
    if (registrantLib) {
        RegisterCodecServicesFunc registerCodecServices =
                reinterpret_cast<RegisterCodecServicesFunc>(
                dlsym(registrantLib, "RegisterCodecServices"));
        if (registerCodecServices) {
            registerCodecServices();
        } else {
            LOG(WARNING) << "Cannot register codec services "
                    "-- corrupted library.";
        }
    } else {
        LOG(ERROR) << "Cannot find codec service registrant.";
    }

    ::android::hardware::joinRpcThreadpool();
}
+6 −0
Original line number Diff line number Diff line
service media.swcodec /system/bin/mediaswcodec
    class main
    user mediacodec
    group camera drmrpc mediadrm
    ioprio rt 4
    writepid /dev/cpuset/foreground/tasks