[x265-commits] [x265] primitives: fix ordering of LUMA_4x16 LUMA_16x4 to match ...

Steve Borho steve at borho.org
Tue Oct 29 19:37:40 CET 2013


details:   http://hg.videolan.org/x265/rev/9713ec98fa8a
branches:  stable
changeset: 4722:9713ec98fa8a
user:      Steve Borho <steve at borho.org>
date:      Tue Oct 29 02:33:03 2013 -0500
description:
primitives: fix ordering of LUMA_4x16 LUMA_16x4 to match other AMP partitions

This also fixes the testbench to properly represent 16x4 and 4x16 partition
primitives
Subject: [x265] encoder: prevent divide by zero in elapsedVideoTime calculation

details:   http://hg.videolan.org/x265/rev/6528ab023062
branches:  stable
changeset: 4723:6528ab023062
user:      Steve Borho <steve at borho.org>
date:      Fri Oct 25 15:49:46 2013 -0500
description:
encoder: prevent divide by zero in elapsedVideoTime calculation
Subject: [x265] rc: improvements for ABR

details:   http://hg.videolan.org/x265/rev/69acb3cb777f
branches:  stable
changeset: 4724:69acb3cb777f
user:      idxa
date:      Mon Oct 28 20:23:45 2013 +0800
description:
rc: improvements for ABR

1. modify rateTolerance from 0.1 to 1.0, in order to allow the final bitrate to
fluctuate more(CBR to ABR)

2. ncu in initialization of ratecontrol is set according to 16x16 block size
which is same to x264, for the empirical formula in x264 is for 16x16 size.

3. do more modification to make ratecontrol algorithm of x265 more similar to
x264 for x264 has been developed for about 10 years and is very mature , it is
reasonale to take its method firstly.
Subject: [x265] Added tag 0.5 for changeset 69acb3cb777f

details:   http://hg.videolan.org/x265/rev/9eef2952ea16
branches:  stable
changeset: 4725:9eef2952ea16
user:      Steve Borho <steve at borho.org>
date:      Tue Oct 29 12:40:58 2013 -0500
description:
Added tag 0.5 for changeset 69acb3cb777f
Subject: [x265] Merge with stable

details:   http://hg.videolan.org/x265/rev/8b909d315964
branches:  
changeset: 4726:8b909d315964
user:      Steve Borho <steve at borho.org>
date:      Tue Oct 29 12:41:24 2013 -0500
description:
Merge with stable
Subject: [x265] no-rdo: add no-residue candidate in merge2Nx2N

details:   http://hg.videolan.org/x265/rev/064f309d4862
branches:  
changeset: 4727:064f309d4862
user:      Deepthi Devaki <deepthidevaki at multicorewareinc.com>
date:      Tue Oct 29 11:33:01 2013 +0530
description:
no-rdo: add no-residue candidate in merge2Nx2N
Subject: [x265] asm: assembly code for pixel_sad_16x4

details:   http://hg.videolan.org/x265/rev/fb7b95d11c77
branches:  
changeset: 4728:fb7b95d11c77
user:      Dnyaneshwar Gorade <dnyaneshwar at multicorewareinc.com>
date:      Tue Oct 29 15:07:02 2013 +0530
description:
asm: assembly code for pixel_sad_16x4
Subject: [x265] asm: improvement on chroma_hpp{2,4} by reduce memory operator

details:   http://hg.videolan.org/x265/rev/48b75fc2e614
branches:  
changeset: 4729:48b75fc2e614
user:      Min Chen <chenm003 at 163.com>
date:      Tue Oct 29 20:56:01 2013 +0800
description:
asm: improvement on chroma_hpp{2,4} by reduce memory operator
Subject: [x265] asm: declare asm function pointers for sad_32xN partitions

details:   http://hg.videolan.org/x265/rev/b3208fa4294b
branches:  
changeset: 4730:b3208fa4294b
user:      Dnyaneshwar Gorade <dnyaneshwar at multicorewareinc.com>
date:      Tue Oct 29 18:00:32 2013 +0530
description:
asm: declare asm function pointers for sad_32xN partitions
Subject: [x265] no_rdo: implementation of new early exit

