source: SHVCSoftware/branches/SHM-dev/source/App/TAppDownConvert/DownConvert.h @ 1590

Last change on this file since 1590 was 1587, checked in by interdigital, 8 years ago

JCTVC-Y0028 was adopted to support 10bit down conversion

File size: 8.0 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-2016, 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#ifndef _DOWN_CONVERT_
35#define _DOWN_CONVERT_
36
37#define ZERO_PHASE        1
38
39#define ESS_NONE      0
40
41#include <cassert>
42#include "../../Lib/TLibCommon/CommonDef.h"
43
44#ifndef  gMax
45#define  gMax(x,y)   ((x)>(y)?(x):(y))
46#define  gMin(x,y)   ((x)<(y)?(x):(y))
47
48#define ROFRS( exp, retVal )  \
49{                             \
50  if( !( exp ) )              \
51  {                           \
52  return retVal;            \
53  }                           \
54}
55
56#define ROTRS( exp, retVal )  \
57{                             \
58  if( ( exp ) )               \
59  {                           \
60  return retVal;            \
61  }                           \
62}
63
64#endif
65
66class ResizeParameters
67{
68public:
69  ResizeParameters()
70    : m_iExtendedSpatialScalability ( ESS_NONE )
71    , m_iLevelIdc                   ( 0 )
72    , m_bFrameMbsOnlyFlag           ( true )
73    , m_bFieldPicFlag               ( false )
74    , m_bBotFieldFlag               ( false )
75    , m_bIsMbAffFrame               ( false )
76    , m_iFrameWidth                 ( 0 )
77    , m_iFrameHeight                ( 0 )
78    , m_iWidthInSamples             ( 0 )
79    , m_iHeightInSamples            ( 0 )
80    , m_iChromaPhaseX               ( 0 )
81    , m_iChromaPhaseY               ( 0 )
82    , m_iScaledRefFrmWidth          ( 0 )
83    , m_iScaledRefFrmHeight         ( 0 )
84    , m_iLeftFrmOffset              ( 0 )
85    , m_iTopFrmOffset               ( 0 )
86    , m_iRefLayerChromaPhaseX       ( 0 )
87    , m_iRefLayerChromaPhaseY       ( 0 )
88    , m_bRefLayerFrameMbsOnlyFlag   ( true )
89    , m_bRefLayerFieldPicFlag       ( false )
90    , m_bRefLayerBotFieldFlag       ( false )
91    , m_bRefLayerIsMbAffFrame       ( false )
92    , m_iRefLayerFrmWidth           ( 0 )
93    , m_iRefLayerFrmHeight          ( 0 )
94    , m_iRefLayerWidthInSamples     ( 0 )
95    , m_iRefLayerHeightInSamples    ( 0 )
96    , inputBitDepth     ( 8 )
97    , outputBitDepth    ( 8 )
98  { 
99  };
100
101
102
103public:
104  //===== parameters of current layer =====
105  Int   m_iExtendedSpatialScalability;
106  Int   m_iLevelIdc;
107  Bool  m_bFrameMbsOnlyFlag;
108  Bool  m_bFieldPicFlag;
109  Bool  m_bBotFieldFlag;
110  Bool  m_bIsMbAffFrame;
111  Int   m_iFrameWidth;
112  Int   m_iFrameHeight;
113  Int   m_iWidthInSamples;
114  Int   m_iHeightInSamples;
115  Int   m_iChromaPhaseX;
116  Int   m_iChromaPhaseY;
117  Int   m_iScaledRefFrmWidth;     // also in PictureParameters
118  Int   m_iScaledRefFrmHeight;    // also in PictureParameters
119  Int   m_iLeftFrmOffset;         // also in PictureParameters
120  Int   m_iTopFrmOffset;          // also in PictureParameters
121  Int   m_iRefLayerChromaPhaseX;  // also in PictureParameters
122  Int   m_iRefLayerChromaPhaseY;  // also in PictureParameters
123
124  //===== parameters for base layer =====
125  Bool  m_bRefLayerFrameMbsOnlyFlag;
126  Bool  m_bRefLayerFieldPicFlag;
127  Bool  m_bRefLayerBotFieldFlag;
128  Bool  m_bRefLayerIsMbAffFrame;
129  Int   m_iRefLayerFrmWidth;
130  Int   m_iRefLayerFrmHeight;
131  Int   m_iRefLayerWidthInSamples;
132  Int   m_iRefLayerHeightInSamples;
133
134  //===== parameters for bit depth =====
135  int inputBitDepth;
136  int outputBitDepth;
137};
138
139
140class DownConvert
141{
142public:
143  //========================
144  // general main functions
145  //========================
146  DownConvert   ();
147  ~DownConvert  ();
148  bool  init    ( int iMaxWidth, int iMaxHeight, int iMaxMargin = 0 );
149  void  destroy ();
150
151  //=====================================
152  // main functions for DownConvert Tool
153  //=====================================
154  void  downsamplingSVC             ( short*          pucBufferY,    int   iStrideY,
155                                      short*          pucBufferU,    int   iStrideU,
156                                      short*          pucBufferV,    int   iStrideV,
157                                      ResizeParameters*       pcParameters,  bool  bBotCoincided = false );
158
159  //==========================
160  // general helper functions
161  //==========================
162  //--- delete buffers ---
163  void  xDestroy                    ();
164  //--- general clipping ---
165  int   xClip                       ( int                     iValue,
166                                      int                     imin,
167                                      int                     imax );
168  //=======================================
169  // helper functions for DownConvert Tool
170  //=======================================
171  //--- place to and get from image buffer ---
172  void  xCopyToImageBuffer          ( short*        pucSrc,
173                                      int                   iWidth,
174                                      int                   iHeight,
175                                      int                   iStride );
176  void  xCopyFromImageBuffer        ( short*        pucDes,
177                                      int                   iWidth,
178                                      int                   iHeight,
179                                      int                   iStride );
180  //--- SVC non-normative downsampling ---
181  void  xCompDownsampling           ( ResizeParameters*     pcParameters,
182                                      bool                  bChroma,
183                                      bool                  bBotFlag,
184                                      bool                  bVerticalDownsampling );
185  void  xVertDownsampling           ( int                   iBaseW,
186                                      int                   iBaseH,
187                                      bool                  bBotFlag,
188                                      int                   inputBitDepth, 
189                                      int                   outputBitDepth);
190  void  xBasicDownsampling          ( int  iBaseW,   int  iBaseH,   int  iCurrW,   int  iCurrH,
191                                      int  iLOffset, int  iTOffset, int  iROffset, int  iBOffset,
192                                      int  iShiftX,  int  iShiftY,  int  iScaleX,  int  iScaleY,
193                                      int  iAddX,    int  iAddY,    int  iDeltaX,  int  iDeltaY,
194                                      int inputBitDepth, int outputBitDepth);
195private:
196  //===== member variables =====
197  int         m_iImageStride;
198  int*        m_paiImageBuffer;
199  int*        m_paiTmp1dBuffer;
200};
201
202
203__inline Int CeilLog2( Int i )
204{
205  Int s = 0; i--;
206  while( i > 0 )
207  {
208    s++;
209    i >>= 1;
210  }
211  return s;
212}
213
214
215#endif // _DOWN_CONVERT_
216
217
Note: See TracBrowser for help on using the repository browser.