diff options
author | Wonsik Kim <wonsik@google.com> | 2014-03-03 11:33:08 +0900 |
---|---|---|
committer | Wonsik Kim <wonsik@google.com> | 2014-03-21 14:49:58 +0900 |
commit | 0b78afb191aa3c8748bf4837e4693801f3ee762e (patch) | |
tree | ec45b804a4016ad3ae1234a65df71164c96f6d51 /modules | |
parent | b52fedf634d5afcd87d0bea1b7eae0e1b6597e7c (diff) | |
download | hardware_libhardware-0b78afb191aa3c8748bf4837e4693801f3ee762e.zip hardware_libhardware-0b78afb191aa3c8748bf4837e4693801f3ee762e.tar.gz hardware_libhardware-0b78afb191aa3c8748bf4837e4693801f3ee762e.tar.bz2 |
Initial commit of TV input HAL
HAL for physical TV input such as HDMI-in. The main purpose is to
provide sideband video stream source handle to feed SurfaceFlinger and
audio related information to feed AudioManager (TBD).
Change-Id: I8eeddcd6c63f6f8c0b1e7a87e9a6856baa9ceddd
Diffstat (limited to 'modules')
-rw-r--r-- | modules/Android.mk | 2 | ||||
-rw-r--r-- | modules/tv_input/Android.mk | 24 | ||||
-rw-r--r-- | modules/tv_input/tv_input.cpp | 128 |
3 files changed, 153 insertions, 1 deletions
diff --git a/modules/Android.mk b/modules/Android.mk index f1a6c1c..5f1de32 100644 --- a/modules/Android.mk +++ b/modules/Android.mk @@ -1,4 +1,4 @@ hardware_modules := gralloc hwcomposer audio nfc nfc-nci local_time \ power usbaudio audio_remote_submix camera consumerir sensors vibrator \ - mcu + mcu tv_input include $(call all-named-subdir-makefiles,$(hardware_modules)) diff --git a/modules/tv_input/Android.mk b/modules/tv_input/Android.mk new file mode 100644 index 0000000..e8aa7fc --- /dev/null +++ b/modules/tv_input/Android.mk @@ -0,0 +1,24 @@ +# Copyright (C) 2014 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_SHARED_LIBRARIES := libcutils liblog +LOCAL_SRC_FILES := tv_input.cpp +LOCAL_MODULE := tv_input.default +LOCAL_MODULE_TAGS := optional +include $(BUILD_SHARED_LIBRARY) diff --git a/modules/tv_input/tv_input.cpp b/modules/tv_input/tv_input.cpp new file mode 100644 index 0000000..bdb47ca --- /dev/null +++ b/modules/tv_input/tv_input.cpp @@ -0,0 +1,128 @@ +/* + * Copyright 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <fcntl.h> +#include <errno.h> + +#include <cutils/log.h> +#include <cutils/native_handle.h> + +#include <hardware/tv_input.h> + +/*****************************************************************************/ + +typedef struct tv_input_private { + tv_input_device_t device; + + // Callback related data + const tv_input_callback_ops_t* callback; + void* callback_data; +} tv_input_private_t; + +static int tv_input_device_open(const struct hw_module_t* module, + const char* name, struct hw_device_t** device); + +static struct hw_module_methods_t tv_input_module_methods = { + 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, + } +}; + +/*****************************************************************************/ + +static int tv_input_initialize(struct tv_input_device* dev, + const tv_input_callback_ops_t* callback, void* data) +{ + if (dev == NULL || callback == NULL) { + return -EINVAL; + } + tv_input_private_t* priv = (tv_input_private_t*)dev; + if (priv->callback != NULL) { + return -EEXIST; + } + + priv->callback = callback; + priv->callback_data = data; + + return 0; +} + +static int tv_input_get_stream_configurations( + const struct tv_input_device*, int, int*, const tv_stream_config_t**) +{ + return -EINVAL; +} + +static int tv_input_open_stream(struct tv_input_device*, int, tv_stream_t*) +{ + return -EINVAL; +} + +static int tv_input_close_stream(struct tv_input_device*, int, int) +{ + return -EINVAL; +} + +/*****************************************************************************/ + +static int tv_input_device_close(struct hw_device_t *dev) +{ + tv_input_private_t* priv = (tv_input_private_t*)dev; + if (priv) { + free(priv); + } + return 0; +} + +/*****************************************************************************/ + +static int tv_input_device_open(const struct hw_module_t* module, + const char* name, struct hw_device_t** device) +{ + int status = -EINVAL; + if (!strcmp(name, TV_INPUT_DEFAULT_DEVICE)) { + tv_input_private_t* dev = (tv_input_private_t*)malloc(sizeof(*dev)); + + /* initialize our state here */ + memset(dev, 0, sizeof(*dev)); + + /* initialize the procs */ + dev->device.common.tag = HARDWARE_DEVICE_TAG; + dev->device.common.version = TV_INPUT_DEVICE_API_VERSION_0_1; + dev->device.common.module = const_cast<hw_module_t*>(module); + dev->device.common.close = tv_input_device_close; + + dev->device.initialize = tv_input_initialize; + dev->device.get_stream_configurations = + tv_input_get_stream_configurations; + dev->device.open_stream = tv_input_open_stream; + dev->device.close_stream = tv_input_close_stream; + + *device = &dev->device.common; + status = 0; + } + return status; +} |