From fde1c32aee5fbd4eddc6cd70ec5d7b0a1f9f397a Mon Sep 17 00:00:00 2001 From: Kieth Liu Date: Wed, 09 Sep 2015 08:55:00 +0000 Subject: add stream config for frame capture Change-Id: Idd1b06c0d77e3c736438c66e9e0c95979106376e --- 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 - #include -+#include - #include - /*****************************************************************************/ - --#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; } -- cgit