diff options
-rw-r--r-- | cmds/installd/commands.cpp | 9 | ||||
-rw-r--r-- | include/binder/Status.h | 7 | ||||
-rw-r--r-- | include/media/openmax/OMX_AsString.h | 1 | ||||
-rw-r--r-- | include/media/openmax/OMX_IndexExt.h | 1 | ||||
-rw-r--r-- | include/media/openmax/OMX_VideoExt.h | 16 | ||||
-rw-r--r-- | libs/binder/Parcel.cpp | 32 |
6 files changed, 63 insertions, 3 deletions
diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp index 24efcaacf3..df80eb6506 100644 --- a/cmds/installd/commands.cpp +++ b/cmds/installd/commands.cpp @@ -1194,7 +1194,14 @@ int dexopt(const char* apk_path, uid_t uid, const char* pkgname, const char* ins || dexopt_needed == DEXOPT_SELF_PATCHOAT_NEEDED) { run_patchoat(input_fd, out_fd, input_file, out_path, pkgname, instruction_set); } else if (dexopt_needed == DEXOPT_DEX2OAT_NEEDED) { - run_dex2oat(input_fd, out_fd, image_fd, input_file, out_path, swap_fd, + // Pass dex2oat the relative path to the input file. + const char *input_file_name = strrchr(input_file, '/'); + if (input_file_name == NULL) { + input_file_name = input_file; + } else { + input_file_name++; + } + run_dex2oat(input_fd, out_fd, image_fd, input_file_name, out_path, swap_fd, instruction_set, vm_safe_mode, debuggable, boot_complete, extract_only, profile_files_fd, reference_profile_files_fd); } else { diff --git a/include/binder/Status.h b/include/binder/Status.h index 203a01e39c..ce947fa3de 100644 --- a/include/binder/Status.h +++ b/include/binder/Status.h @@ -141,6 +141,13 @@ private: String8 mMessage; }; // class Status +// For gtest output logging +template<typename T> +T& operator<< (T& stream, const Status& s) { + stream << s.toString8().string(); + return stream; +} + } // namespace binder } // namespace android diff --git a/include/media/openmax/OMX_AsString.h b/include/media/openmax/OMX_AsString.h index c3145c9eb3..a741f6da45 100644 --- a/include/media/openmax/OMX_AsString.h +++ b/include/media/openmax/OMX_AsString.h @@ -521,6 +521,7 @@ inline static const char *asString(OMX_INDEXEXTTYPE i, const char *def = "??") { case OMX_IndexParamVideoAndroidVp8Encoder: return "ParamVideoAndroidVp8Encoder"; case OMX_IndexParamVideoHevc: return "ParamVideoHevc"; // case OMX_IndexParamSliceSegments: return "ParamSliceSegments"; + case OMX_IndexConfigAndroidIntraRefresh: return "ConfigAndroidIntraRefresh"; case OMX_IndexConfigAutoFramerateConversion: return "ConfigAutoFramerateConversion"; case OMX_IndexConfigPriority: return "ConfigPriority"; case OMX_IndexConfigOperatingRate: return "ConfigOperatingRate"; diff --git a/include/media/openmax/OMX_IndexExt.h b/include/media/openmax/OMX_IndexExt.h index 8bfc49d9fa..1724576ad5 100644 --- a/include/media/openmax/OMX_IndexExt.h +++ b/include/media/openmax/OMX_IndexExt.h @@ -77,6 +77,7 @@ typedef enum OMX_INDEXEXTTYPE { OMX_IndexParamVideoAndroidVp8Encoder, /**< reference: OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE */ OMX_IndexParamVideoHevc, /**< reference: OMX_VIDEO_PARAM_HEVCTYPE */ OMX_IndexParamSliceSegments, /**< reference: OMX_VIDEO_SLICESEGMENTSTYPE */ + OMX_IndexConfigAndroidIntraRefresh, /**< reference: OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE */ /* Image & Video common configurations */ OMX_IndexExtCommonStartUnused = OMX_IndexKhronosExtensions + 0x00700000, diff --git a/include/media/openmax/OMX_VideoExt.h b/include/media/openmax/OMX_VideoExt.h index 4ae4c88140..fe5c54d97c 100644 --- a/include/media/openmax/OMX_VideoExt.h +++ b/include/media/openmax/OMX_VideoExt.h @@ -274,6 +274,22 @@ typedef enum OMX_VIDEO_DOLBYVISIONLEVELTYPE { OMX_VIDEO_DolbyVisionLevelmax = 0x7FFFFFFF } OMX_VIDEO_DOLBYVISIONLEVELTYPE; +/** + * Structure for configuring video compression intra refresh period + * + * STRUCT MEMBERS: + * nSize : Size of the structure in bytes + * nVersion : OMX specification version information + * nPortIndex : Port that this structure applies to + * nRefreshPeriod : Intra refreh period in frames. Value 0 means disable intra refresh +*/ +typedef struct OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE { + OMX_U32 nSize; + OMX_VERSIONTYPE nVersion; + OMX_U32 nPortIndex; + OMX_S32 nRefreshPeriod; +} OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE; + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index d3fe1589ae..1008f02d8c 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -18,7 +18,9 @@ //#define LOG_NDEBUG 0 #include <errno.h> +#include <fcntl.h> #include <inttypes.h> +#include <pthread.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> @@ -95,6 +97,32 @@ enum { BLOB_ASHMEM_MUTABLE = 2, }; +static dev_t ashmem_rdev() +{ + static dev_t __ashmem_rdev; + static pthread_mutex_t __ashmem_rdev_lock = PTHREAD_MUTEX_INITIALIZER; + + pthread_mutex_lock(&__ashmem_rdev_lock); + + dev_t rdev = __ashmem_rdev; + if (!rdev) { + int fd = TEMP_FAILURE_RETRY(open("/dev/ashmem", O_RDONLY)); + if (fd >= 0) { + struct stat st; + + int ret = TEMP_FAILURE_RETRY(fstat(fd, &st)); + close(fd); + if ((ret >= 0) && S_ISCHR(st.st_mode)) { + rdev = __ashmem_rdev = st.st_rdev; + } + } + } + + pthread_mutex_unlock(&__ashmem_rdev_lock); + + return rdev; +} + void acquire_object(const sp<ProcessState>& proc, const flat_binder_object& obj, const void* who, size_t* outAshmemSize) { @@ -126,7 +154,7 @@ void acquire_object(const sp<ProcessState>& proc, if ((obj.cookie != 0) && (outAshmemSize != NULL)) { struct stat st; int ret = fstat(obj.handle, &st); - if (!ret && S_ISCHR(st.st_mode)) { + if (!ret && S_ISCHR(st.st_mode) && (st.st_rdev == ashmem_rdev())) { // If we own an ashmem fd, keep track of how much memory it refers to. int size = ashmem_get_size_region(obj.handle); if (size > 0) { @@ -179,7 +207,7 @@ static void release_object(const sp<ProcessState>& proc, if (outAshmemSize != NULL) { struct stat st; int ret = fstat(obj.handle, &st); - if (!ret && S_ISCHR(st.st_mode)) { + if (!ret && S_ISCHR(st.st_mode) && (st.st_rdev == ashmem_rdev())) { int size = ashmem_get_size_region(obj.handle); if (size > 0) { *outAshmemSize -= size; |