1 /***************************************************************************** 2 * Copyright (C) 2013 x265 project 3 * 4 * Authors: Steve Borho <steve@borho.org> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. 19 * 20 * This program is also available under a commercial proprietary license. 21 * For more information, contact us at license @ x265.com. 22 *****************************************************************************/ 23 24 #ifndef X265_DPB_H 25 #define X265_DPB_H 26 27 #include "piclist.h" 28 29 namespace X265_NS { 30 // private namespace for x265 31 32 class Frame; 33 class FrameData; 34 class Slice; 35 36 class DPB 37 { 38 public: 39 40 int m_lastIDR; 41 int m_pocCRA; 42 int m_maxRefL0; 43 int m_maxRefL1; 44 int m_bOpenGOP; 45 bool m_bRefreshPending; 46 bool m_bTemporalSublayer; 47 PicList m_picList; 48 PicList m_freeList; 49 FrameData* m_frameDataFreeList; 50 DPB(x265_param * param)51 DPB(x265_param *param) 52 { 53 m_lastIDR = 0; 54 m_pocCRA = 0; 55 m_bRefreshPending = false; 56 m_frameDataFreeList = NULL; 57 m_maxRefL0 = param->maxNumReferences; 58 m_maxRefL1 = param->bBPyramid ? 2 : 1; 59 m_bOpenGOP = param->bOpenGOP; 60 m_bTemporalSublayer = !!param->bEnableTemporalSubLayers; 61 } 62 63 ~DPB(); 64 65 void prepareEncode(Frame*); 66 67 void recycleUnreferenced(); 68 69 protected: 70 71 void computeRPS(int curPoc, bool isRAP, RPS * rps, unsigned int maxDecPicBuffer); 72 73 void applyReferencePictureSet(RPS *rps, int curPoc); 74 void decodingRefreshMarking(int pocCurr, NalUnitType nalUnitType); 75 76 NalUnitType getNalUnitType(int curPoc, bool bIsKeyFrame); 77 }; 78 } 79 80 #endif // X265_DPB_H 81