details:   http://hg.videolan.org/x265/rev/0e0d0d2e1d2b
branches:  
changeset: 4731:0e0d0d2e1d2b
user:      Sumalatha Polureddy
date:      Tue Oct 29 15:33:13 2013 +0530
description:
no_rdo: implementation of new early exit

early exit is done when the RD cost of best mode at depth "n" is less than the
average of RD cost of the CU's at depth "n" of previosuly coded CU's(CUAbove,
CUAboveRight, CUAoveLeft, CULeft, CUColocated).
For HD videos
performance improvement of 20 to 27%
bitrate increases by 0.75 to 0.02%
Subject: [x265] Cleanups: MVField - make members public.

details:   http://hg.videolan.org/x265/rev/f1a1d4f19db4
branches:  
changeset: 4732:f1a1d4f19db4
user:      Deepthi Devaki <deepthidevaki at multicorewareinc.com>
date:      Tue Oct 29 15:20:51 2013 +0530
description:
Cleanups: MVField - make members public.

set and clear methods take many cycles, where most of the time only one index need to be set. By giving public access, caller can set required indexes.
Subject: [x265] Cleanups: Remove call to setALLMVField, and set only required members.

details:   http://hg.videolan.org/x265/rev/6552629b45c5
branches:  
changeset: 4733:6552629b45c5
user:      Deepthi Devaki <deepthidevaki at multicorewareinc.com>
date:      Tue Oct 29 15:22:28 2013 +0530
description:
Cleanups: Remove call to setALLMVField, and set only required members.
Subject: [x265] cleanups: Remove unnecessary reset.

details:   http://hg.videolan.org/x265/rev/50cd62d85ead
branches:  
changeset: 4734:50cd62d85ead
user:      Deepthi Devaki <deepthidevaki at multicorewareinc.com>
date:      Tue Oct 29 15:26:50 2013 +0530
description:
cleanups: Remove unnecessary reset.

If refIdx is set to NOT_VALID, mv will not be used. Hence resetting MVs to 0 can be safely removed.
Subject: [x265] TComDataCU: Remove initializations in initCU() already initialized in create()

details:   http://hg.videolan.org/x265/rev/deac0d819c43
branches:  
changeset: 4735:deac0d819c43
user:      Gopu Govindaswamy <gopu at multicorewareinc.com>
date:      Tue Oct 29 14:15:28 2013 +0530
description:
TComDataCU: Remove initializations in initCU() already initialized in create()

currently m_partSizes, m_mvpIdx[0] and m_mvpIdx[1] all three variables
initialized using memset in TComDataCU::create() and same initialization in
done in TComDataCU::initCU(), removed the memset in initCU() to avoid the
duplicate initilization
Subject: [x265] no-rdo: add no-residue candidate in merge2Nx2N

details:   http://hg.videolan.org/x265/rev/358400cb0c67
branches:  
changeset: 4736:358400cb0c67
user:      Deepthi Devaki <deepthidevaki at multicorewareinc.com>
date:      Tue Oct 29 11:33:01 2013 +0530
description:
no-rdo: add no-residue candidate in merge2Nx2N
Subject: [x265] Merge

details:   http://hg.videolan.org/x265/rev/b02df3ebdf39
branches:  
changeset: 4737:b02df3ebdf39
user:      Steve Borho <steve at borho.org>
date:      Tue Oct 29 13:36:37 2013 -0500
description:
Merge

