1 /* The copyright in this software is being made available under the BSD 2 * License, included below. This software may be subject to other third party 3 * and contributor rights, including patent rights, and no such rights are 4 * granted under this license. 5 * 6 * Copyright (c) 2010-2014, ITU/ISO/IEC 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * * Neither the name of the ITU/ISO/IEC nor the names of its contributors may 18 * be used to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 /** \file TComPicYuv.h 35 \brief picture YUV buffer class (header) 36 */ 37 38 #ifndef __TCOMPICYUV__ 39 #define __TCOMPICYUV__ 40 41 #include <stdio.h> 42 #include "CommonDef.h" 43 #include "TComRom.h" 44 #include "TComChromaFormat.h" 45 #include "SEI.h" 46 47 //! \ingroup TLibCommon 48 //! \{ 49 50 // ==================================================================================================================== 51 // Class definition 52 // ==================================================================================================================== 53 54 /// picture YUV buffer class 55 class TComPicYuv 56 { 57 private: 58 59 // ------------------------------------------------------------------------------------------------ 60 // YUV buffer 61 // ------------------------------------------------------------------------------------------------ 62 63 Pel* m_apiPicBuf[MAX_NUM_COMPONENT]; ///< Buffer (including margin) 64 65 Pel* m_piPicOrg[MAX_NUM_COMPONENT]; ///< m_apiPicBufY + m_iMarginLuma*getStride() + m_iMarginLuma 66 67 // ------------------------------------------------------------------------------------------------ 68 // Parameter for general YUV buffer usage 69 // ------------------------------------------------------------------------------------------------ 70 71 Int m_iPicWidth; ///< Width of picture in pixels 72 Int m_iPicHeight; ///< Height of picture in pixels 73 ChromaFormat m_chromaFormatIDC; ///< Chroma Format 74 75 Int* m_ctuOffsetInBuffer[MAX_NUM_CHANNEL_TYPE]; ///< Gives an offset in the buffer for a given CTU (and channel) 76 Int* m_subCuOffsetInBuffer[MAX_NUM_CHANNEL_TYPE];///< Gives an offset in the buffer for a given sub-CU (and channel), relative to start of CTU 77 78 Int m_iMarginX; ///< margin of Luma channel (chroma's may be smaller, depending on ratio) 79 Int m_iMarginY; ///< margin of Luma channel (chroma's may be smaller, depending on ratio) 80 81 Bool m_bIsBorderExtended; 82 83 public: 84 TComPicYuv (); 85 virtual ~TComPicYuv (); 86 87 // ------------------------------------------------------------------------------------------------ 88 // Memory management 89 // ------------------------------------------------------------------------------------------------ 90 91 Void create (const Int iPicWidth, 92 const Int iPicHeight, 93 const ChromaFormat chromaFormatIDC, 94 const UInt uiMaxCUWidth, 95 const UInt uiMaxCUHeight, 96 const UInt uiMaxCUDepth ); 97 98 Void destroy (); 99 100 // The following have been removed - Use CHROMA_400 in the above function call. 101 //Void createLuma ( Int iPicWidth, Int iPicHeight, UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uhMaxCUDepth ); 102 //Void destroyLuma (); 103 104 // ------------------------------------------------------------------------------------------------ 105 // Get information of picture 106 // ------------------------------------------------------------------------------------------------ 107 getWidth(const ComponentID id)108 Int getWidth (const ComponentID id) const { return m_iPicWidth >> getComponentScaleX(id); } getHeight(const ComponentID id)109 Int getHeight (const ComponentID id) const { return m_iPicHeight >> getComponentScaleY(id); } getChromaFormat()110 ChromaFormat getChromaFormat () const { return m_chromaFormatIDC; } getNumberValidComponents()111 UInt getNumberValidComponents() const { return ::getNumberValidComponents(m_chromaFormatIDC); } 112 getStride(const ComponentID id)113 Int getStride (const ComponentID id) const { return ((m_iPicWidth ) + (m_iMarginX <<1)) >> getComponentScaleX(id); } getTotalHeight(const ComponentID id)114 Int getTotalHeight (const ComponentID id) const { return ((m_iPicHeight ) + (m_iMarginY <<1)) >> getComponentScaleY(id); } 115 getMarginX(const ComponentID id)116 Int getMarginX (const ComponentID id) const { return m_iMarginX >> getComponentScaleX(id); } getMarginY(const ComponentID id)117 Int getMarginY (const ComponentID id) const { return m_iMarginY >> getComponentScaleY(id); } 118 119 // ------------------------------------------------------------------------------------------------ 120 // Access function for picture buffer 121 // ------------------------------------------------------------------------------------------------ 122 123 // Access starting position of picture buffer with margin getBuf(const ComponentID ch)124 Pel* getBuf (const ComponentID ch) { return m_apiPicBuf[ch]; } 125 126 // Access starting position of original picture getAddr(const ComponentID ch)127 Pel* getAddr (const ComponentID ch) { return m_piPicOrg[ch]; } getAddr(const ComponentID ch)128 const Pel* getAddr (const ComponentID ch) const { return m_piPicOrg[ch]; } 129 130 // Access starting position of original picture for specific coding unit (CU) or partition unit (PU) getAddr(const ComponentID ch,const Int ctuRSAddr)131 Pel* getAddr (const ComponentID ch, const Int ctuRSAddr ) { return m_piPicOrg[ch] + m_ctuOffsetInBuffer[ch==0?0:1][ ctuRSAddr ]; } getAddr(const ComponentID ch,const Int ctuRSAddr)132 const Pel* getAddr (const ComponentID ch, const Int ctuRSAddr ) const { return m_piPicOrg[ch] + m_ctuOffsetInBuffer[ch==0?0:1][ ctuRSAddr ]; } getAddr(const ComponentID ch,const Int ctuRSAddr,const Int uiAbsZorderIdx)133 Pel* getAddr (const ComponentID ch, const Int ctuRSAddr, const Int uiAbsZorderIdx ) 134 { return m_piPicOrg[ch] + m_ctuOffsetInBuffer[ch==0?0:1][ctuRSAddr] + m_subCuOffsetInBuffer[ch==0?0:1][g_auiZscanToRaster[uiAbsZorderIdx]]; } getAddr(const ComponentID ch,const Int ctuRSAddr,const Int uiAbsZorderIdx)135 const Pel* getAddr (const ComponentID ch, const Int ctuRSAddr, const Int uiAbsZorderIdx ) const 136 { return m_piPicOrg[ch] + m_ctuOffsetInBuffer[ch==0?0:1][ctuRSAddr] + m_subCuOffsetInBuffer[ch==0?0:1][g_auiZscanToRaster[uiAbsZorderIdx]]; } 137 getComponentScaleX(const ComponentID id)138 UInt getComponentScaleX(const ComponentID id) const { return ::getComponentScaleX(id, m_chromaFormatIDC); } getComponentScaleY(const ComponentID id)139 UInt getComponentScaleY(const ComponentID id) const { return ::getComponentScaleY(id, m_chromaFormatIDC); } 140 141 // ------------------------------------------------------------------------------------------------ 142 // Miscellaneous 143 // ------------------------------------------------------------------------------------------------ 144 145 // Copy function to picture 146 Void copyToPic ( TComPicYuv* pcPicYuvDst ) const ; 147 148 // Extend function of picture buffer 149 Void extendPicBorder (); 150 151 // Dump picture 152 Void dump (const Char* pFileName, Bool bAdd = false) const ; 153 154 // Set border extension flag setBorderExtension(Bool b)155 Void setBorderExtension(Bool b) { m_bIsBorderExtended = b; } 156 };// END CLASS DEFINITION TComPicYuv 157 158 159 // These functions now return the length of the digest strings. 160 UInt calcChecksum(const TComPicYuv& pic, TComDigest &digest); 161 UInt calcCRC (const TComPicYuv& pic, TComDigest &digest); 162 UInt calcMD5 (const TComPicYuv& pic, TComDigest &digest); 163 std::string digestToString(const TComDigest &digest, Int numChar); 164 //! \} 165 166 #endif // __TCOMPICYUV__ 167