182 lines
9 KiB
C
182 lines
9 KiB
C
|
/* The copyright in this software is being made available under the BSD
|
||
|
* License, included below. This software may be subject to other third party
|
||
|
* and contributor rights, including patent rights, and no such rights are
|
||
|
* granted under this license.
|
||
|
*
|
||
|
* Copyright (c) 2010-2014, ITU/ISO/IEC
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are met:
|
||
|
*
|
||
|
* * Redistributions of source code must retain the above copyright notice,
|
||
|
* this list of conditions and the following disclaimer.
|
||
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
||
|
* this list of conditions and the following disclaimer in the documentation
|
||
|
* and/or other materials provided with the distribution.
|
||
|
* * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
|
||
|
* be used to endorse or promote products derived from this software without
|
||
|
* specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
|
||
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
|
||
|
/** \file TComPic.h
|
||
|
\brief picture class (header)
|
||
|
*/
|
||
|
|
||
|
#ifndef __TCOMPIC__
|
||
|
#define __TCOMPIC__
|
||
|
|
||
|
// Include files
|
||
|
#include "CommonDef.h"
|
||
|
#include "TComPicSym.h"
|
||
|
#include "TComPicYuv.h"
|
||
|
#include "TComBitStream.h"
|
||
|
|
||
|
//! \ingroup TLibCommon
|
||
|
//! \{
|
||
|
|
||
|
// ====================================================================================================================
|
||
|
// Class definition
|
||
|
// ====================================================================================================================
|
||
|
|
||
|
/// picture class (symbol + YUV buffers)
|
||
|
|
||
|
class TComPic
|
||
|
{
|
||
|
public:
|
||
|
typedef enum { PIC_YUV_ORG=0, PIC_YUV_REC=1, PIC_YUV_TRUE_ORG=2, NUM_PIC_YUV=3 } PIC_YUV_T;
|
||
|
// TRUE_ORG is the input file without any pre-encoder colour space conversion (but with possible bit depth increment)
|
||
|
TComPicYuv* getPicYuvTrueOrg() { return m_apcPicYuv[PIC_YUV_TRUE_ORG]; }
|
||
|
|
||
|
private:
|
||
|
UInt m_uiTLayer; // Temporal layer
|
||
|
Bool m_bUsedByCurr; // Used by current picture
|
||
|
Bool m_bIsLongTerm; // IS long term picture
|
||
|
TComPicSym* m_apcPicSym; // Symbol
|
||
|
TComPicYuv* m_apcPicYuv[NUM_PIC_YUV];
|
||
|
|
||
|
TComPicYuv* m_pcPicYuvPred; // Prediction
|
||
|
TComPicYuv* m_pcPicYuvResi; // Residual
|
||
|
Bool m_bReconstructed;
|
||
|
Bool m_bNeededForOutput;
|
||
|
UInt m_uiCurrSliceIdx; // Index of current slice
|
||
|
Bool m_bCheckLTMSB;
|
||
|
|
||
|
Int m_numReorderPics[MAX_TLAYER];
|
||
|
Window m_conformanceWindow;
|
||
|
Window m_defaultDisplayWindow;
|
||
|
|
||
|
Bool m_isTop;
|
||
|
Bool m_isField;
|
||
|
|
||
|
std::vector<std::vector<TComDataCU*> > m_vSliceCUDataLink;
|
||
|
|
||
|
SEIMessages m_SEIs; ///< Any SEI messages that have been received. If !NULL we own the object.
|
||
|
|
||
|
public:
|
||
|
TComPic();
|
||
|
virtual ~TComPic();
|
||
|
|
||
|
Void create( Int iWidth, Int iHeight, ChromaFormat chromaFormatIDC, UInt uiMaxWidth, UInt uiMaxHeight, UInt uiMaxDepth, Window &conformanceWindow, Window &defaultDisplayWindow,
|
||
|
Int *numReorderPics,Bool bIsVirtual /*= false*/ );
|
||
|
|
||
|
virtual Void destroy();
|
||
|
|
||
|
UInt getTLayer() const { return m_uiTLayer; }
|
||
|
Void setTLayer( UInt uiTLayer ) { m_uiTLayer = uiTLayer; }
|
||
|
|
||
|
Bool getUsedByCurr() const { return m_bUsedByCurr; }
|
||
|
Void setUsedByCurr( Bool bUsed ) { m_bUsedByCurr = bUsed; }
|
||
|
Bool getIsLongTerm() const { return m_bIsLongTerm; }
|
||
|
Void setIsLongTerm( Bool lt ) { m_bIsLongTerm = lt; }
|
||
|
Void setCheckLTMSBPresent (Bool b ) {m_bCheckLTMSB=b;}
|
||
|
Bool getCheckLTMSBPresent () { return m_bCheckLTMSB;}
|
||
|
|
||
|
TComPicSym* getPicSym() { return m_apcPicSym; }
|
||
|
TComSlice* getSlice(Int i) { return m_apcPicSym->getSlice(i); }
|
||
|
Int getPOC() const { return m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getPOC(); }
|
||
|
TComDataCU* getCtu( UInt ctuRsAddr ) { return m_apcPicSym->getCtu( ctuRsAddr ); }
|
||
|
const TComDataCU* getCtu( UInt ctuRsAddr ) const { return m_apcPicSym->getCtu( ctuRsAddr ); }
|
||
|
|
||
|
TComPicYuv* getPicYuvOrg() { return m_apcPicYuv[PIC_YUV_ORG]; }
|
||
|
TComPicYuv* getPicYuvRec() { return m_apcPicYuv[PIC_YUV_REC]; }
|
||
|
|
||
|
TComPicYuv* getPicYuvPred() { return m_pcPicYuvPred; }
|
||
|
TComPicYuv* getPicYuvResi() { return m_pcPicYuvResi; }
|
||
|
Void setPicYuvPred( TComPicYuv* pcPicYuv ) { m_pcPicYuvPred = pcPicYuv; }
|
||
|
Void setPicYuvResi( TComPicYuv* pcPicYuv ) { m_pcPicYuvResi = pcPicYuv; }
|
||
|
|
||
|
UInt getNumberOfCtusInFrame() const { return m_apcPicSym->getNumberOfCtusInFrame(); }
|
||
|
UInt getNumPartInCtuWidth() const { return m_apcPicSym->getNumPartInCtuWidth(); }
|
||
|
UInt getNumPartInCtuHeight() const { return m_apcPicSym->getNumPartInCtuHeight(); }
|
||
|
UInt getNumPartitionsInCtu() const { return m_apcPicSym->getNumPartitionsInCtu(); }
|
||
|
UInt getFrameWidthInCtus() const { return m_apcPicSym->getFrameWidthInCtus(); }
|
||
|
UInt getFrameHeightInCtus() const { return m_apcPicSym->getFrameHeightInCtus(); }
|
||
|
UInt getMinCUWidth() const { return m_apcPicSym->getMinCUWidth(); }
|
||
|
UInt getMinCUHeight() const { return m_apcPicSym->getMinCUHeight(); }
|
||
|
|
||
|
Int getStride(const ComponentID id) const { return m_apcPicYuv[PIC_YUV_REC]->getStride(id); }
|
||
|
Int getComponentScaleX(const ComponentID id) const { return m_apcPicYuv[PIC_YUV_REC]->getComponentScaleX(id); }
|
||
|
Int getComponentScaleY(const ComponentID id) const { return m_apcPicYuv[PIC_YUV_REC]->getComponentScaleY(id); }
|
||
|
ChromaFormat getChromaFormat() const { return m_apcPicYuv[PIC_YUV_REC]->getChromaFormat(); }
|
||
|
Int getNumberValidComponents() const { return m_apcPicYuv[PIC_YUV_REC]->getNumberValidComponents(); }
|
||
|
|
||
|
Void setReconMark (Bool b) { m_bReconstructed = b; }
|
||
|
Bool getReconMark () const { return m_bReconstructed; }
|
||
|
Void setOutputMark (Bool b) { m_bNeededForOutput = b; }
|
||
|
Bool getOutputMark () const { return m_bNeededForOutput; }
|
||
|
|
||
|
Void setNumReorderPics(Int i, UInt tlayer) { m_numReorderPics[tlayer] = i; }
|
||
|
Int getNumReorderPics(UInt tlayer) { return m_numReorderPics[tlayer]; }
|
||
|
|
||
|
Void compressMotion();
|
||
|
UInt getCurrSliceIdx() const { return m_uiCurrSliceIdx; }
|
||
|
Void setCurrSliceIdx(UInt i) { m_uiCurrSliceIdx = i; }
|
||
|
UInt getNumAllocatedSlice() const {return m_apcPicSym->getNumAllocatedSlice();}
|
||
|
Void allocateNewSlice() {m_apcPicSym->allocateNewSlice(); }
|
||
|
Void clearSliceBuffer() {m_apcPicSym->clearSliceBuffer(); }
|
||
|
|
||
|
Window& getConformanceWindow() { return m_conformanceWindow; }
|
||
|
Window& getDefDisplayWindow() { return m_defaultDisplayWindow; }
|
||
|
|
||
|
Bool getSAOMergeAvailability(Int currAddr, Int mergeAddr);
|
||
|
|
||
|
UInt getSubstreamForCtuAddr(const UInt ctuAddr, const Bool bAddressInRaster, TComSlice *pcSlice);
|
||
|
|
||
|
/* field coding parameters*/
|
||
|
|
||
|
Void setTopField(Bool b) {m_isTop = b;}
|
||
|
Bool isTopField() {return m_isTop;}
|
||
|
Void setField(Bool b) {m_isField = b;}
|
||
|
Bool isField() {return m_isField;}
|
||
|
|
||
|
/** transfer ownership of seis to this picture */
|
||
|
Void setSEIs(SEIMessages& seis) { m_SEIs = seis; }
|
||
|
|
||
|
/**
|
||
|
* return the current list of SEI messages associated with this picture.
|
||
|
* Pointer is valid until this->destroy() is called */
|
||
|
SEIMessages& getSEIs() { return m_SEIs; }
|
||
|
|
||
|
/**
|
||
|
* return the current list of SEI messages associated with this picture.
|
||
|
* Pointer is valid until this->destroy() is called */
|
||
|
const SEIMessages& getSEIs() const { return m_SEIs; }
|
||
|
};// END CLASS DEFINITION TComPic
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
#endif // __TCOMPIC__
|