summaryrefslogtreecommitdiff
authorKieth Liu <kieth.liu@amlogic.com>2015-09-09 08:55:00 (GMT)
committer Kieth Liu <kieth.liu@amlogic.com>2015-09-09 09:04:54 (GMT)
commitfde1c32aee5fbd4eddc6cd70ec5d7b0a1f9f397a (patch)
tree17e7ec0e01b7e17f87bd9f1edddcf5ba3df00216
parent655921e7932c4789c24bbf0fdf0d7eecbdc5477d (diff)
downloadtv_input-fde1c32aee5fbd4eddc6cd70ec5d7b0a1f9f397a.zip
tv_input-fde1c32aee5fbd4eddc6cd70ec5d7b0a1f9f397a.tar.gz
tv_input-fde1c32aee5fbd4eddc6cd70ec5d7b0a1f9f397a.tar.bz2
add stream config for frame capture
Change-Id: Idd1b06c0d77e3c736438c66e9e0c95979106376e
Diffstat
-rw-r--r--1.patch149
-rw-r--r--Android.mk3
-rw-r--r--tv_input.cpp156
3 files changed, 79 insertions, 229 deletions
diff --git a/1.patch b/1.patch
deleted file mode 100644
index e3bac14..0000000
--- a/1.patch
+++ b/dev/null
@@ -1,149 +0,0 @@
-diff --git a/tv_input.cpp b/tv_input.cpp
-old mode 100644
-new mode 100755
-index 822c7c8..b67e359
---- a/tv_input.cpp
-+++ b/tv_input.cpp
-@@ -23,16 +23,10 @@
-
- #include <hardware/tv_input.h>
- #include <tv/CTv.h>
-+#include <tvin/CTvin.h>
- #include <tvserver/TvService.h>
- /*****************************************************************************/
-
--#define ATV_DEV_ID 1
--#define DTV_DEV_ID 2
--#define AV_DEV_ID 3
--#define HDMI1_DEV_ID 4
--#define HDMI2_DEV_ID 5
--#define HDMI3_DEV_ID 6
--
- typedef struct tv_input_private {
- tv_input_device_t device;
-
-@@ -46,7 +40,7 @@ typedef struct tv_input_private {
- static int notify_ATV_device_available(tv_input_private_t *priv)
- {
- tv_input_event_t event;
-- event.device_info.device_id = ATV_DEV_ID;
-+ event.device_info.device_id = SOURCE_TV;
- event.device_info.type = TV_INPUT_TYPE_TUNER;
- event.type = TV_INPUT_EVENT_DEVICE_AVAILABLE;
- event.device_info.audio_type = AUDIO_DEVICE_NONE;
-@@ -57,7 +51,7 @@ static int notify_ATV_device_available(tv_input_private_t *priv)
- static int notify_DTV_device_available(tv_input_private_t *priv)
- {
- tv_input_event_t event;
-- event.device_info.device_id = DTV_DEV_ID;
-+ event.device_info.device_id = SOURCE_DTV;
- event.device_info.type = TV_INPUT_TYPE_TUNER;
- event.type = TV_INPUT_EVENT_DEVICE_AVAILABLE;
- event.device_info.audio_type = AUDIO_DEVICE_NONE;
-@@ -68,7 +62,7 @@ static int notify_DTV_device_available(tv_input_private_t *priv)
- static int notify_AV_device_available(tv_input_private_t *priv)
- {
- tv_input_event_t event;
-- event.device_info.device_id = AV_DEV_ID;
-+ event.device_info.device_id = SOURCE_AV1;
- event.device_info.type = TV_INPUT_TYPE_COMPONENT;
- event.type = TV_INPUT_EVENT_DEVICE_AVAILABLE;
- event.device_info.audio_type = AUDIO_DEVICE_NONE;
-@@ -95,48 +89,48 @@ static int get_stream_configs(int dev_id, int *num_configurations, const tv_stre
- return -1;
- }
- switch (dev_id) {
-- case ATV_DEV_ID:
-- mconfig->stream_id = ATV_DEV_ID;
-+ case SOURCE_TV:
-+ mconfig->stream_id = SOURCE_TV;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
- *configs = mconfig;
- break;
-- case DTV_DEV_ID:
-- mconfig->stream_id = DTV_DEV_ID;
-+ case SOURCE_DTV:
-+ mconfig->stream_id = SOURCE_DTV;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
- *configs = mconfig;
- break;
-- case AV_DEV_ID:
-- mconfig->stream_id = AV_DEV_ID;
-+ case SOURCE_AV1:
-+ mconfig->stream_id = SOURCE_AV1;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
- *configs = mconfig;
- break;
-- case HDMI1_DEV_ID:
-- mconfig->stream_id = HDMI1_DEV_ID;
-+ case SOURCE_HDMI1:
-+ mconfig->stream_id = SOURCE_HDMI1;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
- *configs = mconfig;
- break;
-- case HDMI2_DEV_ID:
-- mconfig->stream_id = HDMI2_DEV_ID;
-+ case SOURCE_HDMI2:
-+ mconfig->stream_id = SOURCE_HDMI2;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
- *configs = mconfig;
- break;
-- case HDMI3_DEV_ID:
-- mconfig->stream_id = HDMI3_DEV_ID;
-+ case SOURCE_HDMI3:
-+ mconfig->stream_id = SOURCE_HDMI3;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
-@@ -197,11 +191,11 @@ static int tv_input_initialize(struct tv_input_device *dev,
- /* AV_DEVICE_AVAILABLE */
- notify_AV_device_available(priv);
- /* HDMI1_DEVICE_AVAILABLE */
-- notify_hdmi_device_available(priv, HDMI1_DEV_ID, 1);
-+ notify_hdmi_device_available(priv, SOURCE_HDMI1, 1);
- /* HDMI2_DEVICE_AVAILABLE */
-- notify_hdmi_device_available(priv, HDMI2_DEV_ID, 2);
-+ notify_hdmi_device_available(priv, SOURCE_HDMI2, 2);
- /* HDMI3_DEVICE_AVAILABLE */
-- notify_hdmi_device_available(priv, HDMI3_DEV_ID, 3);
-+ notify_hdmi_device_available(priv, SOURCE_HDMI3, 3);
-
- return 0;
- }
-@@ -216,13 +210,19 @@ static int tv_input_get_stream_configurations(const struct tv_input_device *dev,
- return -EINVAL;
- }
-
--static int tv_input_open_stream(struct tv_input_device *, int, tv_stream_t *)
-+static int tv_input_open_stream(struct tv_input_device* dev, int device_id,
-+ tv_stream_t* stream)
- {
-+ tv_input_private_t *priv = (tv_input_private_t *)dev;
-+ priv->pTv->SetSourceSwitchInput((tv_source_input_t) device_id);
- return -EINVAL;
- }
-
--static int tv_input_close_stream(struct tv_input_device *, int, int)
-+static int tv_input_close_stream(struct tv_input_device* dev, int device_id,
-+ int stream_id)
- {
-+ tv_input_private_t *priv = (tv_input_private_t *)dev;
-+ priv->pTv->StopTvLock();
- return -EINVAL;
- }
-
diff --git a/Android.mk b/Android.mk
index 6bed2db..d5ddce6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -37,6 +37,7 @@ LOCAL_C_INCLUDES += \
LOCAL_SHARED_LIBRARIES += \
libtv \
- libtvserver
+ libtvserver \
+ libtv_jni
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/tvapi/Android.mk
diff --git a/tv_input.cpp b/tv_input.cpp
index d6eb13d..b7aa6e8 100644
--- a/tv_input.cpp
+++ b/tv_input.cpp
@@ -133,61 +133,83 @@ static int notify_HDMI_stream_configurations_change(tv_input_private_t *priv, in
return 0;
}
+#define NORMAL_STREAM_ID 1
+#define FRAME_CAPTURE_STREAM_ID 2
+static tv_stream_config_t mconfig[2];
static int get_stream_configs(int dev_id, int *num_configurations, const tv_stream_config_t **configs)
{
- tv_stream_config_t *mconfig = (tv_stream_config_t *)malloc(sizeof(mconfig));
- if (!mconfig)
- {
- return -1;
- }
switch (dev_id)
{
case SOURCE_TV:
- mconfig->stream_id = SOURCE_TV;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
+ mconfig[0].stream_id = NORMAL_STREAM_ID;
+ mconfig[0].type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
+ mconfig[0].max_video_width = 1920;
+ mconfig[0].max_video_height = 1080;
+ mconfig[1].stream_id = FRAME_CAPTURE_STREAM_ID;
+ mconfig[1].type = TV_STREAM_TYPE_BUFFER_PRODUCER ;
+ mconfig[1].max_video_width = 1920;
+ mconfig[1].max_video_height = 1080;
+ *num_configurations = 2;
*configs = mconfig;
break;
case SOURCE_DTV:
- mconfig->stream_id = SOURCE_DTV;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
+ mconfig[0].stream_id = NORMAL_STREAM_ID;
+ mconfig[0].type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
+ mconfig[0].max_video_width = 1920;
+ mconfig[0].max_video_height = 1080;
+ mconfig[1].stream_id = FRAME_CAPTURE_STREAM_ID;
+ mconfig[1].type = TV_STREAM_TYPE_BUFFER_PRODUCER ;
+ mconfig[1].max_video_width = 1920;
+ mconfig[1].max_video_height = 1080;
+ *num_configurations = 2;
*configs = mconfig;
break;
case SOURCE_AV1:
- mconfig->stream_id = SOURCE_AV1;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
+ mconfig[0].stream_id = NORMAL_STREAM_ID;
+ mconfig[0].type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
+ mconfig[0].max_video_width = 1920;
+ mconfig[0].max_video_height = 1080;
+ mconfig[1].stream_id = FRAME_CAPTURE_STREAM_ID;
+ mconfig[1].type = TV_STREAM_TYPE_BUFFER_PRODUCER ;
+ mconfig[1].max_video_width = 1920;
+ mconfig[1].max_video_height = 1080;
+ *num_configurations = 2;
*configs = mconfig;
break;
case SOURCE_HDMI1:
- mconfig->stream_id = SOURCE_HDMI1;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
+ mconfig[0].stream_id = NORMAL_STREAM_ID;
+ mconfig[0].type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
+ mconfig[0].max_video_width = 1920;
+ mconfig[0].max_video_height = 1080;
+ mconfig[1].stream_id = FRAME_CAPTURE_STREAM_ID;
+ mconfig[1].type = TV_STREAM_TYPE_BUFFER_PRODUCER ;
+ mconfig[1].max_video_width = 1920;
+ mconfig[1].max_video_height = 1080;
+ *num_configurations = 2;
*configs = mconfig;
break;
case SOURCE_HDMI2:
- mconfig->stream_id = SOURCE_HDMI2;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
+ mconfig[0].stream_id = NORMAL_STREAM_ID;
+ mconfig[0].type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
+ mconfig[0].max_video_width = 1920;
+ mconfig[0].max_video_height = 1080;
+ mconfig[1].stream_id = FRAME_CAPTURE_STREAM_ID;
+ mconfig[1].type = TV_STREAM_TYPE_BUFFER_PRODUCER ;
+ mconfig[1].max_video_width = 1920;
+ mconfig[1].max_video_height = 1080;
+ *num_configurations = 2;
*configs = mconfig;
break;
case SOURCE_HDMI3:
- mconfig->stream_id = SOURCE_HDMI3;
- mconfig->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
- mconfig->max_video_width = 1920;
- mconfig->max_video_height = 1080;
- *num_configurations = 1;
+ mconfig[0].stream_id = NORMAL_STREAM_ID;
+ mconfig[0].type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
+ mconfig[0].max_video_width = 1920;
+ mconfig[0].max_video_height = 1080;
+ mconfig[1].stream_id = FRAME_CAPTURE_STREAM_ID;
+ mconfig[1].type = TV_STREAM_TYPE_BUFFER_PRODUCER ;
+ mconfig[1].max_video_width = 1920;
+ mconfig[1].max_video_height = 1080;
+ *num_configurations = 2;
*configs = mconfig;
break;
default:
@@ -196,47 +218,18 @@ static int get_stream_configs(int dev_id, int *num_configurations, const tv_stre
return 0;
}
-static int get_tv_stream(int device_id, tv_stream_t *stream)
+static int get_tv_stream(tv_stream_t *stream)
{
- native_handle *h = native_handle_create(0, 0);
- if (!h)
- {
- return -EINVAL;
- }
- switch (device_id)
- {
- case SOURCE_TV:
- stream->stream_id = SOURCE_TV;
- stream->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE;
- stream->sideband_stream_source_handle = h;
- break;
- case SOURCE_DTV:
- stream->stream_id = SOURCE_DTV;
- stream->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE;
- stream->sideband_stream_source_handle = h;
- break;
- case SOURCE_AV1:
- stream->stream_id = SOURCE_AV1;
- stream->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE;
- stream->sideband_stream_source_handle = h;
- break;
- case SOURCE_HDMI1:
- stream->stream_id = SOURCE_HDMI1;
- stream->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE;
- stream->sideband_stream_source_handle = h;
- break;
- case SOURCE_HDMI2:
- stream->stream_id = SOURCE_HDMI2;
- stream->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE;
- stream->sideband_stream_source_handle = h;
- break;
- case SOURCE_HDMI3:
- stream->stream_id = SOURCE_HDMI3;
+ if (stream->stream_id == NORMAL_STREAM_ID) {
+ native_handle *h = native_handle_create(0, 0);
+ if (!h) {
+ return -EINVAL;
+ }
stream->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE;
stream->sideband_stream_source_handle = h;
- break;
-defualt:
- break;
+ }
+ else if (stream->stream_id == NORMAL_STREAM_ID) {
+ stream->type = TV_STREAM_TYPE_BUFFER_PRODUCER;
}
return 0;
}
@@ -325,14 +318,19 @@ static int tv_input_open_stream(struct tv_input_device *dev, int device_id,
tv_input_private_t *priv = (tv_input_private_t *)dev;
if (priv)
{
- if (get_tv_stream(device_id, stream) != 0)
+ if (get_tv_stream(stream) != 0)
{
return -EINVAL;
}
- LOGD ( "%s, SetSourceSwitchInput id = %d\n", __FUNCTION__, device_id );
- priv->pTv->StartTvLock();
- priv->pTv->SetSourceSwitchInput((tv_source_input_t) device_id);
- return 0;
+ if (stream->stream_id == NORMAL_STREAM_ID) {
+ LOGD ( "%s, SetSourceSwitchInput id = %d\n", __FUNCTION__, device_id );
+ priv->pTv->StartTvLock();
+ priv->pTv->SetSourceSwitchInput((tv_source_input_t) device_id);
+ return 0;
+ }
+ else if (stream->stream_id == FRAME_CAPTURE_STREAM_ID) {
+ return 0;
+ }
}
return -EINVAL;
}
@@ -343,7 +341,7 @@ static int tv_input_close_stream(struct tv_input_device *dev, int device_id,
tv_input_private_t *priv = (tv_input_private_t *)dev;
if (priv)
{
- LOGD ( "%s\n", __FUNCTION__ );
+ LOGD ( "%s, SetSourceSwitchInput id = %d\n", __FUNCTION__, device_id );
priv->pTv->StopTvLock();
return 0;
}