/* * 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 __SEC_GSC_OUT_H__ #define __SEC_GSC_OUT_H__ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include "utils/Timers.h" #include "s5p_fimc_v4l2.h" #include "sec_utils_v4l2.h" #include "media.h" #include "v4l2-subdev.h" #include "sec_format.h" #include "SecBuffer.h" #define PFX_NODE_MEDIADEV "/dev/media" #define PFX_NODE_SUBDEV "/dev/v4l-subdev" #define PFX_NODE_VIDEODEV "/dev/video" #define PFX_ENTITY_SUBDEV_GSC "exynos-gsc-sd.%d" #define PFX_ENTITY_OUTPUTDEV_GSC "exynos-gsc.%d.output" #define GSC_SUBDEV_PAD_SINK (0) #define GSC_SUBDEV_PAD_SOURCE (1) #define GSC_VIDEODEV_PAD_SOURCE (0) #define MAX_BUFFERS_GSCALER (2) #define MAX_PLANES_GSCALER (3) #ifdef __cplusplus } class SecGscaler { public: enum DEV { DEV_0 = 0, DEV_1, DEV_2, DEV_3, DEV_MAX, }; enum MODE { MODE_NONE = 0, MODE_SINGLE_BUF, MODE_MULTI_BUF, MODE_DMA_AUTO, MODE_MAX, }; private: bool mFlagCreate; int mDev; int mVideoNodeNum; int mSubdevNodeNum; int mVideodevFd; int mMediadevFd; int mSubdevFd; unsigned int mNumOfBuf; unsigned int mSrcIndex; int mRotVal; bool mFlagGlobalAlpha; int mGlobalAlpha; bool mFlagLocalAlpha; bool mFlagColorKey; int mColorKey; bool mFlagSetSrcParam; bool mFlagSetDstParam; bool mFlagStreamOn; s5p_fimc_t mS5pFimc; SecBuffer mSrcBuffer[MAX_BUFFERS_GSCALER]; __u32 mSubdevEntity; __u32 mVideodevEntity; //struct media_link_desc mlink_desc; public: SecGscaler(); virtual ~SecGscaler(); bool create(enum DEV dev, enum MODE mode, unsigned int numOfBuf); bool create(enum DEV dev, unsigned int numOfBuf); bool destroy(void); bool flagCreate(void); int getFd(void); int getVideodevFd(void); bool openVideodevFd(void); bool closeVideodevFd(void); int getSubdevFd(void); __u32 getSubdevEntity(void); __u32 getVideodevEntity(void); bool getFlagSteamOn(void); SecBuffer * getSrcBufferAddr(int index); bool setSrcParams(unsigned int width, unsigned int height, unsigned int cropX, unsigned int cropY, unsigned int *cropWidth, unsigned int *cropHeight, int colorFormat, bool forceChange = true); bool getSrcParams(unsigned int *width, unsigned int *height, unsigned int *cropX, unsigned int *cropY, unsigned int *cropWidth, unsigned int *cropHeight, int *v4l2colorFormat); bool setSrcAddr(unsigned int YAddr, unsigned int CbAddr = 0, unsigned int CrAddr = 0, int colorFormat = 0); bool setDstParams(unsigned int width, unsigned int height, unsigned int cropX, unsigned int cropY, unsigned int *cropWidth, unsigned int *cropHeight, int colorFormat, bool forceChange = true); bool getDstParams(unsigned int *width, unsigned int *height, unsigned int *cropX, unsigned int *cropY, unsigned int *cropWidth, unsigned int *cropHeight, int *mbusColorFormat); bool setDstAddr(unsigned int YAddr, unsigned int CbAddr = 0, unsigned int CrAddr = 0, int buf_index = 0); bool setRotVal(unsigned int rotVal); bool setGlobalAlpha(bool enable = true, int alpha = 0xff); bool setLocalAlpha(bool enable); bool setColorKey(bool enable = true, int colorKey = 0xff); bool run(void); bool streamOn(void); bool streamOff(void); private: bool m_checkSrcSize(unsigned int width, unsigned int height, unsigned int cropX, unsigned int cropY, unsigned int *cropWidth, unsigned int *cropHeight, int colorFormat, bool forceChange = false); bool m_checkDstSize(unsigned int width, unsigned int height, unsigned int cropX, unsigned int cropY, unsigned int *cropWidth, unsigned int *cropHeight, int colorFormat, int rotVal, bool forceChange = false); int m_widthOfFimc(int v4l2ColorFormat, int width); int m_heightOfFimc(int v4l2ColorFormat, int height); int m_getYuvBpp(unsigned int fmt); int m_getYuvPlanes(unsigned int fmt); }; #endif #endif //__SEC_GSC_OUT_H__