tv_input: add signal detection flag to stream config
Bug: 23820259
Change-Id: I693f159b35192e14182cb3bc9082b2445c129560
diff --git a/include/hardware/tv_input.h b/include/hardware/tv_input.h
index ed3fafb..3bb9862 100644
--- a/include/hardware/tv_input.h
+++ b/include/hardware/tv_input.h
@@ -33,14 +33,18 @@
*
* Version History:
*
- * TV_INPUT_MODULE_API_VERSION_0_1:
- * Initial TV input hardware module API.
+ * TV_INPUT_DEVICE_API_VERSION_0_1:
+ * Initial TV input hardware device API.
+ *
+ * TV_INPUT_DEVICE_API_VERSION_0_2:
+ * Minor revision --- add video detection flag in stream configs.
*
*/
#define TV_INPUT_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1)
#define TV_INPUT_DEVICE_API_VERSION_0_1 HARDWARE_DEVICE_API_VERSION(0, 1)
+#define TV_INPUT_DEVICE_API_VERSION_0_2 HARDWARE_DEVICE_API_VERSION(0, 2)
/*
* The id of this module
@@ -164,7 +168,8 @@
* port. the framework regards input devices with no available streams as
* disconnected, so the implementation can generate this event with no
* available streams to indicate that this device is disconnected, and vice
- * versa.
+ * versa. In addition, streams have signal detection flag to denote if
+ * signal is detected for sure.
*/
TV_INPUT_EVENT_STREAM_CONFIGURATIONS_CHANGED = 3,
/*
@@ -264,6 +269,33 @@
uint32_t max_video_height;
} tv_stream_config_t;
+enum {
+ /*
+ * Set if signal is detected on this stream. Note that even if this mask is
+ * unset it does not necessarily mean no signal --- it denotes that HAL is
+ * unsure of the signal status.
+ */
+ TV_STREAM_FLAG_MASK_SIGNAL_DETECTION = 0x1,
+};
+
+/*
+ * >= TV_INPUT_DEVICE_API_VERSION_0_2
+ *
+ * tv_stream_config_t extended in a way that allows extension without breaking
+ * binary compatibility
+ */
+typedef struct tv_stream_config_ext {
+ tv_stream_config_t config;
+
+ /*
+ * Flags to show the status of this stream. See TV_STREAM_FLAG_* for
+ * details.
+ */
+ uint32_t flags;
+
+ int32_t reserved[16 - 1];
+} tv_stream_config_ext_t;
+
typedef struct buffer_producer_stream {
/*
* IN/OUT: Width / height of the stream. Client may request for specific
@@ -397,7 +429,22 @@
int (*cancel_capture)(struct tv_input_device* dev, int device_id,
int stream_id, uint32_t seq);
- void* reserved[16];
+ /*
+ * get_stream_configurations_ext:
+ *
+ * Get stream configurations for a specific device. An input device may have
+ * multiple configurations.
+ *
+ * The configs object is guaranteed to be valid only until the next call to
+ * get_stream_configurations_ext() or STREAM_CONFIGURATIONS_CHANGED event.
+ *
+ * Return 0 on success.
+ */
+ int (*get_stream_configurations_ext)(const struct tv_input_device* dev,
+ int device_id, int* num_configurations,
+ const tv_stream_config_ext_t** configs);
+
+ void* reserved[16 - 1];
} tv_input_device_t;
__END_DECLS
diff --git a/modules/tv_input/tv_input.cpp b/modules/tv_input/tv_input.cpp
index 114e80e..45e8388 100644
--- a/modules/tv_input/tv_input.cpp
+++ b/modules/tv_input/tv_input.cpp
@@ -37,18 +37,18 @@
const char* name, struct hw_device_t** device);
static struct hw_module_methods_t tv_input_module_methods = {
- open: tv_input_device_open
+ .open = tv_input_device_open
};
tv_input_module_t HAL_MODULE_INFO_SYM = {
- common: {
- tag: HARDWARE_MODULE_TAG,
- version_major: 0,
- version_minor: 1,
- id: TV_INPUT_HARDWARE_MODULE_ID,
- name: "Sample TV input module",
- author: "The Android Open Source Project",
- methods: &tv_input_module_methods,
+ .common = {
+ .tag = HARDWARE_MODULE_TAG,
+ .version_major = 0,
+ .version_minor = 1,
+ .id = TV_INPUT_HARDWARE_MODULE_ID,
+ .name = "Sample TV input module",
+ .author = "The Android Open Source Project",
+ .methods = &tv_input_module_methods,
}
};
@@ -72,7 +72,8 @@
}
static int tv_input_get_stream_configurations(
- const struct tv_input_device*, int, int*, const tv_stream_config_t**)
+ const struct tv_input_device*, int, int*,
+ const tv_stream_config_t**)
{
return -EINVAL;
}
@@ -98,6 +99,13 @@
return -EINVAL;
}
+static int tv_input_get_stream_configurations_ext(
+ const struct tv_input_device*, int, int*,
+ const tv_stream_config_ext_t**)
+{
+ return -EINVAL;
+}
+
/*****************************************************************************/
static int tv_input_device_close(struct hw_device_t *dev)
@@ -134,6 +142,8 @@
dev->device.close_stream = tv_input_close_stream;
dev->device.request_capture = tv_input_request_capture;
dev->device.cancel_capture = tv_input_cancel_capture;
+ dev->device.get_stream_configurations_ext =
+ tv_input_get_stream_configurations_ext;
*device = &dev->device.common;
status = 0;