Merge changes from topic 'camera-hardening'
* changes:
media: Add a metadata type for native handle from camera
Restart cameraserver when servicemanager restarts
diff --git a/cmds/servicemanager/servicemanager.rc b/cmds/servicemanager/servicemanager.rc
index 0d07a70..1ba339d 100644
--- a/cmds/servicemanager/servicemanager.rc
+++ b/cmds/servicemanager/servicemanager.rc
@@ -10,3 +10,5 @@
onrestart restart surfaceflinger
onrestart restart inputflinger
onrestart restart drm
+ onrestart restart cameraserver
+
diff --git a/include/media/hardware/HardwareAPI.h b/include/media/hardware/HardwareAPI.h
index 7a73fbd..9ba5f7f 100644
--- a/include/media/hardware/HardwareAPI.h
+++ b/include/media/hardware/HardwareAPI.h
@@ -120,6 +120,17 @@
int nFenceFd; // -1 if unused
};
+// Meta data buffer layout for passing a native_handle to codec
+struct VideoNativeHandleMetadata {
+ MetadataBufferType eType; // must be kMetadataBufferTypeNativeHandleSource
+
+#ifdef OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+ OMX_PTR pHandle;
+#else
+ native_handle_t *pHandle;
+#endif
+};
+
// A pointer to this struct is passed to OMX_SetParameter() when the extension
// index "OMX.google.android.index.prepareForAdaptivePlayback" is given.
//
diff --git a/include/media/hardware/MetadataBufferType.h b/include/media/hardware/MetadataBufferType.h
index b765203..4f6d5e2 100644
--- a/include/media/hardware/MetadataBufferType.h
+++ b/include/media/hardware/MetadataBufferType.h
@@ -111,6 +111,28 @@
*/
kMetadataBufferTypeANWBuffer = 2,
+ /*
+ * kMetadataBufferTypeNativeHandleSource is used to indicate that
+ * the payload of the metadata buffers can be interpreted as
+ * a native_handle_t.
+ *
+ * In this case, the metadata that the encoder receives
+ * will have a byte stream that consists of two parts:
+ * 1. First, there is an integer indicating that the metadata contains a
+ * native handle (kMetadataBufferTypeNativeHandleSource).
+ * 2. This is followed by a pointer to native_handle_t. The encoder needs
+ * to interpret this native handle and encode the frame. The encoder must
+ * not free this native handle as it does not actually own this native
+ * handle. The handle will be freed after the encoder releases the buffer
+ * back to camera.
+ * ----------------------------------------------------------------
+ * | kMetadataBufferTypeNativeHandleSource | native_handle_t* nh |
+ * ----------------------------------------------------------------
+ *
+ * See the VideoNativeHandleMetadata structure.
+ */
+ kMetadataBufferTypeNativeHandleSource = 3,
+
/* This value is used by framework, but is never used inside a metadata buffer */
kMetadataBufferTypeInvalid = -1,