diffstat:

 .hgtags                                             |     1 +
 source/CMakeLists.txt                               |     7 +-
 source/Lib/TLibCommon/ContextModel.cpp              |   117 -
 source/Lib/TLibCommon/ContextModel.h                |   104 -
 source/Lib/TLibCommon/ContextTables.h               |    77 +-
 source/Lib/TLibCommon/NAL.h                         |    38 +-
 source/Lib/TLibCommon/SEI.h                         |    34 +-
 source/Lib/TLibCommon/TComBitCounter.h              |     8 +-
 source/Lib/TLibCommon/TComBitStream.cpp             |    26 +-
 source/Lib/TLibCommon/TComBitStream.h               |    20 +-
 source/Lib/TLibCommon/TComDataCU.cpp                |   465 +-
 source/Lib/TLibCommon/TComDataCU.h                  |   266 +-
 source/Lib/TLibCommon/TComLoopFilter.cpp            |   166 +-
 source/Lib/TLibCommon/TComLoopFilter.h              |    24 +-
 source/Lib/TLibCommon/TComMotionInfo.cpp            |    20 +-
 source/Lib/TLibCommon/TComMotionInfo.h              |    20 +-
 source/Lib/TLibCommon/TComPattern.cpp               |   100 +-
 source/Lib/TLibCommon/TComPattern.h                 |    24 +-
 source/Lib/TLibCommon/TComPic.cpp                   |    11 +-
 source/Lib/TLibCommon/TComPic.h                     |    27 +-
 source/Lib/TLibCommon/TComPicSym.cpp                |     4 +-
 source/Lib/TLibCommon/TComPicSym.h                  |    40 +-
 source/Lib/TLibCommon/TComPicYuv.cpp                |    64 +-
 source/Lib/TLibCommon/TComPicYuv.h                  |    42 +-
 source/Lib/TLibCommon/TComPicYuvMD5.cpp             |   126 +-
 source/Lib/TLibCommon/TComPrediction.cpp            |    69 +-
 source/Lib/TLibCommon/TComPrediction.h              |    33 +-
 source/Lib/TLibCommon/TComRdCost.h                  |    18 +-
 source/Lib/TLibCommon/TComRom.cpp                   |   134 +-
 source/Lib/TLibCommon/TComRom.h                     |    59 +-
 source/Lib/TLibCommon/TComSampleAdaptiveOffset.cpp  |    86 +-
 source/Lib/TLibCommon/TComSampleAdaptiveOffset.h    |    34 +-
 source/Lib/TLibCommon/TComSlice.cpp                 |   180 +-
 source/Lib/TLibCommon/TComSlice.h                   |   483 +-
 source/Lib/TLibCommon/TComTrQuant.cpp               |   443 +-
 source/Lib/TLibCommon/TComTrQuant.h                 |    68 +-
 source/Lib/TLibCommon/TComWeightPrediction.cpp      |    60 +-
 source/Lib/TLibCommon/TComWeightPrediction.h        |    16 +-
 source/Lib/TLibCommon/TComYuv.cpp                   |   212 +-
 source/Lib/TLibCommon/TComYuv.h                     |   102 +-
 source/Lib/TLibCommon/TypeDef.h                     |    18 +-
 source/Lib/TLibEncoder/NALwrite.cpp                 |     8 +-
 source/Lib/TLibEncoder/NALwrite.h                   |     6 +-
 source/Lib/TLibEncoder/SEIwrite.cpp                 |    18 +-
 source/Lib/TLibEncoder/SyntaxElementWriter.cpp      |    18 +-
 source/Lib/TLibEncoder/SyntaxElementWriter.h        |    14 +-
 source/Lib/TLibEncoder/TEncAnalyze.h                |     4 +-
 source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp        |    47 +-
 source/Lib/TLibEncoder/TEncBinCoderCABAC.h          |    22 +-
 source/Lib/TLibEncoder/TEncCfg.h                    |    28 +-
 source/Lib/TLibEncoder/TEncCu.cpp                   |   162 +-
 source/Lib/TLibEncoder/TEncCu.h                     |    25 +-
 source/Lib/TLibEncoder/TEncEntropy.cpp              |   108 +-
 source/Lib/TLibEncoder/TEncEntropy.h                |   125 +-
 source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp |    44 +-
 source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.h   |     6 +-
 source/Lib/TLibEncoder/TEncSbac.cpp                 |   472 +-
 source/Lib/TLibEncoder/TEncSbac.h                   |    83 +-
 source/Lib/TLibEncoder/TEncSearch.cpp               |  1033 ++--
 source/Lib/TLibEncoder/TEncSearch.h                 |    93 +-
 source/Lib/TLibEncoder/WeightPredAnalysis.cpp       |    52 +-
 source/Lib/TLibEncoder/WeightPredAnalysis.h         |     4 +-
 source/cmake/version.cmake                          |    10 +-
 source/common/CMakeLists.txt                        |    23 +-
 source/common/TShortYUV.cpp                         |    92 +-
 source/common/TShortYUV.h                           |    24 +-
 source/common/common.cpp                            |    14 +-
 source/common/common.h                              |     1 +
 source/common/dct.cpp                               |   200 +-
 source/common/intrapred.cpp                         |     2 +-
 source/common/ipfilter.cpp                          |    65 +-
 source/common/lowres.cpp                            |    25 +-
 source/common/lowres.h                              |    15 +-
 source/common/mv.h                                  |    18 +
 source/common/pixel.cpp                             |    52 +-
 source/common/primitives.cpp                        |    50 +-
 source/common/primitives.h                          |    71 +-
 source/common/reference.cpp                         |   134 -
 source/common/reference.h                           |    78 -
 source/common/threading.h                           |     4 +-
 source/common/threadpool.cpp                        |     6 +-
 source/common/vec/blockcopy-avx2.cpp                |    94 -
 source/common/vec/blockcopy-sse3.cpp                |    14 +-
 source/common/vec/dct-sse3.cpp                      |    18 +-
 source/common/vec/dct-sse41.cpp                     |    18 +-
 source/common/vec/dct-ssse3.cpp                     |    22 +-
 source/common/vec/intra-sse3.cpp                    |  3800 ------------------
 source/common/vec/intra-sse41.cpp                   |     2 +-
 source/common/vec/intra-ssse3.cpp                   |  3946 +++++++++++++++++++
 source/common/vec/ipfilter-sse41.cpp                |    40 +-
 source/common/vec/ipfilter-ssse3.cpp                |    18 +-
 source/common/vec/pixel-avx2.cpp                    |   882 ++-
 source/common/vec/pixel-sse3.cpp                    |    36 +-
 source/common/vec/pixel-sse41.cpp                   |    87 +-
 source/common/vec/pixel16-sse41.cpp                 |    32 +-
 source/common/vec/vec-primitives.cpp                |    26 +-
 source/common/x86/asm-primitives.cpp                |    31 +
 source/common/x86/ipfilter8.asm                     |   334 +-
 source/common/x86/ipfilter8.h                       |     6 +-
 source/common/x86/pixel.h                           |    13 +-
 source/common/x86/sad-a.asm                         |   241 +-
 source/compat/getopt/LGPL.txt                       |   504 ++
 source/compat/getopt/getopt.c                       |  1066 +++++
 source/compat/getopt/getopt.h                       |   182 +
 source/compat/msvc/LGPL.txt                         |   504 --
 source/compat/msvc/getopt.c                         |  1066 -----
 source/compat/msvc/getopt.h                         |   180 -
 source/encoder/CMakeLists.txt                       |     1 +
 source/encoder/compress.cpp                         |   190 +-
 source/encoder/cturow.cpp                           |     6 +-
 source/encoder/cturow.h                             |     2 +-
 source/encoder/dpb.cpp                              |     9 +-
 source/encoder/encoder.cpp                          |    49 +-
 source/encoder/frameencoder.cpp                     |    98 +-
 source/encoder/frameencoder.h                       |     4 +-
 source/encoder/framefilter.cpp                      |   125 +-
 source/encoder/framefilter.h                        |     2 -
 source/encoder/motion.cpp                           |    46 +-
 source/encoder/motion.h                             |     2 +-
 source/encoder/ratecontrol.cpp                      |   127 +-
 source/encoder/ratecontrol.h                        |     2 +-
 source/encoder/reference.cpp                        |   123 +
 source/encoder/reference.h                          |    56 +
 source/encoder/slicetype.cpp                        |    56 +-
 source/encoder/slicetype.h                          |     2 +
 source/input/input.cpp                              |     4 +-
 source/input/input.h                                |     6 +-
 source/input/y4m.cpp                                |   126 +-
 source/input/y4m.h                                  |    14 +-
 source/input/yuv.cpp                                |    82 +-
 source/input/yuv.h                                  |    16 +-
 source/output/output.cpp                            |     2 +-
 source/output/output.h                              |     2 +-
 source/output/y4m.cpp                               |     8 +-
 source/output/yuv.cpp                               |    12 +-
 source/output/yuv.h                                 |     4 +-
 source/test/intrapredharness.cpp                    |     2 +-
 source/test/ipfilterharness.cpp                     |   121 +-
 source/test/ipfilterharness.h                       |     5 +-
 source/test/mbdstharness.cpp                        |    12 +-
 source/test/mbdstharness.h                          |     2 +-
 source/test/pixelharness.cpp                        |   108 +-
 source/test/pixelharness.h                          |     2 +-
 source/x265.cpp                                     |    48 +-
 source/x265.h                                       |    10 +-
 145 files changed, 11216 insertions(+), 10534 deletions(-)

