/* * * Copyright 2016 Samsung Electronics S.LSI 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. */ /* * @file ExynosVideo_OSAL.h * @brief ExynosVideo OSAL define * @author SeungBeom Kim (sbcrux.kim@samsung.com) * Taehwan Kim (t_h.kim@samsung.com) * @version 1.0.0 * @history * 2016.01.07 : Create */ #ifndef _EXYNOS_VIDEO_OSAL_H_ #define _EXYNOS_VIDEO_OSAL_H_ #include "exynos_v4l2.h" #include #ifdef USE_EXYNOS_MEDIA_EXT #include "videodev2_exynos_media_ext.h" #endif #ifdef USE_MFC_HEADER #include "exynos_mfc_media.h" #endif #include #include #include "ExynosVideoApi.h" typedef enum _CodecOSAL_MemType { CODEC_OSAL_MEM_TYPE_MMAP = V4L2_MEMORY_MMAP, CODEC_OSAL_MEM_TYPE_USERPTR = V4L2_MEMORY_USERPTR, CODEC_OSAL_MEM_TYPE_DMABUF = V4L2_MEMORY_DMABUF, } CodecOSAL_MemType; typedef enum _CodecOSAL_BufType { CODEC_OSAL_BUF_TYPE_SRC = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, CODEC_OSAL_BUF_TYPE_DST = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, } CodecOSAL_BufType; typedef enum _CodecOSAL_CID { CODEC_OSAL_CID_DEC_NUM_MIN_BUFFERS = V4L2_CID_MIN_BUFFERS_FOR_CAPTURE, CODEC_OSAL_CID_DEC_DISPLAY_DELAY = V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY, CODEC_OSAL_CID_DEC_IMMEDIATE_DISPLAY = V4L2_CID_MPEG_VIDEO_DECODER_IMMEDIATE_DISPLAY, CODEC_OSAL_CID_DEC_I_FRAME_DECODING = V4L2_CID_MPEG_MFC51_VIDEO_I_FRAME_DECODING, CODEC_OSAL_CID_DEC_PACKED_PB = V4L2_CID_MPEG_MFC51_VIDEO_PACKED_PB, CODEC_OSAL_CID_DEC_DEBLOCK_FILTER = V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER, CODEC_OSAL_CID_DEC_SLICE_MODE = V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE, CODEC_OSAL_CID_DEC_SEI_PARSING = V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING, CODEC_OSAL_CID_DEC_DTS_MODE = V4L2_CID_MPEG_VIDEO_DECODER_DECODING_TIMESTAMP_MODE, CODEC_OSAL_CID_DEC_DUAL_DPB_MODE = V4L2_CID_MPEG_MFC_SET_DUAL_DPB_MODE, CODEC_OSAL_CID_DEC_DYNAMIC_DPB_MODE = V4L2_CID_MPEG_MFC_SET_DYNAMIC_DPB_MODE, CODEC_OSAL_CID_DEC_SET_USER_SHARED_HANDLE = V4L2_CID_MPEG_MFC_SET_USER_SHARED_HANDLE, CODEC_OSAL_CID_DEC_GET_10BIT_INFO = V4L2_CID_MPEG_MFC_GET_10BIT_INFO, CODEC_OSAL_CID_DEC_CHECK_STATE = V4L2_CID_MPEG_MFC51_VIDEO_CHECK_STATE, CODEC_OSAL_CID_DEC_DISPLAY_STATUS = V4L2_CID_MPEG_MFC51_VIDEO_DISPLAY_STATUS, CODEC_OSAL_CID_DEC_WAIT_DECODING_START = V4L2_CID_MPEG_VIDEO_DECODER_WAIT_DECODING_START, CODEC_OSAL_CID_DEC_SEARCH_BLACK_BAR = V4L2_CID_MPEG_VIDEO_BLACK_BAR_DETECT, CODEC_OSAL_CID_DEC_ACTUAL_FORMAT = V4L2_CID_MPEG_VIDEO_UNCOMP_FMT, CODEC_OSAL_CID_ENC_FRAME_TYPE = V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE, CODEC_OSAL_CID_ENC_FRAME_RATE = V4L2_CID_MPEG_MFC51_VIDEO_FRAME_RATE_CH, CODEC_OSAL_CID_ENC_BIT_RATE = V4L2_CID_MPEG_MFC51_VIDEO_BIT_RATE_CH, CODEC_OSAL_CID_ENC_FRAME_SKIP_MODE = V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE, CODEC_OSAL_CID_ENC_IDR_PERIOD = V4L2_CID_MPEG_MFC51_VIDEO_I_PERIOD_CH, CODEC_OSAL_CID_ENC_H264_PREPEND_SPSPPS_TO_IDR = V4L2_CID_MPEG_VIDEO_H264_PREPEND_SPSPPS_TO_IDR, CODEC_OSAL_CID_ENC_HEVC_PREPEND_SPSPPS_TO_IDR = V4L2_CID_MPEG_VIDEO_HEVC_PREPEND_SPSPPS_TO_IDR, CODEC_OSAL_CID_ENC_H264_TEMPORAL_SVC_LAYER_CH = V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_CH, CODEC_OSAL_CID_ENC_HEVC_TEMPORAL_SVC_LAYER_CH = V4L2_CID_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_LAYER_CH, CODEC_OSAL_CID_ENC_VP8_TEMPORAL_SVC_LAYER_CH = V4L2_CID_MPEG_VIDEO_VP8_HIERARCHICAL_CODING_LAYER_CH, CODEC_OSAL_CID_ENC_VP9_TEMPORAL_SVC_LAYER_CH = V4L2_CID_MPEG_VIDEO_VP9_HIERARCHICAL_CODING_LAYER_CH, CODEC_OSAL_CID_ENC_SET_CONFIG_QP = V4L2_CID_MPEG_MFC_CONFIG_QP, CODEC_OSAL_CID_ENC_H264_LTR_MARK_INDEX = V4L2_CID_MPEG_MFC_H264_MARK_LTR, CODEC_OSAL_CID_ENC_H264_LTR_USE_INDEX = V4L2_CID_MPEG_MFC_H264_USE_LTR, CODEC_OSAL_CID_ENC_H264_LTR_BASE_PID = V4L2_CID_MPEG_MFC_H264_BASE_PRIORITY, CODEC_OSAL_CID_ENC_ROI_INFO = V4L2_CID_MPEG_VIDEO_ROI_CONTROL, CODEC_OSAL_CID_ENC_EXT_BUFFER_SIZE = V4L2_CID_MPEG_MFC_GET_EXTRA_BUFFER_SIZE, CODEC_OSAL_CID_ENC_WP_ENABLE = V4L2_CID_MPEG_VIDEO_WEIGHTED_ENABLE, CODEC_OSAL_CID_ENC_YSUM_DATA = V4L2_CID_MPEG_VIDEO_YSUM, CODEC_OSAL_CID_ENC_I_FRAME_RATIO = V4L2_CID_MPEG_VIDEO_RATIO_OF_INTRA, CODEC_OSAL_CID_ENC_ENABLE_ADAPTIVE_LAYER_BITRATE = V4L2_CID_MPEG_VIDEO_HIERARCHICAL_BITRATE_CTRL, CODEC_OSAL_CID_ENC_HEADER_MODE = V4L2_CID_MPEG_VIDEO_HEADER_MODE, CODEC_OSAL_CID_ENC_ENABLE_DROP_CTRL = V4L2_CID_MPEG_VIDEO_DROP_CONTROL, CODEC_OSAL_CID_VIDEO_FRAME_TAG = V4L2_CID_MPEG_MFC51_VIDEO_FRAME_TAG, CODEC_OSAL_CID_VIDEO_QOS_RATIO = V4L2_CID_MPEG_VIDEO_QOS_RATIO, CODEC_OSAL_CID_VIDEO_CACHEABLE_BUFFER = V4L2_CID_CACHEABLE, CODEC_OSAL_CID_VIDEO_GET_VERSION_INFO = V4L2_CID_MPEG_MFC_GET_VERSION_INFO, CODEC_OSAL_CID_VIDEO_GET_EXT_INFO = V4L2_CID_MPEG_MFC_GET_EXT_INFO, CODEC_OSAL_CID_VIDEO_GET_DRIVER_VERSION = V4L2_CID_MPEG_MFC_GET_DRIVER_INFO, CODEC_OSAL_CID_VIDEO_SET_HDR_USER_SHARED_HANDLE = V4L2_CID_MPEG_MFC_HDR_USER_SHARED_HANDLE, #ifdef USE_ORIGINAL_HEADER CODEC_OSAL_CID_VIDEO_SRC_BUF_FLAG = V4L2_CID_MPEG_VIDEO_SRC_BUF_FLAG, CODEC_OSAL_CID_VIDEO_DST_BUF_FLAG = V4L2_CID_MPEG_VIDEO_DST_BUF_FLAG, CODEC_OSAL_CID_VIDEO_FRAME_ERROR_TYPE = V4L2_CID_MPEG_VIDEO_FRAME_ERROR_TYPE, CODEC_OSAL_CID_VIDEO_PRIOTIY = V4L2_CID_MPEG_VIDEO_PRIORITY, #endif CODEC_OSAL_CID_ACTUAL_FRAMERATE = V4L2_CID_MPEG_MFC51_VIDEO_FRAME_RATE, CODEC_OSAL_CID_DEC_SEI_INFO = 0xFFFF0000, CODEC_OSAL_CID_ENC_SET_PARAMS, CODEC_OSAL_CID_ENC_QP_RANGE, CODEC_OSAL_CID_DEC_DISCARD_RCVHEADER, /* not implemented */ CODEC_OSAL_CID_ENC_SLICE_MODE, /* not implemented : V4L2_CID_MPEG_MFC_SET_SLICE_MODE */ CODEC_OSAL_CID_DEC_HDR_INFO, CODEC_OSAL_CID_ENC_COLOR_ASPECTS, CODEC_OSAL_CID_ENC_HDR_STATIC_INFO, } CodecOSAL_CID; typedef enum _CodecOSAL_InterlaceType { CODEC_OSAL_INTER_TYPE_NONE = V4L2_FIELD_NONE, CODEC_OSAL_INTER_TYPE_INTER = V4L2_FIELD_INTERLACED, CODEC_OSAL_INTER_TYPE_TB = V4L2_FIELD_INTERLACED_TB, CODEC_OSAL_INTER_TYPE_BT = V4L2_FIELD_INTERLACED_BT, } CodecOSAL_InterlaceType; #ifdef USE_DEFINE_H264_SEI_TYPE enum v4l2_mpeg_video_h264_sei_fp_type { V4L2_MPEG_VIDEO_H264_SEI_FP_TYPE_CHEKERBOARD = 0, V4L2_MPEG_VIDEO_H264_SEI_FP_TYPE_COLUMN = 1, V4L2_MPEG_VIDEO_H264_SEI_FP_TYPE_ROW = 2, V4L2_MPEG_VIDEO_H264_SEI_FP_TYPE_SIDE_BY_SIDE = 3, V4L2_MPEG_VIDEO_H264_SEI_FP_TYPE_TOP_BOTTOM = 4, V4L2_MPEG_VIDEO_H264_SEI_FP_TYPE_TEMPORAL = 5, }; #endif typedef enum _CodecOSAL_HeaderMode { CODEC_OSAL_HEADER_MODE_SEPARATE = V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE, CODEC_OSAL_HEADER_WITH_1ST_IDR = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME, } CodecOSAL_HeaderMode; typedef struct _CodecOSAL_Format { CodecOSAL_BufType type; ExynosVideoCodingType format; int field; int planeSize[VIDEO_BUFFER_MAX_PLANES]; unsigned int width; unsigned int height; unsigned int stride; int nPlane; } CodecOSAL_Format; typedef struct _CodecOSAL_Crop { CodecOSAL_BufType type; int left; int top; int width; int height; } CodecOSAL_Crop; typedef struct _CodecOSAL_Plane { void *addr; int bufferSize; int dataLen; unsigned offset; } CodecOSAL_Plane; typedef struct _CodecOSAL_Buffer { CodecOSAL_BufType type; int memory; int nPlane; CodecOSAL_Plane planes[VIDEO_BUFFER_MAX_PLANES]; int index; unsigned int flags; struct timeval timestamp; unsigned int field; ExynosVideoFrameType frameType; } CodecOSAL_Buffer; typedef struct v4l2_requestbuffers CodecOSAL_ReqBuf; typedef struct _CodecOSALInfo { int reserved; } CodecOSALInfo; typedef struct _CodecOSALVideoContext { ExynosVideoContext videoCtx; CodecOSALInfo osalCtx; } CodecOSALVideoContext; int Codec_OSAL_VideoMemoryToSystemMemory(ExynosVideoMemoryType eMemoryType); unsigned int Codec_OSAL_CodingTypeToCompressdFormat(ExynosVideoCodingType eCodingType); ExynosVideoColorFormatType Codec_OSAL_PixelFormatToColorFormat(unsigned int nPixelFormat); unsigned int Codec_OSAL_ColorFormatToPixelFormat(ExynosVideoColorFormatType eColorFormat, int nHwVersion); int Codec_OSAL_DevOpen(const char *sDevName, int nFlag, CodecOSALVideoContext *pCtx); void Codec_OSAL_DevClose(CodecOSALVideoContext *pCtx); int Codec_OSAL_QueryCap(CodecOSALVideoContext *pCtx); int Codec_OSAL_EnqueueBuf(CodecOSALVideoContext *pCtx, CodecOSAL_Buffer *pBuf); int Codec_OSAL_DequeueBuf(CodecOSALVideoContext *pCtx, CodecOSAL_Buffer *pBuf); int Codec_OSAL_GetControls(CodecOSALVideoContext *pCtx, unsigned int nCID, void *pInfo); int Codec_OSAL_SetControls(CodecOSALVideoContext *pCtx, unsigned int nCID, void *pInfo); int Codec_OSAL_GetControl(CodecOSALVideoContext *pCtx, unsigned int nCID, int *pValue); int Codec_OSAL_SetControl(CodecOSALVideoContext *pCtx, unsigned int nCID, unsigned long nValue); int Codec_OSAL_GetCrop(CodecOSALVideoContext *pCtx, CodecOSAL_Crop *pCrop); int Codec_OSAL_GetFormat(CodecOSALVideoContext *pCtx, CodecOSAL_Format *pFmt); int Codec_OSAL_SetFormat(CodecOSALVideoContext *pCtx, CodecOSAL_Format *pFmt); int Codec_OSAL_RequestBuf(CodecOSALVideoContext *pCtx, CodecOSAL_ReqBuf *pReqBuf); int Codec_OSAL_QueryBuf(CodecOSALVideoContext *pCtx, CodecOSAL_Buffer *pBuf); int Codec_OSAL_SetStreamOn(CodecOSALVideoContext *pCtx, int nPort); int Codec_OSAL_SetStreamOff(CodecOSALVideoContext *pCtx, int nPort); void *Codec_OSAL_MemoryMap(void *addr, size_t len, int prot, int flags, unsigned long fd, off_t offset); int Codec_OSAL_MemoryUnmap(void *addr, size_t len); #endif