Merge "amrnb: Fix memory leaks"
diff --git a/media/libmedia/Android.bp b/media/libmedia/Android.bp
index 7deab05..7c0dab4 100644
--- a/media/libmedia/Android.bp
+++ b/media/libmedia/Android.bp
@@ -1,3 +1,10 @@
+cc_defaults {
+ name: "libmedia_defaults",
+ include_dirs: [
+ "bionic/libc/private",
+ ],
+}
+
cc_library_headers {
name: "libmedia_headers",
vendor_available: true,
@@ -148,6 +155,8 @@
cc_library {
name: "libmedia",
+ defaults: [ "libmedia_defaults" ],
+
srcs: [
":mediaupdateservice_aidl",
"IDataSource.cpp",
@@ -256,6 +265,8 @@
cc_library {
name: "libmedia_player2_util",
+ defaults: [ "libmedia_defaults" ],
+
srcs: [
"BufferingSettings.cpp",
"DataSourceDesc.cpp",
diff --git a/media/libmedia/MediaUtils.cpp b/media/libmedia/MediaUtils.cpp
index bcc7ebf..31972fa 100644
--- a/media/libmedia/MediaUtils.cpp
+++ b/media/libmedia/MediaUtils.cpp
@@ -22,23 +22,16 @@
#include <sys/resource.h>
#include <unistd.h>
+#include <bionic_malloc.h>
+
#include "MediaUtils.h"
-extern "C" size_t __cfi_shadow_size();
extern "C" void __scudo_set_rss_limit(size_t, int) __attribute__((weak));
namespace android {
-void limitProcessMemory(
- const char *property,
- size_t numberOfBytes,
- size_t percentageOfTotalMem) {
-
- if (running_with_asan()) {
- ALOGW("Running with (HW)ASan, skip enforcing memory limitations.");
- return;
- }
-
+void limitProcessMemory(const char *property, size_t numberOfBytes,
+ size_t percentageOfTotalMem) {
long pageSize = sysconf(_SC_PAGESIZE);
long numPages = sysconf(_SC_PHYS_PAGES);
size_t maxMem = SIZE_MAX;
@@ -66,38 +59,17 @@
maxMem = propVal;
}
- // If 64-bit Scudo is in use, enforce the hard RSS limit (in MB).
- if (maxMem != SIZE_MAX && sizeof(void *) == 8 &&
- &__scudo_set_rss_limit != 0) {
+ // If Scudo is in use, enforce the hard RSS limit (in MB).
+ if (maxMem != SIZE_MAX && &__scudo_set_rss_limit != 0) {
__scudo_set_rss_limit(maxMem >> 20, 1);
ALOGV("Scudo hard RSS limit set to %zu MB", maxMem >> 20);
return;
}
- // Increase by the size of the CFI shadow mapping. Most of the shadow is not
- // backed with physical pages, and it is possible for the result to be
- // higher than total physical memory. This is fine for RLIMIT_AS.
- size_t cfi_size = __cfi_shadow_size();
- if (cfi_size) {
- ALOGV("cfi shadow size: %zu", cfi_size);
- if (maxMem <= SIZE_MAX - cfi_size) {
- maxMem += cfi_size;
- } else {
- maxMem = SIZE_MAX;
- }
+ if (!android_mallopt(M_SET_ALLOCATION_LIMIT_BYTES, &maxMem,
+ sizeof(maxMem))) {
+ ALOGW("couldn't set allocation limit");
}
- ALOGV("actual limit: %zu", maxMem);
-
- struct rlimit limit;
- getrlimit(RLIMIT_AS, &limit);
- ALOGV("original limits: %lld/%lld", (long long)limit.rlim_cur, (long long)limit.rlim_max);
- limit.rlim_cur = maxMem;
- setrlimit(RLIMIT_AS, &limit);
- limit.rlim_cur = -1;
- limit.rlim_max = -1;
- getrlimit(RLIMIT_AS, &limit);
- ALOGV("new limits: %lld/%lld", (long long)limit.rlim_cur, (long long)limit.rlim_max);
-
}
} // namespace android
diff --git a/media/libmedia/MediaUtils.h b/media/libmedia/MediaUtils.h
index 26075c4..f80dd30 100644
--- a/media/libmedia/MediaUtils.h
+++ b/media/libmedia/MediaUtils.h
@@ -19,13 +19,6 @@
namespace android {
-extern "C" void __asan_init(void) __attribute__((weak));
-extern "C" void __hwasan_init(void) __attribute__((weak));
-
-static inline int running_with_asan() {
- return &__asan_init != 0 || &__hwasan_init != 0;
-}
-
/**
Limit the amount of memory a process can allocate using setrlimit(RLIMIT_AS).
The value to use will be read from the specified system property, or if the
diff --git a/media/libmedia/xsd/api/current.txt b/media/libmedia/xsd/api/current.txt
index 0924dd9..05e8a49 100644
--- a/media/libmedia/xsd/api/current.txt
+++ b/media/libmedia/xsd/api/current.txt
@@ -45,10 +45,17 @@
ctor public CamcorderProfiles();
method public int getCameraId();
method public java.util.List<media.profiles.EncoderProfile> getEncoderProfile();
+ method public java.util.List<media.profiles.CamcorderProfiles.ImageDecoding> getImageDecoding();
method public java.util.List<media.profiles.CamcorderProfiles.ImageEncoding> getImageEncoding();
method public void setCameraId(int);
}
+ public static class CamcorderProfiles.ImageDecoding {
+ ctor public CamcorderProfiles.ImageDecoding();
+ method public int getMemCap();
+ method public void setMemCap(int);
+ }
+
public static class CamcorderProfiles.ImageEncoding {
ctor public CamcorderProfiles.ImageEncoding();
method public int getQuality();
diff --git a/media/libmedia/xsd/media_profiles.xsd b/media/libmedia/xsd/media_profiles.xsd
index a9687b0..a02252a 100644
--- a/media/libmedia/xsd/media_profiles.xsd
+++ b/media/libmedia/xsd/media_profiles.xsd
@@ -42,6 +42,11 @@
<xs:attribute name="quality" type="xs:int"/>
</xs:complexType>
</xs:element>
+ <xs:element name="ImageDecoding" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:attribute name="memCap" type="xs:int"/>
+ </xs:complexType>
+ </xs:element>
</xs:sequence>
<xs:attribute name="cameraId" type="xs:int"/>
</xs:complexType>
diff --git a/media/libstagefright/xmlparser/api/current.txt b/media/libstagefright/xmlparser/api/current.txt
index f5245c1..5443f2c 100644
--- a/media/libstagefright/xmlparser/api/current.txt
+++ b/media/libstagefright/xmlparser/api/current.txt
@@ -1,6 +1,12 @@
// Signature format: 2.0
package media.codecs {
+ public class Alias {
+ ctor public Alias();
+ method public String getName();
+ method public void setName(String);
+ }
+
public class Decoders {
ctor public Decoders();
method public java.util.List<media.codecs.MediaCodec> getMediaCodec();
@@ -23,6 +29,23 @@
method public void setValue(String);
}
+ public class Include {
+ ctor public Include();
+ method public String getHref();
+ method public void setHref(String);
+ }
+
+ public class Included {
+ ctor public Included();
+ method public media.codecs.Decoders getDecoders_optional();
+ method public media.codecs.Encoders getEncoders_optional();
+ method public java.util.List<media.codecs.Include> getInclude_optional();
+ method public media.codecs.Settings getSettings_optional();
+ method public void setDecoders_optional(media.codecs.Decoders);
+ method public void setEncoders_optional(media.codecs.Encoders);
+ method public void setSettings_optional(media.codecs.Settings);
+ }
+
public class Limit {
ctor public Limit();
method public String getIn();
@@ -47,12 +70,13 @@
public class MediaCodec {
ctor public MediaCodec();
- method public java.util.List<media.codecs.Feature> getFeature();
- method public java.util.List<media.codecs.Limit> getLimit();
+ method public java.util.List<media.codecs.Alias> getAlias_optional();
+ method public java.util.List<media.codecs.Feature> getFeature_optional();
+ method public java.util.List<media.codecs.Limit> getLimit_optional();
method public String getName();
- method public java.util.List<media.codecs.Quirk> getQuirk();
- method public java.util.List<media.codecs.Type> getType();
+ method public java.util.List<media.codecs.Quirk> getQuirk_optional();
method public String getType();
+ method public java.util.List<media.codecs.Type> getType_optional();
method public String getUpdate();
method public void setName(String);
method public void setType(String);
@@ -61,9 +85,13 @@
public class MediaCodecs {
ctor public MediaCodecs();
- method public java.util.List<media.codecs.Decoders> getDecoders();
- method public java.util.List<media.codecs.Encoders> getEncoders();
- method public java.util.List<media.codecs.Settings> getSettings();
+ method public media.codecs.Decoders getDecoders_optional();
+ method public media.codecs.Encoders getEncoders_optional();
+ method public java.util.List<media.codecs.Include> getInclude_optional();
+ method public media.codecs.Settings getSettings_optional();
+ method public void setDecoders_optional(media.codecs.Decoders);
+ method public void setEncoders_optional(media.codecs.Encoders);
+ method public void setSettings_optional(media.codecs.Settings);
}
public class Quirk {
@@ -89,6 +117,7 @@
public class Type {
ctor public Type();
+ method public java.util.List<media.codecs.Alias> getAlias();
method public java.util.List<media.codecs.Feature> getFeature();
method public java.util.List<media.codecs.Limit> getLimit();
method public String getName();
@@ -99,7 +128,8 @@
public class XmlParser {
ctor public XmlParser();
- method public static media.codecs.MediaCodecs read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static media.codecs.Included readIncluded(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public static media.codecs.MediaCodecs readMediaCodecs(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
}
diff --git a/media/libstagefright/xmlparser/media_codecs.xsd b/media/libstagefright/xmlparser/media_codecs.xsd
index 4faba87..77193a2 100644
--- a/media/libstagefright/xmlparser/media_codecs.xsd
+++ b/media/libstagefright/xmlparser/media_codecs.xsd
@@ -20,11 +20,22 @@
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MediaCodecs">
<xs:complexType>
- <xs:sequence>
- <xs:element name="Decoders" type="Decoders" maxOccurs="unbounded"/>
- <xs:element name="Encoders" type="Encoders" maxOccurs="unbounded"/>
- <xs:element name="Settings" type="Settings" maxOccurs="unbounded"/>
- </xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="Include" type="Include" maxOccurs="unbounded"/>
+ <xs:element name="Settings" type="Settings"/>
+ <xs:element name="Decoders" type="Decoders"/>
+ <xs:element name="Encoders" type="Encoders"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="Included">
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="Include" type="Include" maxOccurs="unbounded"/>
+ <xs:element name="Settings" type="Settings"/>
+ <xs:element name="Decoders" type="Decoders"/>
+ <xs:element name="Encoders" type="Encoders"/>
+ </xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="Decoders">
@@ -43,12 +54,13 @@
</xs:sequence>
</xs:complexType>
<xs:complexType name="MediaCodec">
- <xs:sequence>
- <xs:element name="Quirk" type="Quirk" maxOccurs="unbounded"/>
- <xs:element name="Type" type="Type" maxOccurs="unbounded"/>
- <xs:element name="Limit" type="Limit" maxOccurs="unbounded"/>
- <xs:element name="Feature" type="Feature" maxOccurs="unbounded"/>
- </xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="Quirk" type="Quirk" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Type" type="Type" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Alias" type="Alias" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Limit" type="Limit" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Feature" type="Feature" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:choice>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="update" type="xs:string"/>
@@ -58,12 +70,16 @@
</xs:complexType>
<xs:complexType name="Type">
<xs:sequence>
- <xs:element name="Limit" type="Limit" maxOccurs="unbounded"/>
- <xs:element name="Feature" type="Feature" maxOccurs="unbounded"/>
+ <xs:element name="Alias" type="Alias" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Limit" type="Limit" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Feature" type="Feature" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="update" type="xs:string"/>
</xs:complexType>
+ <xs:complexType name="Alias">
+ <xs:attribute name="name" type="xs:string"/>
+ </xs:complexType>
<xs:complexType name="Limit">
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="default" type="xs:string"/>
@@ -86,4 +102,7 @@
<xs:attribute name="value" type="xs:string"/>
<xs:attribute name="update" type="xs:string"/>
</xs:complexType>
+ <xs:complexType name="Include">
+ <xs:attribute name="href" type="xs:string"/>
+ </xs:complexType>
</xs:schema>
diff --git a/media/mediaserver/Android.bp b/media/mediaserver/Android.bp
index 16c7be9..186f9ea 100644
--- a/media/mediaserver/Android.bp
+++ b/media/mediaserver/Android.bp
@@ -25,7 +25,6 @@
],
static_libs: [
- "libicuandroid_utils",
"libregistermsext",
],
diff --git a/media/mediaserver/main_mediaserver.cpp b/media/mediaserver/main_mediaserver.cpp
index ecddc48..7b22b05 100644
--- a/media/mediaserver/main_mediaserver.cpp
+++ b/media/mediaserver/main_mediaserver.cpp
@@ -18,6 +18,7 @@
#define LOG_TAG "mediaserver"
//#define LOG_NDEBUG 0
+#include <aicu/AIcu.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
@@ -25,7 +26,6 @@
#include "RegisterExtensions.h"
// from LOCAL_C_INCLUDES
-#include "IcuUtils.h"
#include "MediaPlayerService.h"
#include "ResourceManagerService.h"
@@ -38,7 +38,7 @@
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm(defaultServiceManager());
ALOGI("ServiceManager: %p", sm.get());
- InitializeIcuOrDie();
+ AIcu_initializeIcuOrDie();
MediaPlayerService::instantiate();
ResourceManagerService::instantiate();
registerExtensions();
diff --git a/services/camera/libcameraservice/device3/Camera3Stream.cpp b/services/camera/libcameraservice/device3/Camera3Stream.cpp
index 7ebc299..a1b0757 100644
--- a/services/camera/libcameraservice/device3/Camera3Stream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Stream.cpp
@@ -320,7 +320,7 @@
// so. As documented in hardware/camera3.h:configure_streams().
if (mState == STATE_IN_RECONFIG &&
mOldUsage == mUsage &&
- mOldMaxBuffers == camera3_stream::max_buffers) {
+ mOldMaxBuffers == camera3_stream::max_buffers && !mDataSpaceOverridden) {
mState = STATE_CONFIGURED;
return OK;
}
diff --git a/services/mediaextractor/Android.mk b/services/mediaextractor/Android.mk
index 5342898..4fa05c3 100644
--- a/services/mediaextractor/Android.mk
+++ b/services/mediaextractor/Android.mk
@@ -35,7 +35,6 @@
LOCAL_SRC_FILES := main_extractorservice.cpp
LOCAL_SHARED_LIBRARIES := libmedia libmediaextractorservice libbinder libutils \
liblog libbase libandroidicu libavservices_minijail
-LOCAL_STATIC_LIBRARIES := libicuandroid_utils
LOCAL_MODULE:= mediaextractor
LOCAL_INIT_RC := mediaextractor.rc
LOCAL_C_INCLUDES := frameworks/av/media/libmedia
diff --git a/services/mediaextractor/main_extractorservice.cpp b/services/mediaextractor/main_extractorservice.cpp
index 8d3359a..8655138 100644
--- a/services/mediaextractor/main_extractorservice.cpp
+++ b/services/mediaextractor/main_extractorservice.cpp
@@ -15,6 +15,7 @@
** limitations under the License.
*/
+#include <aicu/AIcu.h>
#include <fcntl.h>
#include <sys/prctl.h>
#include <sys/wait.h>
@@ -29,7 +30,6 @@
#include <utils/misc.h>
// from LOCAL_C_INCLUDES
-#include "IcuUtils.h"
#include "MediaExtractorService.h"
#include "MediaExtractorUpdateService.h"
#include "MediaUtils.h"
@@ -59,7 +59,7 @@
SetUpMinijail(kSystemSeccompPolicyPath, kVendorSeccompPolicyPath);
- InitializeIcuOrDie();
+ AIcu_initializeIcuOrDie();
strcpy(argv[0], "media.extractor");
sp<ProcessState> proc(ProcessState::self());
diff --git a/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy b/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy
index 87018ed..964acf4 100644
--- a/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy
+++ b/services/mediaextractor/seccomp_policy/mediaextractor-arm.policy
@@ -14,6 +14,7 @@
setpriority: 1
sigaltstack: 1
openat: 1
+open: 1
clone: 1
read: 1
clock_gettime: 1
diff --git a/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy b/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy
index d739ba1..56ad8df 100644
--- a/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy
+++ b/services/mediaextractor/seccomp_policy/mediaextractor-x86.policy
@@ -11,6 +11,7 @@
mmap2: 1
madvise: 1
openat: 1
+open: 1
clock_gettime: 1
writev: 1
brk: 1