diffs (truncated from 34335 to 300 lines):

diff -r 0c8e2580b410 -r b02df3ebdf39 .hgtags
--- a/.hgtags	Fri Oct 25 14:50:26 2013 -0500
+++ b/.hgtags	Tue Oct 29 13:36:37 2013 -0500
@@ -6,3 +6,4 @@ b3471d9009f5cd487b23c8c61a6bfff8980e54f2
 3767fbfa970ff4b2dc2e8647db0274168727147e 0.3
 2ba6ec553f218d2b06ad803b87d6ec751fd639f7 0.4
 93707bc4fccdaa89a1f2da11db8808ca912a691c 0.4.1
+69acb3cb777f977f5edde908069ac565915dd366 0.5
diff -r 0c8e2580b410 -r b02df3ebdf39 source/CMakeLists.txt
--- a/source/CMakeLists.txt	Fri Oct 25 14:50:26 2013 -0500
+++ b/source/CMakeLists.txt	Tue Oct 29 13:36:37 2013 -0500
@@ -219,13 +219,14 @@ if(ENABLE_CLI)
     file(GLOB OutputFiles output/*.cpp output/*.h)
     source_group(input FILES ${InputFiles})
     source_group(output FILES ${OutputFiles})
+
     check_include_files(getopt.h HAVE_GETOPT_H)
     if(NOT HAVE_GETOPT_H)
         if(MSVC)
-            set_source_files_properties(compat/msvc/getopt.c PROPERTIES COMPILE_FLAGS "/wd4100 /wd4131 -DHAVE_STRING_H=1")
+            set_source_files_properties(compat/getopt/getopt.c PROPERTIES COMPILE_FLAGS "/wd4100 /wd4131 -DHAVE_STRING_H=1")
         endif(MSVC)
-        include_directories(compat/msvc)
-        set(GETOPT compat/msvc/getopt.c compat/msvc/getopt.h)
+        include_directories(compat/getopt)
+        set(GETOPT compat/getopt/getopt.c compat/getopt/getopt.h)
     endif(NOT HAVE_GETOPT_H)
 
     add_executable(cli ../COPYING ${InputFiles} ${OutputFiles} ${GETOPT} x265.cpp x265.h)
diff -r 0c8e2580b410 -r b02df3ebdf39 source/Lib/TLibCommon/ContextModel.cpp
--- a/source/Lib/TLibCommon/ContextModel.cpp	Fri Oct 25 14:50:26 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/* The copyright in this software is being made available under the BSD
- * License, included below. This software may be subject to other third party
- * and contributor rights, including patent rights, and no such rights are
- * granted under this license.
- *
- * Copyright (c) 2010-2013, ITU/ISO/IEC
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  * Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
- *    be used to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** \file     ContextModel.cpp
-    \brief    context model class
-*/
-
-#include "ContextModel.h"
-#include "TComRom.h"
-#include "common.h"
-
-using namespace x265;
-
-//! \ingroup TLibCommon
-//! \{
-
-// ====================================================================================================================
-// Public member functions
-// ====================================================================================================================
-
-/**
- - initialize context model with respect to QP and initialization value
- .
- \param  qp         input QP value
- \param  initValue  8 bit initialization value
- */
-void ContextModel::init(int qp, int initValue)
-{
-    qp = Clip3(0, 51, qp);
-
-    int  slope      = (initValue >> 4) * 5 - 45;
-    int  offset     = ((initValue & 15) << 3) - 16;
-    int  initState  =  X265_MIN(X265_MAX(1, (((slope * qp) >> 4) + offset)), 126);
-    UInt mpState    = (initState >= 64);
-    m_state       = ((mpState ? (initState - 64) : (63 - initState)) << 1) + mpState;
-}
-
-const UChar ContextModel::s_nextStateMPS[128] =
-{
-    2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
-    18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
-    34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
-    50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
-    66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
-    82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
-    98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
-    114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 124, 125, 126, 127
-};
-
-const UChar ContextModel::s_nextStateLPS[128] =
-{
-    1, 0, 0, 1, 2, 3, 4, 5, 4, 5, 8, 9, 8, 9, 10, 11,
-    12, 13, 14, 15, 16, 17, 18, 19, 18, 19, 22, 23, 22, 23, 24, 25,
-    26, 27, 26, 27, 30, 31, 30, 31, 32, 33, 32, 33, 36, 37, 36, 37,
-    38, 39, 38, 39, 42, 43, 42, 43, 44, 45, 44, 45, 46, 47, 48, 49,
-    48, 49, 50, 51, 52, 53, 52, 53, 54, 55, 54, 55, 56, 57, 58, 59,
-    58, 59, 60, 61, 60, 61, 60, 61, 62, 63, 64, 65, 64, 65, 66, 67,
-    66, 67, 66, 67, 68, 69, 68, 69, 70, 71, 70, 71, 70, 71, 72, 73,
-    72, 73, 72, 73, 74, 75, 74, 75, 74, 75, 76, 77, 76, 77, 126, 127
-};
-
-UChar ContextModel::m_nextState[128][2];
-
-void ContextModel::buildNextStateTable()
-{
-    for (int i = 0; i < 128; i++)
-    {
-        for (int j = 0; j < 2; j++)
-        {
-            m_nextState[i][j] = ((i & 1) == j) ? s_nextStateMPS[i] : s_nextStateLPS[i];
-        }
-    }
-}
-
-const int ContextModel::s_entropyBits[128] =
-{
-    // Corrected table, most notably for last state
-    0x07b23, 0x085f9, 0x074a0, 0x08cbc, 0x06ee4, 0x09354, 0x067f4, 0x09c1b, 0x060b0, 0x0a62a, 0x05a9c, 0x0af5b, 0x0548d, 0x0b955, 0x04f56, 0x0c2a9,
-    0x04a87, 0x0cbf7, 0x045d6, 0x0d5c3, 0x04144, 0x0e01b, 0x03d88, 0x0e937, 0x039e0, 0x0f2cd, 0x03663, 0x0fc9e, 0x03347, 0x10600, 0x03050, 0x10f95,
-    0x02d4d, 0x11a02, 0x02ad3, 0x12333, 0x0286e, 0x12cad, 0x02604, 0x136df, 0x02425, 0x13f48, 0x021f4, 0x149c4, 0x0203e, 0x1527b, 0x01e4d, 0x15d00,
-    0x01c99, 0x166de, 0x01b18, 0x17017, 0x019a5, 0x17988, 0x01841, 0x18327, 0x016df, 0x18d50, 0x015d9, 0x19547, 0x0147c, 0x1a083, 0x0138e, 0x1a8a3,
-    0x01251, 0x1b418, 0x01166, 0x1bd27, 0x01068, 0x1c77b, 0x00f7f, 0x1d18e, 0x00eda, 0x1d91a, 0x00e19, 0x1e254, 0x00d4f, 0x1ec9a, 0x00c90, 0x1f6e0,
-    0x00c01, 0x1fef8, 0x00b5f, 0x208b1, 0x00ab6, 0x21362, 0x00a15, 0x21e46, 0x00988, 0x2285d, 0x00934, 0x22ea8, 0x008a8, 0x239b2, 0x0081d, 0x24577,
-    0x007c9, 0x24ce6, 0x00763, 0x25663, 0x00710, 0x25e8f, 0x006a0, 0x26a26, 0x00672, 0x26f23, 0x005e8, 0x27ef8, 0x005ba, 0x284b5, 0x0055e, 0x29057,
-    0x0050c, 0x29bab, 0x004c1, 0x2a674, 0x004a7, 0x2aa5e, 0x0046f, 0x2b32f, 0x0041f, 0x2c0ad, 0x003e7, 0x2ca8d, 0x003ba, 0x2d323, 0x0010c, 0x3bfbb
-};
-//! \}
diff -r 0c8e2580b410 -r b02df3ebdf39 source/Lib/TLibCommon/ContextModel.h
--- a/source/Lib/TLibCommon/ContextModel.h	Fri Oct 25 14:50:26 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/* The copyright in this software is being made available under the BSD
- * License, included below. This software may be subject to other third party
- * and contributor rights, including patent rights, and no such rights are
- * granted under this license.
- *
- * Copyright (c) 2010-2013, ITU/ISO/IEC
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *  * Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
- *    be used to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** \file     ContextModel.h
-    \brief    context model class (header)
-*/
-
-#ifndef X265_CONTEXTMODEL_H
-#define X265_CONTEXTMODEL_H
-
-#include "CommonDef.h"
-
-//! \ingroup TLibCommon
-//! \{
-
-namespace x265 {
-// private namespace
-
-// ====================================================================================================================
-// Class definition
-// ====================================================================================================================
-
-/// context model class
-class ContextModel
-{
-public:
-
-    ContextModel()   { m_state = 0; bBinsCoded = 0; }
-
-    ~ContextModel()  {}
-
-    UChar getState() { return m_state >> 1; } ///< get current state
-
-    UChar getMps()   { return m_state  & 1; } ///< get curret MPS
-
-    void init(int qp, int initValue);   ///< initialize state with initial probability
-
-    void updateLPS()
-    {
-        m_state = s_nextStateLPS[m_state];
-    }
-
-    void updateMPS()
-    {
-        m_state = s_nextStateMPS[m_state];
-    }
-
-    int getEntropyBits(UInt val) { return s_entropyBits[m_state ^ val]; }
-
-    void update(int binVal)
-    {
-        m_state = m_nextState[m_state][binVal];
-    }
-
-    static void buildNextStateTable();
-    static int getEntropyBitsTrm(int val) { return s_entropyBits[126 ^ val]; }
-
-    void setBinsCoded(UInt val)   { bBinsCoded = (UChar)val;  }
-
-    UInt getBinsCoded()           { return bBinsCoded;   }
-
-private:
-
-    UChar         m_state;  ///< internal state variable
-    UChar         bBinsCoded;
-    static const UChar s_nextStateMPS[128];
-    static const UChar s_nextStateLPS[128];
-    static const int   s_entropyBits[128];
-    static UChar  m_nextState[128][2];
-};
-}
-//! \}
-
-#endif // ifndef X265_CONTEXTMODEL_H
diff -r 0c8e2580b410 -r b02df3ebdf39 source/Lib/TLibCommon/ContextTables.h
--- a/source/Lib/TLibCommon/ContextTables.h	Fri Oct 25 14:50:26 2013 -0500
+++ b/source/Lib/TLibCommon/ContextTables.h	Tue Oct 29 13:36:37 2013 -0500
@@ -39,6 +39,8 @@
 #ifndef X265_CONTEXTTABLES_H
 #define X265_CONTEXTTABLES_H
 
+#include <stdint.h>
+
 //! \ingroup TLibCommon
 //! \{
 
@@ -125,6 +127,29 @@
 #define MAX_OFF_CTX_MOD                     (OFF_CU_TRANSQUANT_BYPASS_FLAG_CTX + NUM_CU_TRANSQUANT_BYPASS_FLAG_CTX)
 
 // ====================================================================================================================
+// Sbac interface
+// ====================================================================================================================
+typedef struct ContextModel {
+    uint8_t m_state;  ///< internal state variable
+    uint8_t bBinsCoded;
+} ContextModel;
+
+extern const uint8_t g_nextStateMPS[128];
+extern const uint8_t g_nextStateLPS[128];
+extern const int     g_entropyBits[128];
+extern       uint8_t g_nextState[128][2];
+extern void buildNextStateTable();
+extern uint8_t sbacInit(int qp, int initValue);   ///< initialize state with initial probability
+
+#define sbacGetMps(S)               ((S) & 1)
+#define sbacGetState(S)             ((S) >> 1)
+#define sbacNextLPS(S)              (g_nextStateLPS[(S)])
+#define sbacNextMPS(S)              (g_nextStateMPS[(S)])
+#define sbacNext(S, V)              (g_nextState[(S)][(V)])
+#define sbacGetEntropyBits(S, V)    (g_entropyBits[(S) ^ (V)])
+#define sbacGetEntropyBitsTrm(V)    (g_entropyBits[126 ^ (V)])
+
+// ====================================================================================================================
 // Tables
 // ====================================================================================================================
 


More information about the x265-commits mailing list