xref: /aosp_15_r20/external/v4l2_codec2/service/service.cpp (revision 0ec5a0ec62797f775085659156625e7f1bdb369f)
1*0ec5a0ecSAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors. All rights reserved.
2*0ec5a0ecSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*0ec5a0ecSAndroid Build Coastguard Worker // found in the LICENSE file.
4*0ec5a0ecSAndroid Build Coastguard Worker 
5*0ec5a0ecSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
6*0ec5a0ecSAndroid Build Coastguard Worker #ifdef V4L2_CODEC2_SERVICE_V4L2_STORE
7*0ec5a0ecSAndroid Build Coastguard Worker #define LOG_TAG "[email protected]"
8*0ec5a0ecSAndroid Build Coastguard Worker #else
9*0ec5a0ecSAndroid Build Coastguard Worker #error "V4L2_CODEC2_SERVICE_V4L2_STORE has to be defined"
10*0ec5a0ecSAndroid Build Coastguard Worker #endif
11*0ec5a0ecSAndroid Build Coastguard Worker 
12*0ec5a0ecSAndroid Build Coastguard Worker #include <C2Component.h>
13*0ec5a0ecSAndroid Build Coastguard Worker #include <base/logging.h>
14*0ec5a0ecSAndroid Build Coastguard Worker #include <codec2/hidl/1.2/ComponentStore.h>
15*0ec5a0ecSAndroid Build Coastguard Worker #include <hidl/HidlTransportSupport.h>
16*0ec5a0ecSAndroid Build Coastguard Worker #include <log/log.h>
17*0ec5a0ecSAndroid Build Coastguard Worker #include <minijail.h>
18*0ec5a0ecSAndroid Build Coastguard Worker 
19*0ec5a0ecSAndroid Build Coastguard Worker #ifdef V4L2_CODEC2_SERVICE_V4L2_STORE
20*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/v4l2/V4L2ComponentStore.h>
21*0ec5a0ecSAndroid Build Coastguard Worker #endif
22*0ec5a0ecSAndroid Build Coastguard Worker 
23*0ec5a0ecSAndroid Build Coastguard Worker // This is the absolute on-device path of the prebuild_etc module
24*0ec5a0ecSAndroid Build Coastguard Worker // "android.hardware.media.c2-default-seccomp_policy" in Android.bp.
25*0ec5a0ecSAndroid Build Coastguard Worker static constexpr char kBaseSeccompPolicyPath[] =
26*0ec5a0ecSAndroid Build Coastguard Worker         "/vendor/etc/seccomp_policy/"
27*0ec5a0ecSAndroid Build Coastguard Worker         "android.hardware.media.c2-default-seccomp_policy";
28*0ec5a0ecSAndroid Build Coastguard Worker 
29*0ec5a0ecSAndroid Build Coastguard Worker // Additional seccomp permissions can be added in this file.
30*0ec5a0ecSAndroid Build Coastguard Worker // This file does not exist by default.
31*0ec5a0ecSAndroid Build Coastguard Worker static constexpr char kExtSeccompPolicyPath[] =
32*0ec5a0ecSAndroid Build Coastguard Worker         "/vendor/etc/seccomp_policy/"
33*0ec5a0ecSAndroid Build Coastguard Worker         "android.hardware.media.c2-extended-seccomp_policy";
34*0ec5a0ecSAndroid Build Coastguard Worker 
main(int,char **)35*0ec5a0ecSAndroid Build Coastguard Worker int main(int /* argc */, char** /* argv */) {
36*0ec5a0ecSAndroid Build Coastguard Worker     ALOGD("Service starting...");
37*0ec5a0ecSAndroid Build Coastguard Worker 
38*0ec5a0ecSAndroid Build Coastguard Worker     signal(SIGPIPE, SIG_IGN);
39*0ec5a0ecSAndroid Build Coastguard Worker     android::SetUpMinijail(kBaseSeccompPolicyPath, kExtSeccompPolicyPath);
40*0ec5a0ecSAndroid Build Coastguard Worker 
41*0ec5a0ecSAndroid Build Coastguard Worker     // Extra threads may be needed to handle a stacked IPC sequence that
42*0ec5a0ecSAndroid Build Coastguard Worker     // contains alternating binder and hwbinder calls. (See b/35283480.)
43*0ec5a0ecSAndroid Build Coastguard Worker     android::hardware::configureRpcThreadpool(16, true /* callerWillJoin */);
44*0ec5a0ecSAndroid Build Coastguard Worker 
45*0ec5a0ecSAndroid Build Coastguard Worker #if LOG_NDEBUG == 0
46*0ec5a0ecSAndroid Build Coastguard Worker     ALOGD("Enable all verbose logging of libchrome");
47*0ec5a0ecSAndroid Build Coastguard Worker     logging::SetMinLogLevel(-5);
48*0ec5a0ecSAndroid Build Coastguard Worker #endif
49*0ec5a0ecSAndroid Build Coastguard Worker 
50*0ec5a0ecSAndroid Build Coastguard Worker     // Create IComponentStore service.
51*0ec5a0ecSAndroid Build Coastguard Worker     {
52*0ec5a0ecSAndroid Build Coastguard Worker         using namespace ::android::hardware::media::c2::V1_2;
53*0ec5a0ecSAndroid Build Coastguard Worker         android::sp<IComponentStore> store = nullptr;
54*0ec5a0ecSAndroid Build Coastguard Worker 
55*0ec5a0ecSAndroid Build Coastguard Worker #ifdef V4L2_CODEC2_SERVICE_V4L2_STORE
56*0ec5a0ecSAndroid Build Coastguard Worker         ALOGD("Instantiating Codec2's V4L2 IComponentStore service...");
57*0ec5a0ecSAndroid Build Coastguard Worker         store = new utils::ComponentStore(android::V4L2ComponentStore::Create());
58*0ec5a0ecSAndroid Build Coastguard Worker #endif
59*0ec5a0ecSAndroid Build Coastguard Worker 
60*0ec5a0ecSAndroid Build Coastguard Worker         if (store == nullptr) {
61*0ec5a0ecSAndroid Build Coastguard Worker             ALOGE("Cannot create Codec2's IComponentStore service.");
62*0ec5a0ecSAndroid Build Coastguard Worker         } else if (store->registerAsService("default") != android::OK) {
63*0ec5a0ecSAndroid Build Coastguard Worker             ALOGE("Cannot register Codec2's IComponentStore service.");
64*0ec5a0ecSAndroid Build Coastguard Worker         } else {
65*0ec5a0ecSAndroid Build Coastguard Worker             ALOGI("Codec2's IComponentStore service created.");
66*0ec5a0ecSAndroid Build Coastguard Worker         }
67*0ec5a0ecSAndroid Build Coastguard Worker     }
68*0ec5a0ecSAndroid Build Coastguard Worker 
69*0ec5a0ecSAndroid Build Coastguard Worker     android::hardware::joinRpcThreadpool();
70*0ec5a0ecSAndroid Build Coastguard Worker     ALOGD("Service shutdown.");
71*0ec5a0ecSAndroid Build Coastguard Worker     return 0;
72*0ec5a0ecSAndroid Build Coastguard Worker }
73