Home | History | Annotate | Download | only in mediaextractor
      1 /*
      2 **
      3 ** Copyright 2008, 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 
     25 #include <string>
     26 
     27 #include <android-base/logging.h>
     28 #include <utils/misc.h>
     29 
     30 // from LOCAL_C_INCLUDES
     31 #include "IcuUtils.h"
     32 #include "MediaExtractorService.h"
     33 #include "MediaUtils.h"
     34 #include "minijail.h"
     35 
     36 using namespace android;
     37 
     38 static const char kSystemSeccompPolicyPath[] =
     39         "/system/etc/seccomp_policy/mediaextractor.policy";
     40 static const char kVendorSeccompPolicyPath[] =
     41         "/vendor/etc/seccomp_policy/mediaextractor.policy";
     42 
     43 int main(int argc __unused, char** argv)
     44 {
     45     limitProcessMemory(
     46         "ro.media.maxmem", /* property that defines limit */
     47         SIZE_MAX, /* upper limit in bytes */
     48         20 /* upper limit as percentage of physical RAM */);
     49 
     50     signal(SIGPIPE, SIG_IGN);
     51 
     52     //b/62255959: this forces libutis.so to dlopen vendor version of libutils.so
     53     //before minijail is on. This is dirty but required since some syscalls such
     54     //as pread64 are used by linker but aren't allowed in the minijail. By
     55     //calling the function before entering minijail, we can force dlopen.
     56     android::report_sysprop_change();
     57 
     58     SetUpMinijail(kSystemSeccompPolicyPath, kVendorSeccompPolicyPath);
     59 
     60     InitializeIcuOrDie();
     61 
     62     strcpy(argv[0], "media.extractor");
     63     sp<ProcessState> proc(ProcessState::self());
     64     sp<IServiceManager> sm = defaultServiceManager();
     65     MediaExtractorService::instantiate();
     66     ProcessState::self()->startThreadPool();
     67     IPCThreadState::self()->joinThreadPool();
     68 }
     69