1b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen/*
2b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen**
3b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** Copyright 2008, The Android Open Source Project
4b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen**
5b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** Licensed under the Apache License, Version 2.0 (the "License");
6b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** you may not use this file except in compliance with the License.
7b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** You may obtain a copy of the License at
8b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen**
9b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen**     http://www.apache.org/licenses/LICENSE-2.0
10b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen**
11b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** Unless required by applicable law or agreed to in writing, software
12b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** distributed under the License is distributed on an "AS IS" BASIS,
13b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** See the License for the specific language governing permissions and
15b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen** limitations under the License.
16b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen*/
17b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
18b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#define LOG_TAG "mediaextractor"
19b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen//#define LOG_NDEBUG 0
20b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
21b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <fcntl.h>
22b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <sys/prctl.h>
23b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <sys/wait.h>
24b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <binder/IPCThreadState.h>
25b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <binder/ProcessState.h>
26b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <binder/IServiceManager.h>
27b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <utils/Log.h>
28b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
29b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen// from LOCAL_C_INCLUDES
30b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include "IcuUtils.h"
31b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include "MediaExtractorService.h"
32c57fe21ebdd6813c5a8954f3fda51b82d26acd07Marco Nelissen#include "MediaUtils.h"
33125c04575a480044e51de97889a2cb844bcab84cJeff Vander Stoep#include "minijail/minijail.h"
34b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
35b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenusing namespace android;
36b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
37b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenint main(int argc __unused, char** argv)
38b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen{
39c57fe21ebdd6813c5a8954f3fda51b82d26acd07Marco Nelissen    limitProcessMemory(
40c57fe21ebdd6813c5a8954f3fda51b82d26acd07Marco Nelissen        "ro.media.maxmem", /* property that defines limit */
41c57fe21ebdd6813c5a8954f3fda51b82d26acd07Marco Nelissen        SIZE_MAX, /* upper limit in bytes */
42ddb50a0d099910cddfe2b342d3abcc21e281e3d5Pawin Vongmasa        20 /* upper limit as percentage of physical RAM */);
43c57fe21ebdd6813c5a8954f3fda51b82d26acd07Marco Nelissen
44b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    signal(SIGPIPE, SIG_IGN);
4588e25bfbf22f781225ba6284889194dac498fa4dJeffrey Vander Stoep    MiniJail();
46b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
47b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    InitializeIcuOrDie();
48b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
49b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    strcpy(argv[0], "media.extractor");
50b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    sp<ProcessState> proc(ProcessState::self());
51b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    sp<IServiceManager> sm = defaultServiceManager();
52b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    MediaExtractorService::instantiate();
53b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    ProcessState::self()->startThreadPool();
54b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    IPCThreadState::self()->joinThreadPool();
55b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen}
56