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

Last change on this file since 930 was 924, checked in by seregin, 10 years ago

in order to generate the metadata related to conformance bitstreams, patch was provided by Ramasubramonian, Adarsh Krishnan <aramasub@…>

  • Property svn:eol-style set to native
File size: 6.9 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#if CONFORMANCE_BITSTREAM_MODE
74  TVideoIOYuv   m_confReconFile[63];        ///< decode YUV files
75#endif 
76  // for output control 
77#if SVC_EXTENSION
78  Int                             m_aiPOCLastDisplay [MAX_LAYERS]; ///< last POC in display order
79#else
80  Int                             m_iPOCLastDisplay;              ///< last POC in display order
81#endif
82 
83public:
84  TAppDecTop();
85  virtual ~TAppDecTop() {}
86 
87  Void  create            (); ///< create internal members
88  Void  destroy           (); ///< destroy internal members
89  Void  decode            (); ///< main decoding function
90 
91protected:
92  Void  xCreateDecLib     (); ///< create internal classes
93  Void  xDestroyDecLib    (); ///< destroy internal classes
94  Void  xInitDecLib       (); ///< initialize decoder class
95 
96#if SVC_EXTENSION
97  Void  xWriteOutput      ( TComList<TComPic*>* pcListPic, UInt layerId, UInt tId ); ///< write YUV to file
98  Void  xFlushOutput      ( TComList<TComPic*>* pcListPic, UInt layerId ); ///< flush all remaining decoded pictures to file
99#else
100  Void  xWriteOutput      ( TComList<TComPic*>* pcListPic , UInt tId); ///< write YUV to file
101  Void  xFlushOutput      ( TComList<TComPic*>* pcListPic ); ///< flush all remaining decoded pictures to file
102#endif
103  Bool  isNaluWithinTargetDecLayerIdSet ( InputNALUnit* nalu ); ///< check whether given Nalu is within targetDecLayerIdSet
104#if ALIGNED_BUMPING
105  Void checkOutputBeforeDecoding(Int layerIdx);
106  Void checkOutputAfterDecoding();
107  Void flushAllPictures(Bool outputPictures); 
108  Void flushAllPictures(Int layerId, Bool outputPictures);
109
110  Void xOutputAndMarkPic( TComPic *pic, const Char *reconFile, const Int layerID, Int &pocLastDisplay, DpbStatus &dpbStatus);
111#if POC_RESET_IDC_DECODER
112  Void outputAllPictures(Int layerId, Bool notOutputCurrAu);
113#endif
114  Void xFindDPBStatus( std::vector<Int> &listOfPocs
115                            , std::vector<Int> *listOfPocsInEachLayer
116                            , std::vector<Int> *listOfPocsPositionInEachLayer
117                            , DpbStatus &dpbStatus
118#if POC_RESET_IDC_DECODER
119                            , Bool notOutputCurrAu = true
120#endif
121                            );
122
123  Bool ifInvokeBumpingBeforeDecoding( const DpbStatus &dpbStatus, const DpbStatus &dpbLimit, const Int layerIdx, const Int subDpbIdx );
124  Bool ifInvokeBumpingAfterDecoding ( const DpbStatus &dpbStatus, const DpbStatus &dpbLimit );
125  Void bumpingProcess(std::vector<Int> &listOfPocs, std::vector<Int> *listOfPocsInEachLayer, std::vector<Int> *listOfPocsPositionInEachLayer, DpbStatus &dpbStatus);
126  Void emptyUnusedPicturesNotNeededForOutput();
127  Void markAllPicturesAsErased();
128  Void markAllPicturesAsErased(Int layerIdx);
129  TComVPS* findDpbParametersFromVps(std::vector<Int> const &listOfPocs, std::vector<Int> const *listOfPocsInEachLayer, std::vector<Int> const *listOfPocsPositionInEachLayer, DpbStatus &maxDpbLimit);
130#endif
131};
132
133#if ALIGNED_BUMPING
134struct DpbStatus
135{
136  // Number of AUs and pictures
137  Int m_numAUsNotDisplayed;
138  Int m_numPicsNotDisplayedInLayer[MAX_LAYERS];
139#if RESOLUTION_BASED_DPB
140  Int m_numPicsInLayer[MAX_LAYERS];   // Pictures marked as used_for_reference or needed for output in the layer
141#endif
142  Int m_numPicsInSubDpb[MAX_LAYERS];  // Pictures marked as used_for_reference or needed for output in the sub-DPB
143  Bool m_maxLatencyIncrease;
144  Int m_maxLatencyPictures;
145 
146  Int m_numSubDpbs;
147  Int m_numLayers;
148
149  DpbStatus()
150  {
151    init();
152  }
153  Void init()
154  {
155    m_numAUsNotDisplayed = 0;
156    m_maxLatencyIncrease  = false;
157    m_maxLatencyPictures  = 0;
158#if RESOLUTION_BASED_DPB
159    ::memset( m_numPicsInLayer,  0, sizeof(m_numPicsInLayer)  );
160#endif
161    ::memset( m_numPicsInSubDpb, 0, sizeof(m_numPicsInSubDpb) );
162    ::memset(m_numPicsNotDisplayedInLayer, 0, sizeof(m_numPicsNotDisplayedInLayer) );
163    m_numSubDpbs = -1;
164    m_numLayers = -1;
165  }
166};
167#endif
168//! \}
169
170#endif
171
Note: See TracBrowser for help on using the repository browser.