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 Workerint 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