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

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

JCTVC-Y0028 was adopted to support 10bit down conversion

File size: 8.0 KB
RevLine 
[595]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 *
[1549]6 * Copyright (c) 2010-2016, ITU/ISO/IEC
[595]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>
[1335]42#include "../../Lib/TLibCommon/CommonDef.h"
[595]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 )
[1587]96    , inputBitDepth     ( 8 )
97    , outputBitDepth    ( 8 )
[595]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;
[1587]133
134  //===== parameters for bit depth =====
135  int inputBitDepth;
136  int outputBitDepth;
[595]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  //=====================================
[1587]154  void  downsamplingSVC             ( short*          pucBufferY,    int   iStrideY,
155                                      short*          pucBufferU,    int   iStrideU,
156                                      short*          pucBufferV,    int   iStrideV,
[595]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 ---
[1587]172  void  xCopyToImageBuffer          ( short*        pucSrc,
[595]173                                      int                   iWidth,
174                                      int                   iHeight,
175                                      int                   iStride );
[1587]176  void  xCopyFromImageBuffer        ( short*        pucDes,
[595]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,
[1587]187                                      bool                  bBotFlag,
188                                      int                   inputBitDepth, 
189                                      int                   outputBitDepth);
[595]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,
[1587]193                                      int  iAddX,    int  iAddY,    int  iDeltaX,  int  iDeltaY,
194                                      int inputBitDepth, int outputBitDepth);
[595]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.