/*! * \copy * Copyright (c) 2013, Cisco Systems * 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. * * 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. * */ #include "wels_common_defs.h" /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////pNonZeroCount[16+8] mapping scan indexconst uint8_t g_kuiMbCountScan4Idx[24] = { // 0 1 | 4 5 luma 8*8 block pNonZeroCount[16+8] 0, 1, 4, 5, // 2 3 | 6 7 0 | 1 0 1 2 3 2, 3, 6, 7, //--------------- --------- 4 5 6 7 8, 9, 12, 13, // 8 9 | 12 13 2 | 3 8 9 10 11 10, 11, 14, 15, // 10 11 | 14 15-----------------------------> 12 13 14 15 16, 17, 20, 21, //---------------- chroma 8*8 block 16 17 18 19 18, 19, 22, 23 // 16 17 | 20 21 0 1 20 21 22 23}; const uint8_t g_kuiCache48CountScan4Idx[24] = { /* Luma */ 9, 10, 17, 18, // 1+1*8, 2+1*8, 1+2*8, 2+2*8, 11, 12, 19, 20, // 3+1*8, 4+1*8, 3+2*8, 4+2*8, 25, 26, 33, 34, // 1+3*8, 2+3*8, 1+4*8, 2+4*8, 27, 28, 35, 36, // 3+3*8, 4+3*8, 3+4*8, 4+4*8, /* Cb */ 14, 15, // 6+1*8, 7+1*8, 22, 23, // 6+2*8, 7+2*8, /* Cr */ 38, 39, // 6+4*8, 7+4*8, 46, 47, // 6+5*8, 7+5*8,}; const uint8_t g_kuiMatrixV[6][8][8] = { // generated from equation 8-317, 8-318 { {20, 19, 25, 19, 20, 19, 25, 19}, {19, 18, 24, 18, 19, 18, 24, 18}, {25, 24, 32, 24, 25, 24, 32, 24}, {19, 18, 24, 18, 19, 18, 24, 18}, {20, 19, 25, 19, 20, 19, 25, 19}, {19, 18, 24, 18, 19, 18, 24, 18}, {25, 24, 32, 24, 25, 24, 32, 24}, {19, 18, 24, 18, 19, 18, 24, 18} }, { {22, 21, 28, 21, 22, 21, 28, 21}, {21, 19, 26, 19, 21, 19, 26, 19}, {28, 26, 35, 26, 28, 26, 35, 26}, {21, 19, 26, 19, 21, 19, 26, 19}, {22, 21, 28, 21, 22, 21, 28, 21}, {21, 19, 26, 19, 21, 19, 26, 19}, {28, 26, 35, 26, 28, 26, 35, 26}, {21, 19, 26, 19, 21, 19, 26, 19} }, { {26, 24, 33, 24, 26, 24, 33, 24}, {24, 23, 31, 23, 24, 23, 31, 23}, {33, 31, 42, 31, 33, 31, 42, 31}, {24, 23, 31, 23, 24, 23, 31, 23}, {26, 24, 33, 24, 26, 24, 33, 24}, {24, 23, 31, 23, 24, 23, 31, 23}, {33, 31, 42, 31, 33, 31, 42, 31}, {24, 23, 31, 23, 24, 23, 31, 23} }, { {28, 26, 35, 26, 28, 26, 35, 26}, {26, 25, 33, 25, 26, 25, 33, 25}, {35, 33, 45, 33, 35, 33, 45, 33}, {26, 25, 33, 25, 26, 25, 33, 25}, {28, 26, 35, 26, 28, 26, 35, 26}, {26, 25, 33, 25, 26, 25, 33, 25}, {35, 33, 45, 33, 35, 33, 45, 33}, {26, 25, 33, 25, 26, 25, 33, 25} }, { {32, 30, 40, 30, 32, 30, 40, 30}, {30, 28, 38, 28, 30, 28, 38, 28}, {40, 38, 51, 38, 40, 38, 51, 38}, {30, 28, 38, 28, 30, 28, 38, 28}, {32, 30, 40, 30, 32, 30, 40, 30}, {30, 28, 38, 28, 30, 28, 38, 28}, {40, 38, 51, 38, 40, 38, 51, 38}, {30, 28, 38, 28, 30, 28, 38, 28} }, { {36, 34, 46, 34, 36, 34, 46, 34}, {34, 32, 43, 32, 34, 32, 43, 32}, {46, 43, 58, 43, 46, 43, 58, 43}, {34, 32, 43, 32, 34, 32, 43, 32}, {36, 34, 46, 34, 36, 34, 46, 34}, {34, 32, 43, 32, 34, 32, 43, 32}, {46, 43, 58, 43, 46, 43, 58, 43}, {34, 32, 43, 32, 34, 32, 43, 32} }}; //cache element equal to 30const uint8_t g_kuiCache30ScanIdx[16] = { //mv or uiRefIndex cache scan index, 4*4 block as basic unit 7, 8, 13, 14, 9, 10, 15, 16, 19, 20, 25, 26, 21, 22, 27, 28}; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // extern at wels_common_defs.hconst uint8_t g_kuiChromaQpTable[52] = { 0, 1, 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, 29, 30, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 39}; /* * vcl type map for given NAL unit type and corresponding H264 type (0: AVC; 1: SVC). */const EVclType g_keTypeMap[32][2] = { { NON_VCL, NON_VCL }, // 0: NAL_UNIT_UNSPEC_0 { VCL, VCL, }, // 1: NAL_UNIT_CODED_SLICE { VCL, NOT_APP }, // 2: NAL_UNIT_CODED_SLICE_DPA { VCL, NOT_APP }, // 3: NAL_UNIT_CODED_SLICE_DPB { VCL, NOT_APP }, // 4: NAL_UNIT_CODED_SLICE_DPC { VCL, VCL }, // 5: NAL_UNIT_CODED_SLICE_IDR { NON_VCL, NON_VCL }, // 6: NAL_UNIT_SEI { NON_VCL, NON_VCL }, // 7: NAL_UNIT_SPS { NON_VCL, NON_VCL }, // 8: NAL_UNIT_PPS { NON_VCL, NON_VCL }, // 9: NAL_UNIT_AU_DELIMITER { NON_VCL, NON_VCL }, // 10: NAL_UNIT_END_OF_SEQ { NON_VCL, NON_VCL }, // 11: NAL_UNIT_END_OF_STR { NON_VCL, NON_VCL }, // 12: NAL_UNIT_FILLER_DATA { NON_VCL, NON_VCL }, // 13: NAL_UNIT_SPS_EXT { NON_VCL, NON_VCL }, // 14: NAL_UNIT_PREFIX, NEED associate succeeded NAL to make a VCL { NON_VCL, NON_VCL }, // 15: NAL_UNIT_SUBSET_SPS { NON_VCL, NON_VCL }, // 16: NAL_UNIT_DEPTH_PARAM { NON_VCL, NON_VCL }, // 17: NAL_UNIT_RESV_17 { NON_VCL, NON_VCL }, // 18: NAL_UNIT_RESV_18 { NON_VCL, NON_VCL }, // 19: NAL_UNIT_AUX_CODED_SLICE { NON_VCL, VCL }, // 20: NAL_UNIT_CODED_SLICE_EXT { NON_VCL, NON_VCL }, // 21: NAL_UNIT_MVC_SLICE_EXT { NON_VCL, NON_VCL }, // 22: NAL_UNIT_RESV_22 { NON_VCL, NON_VCL }, // 23: NAL_UNIT_RESV_23 { NON_VCL, NON_VCL }, // 24: NAL_UNIT_UNSPEC_24 { NON_VCL, NON_VCL }, // 25: NAL_UNIT_UNSPEC_25 { NON_VCL, NON_VCL }, // 26: NAL_UNIT_UNSPEC_26 { NON_VCL, NON_VCL }, // 27: NAL_UNIT_UNSPEC_27 { NON_VCL, NON_VCL }, // 28: NAL_UNIT_UNSPEC_28 { NON_VCL, NON_VCL }, // 29: NAL_UNIT_UNSPEC_29 { NON_VCL, NON_VCL }, // 30: NAL_UNIT_UNSPEC_30 { NON_VCL, NON_VCL } // 31: NAL_UNIT_UNSPEC_31};//default scaling list matrix value of 4x4const uint8_t g_kuiDequantScaling4x4Default[2][16]={ { 6, 13, 20, 28, 13, 20, 28, 32, 20, 28, 32, 37, 28, 32, 37, 42 }, { 10, 14, 20, 24, 14, 20, 24, 27, 20, 24, 27, 30, 24, 27, 30, 34 }};//default scaling list matrix value of 8x8const uint8_t g_kuiDequantScaling8x8Default[2][64]={ { 6, 10, 13, 16, 18, 23, 25, 27, 10, 11, 16, 18, 23, 25, 27, 29, 13, 16, 18, 23, 25, 27, 29, 31, 16, 18, 23, 25, 27, 29, 31, 33, 18, 23, 25, 27, 29, 31, 33, 36, 23, 25, 27, 29, 31, 33, 36, 38, 25, 27, 29, 31, 33, 36, 38, 40, 27, 29, 31, 33, 36, 38, 40, 42 }, { 9, 13, 15, 17, 19, 21, 22, 24, 13, 13, 17, 19, 21, 22, 24, 25, 15, 17, 19, 21, 22, 24, 25, 27, 17, 19, 21, 22, 24, 25, 27, 28, 19, 21, 22, 24, 25, 27, 28, 30, 21, 22, 24, 25, 27, 28, 30, 32, 22, 24, 25, 27, 28, 30, 32, 33, 24, 25, 27, 28, 30, 32, 33, 35 }};const uint16_t g_kuiDequantCoeff[52][8] = { /* 0*/{ 10, 13, 10, 13, 13, 16, 13, 16 }, /* 1*/{ 11, 14, 11, 14, 14, 18, 14, 18 }, /* 2*/{ 13, 16, 13, 16, 16, 20, 16, 20 }, /* 3*/{ 14, 18, 14, 18, 18, 23, 18, 23 }, /* 4*/{ 16, 20, 16, 20, 20, 25, 20, 25 }, /* 5*/{ 18, 23, 18, 23, 23, 29, 23, 29 }, /* 6*/{ 20, 26, 20, 26, 26, 32, 26, 32 }, /* 7*/{ 22, 28, 22, 28, 28, 36, 28, 36 }, /* 8*/{ 26, 32, 26, 32, 32, 40, 32, 40 }, /* 9*/{ 28, 36, 28, 36, 36, 46, 36, 46 }, /*10*/{ 32, 40, 32, 40, 40, 50, 40, 50 }, /*11*/{ 36, 46, 36, 46, 46, 58, 46, 58 }, /*12*/{ 40, 52, 40, 52, 52, 64, 52, 64 }, /*13*/{ 44, 56, 44, 56, 56, 72, 56, 72 }, /*14*/{ 52, 64, 52, 64, 64, 80, 64, 80 }, /*15*/{ 56, 72, 56, 72, 72, 92, 72, 92 }, /*16*/{ 64, 80, 64, 80, 80, 100, 80, 100 }, /*17*/{ 72, 92, 72, 92, 92, 116, 92, 116 }, /*18*/{ 80, 104, 80, 104, 104, 128, 104, 128 }, /*19*/{ 88, 112, 88, 112, 112, 144, 112, 144 }, /*20*/{ 104, 128, 104, 128, 128, 160, 128, 160 }, /*21*/{ 112, 144, 112, 144, 144, 184, 144, 184 }, /*22*/{ 128, 160, 128, 160, 160, 200, 160, 200 }, /*23*/{ 144, 184, 144, 184, 184, 232, 184, 232 }, /*24*/{ 160, 208, 160, 208, 208, 256, 208, 256 }, /*25*/{ 176, 224, 176, 224, 224, 288, 224, 288 }, /*26*/{ 208, 256, 208, 256, 256, 320, 256, 320 }, /*27*/{ 224, 288, 224, 288, 288, 368, 288, 368 }, /*28*/{ 256, 320, 256, 320, 320, 400, 320, 400 }, /*29*/{ 288, 368, 288, 368, 368, 464, 368, 464 }, /*30*/{ 320, 416, 320, 416, 416, 512, 416, 512 }, /*31*/{ 352, 448, 352, 448, 448, 576, 448, 576 }, /*32*/{ 416, 512, 416, 512, 512, 640, 512, 640 }, /*33*/{ 448, 576, 448, 576, 576, 736, 576, 736 }, /*34*/{ 512, 640, 512, 640, 640, 800, 640, 800 }, /*35*/{ 576, 736, 576, 736, 736, 928, 736, 928 }, /*36*/{ 640, 832, 640, 832, 832, 1024, 832, 1024 }, /*37*/{ 704, 896, 704, 896, 896, 1152, 896, 1152 }, /*38*/{ 832, 1024, 832, 1024, 1024, 1280, 1024, 1280 }, /*39*/{ 896, 1152, 896, 1152, 1152, 1472, 1152, 1472 }, /*40*/{ 1024, 1280, 1024, 1280, 1280, 1600, 1280, 1600 }, /*41*/{ 1152, 1472, 1152, 1472, 1472, 1856, 1472, 1856 }, /*42*/{ 1280, 1664, 1280, 1664, 1664, 2048, 1664, 2048 }, /*43*/{ 1408, 1792, 1408, 1792, 1792, 2304, 1792, 2304 }, /*44*/{ 1664, 2048, 1664, 2048, 2048, 2560, 2048, 2560 }, /*45*/{ 1792, 2304, 1792, 2304, 2304, 2944, 2304, 2944 }, /*46*/{ 2048, 2560, 2048, 2560, 2560, 3200, 2560, 3200 }, /*47*/{ 2304, 2944, 2304, 2944, 2944, 3712, 2944, 3712 }, /*48*/{ 2560, 3328, 2560, 3328, 3328, 4096, 3328, 4096 }, /*49*/{ 2816, 3584, 2816, 3584, 3584, 4608, 3584, 4608 }, /*50*/{ 3328, 4096, 3328, 4096, 4096, 5120, 4096, 5120 }, /*51*/{ 3584, 4608, 3584, 4608, 4608, 5888, 4608, 5888 },}; const uint16_t g_kuiDequantCoeff8x8[52][64] = {/* QP == 0 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 1 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 2 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 3 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 4 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 5 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 6 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 7 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 8 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 9 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 10 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 11 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 12 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 13 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 14 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 15 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 16 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 17 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 18 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 19 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 20 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 21 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 22 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 23 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 24 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 25 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 26 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 27 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 28 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 29 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 30 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 31 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 32 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 33 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 34 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 35 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 36 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 37 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 38 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 39 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 40 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 41 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 42 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 43 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 44 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 45 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },/* QP == 46 */{ 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 },/* QP == 47 */{ 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 },/* QP == 48 */{ 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 },/* QP == 49 */{ 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 },/* QP == 50 */{ 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 },/* QP == 51 */{ 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 },}; // table A-1 - Level limitsconst SLevelLimits g_ksLevelLimits[LEVEL_NUMBER] = { {LEVEL_1_0, 1485, 99, 396, 64, 175, -256, 255, 2, 0x7fff}, /* level 1 */ {LEVEL_1_B, 1485, 99, 396, 128, 350, -256, 255, 2, 0x7fff}, /* level 1.b */ {LEVEL_1_1, 3000, 396, 900, 192, 500, -512, 511, 2, 0x7fff}, /* level 1.1 */ {LEVEL_1_2, 6000, 396, 2376, 384, 1000, -512, 511, 2, 0x7fff}, /* level 1.2 */ {LEVEL_1_3, 11880, 396, 2376, 768, 2000, -512, 511, 2, 0x7fff}, /* level 1.3 */ {LEVEL_2_0, 11880, 396, 2376, 2000, 2000, -512, 511, 2, 0x7fff}, /* level 2 */ {LEVEL_2_1, 19800, 792, 4752, 4000, 4000, -1024, 1023, 2, 0x7fff}, /* level 2.1 */ {LEVEL_2_2, 20250, 1620, 8100, 4000, 4000, -1024, 1023, 2, 0x7fff}, /* level 2.2 */ {LEVEL_3_0, 40500, 1620, 8100, 10000, 10000, -1024, 1023, 2, 32 }, /* level 3 */ {LEVEL_3_1, 108000, 3600, 18000, 14000, 14000, -2048, 2047, 4, 16}, /* level 3.1 */ {LEVEL_3_2, 216000, 5120, 20480, 20000, 20000, -2048, 2047, 4, 16}, /* level 3.2 */ {LEVEL_4_0, 245760, 8192, 32768, 20000, 25000, -2048, 2047, 4, 16}, /* level 4 */ {LEVEL_4_1, 245760, 8192, 32768, 50000, 62500, -2048, 2047, 2, 16}, /* level 4.1 */ {LEVEL_4_2, 522240, 8704, 34816, 50000, 62500, -2048, 2047, 2, 16}, /* level 4.2 */ {LEVEL_5_0, 589824, 22080, 110400, 135000, 135000, -2048, 2047, 2, 16}, /* level 5 */ {LEVEL_5_1, 983040, 36864, 184320, 240000, 240000, -2048, 2047, 2, 16}, /* level 5.1 */ {LEVEL_5_2, 2073600, 36864, 184320, 240000, 240000, -2048, 2047, 2, 16} /* level 5.2 */};const uint32_t g_kuiLevelMaps[LEVEL_NUMBER] = { 10, 9, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52};//for cabac/* this table is from Table9-12 to Table 9-24 */ const int8_t g_kiCabacGlobalContextIdx[WELS_CONTEXT_COUNT][4][2] = { //0-10 Table 9-12 {{20, -15}, {20, -15}, {20, -15}, {20, -15}}, {{2, 54}, {2, 54}, {2, 54}, {2, 54}}, {{3, 74}, {3, 74}, {3, 74}, {3, 74}}, {{20, -15}, {20, -15}, {20, -15}, {20, -15}}, {{2, 54}, {2, 54}, {2, 54}, {2, 54}}, {{3, 74}, {3, 74}, {3, 74}, {3, 74}}, {{ -28, 127}, { -28, 127}, { -28, 127}, { -28, 127}}, {{ -23, 104}, { -23, 104}, { -23, 104}, { -23, 104}}, {{ -6, 53}, { -6, 53}, { -6, 53}, { -6, 53}}, {{ -1, 54}, { -1, 54}, { -1, 54}, { -1, 54}}, {{7, 51}, {7, 51}, {7, 51}, {7, 51}}, //11-23 Table 9-13 {{CTX_NA, CTX_NA}, {23, 33}, {22, 25}, {29, 16}}, {{CTX_NA, CTX_NA}, {23, 2}, {34, 0}, {25, 0}}, {{CTX_NA, CTX_NA}, {21, 0}, {16, 0}, {14, 0}}, {{CTX_NA, CTX_NA}, {1, 9}, { -2, 9}, { -10, 51}}, {{CTX_NA, CTX_NA}, {0, 49}, {4, 41}, { -3, 62}}, {{CTX_NA, CTX_NA}, { -37, 118}, { -29, 118}, { -27, 99}}, {{CTX_NA, CTX_NA}, {5, 57}, {2, 65}, {26, 16}}, {{CTX_NA, CTX_NA}, { -13, 78}, { -6, 71}, { -4, 85}}, {{CTX_NA, CTX_NA}, { -11, 65}, { -13, 79}, { -24, 102}}, {{CTX_NA, CTX_NA}, {1, 62}, {5, 52}, {5, 57}}, {{CTX_NA, CTX_NA}, {12, 49}, {9, 50}, {6, 57}}, {{CTX_NA, CTX_NA}, { -4, 73}, { -3, 70}, { -17, 73}}, {{CTX_NA, CTX_NA}, {17, 50}, {10, 54}, {14, 57}}, //24-39 Table9-14 {{CTX_NA, CTX_NA}, {18, 64}, {26, 34}, {20, 40}}, {{CTX_NA, CTX_NA}, {9, 43}, {19, 22}, {20, 10}}, {{CTX_NA, CTX_NA}, {29, 0}, {40, 0}, {29, 0}}, {{CTX_NA, CTX_NA}, {26, 67}, {57, 2}, {54, 0}}, {{CTX_NA, CTX_NA}, {16, 90}, {41, 36}, {37, 42}}, {{CTX_NA, CTX_NA}, {9, 104}, {26, 69}, {12, 97}}, {{CTX_NA, CTX_NA}, { -46, 127}, { -45, 127}, { -32, 127}}, {{CTX_NA, CTX_NA}, { -20, 104}, { -15, 101}, { -22, 117}}, {{CTX_NA, CTX_NA}, {1, 67}, { -4, 76}, { -2, 74}}, {{CTX_NA, CTX_NA}, { -13, 78}, { -6, 71}, { -4, 85}}, {{CTX_NA, CTX_NA}, { -11, 65}, { -13, 79}, { -24, 102}}, {{CTX_NA, CTX_NA}, {1, 62}, {5, 52}, {5, 57}}, {{CTX_NA, CTX_NA}, { -6, 86}, {6, 69}, { -6, 93}}, {{CTX_NA, CTX_NA}, { -17, 95}, { -13, 90}, { -14, 88}}, {{CTX_NA, CTX_NA}, { -6, 61}, {0, 52}, { -6, 44}}, {{CTX_NA, CTX_NA}, {9, 45}, {8, 43}, {4, 55}}, //40-53 Table 9-15 {{CTX_NA, CTX_NA}, { -3, 69}, { -2, 69}, { -11, 89}}, {{CTX_NA, CTX_NA}, { -6, 81}, { -5, 82}, { -15, 103}}, {{CTX_NA, CTX_NA}, { -11, 96}, { -10, 96}, { -21, 116}}, {{CTX_NA, CTX_NA}, {6, 55}, {2, 59}, {19, 57}}, {{CTX_NA, CTX_NA}, {7, 67}, {2, 75}, {20, 58}}, {{CTX_NA, CTX_NA}, { -5, 86}, { -3, 87}, {4, 84}}, {{CTX_NA, CTX_NA}, {2, 88}, { -3, 100}, {6, 96}}, {{CTX_NA, CTX_NA}, {0, 58}, {1, 56}, {1, 63}}, {{CTX_NA, CTX_NA}, { -3, 76}, { -3, 74}, { -5, 85}}, {{CTX_NA, CTX_NA}, { -10, 94}, { -6, 85}, { -13, 106}}, {{CTX_NA, CTX_NA}, {5, 54}, {0, 59}, {5, 63}}, {{CTX_NA, CTX_NA}, {4, 69}, { -3, 81}, {6, 75}}, {{CTX_NA, CTX_NA}, { -3, 81}, { -7, 86}, { -3, 90}}, {{CTX_NA, CTX_NA}, {0, 88}, { -5, 95}, { -1, 101}}, //54-59 Table 9-16 {{CTX_NA, CTX_NA}, { -7, 67}, { -1, 66}, {3, 55}}, {{CTX_NA, CTX_NA}, { -5, 74}, { -1, 77}, { -4, 79}}, {{CTX_NA, CTX_NA}, { -4, 74}, {1, 70}, { -2, 75}}, {{CTX_NA, CTX_NA}, { -5, 80}, { -2, 86}, { -12, 97}}, {{CTX_NA, CTX_NA}, { -7, 72}, { -5, 72}, { -7, 50}}, {{CTX_NA, CTX_NA}, {1, 58}, {0, 61}, {1, 60}}, //60-69 Table 9-17 {{0, 41}, {0, 41}, {0, 41}, {0, 41}}, {{0, 63}, {0, 63}, {0, 63}, {0, 63}}, {{0, 63}, {0, 63}, {0, 63}, {0, 63}}, {{0, 63}, {0, 63}, {0, 63}, {0, 63}}, {{ -9, 83}, { -9, 83}, { -9, 83}, { -9, 83}}, {{4, 86}, {4, 86}, {4, 86}, {4, 86}}, {{0, 97}, {0, 97}, {0, 97}, {0, 97}}, {{ -7, 72}, { -7, 72}, { -7, 72}, { -7, 72}}, {{13, 41}, {13, 41}, {13, 41}, {13, 41}}, {{3, 62}, {3, 62}, {3, 62}, {3, 62}}, //70-104 Table 9-18 {{0, 11}, {0, 45}, {13, 15}, {7, 34}}, {{1, 55}, { -4, 78}, {7, 51}, { -9, 88}}, {{0, 69}, { -3, 96}, {2, 80}, { -20, 127}}, {{ -17, 127}, { -27, 126}, { -39, 127}, { -36, 127}}, {{ -13, 102}, { -28, 98}, { -18, 91}, { -17, 91}}, {{0, 82}, { -25, 101}, { -17, 96}, { -14, 95}}, {{ -7, 74}, { -23, 67}, { -26, 81}, { -25, 84}}, {{ -21, 107}, { -28, 82}, { -35, 98}, { -25, 86}}, {{ -27, 127}, { -20, 94}, { -24, 102}, { -12, 89}}, {{ -31, 127}, { -16, 83}, { -23, 97}, { -17, 91}}, {{ -24, 127}, { -22, 110}, { -27, 119}, { -31, 127}}, {{ -18, 95}, { -21, 91}, { -24, 99}, { -14, 76}}, {{ -27, 127}, { -18, 102}, { -21, 110}, { -18, 103}}, {{ -21, 114}, { -13, 93}, { -18, 102}, { -13, 90}}, {{ -30, 127}, { -29, 127}, { -36, 127}, { -37, 127}}, {{ -17, 123}, { -7, 92}, {0, 80}, {11, 80}}, {{ -12, 115}, { -5, 89}, { -5, 89}, {5, 76}}, {{ -16, 122}, { -7, 96}, { -7, 94}, {2, 84}}, {{ -11, 115}, { -13, 108}, { -4, 92}, {5, 78}}, {{ -12, 63}, { -3, 46}, {0, 39}, { -6, 55}}, {{ -2, 68}, { -1, 65}, {0, 65}, {4, 61}}, {{ -15, 84}, { -1, 57}, { -15, 84}, { -14, 83}}, {{ -13, 104}, { -9, 93}, { -35, 127}, { -37, 127}}, {{ -3, 70}, { -3, 74}, { -2, 73}, { -5, 79}}, {{ -8, 93}, { -9, 92}, { -12, 104}, { -11, 104}}, {{ -10, 90}, { -8, 87}, { -9, 91}, { -11, 91}}, {{ -30, 127}, { -23, 126}, { -31, 127}, { -30, 127}}, {{ -1, 74}, {5, 54}, {3, 55}, {0, 65}}, {{ -6, 97}, {6, 60}, {7, 56}, { -2, 79}}, {{ -7, 91}, {6, 59}, {7, 55}, {0, 72}}, {{ -20, 127}, {6, 69}, {8, 61}, { -4, 92}}, {{ -4, 56}, { -1, 48}, { -3, 53}, { -6, 56}}, {{ -5, 82}, {0, 68}, {0, 68}, {3, 68}}, {{ -7, 76}, { -4, 69}, { -7, 74}, { -8, 71}}, {{ -22, 125}, { -8, 88}, { -9, 88}, { -13, 98}}, //105-165 Table 9-19 {{ -7, 93}, { -2, 85}, { -13, 103}, { -4, 86}}, {{ -11, 87}, { -6, 78}, { -13, 91}, { -12, 88}}, {{ -3, 77}, { -1, 75}, { -9, 89}, { -5, 82}}, {{ -5, 71}, { -7, 77}, { -14, 92}, { -3, 72}}, {{ -4, 63}, {2, 54}, { -8, 76}, { -4, 67}}, {{ -4, 68}, {5, 50}, { -12, 87}, { -8, 72}}, {{ -12, 84}, { -3, 68}, { -23, 110}, { -16, 89}}, {{ -7, 62}, {1, 50}, { -24, 105}, { -9, 69}}, {{ -7, 65}, {6, 42}, { -10, 78}, { -1, 59}}, {{8, 61}, { -4, 81}, { -20, 112}, {5, 66}}, {{5, 56}, {1, 63}, { -17, 99}, {4, 57}}, {{ -2, 66}, { -4, 70}, { -78, 127}, { -4, 71}}, {{1, 64}, {0, 67}, { -70, 127}, { -2, 71}}, {{0, 61}, {2, 57}, { -50, 127}, {2, 58}},Lines 1–500 of 904. Load more
/*! * \copy * Copyright (c) 2013, Cisco Systems * 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. * * 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. * */ #include "wels_common_defs.h" /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////pNonZeroCount[16+8] mapping scan index const uint8_t g_kuiMbCountScan4Idx[24] = { // 0 1 | 4 5 luma 8*8 block pNonZeroCount[16+8] 0, 1, 4, 5, // 2 3 | 6 7 0 | 1 0 1 2 3 2, 3, 6, 7, //--------------- --------- 4 5 6 7 8, 9, 12, 13, // 8 9 | 12 13 2 | 3 8 9 10 11 10, 11, 14, 15, // 10 11 | 14 15-----------------------------> 12 13 14 15 16, 17, 20, 21, //---------------- chroma 8*8 block 16 17 18 19 18, 19, 22, 23 // 16 17 | 20 21 0 1 20 21 22 23 }; const uint8_t g_kuiCache48CountScan4Idx[24] = { /* Luma */ 9, 10, 17, 18, // 1+1*8, 2+1*8, 1+2*8, 2+2*8, 11, 12, 19, 20, // 3+1*8, 4+1*8, 3+2*8, 4+2*8, 25, 26, 33, 34, // 1+3*8, 2+3*8, 1+4*8, 2+4*8, 27, 28, 35, 36, // 3+3*8, 4+3*8, 3+4*8, 4+4*8, /* Cb */ 14, 15, // 6+1*8, 7+1*8, 22, 23, // 6+2*8, 7+2*8, /* Cr */ 38, 39, // 6+4*8, 7+4*8, 46, 47, // 6+5*8, 7+5*8, }; const uint8_t g_kuiMatrixV[6][8][8] = { // generated from equation 8-317, 8-318 { {20, 19, 25, 19, 20, 19, 25, 19}, {19, 18, 24, 18, 19, 18, 24, 18}, {25, 24, 32, 24, 25, 24, 32, 24}, {19, 18, 24, 18, 19, 18, 24, 18}, {20, 19, 25, 19, 20, 19, 25, 19}, {19, 18, 24, 18, 19, 18, 24, 18}, {25, 24, 32, 24, 25, 24, 32, 24}, {19, 18, 24, 18, 19, 18, 24, 18} }, { {22, 21, 28, 21, 22, 21, 28, 21}, {21, 19, 26, 19, 21, 19, 26, 19}, {28, 26, 35, 26, 28, 26, 35, 26}, {21, 19, 26, 19, 21, 19, 26, 19}, {22, 21, 28, 21, 22, 21, 28, 21}, {21, 19, 26, 19, 21, 19, 26, 19}, {28, 26, 35, 26, 28, 26, 35, 26}, {21, 19, 26, 19, 21, 19, 26, 19} }, { {26, 24, 33, 24, 26, 24, 33, 24}, {24, 23, 31, 23, 24, 23, 31, 23}, {33, 31, 42, 31, 33, 31, 42, 31}, {24, 23, 31, 23, 24, 23, 31, 23}, {26, 24, 33, 24, 26, 24, 33, 24}, {24, 23, 31, 23, 24, 23, 31, 23}, {33, 31, 42, 31, 33, 31, 42, 31}, {24, 23, 31, 23, 24, 23, 31, 23} }, { {28, 26, 35, 26, 28, 26, 35, 26}, {26, 25, 33, 25, 26, 25, 33, 25}, {35, 33, 45, 33, 35, 33, 45, 33}, {26, 25, 33, 25, 26, 25, 33, 25}, {28, 26, 35, 26, 28, 26, 35, 26}, {26, 25, 33, 25, 26, 25, 33, 25}, {35, 33, 45, 33, 35, 33, 45, 33}, {26, 25, 33, 25, 26, 25, 33, 25} }, { {32, 30, 40, 30, 32, 30, 40, 30}, {30, 28, 38, 28, 30, 28, 38, 28}, {40, 38, 51, 38, 40, 38, 51, 38}, {30, 28, 38, 28, 30, 28, 38, 28}, {32, 30, 40, 30, 32, 30, 40, 30}, {30, 28, 38, 28, 30, 28, 38, 28}, {40, 38, 51, 38, 40, 38, 51, 38}, {30, 28, 38, 28, 30, 28, 38, 28} }, { {36, 34, 46, 34, 36, 34, 46, 34}, {34, 32, 43, 32, 34, 32, 43, 32}, {46, 43, 58, 43, 46, 43, 58, 43}, {34, 32, 43, 32, 34, 32, 43, 32}, {36, 34, 46, 34, 36, 34, 46, 34}, {34, 32, 43, 32, 34, 32, 43, 32}, {46, 43, 58, 43, 46, 43, 58, 43}, {34, 32, 43, 32, 34, 32, 43, 32} } }; //cache element equal to 30 const uint8_t g_kuiCache30ScanIdx[16] = { //mv or uiRefIndex cache scan index, 4*4 block as basic unit 7, 8, 13, 14, 9, 10, 15, 16, 19, 20, 25, 26, 21, 22, 27, 28 }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // extern at wels_common_defs.h const uint8_t g_kuiChromaQpTable[52] = { 0, 1, 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, 29, 30, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 39 }; /* * vcl type map for given NAL unit type and corresponding H264 type (0: AVC; 1: SVC). */ const EVclType g_keTypeMap[32][2] = { { NON_VCL, NON_VCL }, // 0: NAL_UNIT_UNSPEC_0 { VCL, VCL, }, // 1: NAL_UNIT_CODED_SLICE { VCL, NOT_APP }, // 2: NAL_UNIT_CODED_SLICE_DPA { VCL, NOT_APP }, // 3: NAL_UNIT_CODED_SLICE_DPB { VCL, NOT_APP }, // 4: NAL_UNIT_CODED_SLICE_DPC { VCL, VCL }, // 5: NAL_UNIT_CODED_SLICE_IDR { NON_VCL, NON_VCL }, // 6: NAL_UNIT_SEI { NON_VCL, NON_VCL }, // 7: NAL_UNIT_SPS { NON_VCL, NON_VCL }, // 8: NAL_UNIT_PPS { NON_VCL, NON_VCL }, // 9: NAL_UNIT_AU_DELIMITER { NON_VCL, NON_VCL }, // 10: NAL_UNIT_END_OF_SEQ { NON_VCL, NON_VCL }, // 11: NAL_UNIT_END_OF_STR { NON_VCL, NON_VCL }, // 12: NAL_UNIT_FILLER_DATA { NON_VCL, NON_VCL }, // 13: NAL_UNIT_SPS_EXT { NON_VCL, NON_VCL }, // 14: NAL_UNIT_PREFIX, NEED associate succeeded NAL to make a VCL { NON_VCL, NON_VCL }, // 15: NAL_UNIT_SUBSET_SPS { NON_VCL, NON_VCL }, // 16: NAL_UNIT_DEPTH_PARAM { NON_VCL, NON_VCL }, // 17: NAL_UNIT_RESV_17 { NON_VCL, NON_VCL }, // 18: NAL_UNIT_RESV_18 { NON_VCL, NON_VCL }, // 19: NAL_UNIT_AUX_CODED_SLICE { NON_VCL, VCL }, // 20: NAL_UNIT_CODED_SLICE_EXT { NON_VCL, NON_VCL }, // 21: NAL_UNIT_MVC_SLICE_EXT { NON_VCL, NON_VCL }, // 22: NAL_UNIT_RESV_22 { NON_VCL, NON_VCL }, // 23: NAL_UNIT_RESV_23 { NON_VCL, NON_VCL }, // 24: NAL_UNIT_UNSPEC_24 { NON_VCL, NON_VCL }, // 25: NAL_UNIT_UNSPEC_25 { NON_VCL, NON_VCL }, // 26: NAL_UNIT_UNSPEC_26 { NON_VCL, NON_VCL }, // 27: NAL_UNIT_UNSPEC_27 { NON_VCL, NON_VCL }, // 28: NAL_UNIT_UNSPEC_28 { NON_VCL, NON_VCL }, // 29: NAL_UNIT_UNSPEC_29 { NON_VCL, NON_VCL }, // 30: NAL_UNIT_UNSPEC_30 { NON_VCL, NON_VCL } // 31: NAL_UNIT_UNSPEC_31 }; //default scaling list matrix value of 4x4 const uint8_t g_kuiDequantScaling4x4Default[2][16]={ { 6, 13, 20, 28, 13, 20, 28, 32, 20, 28, 32, 37, 28, 32, 37, 42 }, { 10, 14, 20, 24, 14, 20, 24, 27, 20, 24, 27, 30, 24, 27, 30, 34 } }; //default scaling list matrix value of 8x8 const uint8_t g_kuiDequantScaling8x8Default[2][64]={ { 6, 10, 13, 16, 18, 23, 25, 27, 10, 11, 16, 18, 23, 25, 27, 29, 13, 16, 18, 23, 25, 27, 29, 31, 16, 18, 23, 25, 27, 29, 31, 33, 18, 23, 25, 27, 29, 31, 33, 36, 23, 25, 27, 29, 31, 33, 36, 38, 25, 27, 29, 31, 33, 36, 38, 40, 27, 29, 31, 33, 36, 38, 40, 42 }, { 9, 13, 15, 17, 19, 21, 22, 24, 13, 13, 17, 19, 21, 22, 24, 25, 15, 17, 19, 21, 22, 24, 25, 27, 17, 19, 21, 22, 24, 25, 27, 28, 19, 21, 22, 24, 25, 27, 28, 30, 21, 22, 24, 25, 27, 28, 30, 32, 22, 24, 25, 27, 28, 30, 32, 33, 24, 25, 27, 28, 30, 32, 33, 35 } }; const uint16_t g_kuiDequantCoeff[52][8] = { /* 0*/{ 10, 13, 10, 13, 13, 16, 13, 16 }, /* 1*/{ 11, 14, 11, 14, 14, 18, 14, 18 }, /* 2*/{ 13, 16, 13, 16, 16, 20, 16, 20 }, /* 3*/{ 14, 18, 14, 18, 18, 23, 18, 23 }, /* 4*/{ 16, 20, 16, 20, 20, 25, 20, 25 }, /* 5*/{ 18, 23, 18, 23, 23, 29, 23, 29 }, /* 6*/{ 20, 26, 20, 26, 26, 32, 26, 32 }, /* 7*/{ 22, 28, 22, 28, 28, 36, 28, 36 }, /* 8*/{ 26, 32, 26, 32, 32, 40, 32, 40 }, /* 9*/{ 28, 36, 28, 36, 36, 46, 36, 46 }, /*10*/{ 32, 40, 32, 40, 40, 50, 40, 50 }, /*11*/{ 36, 46, 36, 46, 46, 58, 46, 58 }, /*12*/{ 40, 52, 40, 52, 52, 64, 52, 64 }, /*13*/{ 44, 56, 44, 56, 56, 72, 56, 72 }, /*14*/{ 52, 64, 52, 64, 64, 80, 64, 80 }, /*15*/{ 56, 72, 56, 72, 72, 92, 72, 92 }, /*16*/{ 64, 80, 64, 80, 80, 100, 80, 100 }, /*17*/{ 72, 92, 72, 92, 92, 116, 92, 116 }, /*18*/{ 80, 104, 80, 104, 104, 128, 104, 128 }, /*19*/{ 88, 112, 88, 112, 112, 144, 112, 144 }, /*20*/{ 104, 128, 104, 128, 128, 160, 128, 160 }, /*21*/{ 112, 144, 112, 144, 144, 184, 144, 184 }, /*22*/{ 128, 160, 128, 160, 160, 200, 160, 200 }, /*23*/{ 144, 184, 144, 184, 184, 232, 184, 232 }, /*24*/{ 160, 208, 160, 208, 208, 256, 208, 256 }, /*25*/{ 176, 224, 176, 224, 224, 288, 224, 288 }, /*26*/{ 208, 256, 208, 256, 256, 320, 256, 320 }, /*27*/{ 224, 288, 224, 288, 288, 368, 288, 368 }, /*28*/{ 256, 320, 256, 320, 320, 400, 320, 400 }, /*29*/{ 288, 368, 288, 368, 368, 464, 368, 464 }, /*30*/{ 320, 416, 320, 416, 416, 512, 416, 512 }, /*31*/{ 352, 448, 352, 448, 448, 576, 448, 576 }, /*32*/{ 416, 512, 416, 512, 512, 640, 512, 640 }, /*33*/{ 448, 576, 448, 576, 576, 736, 576, 736 }, /*34*/{ 512, 640, 512, 640, 640, 800, 640, 800 }, /*35*/{ 576, 736, 576, 736, 736, 928, 736, 928 }, /*36*/{ 640, 832, 640, 832, 832, 1024, 832, 1024 }, /*37*/{ 704, 896, 704, 896, 896, 1152, 896, 1152 }, /*38*/{ 832, 1024, 832, 1024, 1024, 1280, 1024, 1280 }, /*39*/{ 896, 1152, 896, 1152, 1152, 1472, 1152, 1472 }, /*40*/{ 1024, 1280, 1024, 1280, 1280, 1600, 1280, 1600 }, /*41*/{ 1152, 1472, 1152, 1472, 1472, 1856, 1472, 1856 }, /*42*/{ 1280, 1664, 1280, 1664, 1664, 2048, 1664, 2048 }, /*43*/{ 1408, 1792, 1408, 1792, 1792, 2304, 1792, 2304 }, /*44*/{ 1664, 2048, 1664, 2048, 2048, 2560, 2048, 2560 }, /*45*/{ 1792, 2304, 1792, 2304, 2304, 2944, 2304, 2944 }, /*46*/{ 2048, 2560, 2048, 2560, 2560, 3200, 2560, 3200 }, /*47*/{ 2304, 2944, 2304, 2944, 2944, 3712, 2944, 3712 }, /*48*/{ 2560, 3328, 2560, 3328, 3328, 4096, 3328, 4096 }, /*49*/{ 2816, 3584, 2816, 3584, 3584, 4608, 3584, 4608 }, /*50*/{ 3328, 4096, 3328, 4096, 4096, 5120, 4096, 5120 }, /*51*/{ 3584, 4608, 3584, 4608, 4608, 5888, 4608, 5888 }, }; const uint16_t g_kuiDequantCoeff8x8[52][64] = { /* QP == 0 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 1 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 2 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 3 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 4 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 5 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 6 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 7 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 8 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 9 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 10 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 11 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 12 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 13 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 14 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 15 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 16 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 17 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 18 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 19 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 20 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 21 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 22 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 23 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 24 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 25 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 26 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 27 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 28 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 29 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 30 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 31 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 32 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 33 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 34 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 35 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 36 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 37 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 38 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 39 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 40 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 41 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 42 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 43 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 44 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 45 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, /* QP == 46 */ { 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448, 512, 480, 640, 480, 512, 480, 640, 480, 480, 448, 608, 448, 480, 448, 608, 448, 640, 608, 816, 608, 640, 608, 816, 608, 480, 448, 608, 448, 480, 448, 608, 448 }, /* QP == 47 */ { 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512, 576, 544, 736, 544, 576, 544, 736, 544, 544, 512, 688, 512, 544, 512, 688, 512, 736, 688, 928, 688, 736, 688, 928, 688, 544, 512, 688, 512, 544, 512, 688, 512 }, /* QP == 48 */ { 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288, 320, 304, 400, 304, 320, 304, 400, 304, 304, 288, 384, 288, 304, 288, 384, 288, 400, 384, 512, 384, 400, 384, 512, 384, 304, 288, 384, 288, 304, 288, 384, 288 }, /* QP == 49 */ { 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304, 352, 336, 448, 336, 352, 336, 448, 336, 336, 304, 416, 304, 336, 304, 416, 304, 448, 416, 560, 416, 448, 416, 560, 416, 336, 304, 416, 304, 336, 304, 416, 304 }, /* QP == 50 */ { 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368, 416, 384, 528, 384, 416, 384, 528, 384, 384, 368, 496, 368, 384, 368, 496, 368, 528, 496, 672, 496, 528, 496, 672, 496, 384, 368, 496, 368, 384, 368, 496, 368 }, /* QP == 51 */ { 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400, 448, 416, 560, 416, 448, 416, 560, 416, 416, 400, 528, 400, 416, 400, 528, 400, 560, 528, 720, 528, 560, 528, 720, 528, 416, 400, 528, 400, 416, 400, 528, 400 }, }; // table A-1 - Level limits const SLevelLimits g_ksLevelLimits[LEVEL_NUMBER] = { {LEVEL_1_0, 1485, 99, 396, 64, 175, -256, 255, 2, 0x7fff}, /* level 1 */ {LEVEL_1_B, 1485, 99, 396, 128, 350, -256, 255, 2, 0x7fff}, /* level 1.b */ {LEVEL_1_1, 3000, 396, 900, 192, 500, -512, 511, 2, 0x7fff}, /* level 1.1 */ {LEVEL_1_2, 6000, 396, 2376, 384, 1000, -512, 511, 2, 0x7fff}, /* level 1.2 */ {LEVEL_1_3, 11880, 396, 2376, 768, 2000, -512, 511, 2, 0x7fff}, /* level 1.3 */ {LEVEL_2_0, 11880, 396, 2376, 2000, 2000, -512, 511, 2, 0x7fff}, /* level 2 */ {LEVEL_2_1, 19800, 792, 4752, 4000, 4000, -1024, 1023, 2, 0x7fff}, /* level 2.1 */ {LEVEL_2_2, 20250, 1620, 8100, 4000, 4000, -1024, 1023, 2, 0x7fff}, /* level 2.2 */ {LEVEL_3_0, 40500, 1620, 8100, 10000, 10000, -1024, 1023, 2, 32 }, /* level 3 */ {LEVEL_3_1, 108000, 3600, 18000, 14000, 14000, -2048, 2047, 4, 16}, /* level 3.1 */ {LEVEL_3_2, 216000, 5120, 20480, 20000, 20000, -2048, 2047, 4, 16}, /* level 3.2 */ {LEVEL_4_0, 245760, 8192, 32768, 20000, 25000, -2048, 2047, 4, 16}, /* level 4 */ {LEVEL_4_1, 245760, 8192, 32768, 50000, 62500, -2048, 2047, 2, 16}, /* level 4.1 */ {LEVEL_4_2, 522240, 8704, 34816, 50000, 62500, -2048, 2047, 2, 16}, /* level 4.2 */ {LEVEL_5_0, 589824, 22080, 110400, 135000, 135000, -2048, 2047, 2, 16}, /* level 5 */ {LEVEL_5_1, 983040, 36864, 184320, 240000, 240000, -2048, 2047, 2, 16}, /* level 5.1 */ {LEVEL_5_2, 2073600, 36864, 184320, 240000, 240000, -2048, 2047, 2, 16} /* level 5.2 */ }; const uint32_t g_kuiLevelMaps[LEVEL_NUMBER] = { 10, 9, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52 }; //for cabac /* this table is from Table9-12 to Table 9-24 */ const int8_t g_kiCabacGlobalContextIdx[WELS_CONTEXT_COUNT][4][2] = { //0-10 Table 9-12 {{20, -15}, {20, -15}, {20, -15}, {20, -15}}, {{2, 54}, {2, 54}, {2, 54}, {2, 54}}, {{3, 74}, {3, 74}, {3, 74}, {3, 74}}, {{20, -15}, {20, -15}, {20, -15}, {20, -15}}, {{2, 54}, {2, 54}, {2, 54}, {2, 54}}, {{3, 74}, {3, 74}, {3, 74}, {3, 74}}, {{ -28, 127}, { -28, 127}, { -28, 127}, { -28, 127}}, {{ -23, 104}, { -23, 104}, { -23, 104}, { -23, 104}}, {{ -6, 53}, { -6, 53}, { -6, 53}, { -6, 53}}, {{ -1, 54}, { -1, 54}, { -1, 54}, { -1, 54}}, {{7, 51}, {7, 51}, {7, 51}, {7, 51}}, //11-23 Table 9-13 {{CTX_NA, CTX_NA}, {23, 33}, {22, 25}, {29, 16}}, {{CTX_NA, CTX_NA}, {23, 2}, {34, 0}, {25, 0}}, {{CTX_NA, CTX_NA}, {21, 0}, {16, 0}, {14, 0}}, {{CTX_NA, CTX_NA}, {1, 9}, { -2, 9}, { -10, 51}}, {{CTX_NA, CTX_NA}, {0, 49}, {4, 41}, { -3, 62}}, {{CTX_NA, CTX_NA}, { -37, 118}, { -29, 118}, { -27, 99}}, {{CTX_NA, CTX_NA}, {5, 57}, {2, 65}, {26, 16}}, {{CTX_NA, CTX_NA}, { -13, 78}, { -6, 71}, { -4, 85}}, {{CTX_NA, CTX_NA}, { -11, 65}, { -13, 79}, { -24, 102}}, {{CTX_NA, CTX_NA}, {1, 62}, {5, 52}, {5, 57}}, {{CTX_NA, CTX_NA}, {12, 49}, {9, 50}, {6, 57}}, {{CTX_NA, CTX_NA}, { -4, 73}, { -3, 70}, { -17, 73}}, {{CTX_NA, CTX_NA}, {17, 50}, {10, 54}, {14, 57}}, //24-39 Table9-14 {{CTX_NA, CTX_NA}, {18, 64}, {26, 34}, {20, 40}}, {{CTX_NA, CTX_NA}, {9, 43}, {19, 22}, {20, 10}}, {{CTX_NA, CTX_NA}, {29, 0}, {40, 0}, {29, 0}}, {{CTX_NA, CTX_NA}, {26, 67}, {57, 2}, {54, 0}}, {{CTX_NA, CTX_NA}, {16, 90}, {41, 36}, {37, 42}}, {{CTX_NA, CTX_NA}, {9, 104}, {26, 69}, {12, 97}}, {{CTX_NA, CTX_NA}, { -46, 127}, { -45, 127}, { -32, 127}}, {{CTX_NA, CTX_NA}, { -20, 104}, { -15, 101}, { -22, 117}}, {{CTX_NA, CTX_NA}, {1, 67}, { -4, 76}, { -2, 74}}, {{CTX_NA, CTX_NA}, { -13, 78}, { -6, 71}, { -4, 85}}, {{CTX_NA, CTX_NA}, { -11, 65}, { -13, 79}, { -24, 102}}, {{CTX_NA, CTX_NA}, {1, 62}, {5, 52}, {5, 57}}, {{CTX_NA, CTX_NA}, { -6, 86}, {6, 69}, { -6, 93}}, {{CTX_NA, CTX_NA}, { -17, 95}, { -13, 90}, { -14, 88}}, {{CTX_NA, CTX_NA}, { -6, 61}, {0, 52}, { -6, 44}}, {{CTX_NA, CTX_NA}, {9, 45}, {8, 43}, {4, 55}}, //40-53 Table 9-15 {{CTX_NA, CTX_NA}, { -3, 69}, { -2, 69}, { -11, 89}}, {{CTX_NA, CTX_NA}, { -6, 81}, { -5, 82}, { -15, 103}}, {{CTX_NA, CTX_NA}, { -11, 96}, { -10, 96}, { -21, 116}}, {{CTX_NA, CTX_NA}, {6, 55}, {2, 59}, {19, 57}}, {{CTX_NA, CTX_NA}, {7, 67}, {2, 75}, {20, 58}}, {{CTX_NA, CTX_NA}, { -5, 86}, { -3, 87}, {4, 84}}, {{CTX_NA, CTX_NA}, {2, 88}, { -3, 100}, {6, 96}}, {{CTX_NA, CTX_NA}, {0, 58}, {1, 56}, {1, 63}}, {{CTX_NA, CTX_NA}, { -3, 76}, { -3, 74}, { -5, 85}}, {{CTX_NA, CTX_NA}, { -10, 94}, { -6, 85}, { -13, 106}}, {{CTX_NA, CTX_NA}, {5, 54}, {0, 59}, {5, 63}}, {{CTX_NA, CTX_NA}, {4, 69}, { -3, 81}, {6, 75}}, {{CTX_NA, CTX_NA}, { -3, 81}, { -7, 86}, { -3, 90}}, {{CTX_NA, CTX_NA}, {0, 88}, { -5, 95}, { -1, 101}}, //54-59 Table 9-16 {{CTX_NA, CTX_NA}, { -7, 67}, { -1, 66}, {3, 55}}, {{CTX_NA, CTX_NA}, { -5, 74}, { -1, 77}, { -4, 79}}, {{CTX_NA, CTX_NA}, { -4, 74}, {1, 70}, { -2, 75}}, {{CTX_NA, CTX_NA}, { -5, 80}, { -2, 86}, { -12, 97}}, {{CTX_NA, CTX_NA}, { -7, 72}, { -5, 72}, { -7, 50}}, {{CTX_NA, CTX_NA}, {1, 58}, {0, 61}, {1, 60}}, //60-69 Table 9-17 {{0, 41}, {0, 41}, {0, 41}, {0, 41}}, {{0, 63}, {0, 63}, {0, 63}, {0, 63}}, {{0, 63}, {0, 63}, {0, 63}, {0, 63}}, {{0, 63}, {0, 63}, {0, 63}, {0, 63}}, {{ -9, 83}, { -9, 83}, { -9, 83}, { -9, 83}}, {{4, 86}, {4, 86}, {4, 86}, {4, 86}}, {{0, 97}, {0, 97}, {0, 97}, {0, 97}}, {{ -7, 72}, { -7, 72}, { -7, 72}, { -7, 72}}, {{13, 41}, {13, 41}, {13, 41}, {13, 41}}, {{3, 62}, {3, 62}, {3, 62}, {3, 62}}, //70-104 Table 9-18 {{0, 11}, {0, 45}, {13, 15}, {7, 34}}, {{1, 55}, { -4, 78}, {7, 51}, { -9, 88}}, {{0, 69}, { -3, 96}, {2, 80}, { -20, 127}}, {{ -17, 127}, { -27, 126}, { -39, 127}, { -36, 127}}, {{ -13, 102}, { -28, 98}, { -18, 91}, { -17, 91}}, {{0, 82}, { -25, 101}, { -17, 96}, { -14, 95}}, {{ -7, 74}, { -23, 67}, { -26, 81}, { -25, 84}}, {{ -21, 107}, { -28, 82}, { -35, 98}, { -25, 86}}, {{ -27, 127}, { -20, 94}, { -24, 102}, { -12, 89}}, {{ -31, 127}, { -16, 83}, { -23, 97}, { -17, 91}}, {{ -24, 127}, { -22, 110}, { -27, 119}, { -31, 127}}, {{ -18, 95}, { -21, 91}, { -24, 99}, { -14, 76}}, {{ -27, 127}, { -18, 102}, { -21, 110}, { -18, 103}}, {{ -21, 114}, { -13, 93}, { -18, 102}, { -13, 90}}, {{ -30, 127}, { -29, 127}, { -36, 127}, { -37, 127}}, {{ -17, 123}, { -7, 92}, {0, 80}, {11, 80}}, {{ -12, 115}, { -5, 89}, { -5, 89}, {5, 76}}, {{ -16, 122}, { -7, 96}, { -7, 94}, {2, 84}}, {{ -11, 115}, { -13, 108}, { -4, 92}, {5, 78}}, {{ -12, 63}, { -3, 46}, {0, 39}, { -6, 55}}, {{ -2, 68}, { -1, 65}, {0, 65}, {4, 61}}, {{ -15, 84}, { -1, 57}, { -15, 84}, { -14, 83}}, {{ -13, 104}, { -9, 93}, { -35, 127}, { -37, 127}}, {{ -3, 70}, { -3, 74}, { -2, 73}, { -5, 79}}, {{ -8, 93}, { -9, 92}, { -12, 104}, { -11, 104}}, {{ -10, 90}, { -8, 87}, { -9, 91}, { -11, 91}}, {{ -30, 127}, { -23, 126}, { -31, 127}, { -30, 127}}, {{ -1, 74}, {5, 54}, {3, 55}, {0, 65}}, {{ -6, 97}, {6, 60}, {7, 56}, { -2, 79}}, {{ -7, 91}, {6, 59}, {7, 55}, {0, 72}}, {{ -20, 127}, {6, 69}, {8, 61}, { -4, 92}}, {{ -4, 56}, { -1, 48}, { -3, 53}, { -6, 56}}, {{ -5, 82}, {0, 68}, {0, 68}, {3, 68}}, {{ -7, 76}, { -4, 69}, { -7, 74}, { -8, 71}}, {{ -22, 125}, { -8, 88}, { -9, 88}, { -13, 98}}, //105-165 Table 9-19 {{ -7, 93}, { -2, 85}, { -13, 103}, { -4, 86}}, {{ -11, 87}, { -6, 78}, { -13, 91}, { -12, 88}}, {{ -3, 77}, { -1, 75}, { -9, 89}, { -5, 82}}, {{ -5, 71}, { -7, 77}, { -14, 92}, { -3, 72}}, {{ -4, 63}, {2, 54}, { -8, 76}, { -4, 67}}, {{ -4, 68}, {5, 50}, { -12, 87}, { -8, 72}}, {{ -12, 84}, { -3, 68}, { -23, 110}, { -16, 89}}, {{ -7, 62}, {1, 50}, { -24, 105}, { -9, 69}}, {{ -7, 65}, {6, 42}, { -10, 78}, { -1, 59}}, {{8, 61}, { -4, 81}, { -20, 112}, {5, 66}}, {{5, 56}, {1, 63}, { -17, 99}, {4, 57}}, {{ -2, 66}, { -4, 70}, { -78, 127}, { -4, 71}}, {{1, 64}, {0, 67}, { -70, 127}, { -2, 71}}, {{0, 61}, {2, 57}, { -50, 127}, {2, 58}},