source: SHVCSoftware/branches/SHM-6-dev/source/Lib/TLibDecoder/SyntaxElementParser.cpp @ 1311

Last change on this file since 1311 was 595, checked in by seregin, 11 years ago

merge with SHM-5.0-dev branch

  • Property svn:eol-style set to native
File size: 4.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     SyntaxElementParser.cpp
35    \brief    Parsing functionality high level syntax
36*/
37
38//! \ingroup TLibDecoder
39//! \{
40
41#include "TLibCommon/CommonDef.h"
42#include "TLibCommon/TComRom.h"
43#include "TLibCommon/TComBitStream.h"
44#include "SyntaxElementParser.h"
45
46#if ENC_DEC_TRACE
47
48Void  SyntaxElementParser::xReadCodeTr           (UInt length, UInt& rValue, const Char *pSymbolName)
49{
50  xReadCode (length, rValue);
51  fprintf( g_hTrace, "%8lld  ", g_nSymbolCounter++ );
52  if (length < 10)
53  {
54    fprintf( g_hTrace, "%-50s u(%d)  : %u\n", pSymbolName, length, rValue ); 
55  }
56  else
57  {
58    fprintf( g_hTrace, "%-50s u(%d) : %u\n", pSymbolName, length, rValue ); 
59  }
60  fflush ( g_hTrace );
61}
62
63Void  SyntaxElementParser::xReadUvlcTr           (UInt& rValue, const Char *pSymbolName)
64{
65  xReadUvlc (rValue);
66  fprintf( g_hTrace, "%8lld  ", g_nSymbolCounter++ );
67  fprintf( g_hTrace, "%-50s ue(v) : %u\n", pSymbolName, rValue ); 
68  fflush ( g_hTrace );
69}
70
71Void  SyntaxElementParser::xReadSvlcTr           (Int& rValue, const Char *pSymbolName)
72{
73  xReadSvlc(rValue);
74  fprintf( g_hTrace, "%8lld  ", g_nSymbolCounter++ );
75  fprintf( g_hTrace, "%-50s se(v) : %d\n", pSymbolName, rValue ); 
76  fflush ( g_hTrace );
77}
78
79Void  SyntaxElementParser::xReadFlagTr           (UInt& rValue, const Char *pSymbolName)
80{
81  xReadFlag(rValue);
82  fprintf( g_hTrace, "%8lld  ", g_nSymbolCounter++ );
83  fprintf( g_hTrace, "%-50s u(1)  : %d\n", pSymbolName, rValue ); 
84  fflush ( g_hTrace );
85}
86
87#endif
88
89
90// ====================================================================================================================
91// Protected member functions
92// ====================================================================================================================
93
94Void SyntaxElementParser::xReadCode (UInt uiLength, UInt& ruiCode)
95{
96  assert ( uiLength > 0 );
97  m_pcBitstream->read (uiLength, ruiCode);
98}
99
100Void SyntaxElementParser::xReadUvlc( UInt& ruiVal)
101{
102  UInt uiVal = 0;
103  UInt uiCode = 0;
104  UInt uiLength;
105  m_pcBitstream->read( 1, uiCode );
106
107  if( 0 == uiCode )
108  {
109    uiLength = 0;
110
111    while( ! ( uiCode & 1 ))
112    {
113      m_pcBitstream->read( 1, uiCode );
114      uiLength++;
115    }
116
117    m_pcBitstream->read( uiLength, uiVal );
118
119    uiVal += (1 << uiLength)-1;
120  }
121
122  ruiVal = uiVal;
123}
124
125Void SyntaxElementParser::xReadSvlc( Int& riVal)
126{
127  UInt uiBits = 0;
128  m_pcBitstream->read( 1, uiBits );
129  if( 0 == uiBits )
130  {
131    UInt uiLength = 0;
132
133    while( ! ( uiBits & 1 ))
134    {
135      m_pcBitstream->read( 1, uiBits );
136      uiLength++;
137    }
138
139    m_pcBitstream->read( uiLength, uiBits );
140
141    uiBits += (1 << uiLength);
142    riVal = ( uiBits & 1) ? -(Int)(uiBits>>1) : (Int)(uiBits>>1);
143  }
144  else
145  {
146    riVal = 0;
147  }
148}
149
150Void SyntaxElementParser::xReadFlag (UInt& ruiCode)
151{
152  m_pcBitstream->read( 1, ruiCode );
153}
154
155
156//! \}
157
Note: See TracBrowser for help on using the repository browser.