main_codecservice.cpp revision 568e453d72f4026c1a0e902d533f9352a7ca190c
1/* 2** 3** Copyright 2016, The Android Open Source Project 4** 5** Licensed under the Apache License, Version 2.0 (the "License"); 6** you may not use this file except in compliance with the License. 7** You may obtain a copy of the License at 8** 9** http://www.apache.org/licenses/LICENSE-2.0 10** 11** Unless required by applicable law or agreed to in writing, software 12** distributed under the License is distributed on an "AS IS" BASIS, 13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14** See the License for the specific language governing permissions and 15** limitations under the License. 16*/ 17 18#include <fcntl.h> 19#include <sys/prctl.h> 20#include <sys/wait.h> 21#include <binder/IPCThreadState.h> 22#include <binder/ProcessState.h> 23#include <binder/IServiceManager.h> 24#include <cutils/properties.h> 25 26#include <string> 27 28#include <android-base/logging.h> 29 30// from LOCAL_C_INCLUDES 31#include "MediaCodecService.h" 32#include "minijail.h" 33 34#include <android/hardware/media/omx/1.0/IOmx.h> 35#include <hidl/HidlTransportSupport.h> 36#include <omx/hal/1.0/impl/Omx.h> 37 38using namespace android; 39 40// Must match location in Android.mk. 41static const char kSeccompPolicyPath[] = "/system/etc/seccomp_policy/mediacodec-seccomp.policy"; 42 43int main(int argc __unused, char** argv) 44{ 45 LOG(INFO) << "mediacodecservice starting"; 46 signal(SIGPIPE, SIG_IGN); 47 SetUpMinijail(kSeccompPolicyPath, std::string()); 48 49 strcpy(argv[0], "media.codec"); 50 51 ::android::hardware::configureRpcThreadpool(64, false); 52 sp<ProcessState> proc(ProcessState::self()); 53 54 int32_t trebleOmx = property_get_int32("persist.media.treble_omx", -1); 55 if ((trebleOmx == 1) || ((trebleOmx == -1) && 56 property_get_bool("persist.hal.binderization", 0))) { 57 using namespace ::android::hardware::media::omx::V1_0; 58 sp<IOmx> omx = new implementation::Omx(); 59 if (omx == nullptr) { 60 LOG(ERROR) << "Cannot create a Treble IOmx service."; 61 } else if (omx->registerAsService() != OK) { 62 LOG(ERROR) << "Cannot register a Treble IOmx service."; 63 } else { 64 LOG(INFO) << "Treble IOmx service created."; 65 } 66 } else { 67 MediaCodecService::instantiate(); 68 LOG(INFO) << "Non-Treble IOMX service created."; 69 } 70 71 ProcessState::self()->startThreadPool(); 72 IPCThreadState::self()->joinThreadPool(); 73} 74