/* * 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__