1 /*! 2 * \copy 3 * Copyright (c) 2011-2013, Cisco Systems 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 24 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 28 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 * 31 * \file : downsample.h 32 * 33 * \brief : image rotate class of wels video processor class 34 * 35 * \date : 2011/04/06 36 * 37 * \description : 38 * 39 ************************************************************************************* 40 */ 41 42 #ifndef WELSVP_IMAGEROTATE_H 43 #define WELSVP_IMAGEROTATE_H 44 45 #include "util.h" 46 #include "WelsFrameWork.h" 47 #include "IWelsVP.h" 48 49 WELSVP_NAMESPACE_BEGIN 50 51 typedef void (ImageRotateFunc) (uint8_t* pSrc, uint32_t uiBytesPerPixel, uint32_t iWidth, uint32_t iHeight, 52 uint8_t* pDst); 53 54 typedef ImageRotateFunc* ImageRotateFuncPtr; 55 56 ImageRotateFunc ImageRotate90D_c; 57 ImageRotateFunc ImageRotate180D_c; 58 ImageRotateFunc ImageRotate270D_c; 59 60 typedef struct { 61 ImageRotateFuncPtr pfImageRotate90D; 62 ImageRotateFuncPtr pfImageRotate180D; 63 ImageRotateFuncPtr pfImageRotate270D; 64 } SImageRotateFuncs; 65 66 class CImageRotating : public IStrategy { 67 public: 68 CImageRotating (int32_t iCpuFlag); 69 ~CImageRotating(); 70 71 EResult Process (int32_t iType, SPixMap* pSrc, SPixMap* pDst); 72 73 private: 74 void InitImageRotateFuncs (SImageRotateFuncs& pf, int32_t iCpuFlag); 75 EResult ProcessImageRotate (int32_t iType, uint8_t* pSrc, uint32_t uiBytesPerPixel, uint32_t iWidth, uint32_t iHeight, 76 uint8_t* pDst); 77 78 private: 79 SImageRotateFuncs m_pfRotateImage; 80 int32_t m_iCPUFlag; 81 }; 82 83 WELSVP_NAMESPACE_END 84 85 #endif 86