/** * MediaFrame is an Open Source streaming media platform in Java * which provides a fast, easy to implement and extremely small applet * that enables to view your audio/video content without having * to rely on external player applications or bulky plug-ins. * * Copyright (C) 2004/5 MediaFrame (http://www.mediaframe.org). * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ /************************** MPEG-2 NBC Audio Decoder ************************** * * "This software module was originally developed by * AT&T, Dolby Laboratories, Fraunhofer Gesellschaft IIS in the course of * development of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, * 14496-1,2 and 3. This software module is an implementation of a part of one or more * MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 * Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio * standards free license to this software module or modifications thereof for use in * hardware or software products claiming conformance to the MPEG-2 NBC/MPEG-4 * Audio standards. Those intending to use this software module in hardware or * software products are advised that this use may infringe existing patents. * The original developer of this software module and his/her company, the subsequent * editors and their companies, and ISO/IEC have no liability for use of this software * module or modifications thereof in an implementation. Copyright is not released for * non MPEG-2 NBC/MPEG-4 Audio conforming products.The original developer * retains full right to use the code for his/her own purpose, assign or donate the * code to a third party and to inhibit third party from using the code for non * MPEG-2 NBC/MPEG-4 Audio conforming products. This copyright notice must * be included in all copies or derivative works." * Copyright(c)1996. * ******************************************************************************/ package mediaframe.mpeg4.audio.AAC; import java.io.IOException; public class Huffman { public final int[][] book1 = { /* index length codeword */ { 0, 11, 2040 }, { 1, 9, 497 }, { 2, 11, 2045 }, { 3, 10, 1013 }, { 4, 7, 104 }, { 5, 10, 1008 }, { 6, 11, 2039 }, { 7, 9, 492 }, { 8, 11, 2037 }, { 9, 10, 1009 }, { 10, 7, 114 }, { 11, 10, 1012 }, { 12, 7, 116 }, { 13, 5, 17 }, { 14, 7, 118 }, { 15, 9, 491 }, { 16, 7, 108 }, { 17, 10, 1014 }, { 18, 11, 2044 }, { 19, 9, 481 }, { 20, 11, 2033 }, { 21, 9, 496 }, { 22, 7, 97 }, { 23, 9, 502 }, { 24, 11, 2034 }, { 25, 9, 490 }, { 26, 11, 2043 }, { 27, 9, 498 }, { 28, 7, 105 }, { 29, 9, 493 }, { 30, 7, 119 }, { 31, 5, 23 }, { 32, 7, 111 }, { 33, 9, 486 }, { 34, 7, 100 }, { 35, 9, 485 }, { 36, 7, 103 }, { 37, 5, 21 }, { 38, 7, 98 }, { 39, 5, 18 }, { 40, 1, 0 }, { 41, 5, 20 }, { 42, 7, 101 }, { 43, 5, 22 }, { 44, 7, 109 }, { 45, 9, 489 }, { 46, 7, 99 }, { 47, 9, 484 }, { 48, 7, 107 }, { 49, 5, 19 }, { 50, 7, 113 }, { 51, 9, 483 }, { 52, 7, 112 }, { 53, 9, 499 }, { 54, 11, 2046 }, { 55, 9, 487 }, { 56, 11, 2035 }, { 57, 9, 495 }, { 58, 7, 96 }, { 59, 9, 494 }, { 60, 11, 2032 }, { 61, 9, 482 }, { 62, 11, 2042 }, { 63, 10, 1011 }, { 64, 7, 106 }, { 65, 9, 488 }, { 66, 7, 117 }, { 67, 5, 16 }, { 68, 7, 115 }, { 69, 9, 500 }, { 70, 7, 110 }, { 71, 10, 1015 }, { 72, 11, 2038 }, { 73, 9, 480 }, { 74, 11, 2041 }, { 75, 10, 1010 }, { 76, 7, 102 }, { 77, 9, 501 }, { 78, 11, 2047 }, { 79, 9, 503 }, { 80, 11, 2036 } }; public final int[][] book2 = { /* index length codeword */ { 0, 9, 499 }, { 1, 7, 111 }, { 2, 9, 509 }, { 3, 8, 235 }, { 4, 6, 35 }, { 5, 8, 234 }, { 6, 9, 503 }, { 7, 8, 232 }, { 8, 9, 506 }, { 9, 8, 242 }, { 10, 6, 45 }, { 11, 7, 112 }, { 12, 6, 32 }, { 13, 5, 6 }, { 14, 6, 43 }, { 15, 7, 110 }, { 16, 6, 40 }, { 17, 8, 233 }, { 18, 9, 505 }, { 19, 7, 102 }, { 20, 8, 248 }, { 21, 8, 231 }, { 22, 6, 27 }, { 23, 8, 241 }, { 24, 9, 500 }, { 25, 7, 107 }, { 26, 9, 501 }, { 27, 8, 236 }, { 28, 6, 42 }, { 29, 7, 108 }, { 30, 6, 44 }, { 31, 5, 10 }, { 32, 6, 39 }, { 33, 7, 103 }, { 34, 6, 26 }, { 35, 8, 245 }, { 36, 6, 36 }, { 37, 5, 8 }, { 38, 6, 31 }, { 39, 5, 9 }, { 40, 3, 0 }, { 41, 5, 7 }, { 42, 6, 29 }, { 43, 5, 11 }, { 44, 6, 48 }, { 45, 8, 239 }, { 46, 6, 28 }, { 47, 7, 100 }, { 48, 6, 30 }, { 49, 5, 12 }, { 50, 6, 41 }, { 51, 8, 243 }, { 52, 6, 47 }, { 53, 8, 240 }, { 54, 9, 508 }, { 55, 7, 113 }, { 56, 9, 498 }, { 57, 8, 244 }, { 58, 6, 33 }, { 59, 8, 230 }, { 60, 8, 247 }, { 61, 7, 104 }, { 62, 9, 504 }, { 63, 8, 238 }, { 64, 6, 34 }, { 65, 7, 101 }, { 66, 6, 49 }, { 67, 4, 2 }, { 68, 6, 38 }, { 69, 8, 237 }, { 70, 6, 37 }, { 71, 7, 106 }, { 72, 9, 507 }, { 73, 7, 114 }, { 74, 9, 510 }, { 75, 7, 105 }, { 76, 6, 46 }, { 77, 8, 246 }, { 78, 9, 511 }, { 79, 7, 109 }, { 80, 9, 502 } }; public final int[][] book3 = { /* index length codeword */ { 0, 1, 0 }, { 1, 4, 9 }, { 2, 8, 239 }, { 3, 4, 11 }, { 4, 5, 25 }, { 5, 8, 240 }, { 6, 9, 491 }, { 7, 9, 486 }, { 8, 10, 1010 }, { 9, 4, 10 }, { 10, 6, 53 }, { 11, 9, 495 }, { 12, 6, 52 }, { 13, 6, 55 }, { 14, 9, 489 }, { 15, 9, 493 }, { 16, 9, 487 }, { 17, 10, 1011 }, { 18, 9, 494 }, { 19, 10, 1005 }, { 20, 13, 8186 }, { 21, 9, 492 }, { 22, 9, 498 }, { 23, 11, 2041 }, { 24, 11, 2040 }, { 25, 10, 1016 }, { 26, 12, 4088 }, { 27, 4, 8 }, { 28, 6, 56 }, { 29, 10, 1014 }, { 30, 6, 54 }, { 31, 7, 117 }, { 32, 10, 1009 }, { 33, 10, 1003 }, { 34, 10, 1004 }, { 35, 12, 4084 }, { 36, 5, 24 }, { 37, 7, 118 }, { 38, 11, 2036 }, { 39, 6, 57 }, { 40, 7, 116 }, { 41, 10, 1007 }, { 42, 9, 499 }, { 43, 9, 500 }, { 44, 11, 2038 }, { 45, 9, 488 }, { 46, 10, 1002 }, { 47, 13, 8188 }, { 48, 8, 242 }, { 49, 9, 497 }, { 50, 12, 4091 }, { 51, 10, 1013 }, { 52, 11, 2035 }, { 53, 12, 4092 }, { 54, 8, 238 }, { 55, 10, 1015 }, { 56, 15, 32766 }, { 57, 9, 496 }, { 58, 11, 2037 }, { 59, 15, 32765 }, { 60, 13, 8187 }, { 61, 14, 16378 }, { 62, 16, 65535 }, { 63, 8, 241 }, { 64, 10, 1008 }, { 65, 14, 16380 }, { 66, 9, 490 }, { 67, 10, 1006 }, { 68, 14, 16379 }, { 69, 12, 4086 }, { 70, 12, 4090 }, { 71, 15, 32764 }, { 72, 11, 2034 }, { 73, 12, 4085 }, { 74, 16, 65534 }, { 75, 10, 1012 }, { 76, 11, 2039 }, { 77, 15, 32763 }, { 78, 12, 4087 }, { 79, 12, 4089 }, { 80, 15, 32762 } }; public final int[][] book4 = { /* index length codeword */ { 0, 4, 7 }, { 1, 5, 22 }, { 2, 8, 246 }, { 3, 5, 24 }, { 4, 4, 8 }, { 5, 8, 239 }, { 6, 9, 495 }, { 7, 8, 243 }, { 8, 11, 2040 }, { 9, 5, 25 }, { 10, 5, 23 }, { 11, 8, 237 }, { 12, 5, 21 }, { 13, 4, 1 }, { 14, 8, 226 }, { 15, 8, 240 }, { 16, 7, 112 }, { 17, 10, 1008 }, { 18, 9, 494 }, { 19, 8, 241 }, { 20, 11, 2042 }, { 21, 8, 238 }, { 22, 8, 228 }, { 23, 10, 1010 }, { 24, 11, 2038 }, { 25, 10, 1007 }, { 26, 11, 2045 }, { 27, 4, 5 }, { 28, 5, 20 }, { 29, 8, 242 }, { 30, 4, 9 }, { 31, 4, 4 }, { 32, 8, 229 }, { 33, 8, 244 }, { 34, 8, 232 }, { 35, 10, 1012 }, { 36, 4, 6 }, { 37, 4, 2 }, { 38, 8, 231 }, { 39, 4, 3 }, { 40, 4, 0 }, { 41, 7, 107 }, { 42, 8, 227 }, { 43, 7, 105 }, { 44, 9, 499 }, { 45, 8, 235 }, { 46, 8, 230 }, { 47, 10, 1014 }, { 48, 7, 110 }, { 49, 7, 106 }, { 50, 9, 500 }, { 51, 10, 1004 }, { 52, 9, 496 }, { 53, 10, 1017 }, { 54, 8, 245 }, { 55, 8, 236 }, { 56, 11, 2043 }, { 57, 8, 234 }, { 58, 7, 111 }, { 59, 10, 1015 }, { 60, 11, 2041 }, { 61, 10, 1011 }, { 62, 12, 4095 }, { 63, 8, 233 }, { 64, 7, 109 }, { 65, 10, 1016 }, { 66, 7, 108 }, { 67, 7, 104 }, { 68, 9, 501 }, { 69, 10, 1006 }, { 70, 9, 498 }, { 71, 11, 2036 }, { 72, 11, 2039 }, { 73, 10, 1009 }, { 74, 12, 4094 }, { 75, 10, 1005 }, { 76, 9, 497 }, { 77, 11, 2037 }, { 78, 11, 2046 }, { 79, 10, 1013 }, { 80, 11, 2044 } }; public final int[][] book5 = { /* index length codeword */ { 0, 13, 8191 }, { 1, 12, 4087 }, { 2, 11, 2036 }, { 3, 11, 2024 }, { 4, 10, 1009 }, { 5, 11, 2030 }, { 6, 11, 2041 }, { 7, 12, 4088 }, { 8, 13, 8189 }, { 9, 12, 4093 }, { 10, 11, 2033 }, { 11, 10, 1000 }, { 12, 9, 488 }, { 13, 8, 240 }, { 14, 9, 492 }, { 15, 10, 1006 }, { 16, 11, 2034 }, { 17, 12, 4090 }, { 18, 12, 4084 }, { 19, 10, 1007 }, { 20, 9, 498 }, { 21, 8, 232 }, { 22, 7, 112 }, { 23, 8, 236 }, { 24, 9, 496 }, { 25, 10, 1002 }, { 26, 11, 2035 }, { 27, 11, 2027 }, { 28, 9, 491 }, { 29, 8, 234 }, { 30, 5, 26 }, { 31, 4, 8 }, { 32, 5, 25 }, { 33, 8, 238 }, { 34, 9, 495 }, { 35, 11, 2029 }, { 36, 10, 1008 }, { 37, 8, 242 }, { 38, 7, 115 }, { 39, 4, 11 }, { 40, 1, 0 }, { 41, 4, 10 }, { 42, 7, 113 }, { 43, 8, 243 }, { 44, 11, 2025 }, { 45, 11, 2031 }, { 46, 9, 494 }, { 47, 8, 239 }, { 48, 5, 24 }, { 49, 4, 9 }, { 50, 5, 27 }, { 51, 8, 235 }, { 52, 9, 489 }, { 53, 11, 2028 }, { 54, 11, 2038 }, { 55, 10, 1003 }, { 56, 9, 499 }, { 57, 8, 237 }, { 58, 7, 114 }, { 59, 8, 233 }, { 60, 9, 497 }, { 61, 10, 1005 }, { 62, 11, 2039 }, { 63, 12, 4086 }, { 64, 11, 2032 }, { 65, 10, 1001 }, { 66, 9, 493 }, { 67, 8, 241 }, { 68, 9, 490 }, { 69, 10, 1004 }, { 70, 11, 2040 }, { 71, 12, 4089 }, { 72, 13, 8188 }, { 73, 12, 4092 }, { 74, 12, 4085 }, { 75, 11, 2026 }, { 76, 10, 1011 }, { 77, 10, 1010 }, { 78, 11, 2037 }, { 79, 12, 4091 }, { 80, 13, 8190 } }; public final int[][] book6 = { /* index length codeword */ { 0, 11, 2046 }, { 1, 10, 1021 }, { 2, 9, 497 }, { 3, 9, 491 }, { 4, 9, 500 }, { 5, 9, 490 }, { 6, 9, 496 }, { 7, 10, 1020 }, { 8, 11, 2045 }, { 9, 10, 1014 }, { 10, 9, 485 }, { 11, 8, 234 }, { 12, 7, 108 }, { 13, 7, 113 }, { 14, 7, 104 }, { 15, 8, 240 }, { 16, 9, 486 }, { 17, 10, 1015 }, { 18, 9, 499 }, { 19, 8, 239 }, { 20, 6, 50 }, { 21, 6, 39 }, { 22, 6, 40 }, { 23, 6, 38 }, { 24, 6, 49 }, { 25, 8, 235 }, { 26, 9, 503 }, { 27, 9, 488 }, { 28, 7, 111 }, { 29, 6, 46 }, { 30, 4, 8 }, { 31, 4, 4 }, { 32, 4, 6 }, { 33, 6, 41 }, { 34, 7, 107 }, { 35, 9, 494 }, { 36, 9, 495 }, { 37, 7, 114 }, { 38, 6, 45 }, { 39, 4, 2 }, { 40, 4, 0 }, { 41, 4, 3 }, { 42, 6, 47 }, { 43, 7, 115 }, { 44, 9, 506 }, { 45, 9, 487 }, { 46, 7, 110 }, { 47, 6, 43 }, { 48, 4, 7 }, { 49, 4, 1 }, { 50, 4, 5 }, { 51, 6, 44 }, { 52, 7, 109 }, { 53, 9, 492 }, { 54, 9, 505 }, { 55, 8, 238 }, { 56, 6, 48 }, { 57, 6, 36 }, { 58, 6, 42 }, { 59, 6, 37 }, { 60, 6, 51 }, { 61, 8, 236 }, { 62, 9, 498 }, { 63, 10, 1016 }, { 64, 9, 484 }, { 65, 8, 237 }, { 66, 7, 106 }, { 67, 7, 112 }, { 68, 7, 105 }, { 69, 7, 116 }, { 70, 8, 241 }, { 71, 10, 1018 }, { 72, 11, 2047 }, { 73, 10, 1017 }, { 74, 9, 502 }, { 75, 9, 493 }, { 76, 9, 504 }, { 77, 9, 489 }, { 78, 9, 501 }, { 79, 10, 1019 }, { 80, 11, 2044 } }; public final int[][] book7 = { /* index length codeword */ { 0, 1, 0 }, { 1, 3, 5 }, { 2, 6, 55 }, { 3, 7, 116 }, { 4, 8, 242 }, { 5, 9, 491 }, { 6, 10, 1005 }, { 7, 11, 2039 }, { 8, 3, 4 }, { 9, 4, 12 }, { 10, 6, 53 }, { 11, 7, 113 }, { 12, 8, 236 }, { 13, 8, 238 }, { 14, 9, 494 }, { 15, 9, 501 }, { 16, 6, 54 }, { 17, 6, 52 }, { 18, 7, 114 }, { 19, 8, 234 }, { 20, 8, 241 }, { 21, 9, 489 }, { 22, 9, 499 }, { 23, 10, 1013 }, { 24, 7, 115 }, { 25, 7, 112 }, { 26, 8, 235 }, { 27, 8, 240 }, { 28, 9, 497 }, { 29, 9, 496 }, { 30, 10, 1004 }, { 31, 10, 1018 }, { 32, 8, 243 }, { 33, 8, 237 }, { 34, 9, 488 }, { 35, 9, 495 }, { 36, 10, 1007 }, { 37, 10, 1009 }, { 38, 10, 1017 }, { 39, 11, 2043 }, { 40, 9, 493 }, { 41, 8, 239 }, { 42, 9, 490 }, { 43, 9, 498 }, { 44, 10, 1011 }, { 45, 10, 1016 }, { 46, 11, 2041 }, { 47, 11, 2044 }, { 48, 10, 1006 }, { 49, 9, 492 }, { 50, 9, 500 }, { 51, 10, 1012 }, { 52, 10, 1015 }, { 53, 11, 2040 }, { 54, 12, 4093 }, { 55, 12, 4094 }, { 56, 11, 2038 }, { 57, 10, 1008 }, { 58, 10, 1010 }, { 59, 10, 1014 }, { 60, 11, 2042 }, { 61, 11, 2045 }, { 62, 12, 4092 }, { 63, 12, 4095 } }; public final int[][] book8 = { /* index length codeword */ { 0, 5, 14 }, { 1, 4, 5 }, { 2, 5, 16 }, { 3, 6, 48 }, { 4, 7, 111 }, { 5, 8, 241 }, { 6, 9, 506 }, { 7, 10, 1022 }, { 8, 4, 3 }, { 9, 3, 0 }, { 10, 4, 4 }, { 11, 5, 18 }, { 12, 6, 44 }, { 13, 7, 106 }, { 14, 7, 117 }, { 15, 8, 248 }, { 16, 5, 15 }, { 17, 4, 2 }, { 18, 4, 6 }, { 19, 5, 20 }, { 20, 6, 46 }, { 21, 7, 105 }, { 22, 7, 114 }, { 23, 8, 245 }, { 24, 6, 47 }, { 25, 5, 17 }, { 26, 5, 19 }, { 27, 6, 42 }, { 28, 6, 50 }, { 29, 7, 108 }, { 30, 8, 236 }, { 31, 8, 250 }, { 32, 7, 113 }, { 33, 6, 43 }, { 34, 6, 45 }, { 35, 6, 49 }, { 36, 7, 109 }, { 37, 7, 112 }, { 38, 8, 242 }, { 39, 9, 505 }, { 40, 8, 239 }, { 41, 7, 104 }, { 42, 6, 51 }, { 43, 7, 107 }, { 44, 7, 110 }, { 45, 8, 238 }, { 46, 8, 249 }, { 47, 10, 1020 }, { 48, 9, 504 }, { 49, 7, 116 }, { 50, 7, 115 }, { 51, 8, 237 }, { 52, 8, 240 }, { 53, 8, 246 }, { 54, 9, 502 }, { 55, 9, 509 }, { 56, 10, 1021 }, { 57, 8, 243 }, { 58, 8, 244 }, { 59, 8, 247 }, { 60, 9, 503 }, { 61, 9, 507 }, { 62, 9, 508 }, { 63, 10, 1023 } }; public final int[][] book9 = { /* index length codeword */ { 0, 1, 0 }, { 1, 3, 5 }, { 2, 6, 55 }, { 3, 8, 231 }, { 4, 9, 478 }, { 5, 10, 974 }, { 6, 10, 985 }, { 7, 11, 1992 }, { 8, 11, 1997 }, { 9, 12, 4040 }, { 10, 12, 4061 }, { 11, 13, 8164 }, { 12, 13, 8172 }, { 13, 3, 4 }, { 14, 4, 12 }, { 15, 6, 53 }, { 16, 7, 114 }, { 17, 8, 234 }, { 18, 8, 237 }, { 19, 9, 482 }, { 20, 10, 977 }, { 21, 10, 979 }, { 22, 10, 992 }, { 23, 11, 2008 }, { 24, 12, 4047 }, { 25, 12, 4053 }, { 26, 6, 54 }, { 27, 6, 52 }, { 28, 7, 113 }, { 29, 8, 232 }, { 30, 8, 236 }, { 31, 9, 481 }, { 32, 10, 975 }, { 33, 10, 989 }, { 34, 10, 987 }, { 35, 11, 2000 }, { 36, 12, 4039 }, { 37, 12, 4052 }, { 38, 12, 4068 }, { 39, 8, 230 }, { 40, 7, 112 }, { 41, 8, 233 }, { 42, 9, 477 }, { 43, 9, 483 }, { 44, 10, 978 }, { 45, 10, 988 }, { 46, 11, 1996 }, { 47, 11, 1994 }, { 48, 11, 2014 }, { 49, 12, 4056 }, { 50, 12, 4074 }, { 51, 13, 8155 }, { 52, 9, 479 }, { 53, 8, 235 }, { 54, 9, 476 }, { 55, 9, 486 }, { 56, 10, 981 }, { 57, 10, 990 }, { 58, 11, 1995 }, { 59, 11, 2013 }, { 60, 11, 2012 }, { 61, 12, 4045 }, { 62, 12, 4066 }, { 63, 12, 4071 }, { 64, 13, 8161 }, { 65, 10, 976 }, { 66, 9, 480 }, { 67, 9, 484 }, { 68, 10, 982 }, { 69, 11, 1989 }, { 70, 11, 2001 }, { 71, 11, 2011 }, { 72, 12, 4050 }, { 73, 11, 2016 }, { 74, 12, 4057 }, { 75, 12, 4075 }, { 76, 13, 8163 }, { 77, 13, 8169 }, { 78, 11, 1988 }, { 79, 9, 485 }, { 80, 10, 983 }, { 81, 11, 1990 }, { 82, 11, 1999 }, { 83, 11, 2010 }, { 84, 12, 4043 }, { 85, 12, 4058 }, { 86, 12, 4067 }, { 87, 12, 4073 }, { 88, 13, 8166 }, { 89, 13, 8179 }, { 90, 13, 8183 }, { 91, 11, 2003 }, { 92, 10, 984 }, { 93, 10, 993 }, { 94, 11, 2004 }, { 95, 11, 2009 }, { 96, 12, 4051 }, { 97, 12, 4062 }, { 98, 13, 8157 }, { 99, 13, 8153 }, { 100, 13, 8162 }, { 101, 13, 8170 }, { 102, 13, 8177 }, { 103, 13, 8182 }, { 104, 11, 2002 }, { 105, 10, 980 }, { 106, 10, 986 }, { 107, 11, 1991 }, { 108, 11, 2007 }, { 109, 11, 2018 }, { 110, 12, 4046 }, { 111, 12, 4059 }, { 112, 13, 8152 }, { 113, 13, 8174 }, { 114, 14, 16368 }, { 115, 13, 8180 }, { 116, 14, 16370 }, { 117, 11, 2017 }, { 118, 10, 991 }, { 119, 11, 1993 }, { 120, 11, 2006 }, { 121, 12, 4042 }, { 122, 12, 4048 }, { 123, 12, 4069 }, { 124, 12, 4070 }, { 125, 13, 8171 }, { 126, 13, 8175 }, { 127, 14, 16371 }, { 128, 14, 16372 }, { 129, 14, 16373 }, { 130, 12, 4064 }, { 131, 11, 1998 }, { 132, 11, 2005 }, { 133, 12, 4038 }, { 134, 12, 4049 }, { 135, 12, 4065 }, { 136, 13, 8160 }, { 137, 13, 8168 }, { 138, 13, 8176 }, { 139, 14, 16369 }, { 140, 14, 16376 }, { 141, 14, 16374 }, { 142, 15, 32764 }, { 143, 12, 4072 }, { 144, 11, 2015 }, { 145, 12, 4041 }, { 146, 12, 4055 }, { 147, 12, 4060 }, { 148, 13, 8156 }, { 149, 13, 8159 }, { 150, 13, 8173 }, { 151, 13, 8181 }, { 152, 14, 16377 }, { 153, 14, 16379 }, { 154, 15, 32765 }, { 155, 15, 32766 }, { 156, 13, 8167 }, { 157, 12, 4044 }, { 158, 12, 4054 }, { 159, 12, 4063 }, { 160, 13, 8158 }, { 161, 13, 8154 }, { 162, 13, 8165 }, { 163, 13, 8178 }, { 164, 14, 16378 }, { 165, 14, 16375 }, { 166, 14, 16380 }, { 167, 14, 16381 }, { 168, 15, 32767 } }; public final int[][] book10 = { /* index length codeword */ { 0, 6, 34 }, { 1, 5, 8 }, { 2, 6, 29 }, { 3, 6, 38 }, { 4, 7, 95 }, { 5, 8, 211 }, { 6, 9, 463 }, { 7, 10, 976 }, { 8, 10, 983 }, { 9, 10, 1005 }, { 10, 11, 2032 }, { 11, 11, 2038 }, { 12, 12, 4093 }, { 13, 5, 7 }, { 14, 4, 0 }, { 15, 4, 1 }, { 16, 5, 9 }, { 17, 6, 32 }, { 18, 7, 84 }, { 19, 7, 96 }, { 20, 8, 213 }, { 21, 8, 220 }, { 22, 9, 468 }, { 23, 10, 973 }, { 24, 10, 990 }, { 25, 11, 2023 }, { 26, 6, 28 }, { 27, 4, 2 }, { 28, 5, 6 }, { 29, 5, 12 }, { 30, 6, 30 }, { 31, 6, 40 }, { 32, 7, 91 }, { 33, 8, 205 }, { 34, 8, 217 }, { 35, 9, 462 }, { 36, 9, 476 }, { 37, 10, 985 }, { 38, 10, 1009 }, { 39, 6, 37 }, { 40, 5, 11 }, { 41, 5, 10 }, { 42, 5, 13 }, { 43, 6, 36 }, { 44, 7, 87 }, { 45, 7, 97 }, { 46, 8, 204 }, { 47, 8, 221 }, { 48, 9, 460 }, { 49, 9, 478 }, { 50, 10, 979 }, { 51, 10, 999 }, { 52, 7, 93 }, { 53, 6, 33 }, { 54, 6, 31 }, { 55, 6, 35 }, { 56, 6, 39 }, { 57, 7, 89 }, { 58, 7, 100 }, { 59, 8, 216 }, { 60, 8, 223 }, { 61, 9, 466 }, { 62, 9, 482 }, { 63, 10, 989 }, { 64, 10, 1006 }, { 65, 8, 209 }, { 66, 7, 85 }, { 67, 6, 41 }, { 68, 7, 86 }, { 69, 7, 88 }, { 70, 7, 98 }, { 71, 8, 206 }, { 72, 8, 224 }, { 73, 8, 226 }, { 74, 9, 474 }, { 75, 10, 980 }, { 76, 10, 995 }, { 77, 11, 2027 }, { 78, 9, 457 }, { 79, 7, 94 }, { 80, 7, 90 }, { 81, 7, 92 }, { 82, 7, 99 }, { 83, 8, 202 }, { 84, 8, 218 }, { 85, 9, 455 }, { 86, 9, 458 }, { 87, 9, 480 }, { 88, 10, 987 }, { 89, 10, 1000 }, { 90, 11, 2028 }, { 91, 9, 483 }, { 92, 8, 210 }, { 93, 8, 203 }, { 94, 8, 208 }, { 95, 8, 215 }, { 96, 8, 219 }, { 97, 9, 454 }, { 98, 9, 469 }, { 99, 9, 472 }, { 100, 10, 970 }, { 101, 10, 986 }, { 102, 11, 2026 }, { 103, 11, 2033 }, { 104, 9, 481 }, { 105, 8, 212 }, { 106, 8, 207 }, { 107, 8, 214 }, { 108, 8, 222 }, { 109, 8, 225 }, { 110, 9, 464 }, { 111, 9, 470 }, { 112, 10, 977 }, { 113, 10, 981 }, { 114, 10, 1010 }, { 115, 11, 2030 }, { 116, 11, 2043 }, { 117, 10, 1001 }, { 118, 9, 461 }, { 119, 9, 456 }, { 120, 9, 459 }, { 121, 9, 465 }, { 122, 9, 471 }, { 123, 9, 479 }, { 124, 10, 975 }, { 125, 10, 992 }, { 126, 10, 1007 }, { 127, 11, 2022 }, { 128, 11, 2040 }, { 129, 12, 4090 }, { 130, 10, 1003 }, { 131, 9, 477 }, { 132, 9, 467 }, { 133, 9, 473 }, { 134, 9, 475 }, { 135, 10, 978 }, { 136, 10, 972 }, { 137, 10, 988 }, { 138, 10, 1002 }, { 139, 11, 2029 }, { 140, 11, 2035 }, { 141, 11, 2041 }, { 142, 12, 4089 }, { 143, 11, 2034 }, { 144, 10, 974 }, { 145, 9, 484 }, { 146, 10, 971 }, { 147, 10, 984 }, { 148, 10, 982 }, { 149, 10, 994 }, { 150, 10, 997 }, { 151, 11, 2024 }, { 152, 11, 2036 }, { 153, 11, 2037 }, { 154, 11, 2039 }, { 155, 12, 4091 }, { 156, 11, 2042 }, { 157, 10, 1004 }, { 158, 10, 991 }, { 159, 10, 993 }, { 160, 10, 996 }, { 161, 10, 998 }, { 162, 10, 1008 }, { 163, 11, 2025 }, { 164, 11, 2031 }, { 165, 12, 4088 }, { 166, 12, 4094 }, { 167, 12, 4092 }, { 168, 12, 4095 } }; public final int[][] book11 = { /* index length codeword */ { 0, 4, 0 }, { 1, 5, 6 }, { 2, 6, 25 }, { 3, 7, 61 }, { 4, 8, 156 }, { 5, 8, 198 }, { 6, 9, 423 }, { 7, 10, 912 }, { 8, 10, 962 }, { 9, 10, 991 }, { 10, 11, 2022 }, { 11, 11, 2035 }, { 12, 12, 4091 }, { 13, 11, 2028 }, { 14, 12, 4090 }, { 15, 12, 4094 }, { 16, 10, 910 }, { 17, 5, 5 }, { 18, 4, 1 }, { 19, 5, 8 }, { 20, 6, 20 }, { 21, 7, 55 }, { 22, 7, 66 }, { 23, 8, 146 }, { 24, 8, 175 }, { 25, 9, 401 }, { 26, 9, 421 }, { 27, 9, 437 }, { 28, 10, 926 }, { 29, 10, 960 }, { 30, 10, 930 }, { 31, 10, 973 }, { 32, 11, 2006 }, { 33, 8, 174 }, { 34, 6, 23 }, { 35, 5, 7 }, { 36, 5, 9 }, { 37, 6, 24 }, { 38, 7, 57 }, { 39, 7, 64 }, { 40, 8, 142 }, { 41, 8, 163 }, { 42, 8, 184 }, { 43, 9, 409 }, { 44, 9, 428 }, { 45, 9, 449 }, { 46, 10, 945 }, { 47, 10, 918 }, { 48, 10, 958 }, { 49, 10, 970 }, { 50, 8, 157 }, { 51, 7, 60 }, { 52, 6, 21 }, { 53, 6, 22 }, { 54, 6, 26 }, { 55, 7, 59 }, { 56, 7, 68 }, { 57, 8, 145 }, { 58, 8, 165 }, { 59, 8, 190 }, { 60, 9, 406 }, { 61, 9, 430 }, { 62, 9, 441 }, { 63, 10, 929 }, { 64, 10, 913 }, { 65, 10, 933 }, { 66, 10, 981 }, { 67, 8, 148 }, { 68, 8, 154 }, { 69, 7, 54 }, { 70, 7, 56 }, { 71, 7, 58 }, { 72, 7, 65 }, { 73, 8, 140 }, { 74, 8, 155 }, { 75, 8, 176 }, { 76, 8, 195 }, { 77, 9, 414 }, { 78, 9, 427 }, { 79, 9, 444 }, { 80, 10, 927 }, { 81, 10, 911 }, { 82, 10, 937 }, { 83, 10, 975 }, { 84, 8, 147 }, { 85, 8, 191 }, { 86, 7, 62 }, { 87, 7, 63 }, { 88, 7, 67 }, { 89, 7, 69 }, { 90, 8, 158 }, { 91, 8, 167 }, { 92, 8, 185 }, { 93, 9, 404 }, { 94, 9, 418 }, { 95, 9, 442 }, { 96, 9, 451 }, { 97, 10, 934 }, { 98, 10, 935 }, { 99, 10, 955 }, { 100, 10, 980 }, { 101, 8, 159 }, { 102, 9, 416 }, { 103, 8, 143 }, { 104, 8, 141 }, { 105, 8, 144 }, { 106, 8, 152 }, { 107, 8, 166 }, { 108, 8, 182 }, { 109, 8, 196 }, { 110, 9, 415 }, { 111, 9, 431 }, { 112, 9, 447 }, { 113, 10, 921 }, { 114, 10, 959 }, { 115, 10, 948 }, { 116, 10, 969 }, { 117, 10, 999 }, { 118, 8, 168 }, { 119, 9, 438 }, { 120, 8, 171 }, { 121, 8, 164 }, { 122, 8, 170 }, { 123, 8, 178 }, { 124, 8, 194 }, { 125, 8, 197 }, { 126, 9, 408 }, { 127, 9, 420 }, { 128, 9, 440 }, { 129, 10, 908 }, { 130, 10, 932 }, { 131, 10, 964 }, { 132, 10, 966 }, { 133, 10, 989 }, { 134, 10, 1000 }, { 135, 8, 173 }, { 136, 10, 943 }, { 137, 9, 402 }, { 138, 8, 189 }, { 139, 8, 188 }, { 140, 9, 398 }, { 141, 9, 407 }, { 142, 9, 410 }, { 143, 9, 419 }, { 144, 9, 433 }, { 145, 10, 909 }, { 146, 10, 920 }, { 147, 10, 951 }, { 148, 10, 979 }, { 149, 10, 977 }, { 150, 10, 987 }, { 151, 11, 2013 }, { 152, 8, 180 }, { 153, 10, 990 }, { 154, 9, 425 }, { 155, 9, 411 }, { 156, 9, 412 }, { 157, 9, 417 }, { 158, 9, 426 }, { 159, 9, 429 }, { 160, 9, 435 }, { 161, 10, 907 }, { 162, 10, 946 }, { 163, 10, 952 }, { 164, 10, 974 }, { 165, 10, 993 }, { 166, 10, 992 }, { 167, 11, 2002 }, { 168, 11, 2021 }, { 169, 8, 183 }, { 170, 11, 2019 }, { 171, 9, 443 }, { 172, 9, 424 }, { 173, 9, 422 }, { 174, 9, 432 }, { 175, 9, 434 }, { 176, 9, 439 }, { 177, 10, 923 }, { 178, 10, 922 }, { 179, 10, 954 }, { 180, 10, 949 }, { 181, 10, 982 }, { 182, 11, 2007 }, { 183, 10, 996 }, { 184, 11, 2008 }, { 185, 11, 2026 }, { 186, 8, 186 }, { 187, 11, 2024 }, { 188, 10, 928 }, { 189, 9, 445 }, { 190, 9, 436 }, { 191, 10, 906 }, { 192, 9, 452 }, { 193, 10, 914 }, { 194, 10, 938 }, { 195, 10, 944 }, { 196, 10, 956 }, { 197, 10, 983 }, { 198, 11, 2004 }, { 199, 11, 2012 }, { 200, 11, 2011 }, { 201, 11, 2005 }, { 202, 11, 2032 }, { 203, 8, 193 }, { 204, 11, 2043 }, { 205, 10, 968 }, { 206, 10, 931 }, { 207, 10, 917 }, { 208, 10, 925 }, { 209, 10, 940 }, { 210, 10, 942 }, { 211, 10, 965 }, { 212, 10, 984 }, { 213, 10, 994 }, { 214, 10, 998 }, { 215, 11, 2020 }, { 216, 11, 2023 }, { 217, 11, 2016 }, { 218, 11, 2025 }, { 219, 11, 2039 }, { 220, 9, 400 }, { 221, 11, 2034 }, { 222, 10, 915 }, { 223, 9, 446 }, { 224, 9, 448 }, { 225, 10, 916 }, { 226, 10, 919 }, { 227, 10, 941 }, { 228, 10, 963 }, { 229, 10, 961 }, { 230, 10, 978 }, { 231, 11, 2010 }, { 232, 11, 2009 }, { 233, 11, 2015 }, { 234, 11, 2027 }, { 235, 11, 2036 }, { 236, 11, 2042 }, { 237, 9, 405 }, { 238, 11, 2040 }, { 239, 10, 957 }, { 240, 10, 924 }, { 241, 10, 939 }, { 242, 10, 936 }, { 243, 10, 947 }, { 244, 10, 953 }, { 245, 10, 976 }, { 246, 10, 995 }, { 247, 10, 997 }, { 248, 11, 2018 }, { 249, 11, 2014 }, { 250, 11, 2029 }, { 251, 11, 2033 }, { 252, 11, 2041 }, { 253, 11, 2044 }, { 254, 9, 403 }, { 255, 12, 4093 }, { 256, 10, 988 }, { 257, 10, 950 }, { 258, 10, 967 }, { 259, 10, 972 }, { 260, 10, 971 }, { 261, 10, 985 }, { 262, 10, 986 }, { 263, 11, 2003 }, { 264, 11, 2017 }, { 265, 11, 2030 }, { 266, 11, 2031 }, { 267, 11, 2037 }, { 268, 11, 2038 }, { 269, 12, 4092 }, { 270, 12, 4095 }, { 271, 9, 413 }, { 272, 9, 450 }, { 273, 8, 181 }, { 274, 8, 161 }, { 275, 8, 150 }, { 276, 8, 151 }, { 277, 8, 149 }, { 278, 8, 153 }, { 279, 8, 160 }, { 280, 8, 162 }, { 281, 8, 172 }, { 282, 8, 169 }, { 283, 8, 177 }, { 284, 8, 179 }, { 285, 8, 187 }, { 286, 8, 192 }, { 287, 9, 399 }, { 288, 5, 4 } }; public final int[][] bookscl = { /* index length codeword */ { 0, 18, 262120 }, { 1, 18, 262118 }, { 2, 18, 262119 }, { 3, 18, 262117 }, { 4, 19, 524277 }, { 5, 19, 524273 }, { 6, 19, 524269 }, { 7, 19, 524278 }, { 8, 19, 524270 }, { 9, 19, 524271 }, { 10, 19, 524272 }, { 11, 19, 524284 }, { 12, 19, 524285 }, { 13, 19, 524287 }, { 14, 19, 524286 }, { 15, 19, 524279 }, { 16, 19, 524280 }, { 17, 19, 524283 }, { 18, 19, 524281 }, { 19, 18, 262116 }, { 20, 19, 524282 }, { 21, 18, 262115 }, { 22, 17, 131055 }, { 23, 17, 131056 }, { 24, 16, 65525 }, { 25, 17, 131054 }, { 26, 16, 65522 }, { 27, 16, 65523 }, { 28, 16, 65524 }, { 29, 16, 65521 }, { 30, 15, 32758 }, { 31, 15, 32759 }, { 32, 14, 16377 }, { 33, 14, 16373 }, { 34, 14, 16375 }, { 35, 14, 16371 }, { 36, 14, 16374 }, { 37, 14, 16370 }, { 38, 13, 8183 }, { 39, 13, 8181 }, { 40, 12, 4089 }, { 41, 12, 4087 }, { 42, 12, 4086 }, { 43, 11, 2041 }, { 44, 12, 4084 }, { 45, 11, 2040 }, { 46, 10, 1017 }, { 47, 10, 1015 }, { 48, 10, 1013 }, { 49, 9, 504 }, { 50, 9, 503 }, { 51, 8, 250 }, { 52, 8, 248 }, { 53, 8, 246 }, { 54, 7, 121 }, { 55, 6, 58 }, { 56, 6, 56 }, { 57, 5, 26 }, { 58, 4, 11 }, { 59, 3, 4 }, { 60, 1, 0 }, { 61, 4, 10 }, { 62, 4, 12 }, { 63, 5, 27 }, { 64, 6, 57 }, { 65, 6, 59 }, { 66, 7, 120 }, { 67, 7, 122 }, { 68, 8, 247 }, { 69, 8, 249 }, { 70, 9, 502 }, { 71, 9, 505 }, { 72, 10, 1012 }, { 73, 10, 1014 }, { 74, 10, 1016 }, { 75, 11, 2037 }, { 76, 11, 2036 }, { 77, 11, 2038 }, { 78, 11, 2039 }, { 79, 12, 4085 }, { 80, 12, 4088 }, { 81, 13, 8180 }, { 82, 13, 8182 }, { 83, 13, 8184 }, { 84, 14, 16376 }, { 85, 14, 16372 }, { 86, 16, 65520 }, { 87, 15, 32756 }, { 88, 16, 65526 }, { 89, 15, 32757 }, { 90, 18, 262114 }, { 91, 19, 524249 }, { 92, 19, 524250 }, { 93, 19, 524251 }, { 94, 19, 524252 }, { 95, 19, 524253 }, { 96, 19, 524254 }, { 97, 19, 524248 }, { 98, 19, 524242 }, { 99, 19, 524243 }, { 100, 19, 524244 }, { 101, 19, 524245 }, { 102, 19, 524246 }, { 103, 19, 524274 }, { 104, 19, 524255 }, { 105, 19, 524263 }, { 106, 19, 524264 }, { 107, 19, 524265 }, { 108, 19, 524266 }, { 109, 19, 524267 }, { 110, 19, 524262 }, { 111, 19, 524256 }, { 112, 19, 524257 }, { 113, 19, 524258 }, { 114, 19, 524259 }, { 115, 19, 524260 }, { 116, 19, 524261 }, { 117, 19, 524247 }, { 118, 19, 524268 }, { 119, 19, 524276 }, { 120, 19, 524275 } }; Hcb[] book = new Hcb[Constants.NSPECBOOKS + 2]; float[] iq_exp_tbl = new float[Constants.MAX_IQ_TBL]; float[] exptable = new float[Constants.TEXP]; /** The input MPEG4 audio bitstream. */ private BitStream bitstream; /** * Constructs an <code>Huffman</code> object using the specified bitstream * object. * * @param bitstream * the input video bitstream. */ public Huffman(AACDecoder decoder) { super(); this.bitstream = decoder.getAudio_Stream(); for (int i = 0; i < book.length; i++) { book[i] = new Hcb(); } huffbookinit(); } /** * Coverts long to binary string. * * @param v * the long value. * @param len * the amount of bits in the long value to be printed. * @return the binary string of a long value. */ final static String bin_str(long v, int len) { return Long.toBinaryString((v & ((1 << len) - 1)) | 1 << len) .substring(1); } /** * Prints the huffman codebook. * * @param hcb * the huffman codebook. */ static void print_cb(Hcb hcb) { int[][] hcw = hcb.hcw; System.out.println("Huffman Codebook"); System.out.println("size " + hcb.n + ", dim " + hcb.dim + ", lav " + hcb.lav + ", mod " + hcb.mod + ", off " + hcb.off + ", signed " + hcb.signed_cb); System.out.println("index\t length\t cw_10\t cw_2"); for (int i = 0; i < hcb.n; i++) { System.out.println(hcw[i][0] + "\t\t " + hcw[i][1] + "\t\t " + hcw[i][2] + "\t\t " + bin_str(hcw[i][2], hcw[i][1])); } } /** * Compares two huffman records. * * @param va * first huffman record. * @param vb * second huffman record. * @return the comparation result. */ static int huffcmp(Object va, Object vb) { int[] a, b; a = (int[]) va; b = (int[]) vb; if (a[1] < b[1]) return -1; if ((a[1] == b[1]) && (a[2] < b[2])) return -1; return 1; } /** * Initialize the Hcb structure and sort the Huffman codewords by length, * shortest (most probable) first * * @param Hcb * the Huffman codebook. * @param hcw * the Huffman table. */ void hufftab(Hcb hcb, int[][] hcw, int dim, int lav, boolean signed_cb) { int i, j, n; int[] tmp; if (!signed_cb) { hcb.mod = lav + 1; hcb.off = 0; } else { hcb.mod = 2 * lav + 1; hcb.off = lav; } n = 1; for (i = 0; i < dim; i++) { n *= hcb.mod; } hcb.n = n; hcb.dim = dim; hcb.lav = lav; hcb.signed_cb = signed_cb; hcb.hcw = hcw; // if (debug['H'] && !debug['S']) print_cb(hcb); for (i = hcw.length - 1; i > 0; i--) { for (j = 0; j < i; j++) { if (huffcmp(hcw[i], hcw[j]) == -1) { tmp = hcw[i]; hcw[i] = hcw[j]; hcw[j] = tmp; } } } // if (debug['H'] && debug['S']) print_cb(hcb); } /** * Decodes the huffman codeword from a stream. * * @param h * the huffman table. * @return the decoded value. * @throws IOException * raises if an I/O error occurs. */ int decode_huff_cw(int[][] h) throws IOException { /* * Cword is working buffer to which shorts from bitstream are written. * Bits are read from msb to lsb Nbits is number of lsb bits not yet * consumed * * this uses a minimum-memory method of Huffman decoding */ // System.out.println("decode_huff_cw"); int i, j, z = 0; long cw; i = h[z][1]; cw = bitstream.next_bits(i); while (cw != h[z][2]) { z++; j = h[z][1] - i; i += j; cw <<= j; cw |= bitstream.next_bits(j); } return (h[z][0]); } /** checked */ void unpack_idx(int[] qp, int qp_start_index, int idx, Hcb hcb) { int dim = hcb.dim; int mod = hcb.mod; int off = hcb.off; if (dim == 4) { qp[qp_start_index + 0] = (idx / (mod * mod * mod)) - off; idx -= (qp[qp_start_index + 0] + off) * (mod * mod * mod); qp[qp_start_index + 1] = (idx / (mod * mod)) - off; idx -= (qp[qp_start_index + 1] + off) * (mod * mod); qp[qp_start_index + 2] = (idx / (mod)) - off; idx -= (qp[qp_start_index + 2] + off) * (mod); qp[qp_start_index + 3] = (idx) - off; } else { qp[qp_start_index + 0] = (idx / (mod)) - off; idx -= (qp[qp_start_index + 0] + off) * (mod); qp[qp_start_index + 1] = (idx) - off; } } // get sign bits /** checked */ void get_sign_bits(int[] q, int qp_start_index, int n) throws IOException { int i; for (i = 0; i < n; i++) { if (q[qp_start_index + i] > 0) { if (bitstream.next_bit()) { // 1 signals negative, as in 2's complement q[qp_start_index + i] = -q[qp_start_index + i]; } } } } /* source huffinit.c */ void huffbookinit() { int i; hufftab(book[1], book1, 4, 1, Constants.HUF1SGN); hufftab(book[2], book2, 4, 1, Constants.HUF2SGN); hufftab(book[3], book3, 4, 2, Constants.HUF3SGN); hufftab(book[4], book4, 4, 2, Constants.HUF4SGN); hufftab(book[5], book5, 2, 4, Constants.HUF5SGN); hufftab(book[6], book6, 2, 4, Constants.HUF6SGN); hufftab(book[7], book7, 2, 7, Constants.HUF7SGN); hufftab(book[8], book8, 2, 7, Constants.HUF8SGN); hufftab(book[9], book9, 2, 12, Constants.HUF9SGN); hufftab(book[10], book10, 2, 12, Constants.HUF10SGN); hufftab(book[11], book11, 2, 16, Constants.HUF11SGN); hufftab(book[Constants.BOOKSCL], bookscl, 1, 60, true); for (i = 0; i < Constants.TEXP; i++) { exptable[i] = (float) Math.pow(2.0, 0.25 * i); } for (i = 0; i < Constants.MAX_IQ_TBL; i++) { iq_exp_tbl[i] = (float) Math.pow(i, 4. / 3.); } } }