source: SHVCSoftware/branches/SHM-5.1-dev/source/App/TAppDecoder/TAppDecTop.h @ 959

Last change on this file since 959 was 612, checked in by qualcomm, 11 years ago

JCTVC-P0192: Aligned bumping of sub-DPBs (MACRO: ALIGNED_BUMPING)

Added support to align the bumping process across layers in an access unit, and also clearly invoke the bumping process as given in Annex C. Support for NoOutputOfPriorPicsFlag will be added in a later patch.

From: Adarsh K. Ramasubramonian <aramasub@…>

  • Property svn:eol-style set to native
File size: 6.5 KB
Line 
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     TAppDecTop.h
35    \brief    Decoder application class (header)
36*/
37
38#ifndef __TAPPDECTOP__
39#define __TAPPDECTOP__
40
41#if _MSC_VER > 1000
42#pragma once
43#endif // _MSC_VER > 1000
44
45#include "TLibVideoIO/TVideoIOYuv.h"
46#include "TLibCommon/TComList.h"
47#include "TLibCommon/TComPicYuv.h"
48#include "TLibDecoder/TDecTop.h"
49#include "TAppDecCfg.h"
50
51//! \ingroup TAppDecoder
52//! \{
53
54// ====================================================================================================================
55// Class definition
56// ====================================================================================================================
57#if ALIGNED_BUMPING
58struct DpbStatus;
59#endif
60/// decoder application class
61class TAppDecTop : public TAppDecCfg
62{
63private:
64  // class interface
65#if SVC_EXTENSION
66  TDecTop                         m_acTDecTop [MAX_LAYERS];                    ///< decoder class
67  TDecTop*                        m_apcTDecTop [MAX_LAYERS];                   ///< decoder point class
68  TVideoIOYuv                     m_acTVideoIOYuvReconFile [MAX_LAYERS];        ///< reconstruction YUV class
69#else
70  TDecTop                         m_cTDecTop;                     ///< decoder class
71  TVideoIOYuv                     m_cTVideoIOYuvReconFile;        ///< reconstruction YUV class
72#endif
73 
74  // for output control 
75#if SVC_EXTENSION
76  Int                             m_aiPOCLastDisplay [MAX_LAYERS]; ///< last POC in display order
77#else
78  Int                             m_iPOCLastDisplay;              ///< last POC in display order
79#endif
80 
81public:
82  TAppDecTop();
83  virtual ~TAppDecTop() {}
84 
85  Void  create            (); ///< create internal members
86  Void  destroy           (); ///< destroy internal members
87  Void  decode            (); ///< main decoding function
88 
89protected:
90  Void  xCreateDecLib     (); ///< create internal classes
91  Void  xDestroyDecLib    (); ///< destroy internal classes
92  Void  xInitDecLib       (); ///< initialize decoder class
93 
94#if SVC_EXTENSION
95  Void  xWriteOutput      ( TComList<TComPic*>* pcListPic, UInt layerId, UInt tId ); ///< write YUV to file
96  Void  xFlushOutput      ( TComList<TComPic*>* pcListPic, UInt layerId ); ///< flush all remaining decoded pictures to file
97#else
98  Void  xWriteOutput      ( TComList<TComPic*>* pcListPic , UInt tId); ///< write YUV to file
99  Void  xFlushOutput      ( TComList<TComPic*>* pcListPic ); ///< flush all remaining decoded pictures to file
100#endif
101  Bool  isNaluWithinTargetDecLayerIdSet ( InputNALUnit* nalu ); ///< check whether given Nalu is within targetDecLayerIdSet
102#if ALIGNED_BUMPING
103  Void checkOutputBeforeDecoding(Int layerIdx);
104  Void checkOutputAfterDecoding();
105  Void flushAllPictures(Bool outputPictures); 
106  Void flushAllPictures(Int layerId, Bool outputPictures);
107
108  Void xOutputAndMarkPic( TComPic *pic, const Char *reconFile, const Int layerID, Int &pocLastDisplay, DpbStatus &dpbStatus);
109  Void xFindDPBStatus( std::vector<Int> &listOfPocs
110                            , std::vector<Int> *listOfPocsInEachLayer
111                            , std::vector<Int> *listOfPocsPositionInEachLayer
112                            , DpbStatus &dpbStatus
113                            );
114
115  Bool ifInvokeBumpingBeforeDecoding( const DpbStatus &dpbStatus, const DpbStatus &dpbLimit, const Int layerIdx, const Int subDpbIdx );
116  Bool ifInvokeBumpingAfterDecoding ( const DpbStatus &dpbStatus, const DpbStatus &dpbLimit );
117  Void bumpingProcess(std::vector<Int> &listOfPocs, std::vector<Int> *listOfPocsInEachLayer, std::vector<Int> *listOfPocsPositionInEachLayer, DpbStatus &dpbStatus);
118  Void emptyUnusedPicturesNotNeededForOutput();
119  Void markAllPicturesAsErased();
120  Void markAllPicturesAsErased(Int layerIdx);
121  TComVPS* findDpbParametersFromVps(std::vector<Int> const &listOfPocs, std::vector<Int> const *listOfPocsInEachLayer, std::vector<Int> const *listOfPocsPositionInEachLayer, DpbStatus &maxDpbLimit);
122#endif
123};
124
125#if ALIGNED_BUMPING
126struct DpbStatus
127{
128  // Number of AUs and pictures
129  Int m_numAUsNotDisplayed;
130  Int m_numPicsNotDisplayedInLayer[MAX_LAYERS];
131  Int m_numPicsInLayer[MAX_LAYERS];   // Pictures marked as used_for_reference or needed for output in the layer
132  Int m_numPicsInSubDpb[MAX_LAYERS];  // Pictures marked as used_for_reference or needed for output in the sub-DPB
133  Bool m_maxLatencyIncrease;
134  Int m_maxLatencyPictures;
135 
136  Int m_numSubDpbs;
137  Int m_numLayers;
138
139  DpbStatus()
140  {
141    init();
142  }
143  Void init()
144  {
145    m_numAUsNotDisplayed = 0;
146    m_maxLatencyIncrease  = false;
147    m_maxLatencyPictures  = 0;
148    ::memset( m_numPicsInLayer,  0, sizeof(m_numPicsInLayer)  );
149    ::memset( m_numPicsInSubDpb, 0, sizeof(m_numPicsInSubDpb) );
150    ::memset(m_numPicsNotDisplayedInLayer, 0, sizeof(m_numPicsNotDisplayedInLayer) );
151    m_numSubDpbs = -1;
152    m_numLayers = -1;
153  }
154};
155#endif
156//! \}
157
158#endif
159
Note: See TracBrowser for help on using the repository browser.