| /* |
| * Copyright@ Samsung Electronics Co. LTD |
| * |
| * 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. |
| */ |
| |
| #ifndef EXYNOS_GSC_H_ |
| #define EXYNOS_GSC_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| //#define LOG_NDEBUG 0 |
| #define LOG_TAG "libexynosgscaler" |
| #include <cutils/log.h> |
| |
| #include <sys/types.h> |
| #include <sys/ioctl.h> |
| #include <videodev2.h> |
| #include <fcntl.h> |
| #include <stdbool.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <time.h> |
| #include <system/graphics.h> |
| #include "exynos_gscaler.h" |
| |
| #include "exynos_format.h" |
| #include "ExynosMutex.h" |
| #include "exynos_v4l2.h" |
| |
| //#include "ExynosBuffer.h" |
| |
| #define NUM_OF_GSC_PLANES (3) |
| #define MAX_BUFFERS_GSCALER_OUT (3) |
| #define GSCALER_SUBDEV_PAD_SINK (0) |
| #define GSCALER_SUBDEV_PAD_SOURCE (1) |
| #define MIXER_V_SUBDEV_PAD_SINK (0) |
| #define MIXER_V_SUBDEV_PAD_SOURCE (3) |
| #define FIMD_SUBDEV_PAD_SINK (0) |
| #define MAX_BUFFERS (6) |
| |
| #define NUM_OF_GSC_HW (4) |
| #define NODE_NUM_GSC_0 (23) |
| #define NODE_NUM_GSC_1 (26) |
| #define NODE_NUM_GSC_2 (29) |
| #define NODE_NUM_GSC_3 (32) |
| |
| #define PFX_NODE_GSC "/dev/video" |
| #define PFX_NODE_MEDIADEV "/dev/media" |
| #define PFX_MXR_ENTITY "s5p-mixer%d" |
| #define PFX_FIMD_ENTITY "s3c-fb-window%d" |
| #define PFX_GSC_VIDEODEV_ENTITY "exynos-gsc.%d.output" |
| #define PFX_GSC_SUBDEV_ENTITY "exynos-gsc-sd.%d" |
| #define PFX_SUB_DEV "/dev/v4l-subdev%d" |
| #define GSC_VD_PAD_SOURCE 0 |
| #define GSC_SD_PAD_SINK 0 |
| #define GSC_SD_PAD_SOURCE 1 |
| #define GSC_OUT_PAD_SINK 0 |
| //#define GSC_OUT_DMA_BLOCKING |
| //#define GSC_OUT_DELAYED_STREAMON |
| |
| #define GSC_VERSION GSC_EVT1 |
| |
| #if (GSC_VERSION == GSC_EVT0) |
| #define GSC_MIN_W_SIZE (64) |
| #define GSC_MIN_H_SIZE (32) |
| #else |
| #define GSC_MIN_W_SIZE (32) |
| #define GSC_MIN_H_SIZE (8) |
| #endif |
| |
| #define MAX_GSC_WAITING_TIME_FOR_TRYLOCK (16000) // 16msec |
| #define GSC_WAITING_TIME_FOR_TRYLOCK (8000) // 8msec |
| |
| struct gsc_info { |
| unsigned int width; |
| unsigned int height; |
| unsigned int crop_left; |
| unsigned int crop_top; |
| unsigned int crop_width; |
| unsigned int crop_height; |
| unsigned int v4l2_colorformat; |
| unsigned int cacheable; |
| unsigned int mode_drm; |
| |
| int rotation; |
| int flip_horizontal; |
| int flip_vertical; |
| bool csc_range; |
| bool dirty; |
| |
| void *addr[NUM_OF_GSC_PLANES]; |
| int acquireFenceFd; |
| int releaseFenceFd; |
| bool stream_on; |
| |
| enum v4l2_buf_type buf_type; |
| struct v4l2_format format; |
| struct v4l2_buffer buffer; |
| bool buffer_queued; |
| struct v4l2_plane planes[NUM_OF_GSC_PLANES]; |
| struct v4l2_crop crop; |
| int src_buf_idx; |
| int qbuf_cnt; |
| }; |
| |
| struct GSC_HANDLE { |
| int gsc_fd; |
| int gsc_id; |
| struct gsc_info src; |
| struct gsc_info dst; |
| exynos_gsc_img src_img; |
| exynos_gsc_img dst_img; |
| void *op_mutex; |
| void *obj_mutex[NUM_OF_GSC_HW]; |
| void *cur_obj_mutex; |
| bool flag_local_path; |
| bool flag_exclusive_open; |
| struct media_device *media0; |
| struct media_entity *gsc_sd_entity; |
| struct media_entity *gsc_vd_entity; |
| struct media_entity *sink_sd_entity; |
| int gsc_mode; |
| int out_mode; |
| bool allow_drm; |
| bool protection_enabled; |
| }; |
| |
| extern int exynos_gsc_out_stop(void *handle); |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif //__EXYNOS_MUTEX_H__ |