Home | History | Annotate | Download | only in mediacodec
      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 <hidl/HidlTransportSupport.h>
     35 #include <media/stagefright/omx/1.0/Omx.h>
     36 #include <media/stagefright/omx/1.0/OmxStore.h>
     37 
     38 using namespace android;
     39 
     40 // Must match location in Android.mk.
     41 static const char kSystemSeccompPolicyPath[] =
     42         "/system/etc/seccomp_policy/mediacodec.policy";
     43 static const char kVendorSeccompPolicyPath[] =
     44         "/vendor/etc/seccomp_policy/mediacodec.policy";
     45 
     46 int main(int argc __unused, char** argv)
     47 {
     48     LOG(INFO) << "mediacodecservice starting";
     49     bool treble = property_get_bool("persist.media.treble_omx", true);
     50     if (treble) {
     51       android::ProcessState::initWithDriver("/dev/vndbinder");
     52     }
     53 
     54     signal(SIGPIPE, SIG_IGN);
     55     SetUpMinijail(kSystemSeccompPolicyPath, kVendorSeccompPolicyPath);
     56 
     57     strcpy(argv[0], "media.codec");
     58 
     59     ::android::hardware::configureRpcThreadpool(64, false);
     60     sp<ProcessState> proc(ProcessState::self());
     61 
     62     if (treble) {
     63         using namespace ::android::hardware::media::omx::V1_0;
     64         sp<IOmxStore> omxStore = new implementation::OmxStore();
     65         if (omxStore == nullptr) {
     66             LOG(ERROR) << "Cannot create IOmxStore HAL service.";
     67         } else if (omxStore->registerAsService() != OK) {
     68             LOG(ERROR) << "Cannot register IOmxStore HAL service.";
     69         }
     70         sp<IOmx> omx = new implementation::Omx();
     71         if (omx == nullptr) {
     72             LOG(ERROR) << "Cannot create IOmx HAL service.";
     73         } else if (omx->registerAsService() != OK) {
     74             LOG(ERROR) << "Cannot register IOmx HAL service.";
     75         } else {
     76             LOG(INFO) << "Treble OMX service created.";
     77         }
     78     } else {
     79         MediaCodecService::instantiate();
     80         LOG(INFO) << "Non-Treble OMX service created.";
     81     }
     82 
     83     ProcessState::self()->startThreadPool();
     84     IPCThreadState::self()->joinThreadPool();
     85 }
     86