Remove unused unreferenced code in webrtc/
The code removed here are .c, .cc and .h files that are not referenced from anywhere else. E.g. if git-grep showed no occurrence of the file it's removed. This process was repeated until no more unreferenced files were present. BUG= R=andrew@webrtc.org, henrike@webrtc.org, phoglund@webrtc.org, stefan@webrtc.org, turaj@webrtc.org, wu@webrtc.org, xians@webrtc.org Review URL: https://webrtc-codereview.appspot.com/1945004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4511 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -1,704 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file contains the Q14 radix-8 tables used in ARM9e optimizations.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern const int s_Q14S_8;
|
|
||||||
const int s_Q14S_8 = 1024;
|
|
||||||
extern const unsigned short t_Q14S_8[2032];
|
|
||||||
const unsigned short t_Q14S_8[2032] = {
|
|
||||||
0x4000,0x0000 ,0x4000,0x0000 ,0x4000,0x0000 ,
|
|
||||||
0x22a3,0x187e ,0x3249,0x0c7c ,0x11a8,0x238e ,
|
|
||||||
0x0000,0x2d41 ,0x22a3,0x187e ,0xdd5d,0x3b21 ,
|
|
||||||
0xdd5d,0x3b21 ,0x11a8,0x238e ,0xb4be,0x3ec5 ,
|
|
||||||
0xc000,0x4000 ,0x0000,0x2d41 ,0xa57e,0x2d41 ,
|
|
||||||
0xac61,0x3b21 ,0xee58,0x3537 ,0xb4be,0x0c7c ,
|
|
||||||
0xa57e,0x2d41 ,0xdd5d,0x3b21 ,0xdd5d,0xe782 ,
|
|
||||||
0xac61,0x187e ,0xcdb7,0x3ec5 ,0x11a8,0xcac9 ,
|
|
||||||
0x4000,0x0000 ,0x4000,0x0000 ,0x4000,0x0000 ,
|
|
||||||
0x396b,0x0646 ,0x3cc8,0x0324 ,0x35eb,0x0964 ,
|
|
||||||
0x3249,0x0c7c ,0x396b,0x0646 ,0x2aaa,0x1294 ,
|
|
||||||
0x2aaa,0x1294 ,0x35eb,0x0964 ,0x1e7e,0x1b5d ,
|
|
||||||
0x22a3,0x187e ,0x3249,0x0c7c ,0x11a8,0x238e ,
|
|
||||||
0x1a46,0x1e2b ,0x2e88,0x0f8d ,0x0471,0x2afb ,
|
|
||||||
0x11a8,0x238e ,0x2aaa,0x1294 ,0xf721,0x3179 ,
|
|
||||||
0x08df,0x289a ,0x26b3,0x1590 ,0xea02,0x36e5 ,
|
|
||||||
0x0000,0x2d41 ,0x22a3,0x187e ,0xdd5d,0x3b21 ,
|
|
||||||
0xf721,0x3179 ,0x1e7e,0x1b5d ,0xd178,0x3e15 ,
|
|
||||||
0xee58,0x3537 ,0x1a46,0x1e2b ,0xc695,0x3fb1 ,
|
|
||||||
0xe5ba,0x3871 ,0x15fe,0x20e7 ,0xbcf0,0x3fec ,
|
|
||||||
0xdd5d,0x3b21 ,0x11a8,0x238e ,0xb4be,0x3ec5 ,
|
|
||||||
0xd556,0x3d3f ,0x0d48,0x2620 ,0xae2e,0x3c42 ,
|
|
||||||
0xcdb7,0x3ec5 ,0x08df,0x289a ,0xa963,0x3871 ,
|
|
||||||
0xc695,0x3fb1 ,0x0471,0x2afb ,0xa678,0x3368 ,
|
|
||||||
0xc000,0x4000 ,0x0000,0x2d41 ,0xa57e,0x2d41 ,
|
|
||||||
0xba09,0x3fb1 ,0xfb8f,0x2f6c ,0xa678,0x2620 ,
|
|
||||||
0xb4be,0x3ec5 ,0xf721,0x3179 ,0xa963,0x1e2b ,
|
|
||||||
0xb02d,0x3d3f ,0xf2b8,0x3368 ,0xae2e,0x1590 ,
|
|
||||||
0xac61,0x3b21 ,0xee58,0x3537 ,0xb4be,0x0c7c ,
|
|
||||||
0xa963,0x3871 ,0xea02,0x36e5 ,0xbcf0,0x0324 ,
|
|
||||||
0xa73b,0x3537 ,0xe5ba,0x3871 ,0xc695,0xf9ba ,
|
|
||||||
0xa5ed,0x3179 ,0xe182,0x39db ,0xd178,0xf073 ,
|
|
||||||
0xa57e,0x2d41 ,0xdd5d,0x3b21 ,0xdd5d,0xe782 ,
|
|
||||||
0xa5ed,0x289a ,0xd94d,0x3c42 ,0xea02,0xdf19 ,
|
|
||||||
0xa73b,0x238e ,0xd556,0x3d3f ,0xf721,0xd766 ,
|
|
||||||
0xa963,0x1e2b ,0xd178,0x3e15 ,0x0471,0xd094 ,
|
|
||||||
0xac61,0x187e ,0xcdb7,0x3ec5 ,0x11a8,0xcac9 ,
|
|
||||||
0xb02d,0x1294 ,0xca15,0x3f4f ,0x1e7e,0xc625 ,
|
|
||||||
0xb4be,0x0c7c ,0xc695,0x3fb1 ,0x2aaa,0xc2c1 ,
|
|
||||||
0xba09,0x0646 ,0xc338,0x3fec ,0x35eb,0xc0b1 ,
|
|
||||||
0x4000,0x0000 ,0x4000,0x0000 ,0x4000,0x0000 ,
|
|
||||||
0x3e69,0x0192 ,0x3f36,0x00c9 ,0x3d9a,0x025b ,
|
|
||||||
0x3cc8,0x0324 ,0x3e69,0x0192 ,0x3b1e,0x04b5 ,
|
|
||||||
0x3b1e,0x04b5 ,0x3d9a,0x025b ,0x388e,0x070e ,
|
|
||||||
0x396b,0x0646 ,0x3cc8,0x0324 ,0x35eb,0x0964 ,
|
|
||||||
0x37af,0x07d6 ,0x3bf4,0x03ed ,0x3334,0x0bb7 ,
|
|
||||||
0x35eb,0x0964 ,0x3b1e,0x04b5 ,0x306c,0x0e06 ,
|
|
||||||
0x341e,0x0af1 ,0x3a46,0x057e ,0x2d93,0x1050 ,
|
|
||||||
0x3249,0x0c7c ,0x396b,0x0646 ,0x2aaa,0x1294 ,
|
|
||||||
0x306c,0x0e06 ,0x388e,0x070e ,0x27b3,0x14d2 ,
|
|
||||||
0x2e88,0x0f8d ,0x37af,0x07d6 ,0x24ae,0x1709 ,
|
|
||||||
0x2c9d,0x1112 ,0x36ce,0x089d ,0x219c,0x1937 ,
|
|
||||||
0x2aaa,0x1294 ,0x35eb,0x0964 ,0x1e7e,0x1b5d ,
|
|
||||||
0x28b2,0x1413 ,0x3505,0x0a2b ,0x1b56,0x1d79 ,
|
|
||||||
0x26b3,0x1590 ,0x341e,0x0af1 ,0x1824,0x1f8c ,
|
|
||||||
0x24ae,0x1709 ,0x3334,0x0bb7 ,0x14ea,0x2193 ,
|
|
||||||
0x22a3,0x187e ,0x3249,0x0c7c ,0x11a8,0x238e ,
|
|
||||||
0x2093,0x19ef ,0x315b,0x0d41 ,0x0e61,0x257e ,
|
|
||||||
0x1e7e,0x1b5d ,0x306c,0x0e06 ,0x0b14,0x2760 ,
|
|
||||||
0x1c64,0x1cc6 ,0x2f7b,0x0eca ,0x07c4,0x2935 ,
|
|
||||||
0x1a46,0x1e2b ,0x2e88,0x0f8d ,0x0471,0x2afb ,
|
|
||||||
0x1824,0x1f8c ,0x2d93,0x1050 ,0x011c,0x2cb2 ,
|
|
||||||
0x15fe,0x20e7 ,0x2c9d,0x1112 ,0xfdc7,0x2e5a ,
|
|
||||||
0x13d5,0x223d ,0x2ba4,0x11d3 ,0xfa73,0x2ff2 ,
|
|
||||||
0x11a8,0x238e ,0x2aaa,0x1294 ,0xf721,0x3179 ,
|
|
||||||
0x0f79,0x24da ,0x29af,0x1354 ,0xf3d2,0x32ef ,
|
|
||||||
0x0d48,0x2620 ,0x28b2,0x1413 ,0xf087,0x3453 ,
|
|
||||||
0x0b14,0x2760 ,0x27b3,0x14d2 ,0xed41,0x35a5 ,
|
|
||||||
0x08df,0x289a ,0x26b3,0x1590 ,0xea02,0x36e5 ,
|
|
||||||
0x06a9,0x29ce ,0x25b1,0x164c ,0xe6cb,0x3812 ,
|
|
||||||
0x0471,0x2afb ,0x24ae,0x1709 ,0xe39c,0x392b ,
|
|
||||||
0x0239,0x2c21 ,0x23a9,0x17c4 ,0xe077,0x3a30 ,
|
|
||||||
0x0000,0x2d41 ,0x22a3,0x187e ,0xdd5d,0x3b21 ,
|
|
||||||
0xfdc7,0x2e5a ,0x219c,0x1937 ,0xda4f,0x3bfd ,
|
|
||||||
0xfb8f,0x2f6c ,0x2093,0x19ef ,0xd74e,0x3cc5 ,
|
|
||||||
0xf957,0x3076 ,0x1f89,0x1aa7 ,0xd45c,0x3d78 ,
|
|
||||||
0xf721,0x3179 ,0x1e7e,0x1b5d ,0xd178,0x3e15 ,
|
|
||||||
0xf4ec,0x3274 ,0x1d72,0x1c12 ,0xcea5,0x3e9d ,
|
|
||||||
0xf2b8,0x3368 ,0x1c64,0x1cc6 ,0xcbe2,0x3f0f ,
|
|
||||||
0xf087,0x3453 ,0x1b56,0x1d79 ,0xc932,0x3f6b ,
|
|
||||||
0xee58,0x3537 ,0x1a46,0x1e2b ,0xc695,0x3fb1 ,
|
|
||||||
0xec2b,0x3612 ,0x1935,0x1edc ,0xc40c,0x3fe1 ,
|
|
||||||
0xea02,0x36e5 ,0x1824,0x1f8c ,0xc197,0x3ffb ,
|
|
||||||
0xe7dc,0x37b0 ,0x1711,0x203a ,0xbf38,0x3fff ,
|
|
||||||
0xe5ba,0x3871 ,0x15fe,0x20e7 ,0xbcf0,0x3fec ,
|
|
||||||
0xe39c,0x392b ,0x14ea,0x2193 ,0xbabf,0x3fc4 ,
|
|
||||||
0xe182,0x39db ,0x13d5,0x223d ,0xb8a6,0x3f85 ,
|
|
||||||
0xdf6d,0x3a82 ,0x12bf,0x22e7 ,0xb6a5,0x3f30 ,
|
|
||||||
0xdd5d,0x3b21 ,0x11a8,0x238e ,0xb4be,0x3ec5 ,
|
|
||||||
0xdb52,0x3bb6 ,0x1091,0x2435 ,0xb2f2,0x3e45 ,
|
|
||||||
0xd94d,0x3c42 ,0x0f79,0x24da ,0xb140,0x3daf ,
|
|
||||||
0xd74e,0x3cc5 ,0x0e61,0x257e ,0xafa9,0x3d03 ,
|
|
||||||
0xd556,0x3d3f ,0x0d48,0x2620 ,0xae2e,0x3c42 ,
|
|
||||||
0xd363,0x3daf ,0x0c2e,0x26c1 ,0xacd0,0x3b6d ,
|
|
||||||
0xd178,0x3e15 ,0x0b14,0x2760 ,0xab8e,0x3a82 ,
|
|
||||||
0xcf94,0x3e72 ,0x09fa,0x27fe ,0xaa6a,0x3984 ,
|
|
||||||
0xcdb7,0x3ec5 ,0x08df,0x289a ,0xa963,0x3871 ,
|
|
||||||
0xcbe2,0x3f0f ,0x07c4,0x2935 ,0xa87b,0x374b ,
|
|
||||||
0xca15,0x3f4f ,0x06a9,0x29ce ,0xa7b1,0x3612 ,
|
|
||||||
0xc851,0x3f85 ,0x058d,0x2a65 ,0xa705,0x34c6 ,
|
|
||||||
0xc695,0x3fb1 ,0x0471,0x2afb ,0xa678,0x3368 ,
|
|
||||||
0xc4e2,0x3fd4 ,0x0355,0x2b8f ,0xa60b,0x31f8 ,
|
|
||||||
0xc338,0x3fec ,0x0239,0x2c21 ,0xa5bc,0x3076 ,
|
|
||||||
0xc197,0x3ffb ,0x011c,0x2cb2 ,0xa58d,0x2ee4 ,
|
|
||||||
0xc000,0x4000 ,0x0000,0x2d41 ,0xa57e,0x2d41 ,
|
|
||||||
0xbe73,0x3ffb ,0xfee4,0x2dcf ,0xa58d,0x2b8f ,
|
|
||||||
0xbcf0,0x3fec ,0xfdc7,0x2e5a ,0xa5bc,0x29ce ,
|
|
||||||
0xbb77,0x3fd4 ,0xfcab,0x2ee4 ,0xa60b,0x27fe ,
|
|
||||||
0xba09,0x3fb1 ,0xfb8f,0x2f6c ,0xa678,0x2620 ,
|
|
||||||
0xb8a6,0x3f85 ,0xfa73,0x2ff2 ,0xa705,0x2435 ,
|
|
||||||
0xb74d,0x3f4f ,0xf957,0x3076 ,0xa7b1,0x223d ,
|
|
||||||
0xb600,0x3f0f ,0xf83c,0x30f9 ,0xa87b,0x203a ,
|
|
||||||
0xb4be,0x3ec5 ,0xf721,0x3179 ,0xa963,0x1e2b ,
|
|
||||||
0xb388,0x3e72 ,0xf606,0x31f8 ,0xaa6a,0x1c12 ,
|
|
||||||
0xb25e,0x3e15 ,0xf4ec,0x3274 ,0xab8e,0x19ef ,
|
|
||||||
0xb140,0x3daf ,0xf3d2,0x32ef ,0xacd0,0x17c4 ,
|
|
||||||
0xb02d,0x3d3f ,0xf2b8,0x3368 ,0xae2e,0x1590 ,
|
|
||||||
0xaf28,0x3cc5 ,0xf19f,0x33df ,0xafa9,0x1354 ,
|
|
||||||
0xae2e,0x3c42 ,0xf087,0x3453 ,0xb140,0x1112 ,
|
|
||||||
0xad41,0x3bb6 ,0xef6f,0x34c6 ,0xb2f2,0x0eca ,
|
|
||||||
0xac61,0x3b21 ,0xee58,0x3537 ,0xb4be,0x0c7c ,
|
|
||||||
0xab8e,0x3a82 ,0xed41,0x35a5 ,0xb6a5,0x0a2b ,
|
|
||||||
0xaac8,0x39db ,0xec2b,0x3612 ,0xb8a6,0x07d6 ,
|
|
||||||
0xaa0f,0x392b ,0xeb16,0x367d ,0xbabf,0x057e ,
|
|
||||||
0xa963,0x3871 ,0xea02,0x36e5 ,0xbcf0,0x0324 ,
|
|
||||||
0xa8c5,0x37b0 ,0xe8ef,0x374b ,0xbf38,0x00c9 ,
|
|
||||||
0xa834,0x36e5 ,0xe7dc,0x37b0 ,0xc197,0xfe6e ,
|
|
||||||
0xa7b1,0x3612 ,0xe6cb,0x3812 ,0xc40c,0xfc13 ,
|
|
||||||
0xa73b,0x3537 ,0xe5ba,0x3871 ,0xc695,0xf9ba ,
|
|
||||||
0xa6d3,0x3453 ,0xe4aa,0x38cf ,0xc932,0xf763 ,
|
|
||||||
0xa678,0x3368 ,0xe39c,0x392b ,0xcbe2,0xf50f ,
|
|
||||||
0xa62c,0x3274 ,0xe28e,0x3984 ,0xcea5,0xf2bf ,
|
|
||||||
0xa5ed,0x3179 ,0xe182,0x39db ,0xd178,0xf073 ,
|
|
||||||
0xa5bc,0x3076 ,0xe077,0x3a30 ,0xd45c,0xee2d ,
|
|
||||||
0xa599,0x2f6c ,0xdf6d,0x3a82 ,0xd74e,0xebed ,
|
|
||||||
0xa585,0x2e5a ,0xde64,0x3ad3 ,0xda4f,0xe9b4 ,
|
|
||||||
0xa57e,0x2d41 ,0xdd5d,0x3b21 ,0xdd5d,0xe782 ,
|
|
||||||
0xa585,0x2c21 ,0xdc57,0x3b6d ,0xe077,0xe559 ,
|
|
||||||
0xa599,0x2afb ,0xdb52,0x3bb6 ,0xe39c,0xe33a ,
|
|
||||||
0xa5bc,0x29ce ,0xda4f,0x3bfd ,0xe6cb,0xe124 ,
|
|
||||||
0xa5ed,0x289a ,0xd94d,0x3c42 ,0xea02,0xdf19 ,
|
|
||||||
0xa62c,0x2760 ,0xd84d,0x3c85 ,0xed41,0xdd19 ,
|
|
||||||
0xa678,0x2620 ,0xd74e,0x3cc5 ,0xf087,0xdb26 ,
|
|
||||||
0xa6d3,0x24da ,0xd651,0x3d03 ,0xf3d2,0xd93f ,
|
|
||||||
0xa73b,0x238e ,0xd556,0x3d3f ,0xf721,0xd766 ,
|
|
||||||
0xa7b1,0x223d ,0xd45c,0x3d78 ,0xfa73,0xd59b ,
|
|
||||||
0xa834,0x20e7 ,0xd363,0x3daf ,0xfdc7,0xd3df ,
|
|
||||||
0xa8c5,0x1f8c ,0xd26d,0x3de3 ,0x011c,0xd231 ,
|
|
||||||
0xa963,0x1e2b ,0xd178,0x3e15 ,0x0471,0xd094 ,
|
|
||||||
0xaa0f,0x1cc6 ,0xd085,0x3e45 ,0x07c4,0xcf07 ,
|
|
||||||
0xaac8,0x1b5d ,0xcf94,0x3e72 ,0x0b14,0xcd8c ,
|
|
||||||
0xab8e,0x19ef ,0xcea5,0x3e9d ,0x0e61,0xcc21 ,
|
|
||||||
0xac61,0x187e ,0xcdb7,0x3ec5 ,0x11a8,0xcac9 ,
|
|
||||||
0xad41,0x1709 ,0xcccc,0x3eeb ,0x14ea,0xc983 ,
|
|
||||||
0xae2e,0x1590 ,0xcbe2,0x3f0f ,0x1824,0xc850 ,
|
|
||||||
0xaf28,0x1413 ,0xcafb,0x3f30 ,0x1b56,0xc731 ,
|
|
||||||
0xb02d,0x1294 ,0xca15,0x3f4f ,0x1e7e,0xc625 ,
|
|
||||||
0xb140,0x1112 ,0xc932,0x3f6b ,0x219c,0xc52d ,
|
|
||||||
0xb25e,0x0f8d ,0xc851,0x3f85 ,0x24ae,0xc44a ,
|
|
||||||
0xb388,0x0e06 ,0xc772,0x3f9c ,0x27b3,0xc37b ,
|
|
||||||
0xb4be,0x0c7c ,0xc695,0x3fb1 ,0x2aaa,0xc2c1 ,
|
|
||||||
0xb600,0x0af1 ,0xc5ba,0x3fc4 ,0x2d93,0xc21d ,
|
|
||||||
0xb74d,0x0964 ,0xc4e2,0x3fd4 ,0x306c,0xc18e ,
|
|
||||||
0xb8a6,0x07d6 ,0xc40c,0x3fe1 ,0x3334,0xc115 ,
|
|
||||||
0xba09,0x0646 ,0xc338,0x3fec ,0x35eb,0xc0b1 ,
|
|
||||||
0xbb77,0x04b5 ,0xc266,0x3ff5 ,0x388e,0xc064 ,
|
|
||||||
0xbcf0,0x0324 ,0xc197,0x3ffb ,0x3b1e,0xc02c ,
|
|
||||||
0xbe73,0x0192 ,0xc0ca,0x3fff ,0x3d9a,0xc00b ,
|
|
||||||
0x4000,0x0000 ,0x3f9b,0x0065 ,0x3f36,0x00c9 ,
|
|
||||||
0x3ed0,0x012e ,0x3e69,0x0192 ,0x3e02,0x01f7 ,
|
|
||||||
0x3d9a,0x025b ,0x3d31,0x02c0 ,0x3cc8,0x0324 ,
|
|
||||||
0x3c5f,0x0388 ,0x3bf4,0x03ed ,0x3b8a,0x0451 ,
|
|
||||||
0x3b1e,0x04b5 ,0x3ab2,0x051a ,0x3a46,0x057e ,
|
|
||||||
0x39d9,0x05e2 ,0x396b,0x0646 ,0x38fd,0x06aa ,
|
|
||||||
0x388e,0x070e ,0x381f,0x0772 ,0x37af,0x07d6 ,
|
|
||||||
0x373f,0x0839 ,0x36ce,0x089d ,0x365d,0x0901 ,
|
|
||||||
0x35eb,0x0964 ,0x3578,0x09c7 ,0x3505,0x0a2b ,
|
|
||||||
0x3492,0x0a8e ,0x341e,0x0af1 ,0x33a9,0x0b54 ,
|
|
||||||
0x3334,0x0bb7 ,0x32bf,0x0c1a ,0x3249,0x0c7c ,
|
|
||||||
0x31d2,0x0cdf ,0x315b,0x0d41 ,0x30e4,0x0da4 ,
|
|
||||||
0x306c,0x0e06 ,0x2ff4,0x0e68 ,0x2f7b,0x0eca ,
|
|
||||||
0x2f02,0x0f2b ,0x2e88,0x0f8d ,0x2e0e,0x0fee ,
|
|
||||||
0x2d93,0x1050 ,0x2d18,0x10b1 ,0x2c9d,0x1112 ,
|
|
||||||
0x2c21,0x1173 ,0x2ba4,0x11d3 ,0x2b28,0x1234 ,
|
|
||||||
0x2aaa,0x1294 ,0x2a2d,0x12f4 ,0x29af,0x1354 ,
|
|
||||||
0x2931,0x13b4 ,0x28b2,0x1413 ,0x2833,0x1473 ,
|
|
||||||
0x27b3,0x14d2 ,0x2733,0x1531 ,0x26b3,0x1590 ,
|
|
||||||
0x2632,0x15ee ,0x25b1,0x164c ,0x252f,0x16ab ,
|
|
||||||
0x24ae,0x1709 ,0x242b,0x1766 ,0x23a9,0x17c4 ,
|
|
||||||
0x2326,0x1821 ,0x22a3,0x187e ,0x221f,0x18db ,
|
|
||||||
0x219c,0x1937 ,0x2117,0x1993 ,0x2093,0x19ef ,
|
|
||||||
0x200e,0x1a4b ,0x1f89,0x1aa7 ,0x1f04,0x1b02 ,
|
|
||||||
0x1e7e,0x1b5d ,0x1df8,0x1bb8 ,0x1d72,0x1c12 ,
|
|
||||||
0x1ceb,0x1c6c ,0x1c64,0x1cc6 ,0x1bdd,0x1d20 ,
|
|
||||||
0x1b56,0x1d79 ,0x1ace,0x1dd3 ,0x1a46,0x1e2b ,
|
|
||||||
0x19be,0x1e84 ,0x1935,0x1edc ,0x18ad,0x1f34 ,
|
|
||||||
0x1824,0x1f8c ,0x179b,0x1fe3 ,0x1711,0x203a ,
|
|
||||||
0x1688,0x2091 ,0x15fe,0x20e7 ,0x1574,0x213d ,
|
|
||||||
0x14ea,0x2193 ,0x145f,0x21e8 ,0x13d5,0x223d ,
|
|
||||||
0x134a,0x2292 ,0x12bf,0x22e7 ,0x1234,0x233b ,
|
|
||||||
0x11a8,0x238e ,0x111d,0x23e2 ,0x1091,0x2435 ,
|
|
||||||
0x1005,0x2488 ,0x0f79,0x24da ,0x0eed,0x252c ,
|
|
||||||
0x0e61,0x257e ,0x0dd4,0x25cf ,0x0d48,0x2620 ,
|
|
||||||
0x0cbb,0x2671 ,0x0c2e,0x26c1 ,0x0ba1,0x2711 ,
|
|
||||||
0x0b14,0x2760 ,0x0a87,0x27af ,0x09fa,0x27fe ,
|
|
||||||
0x096d,0x284c ,0x08df,0x289a ,0x0852,0x28e7 ,
|
|
||||||
0x07c4,0x2935 ,0x0736,0x2981 ,0x06a9,0x29ce ,
|
|
||||||
0x061b,0x2a1a ,0x058d,0x2a65 ,0x04ff,0x2ab0 ,
|
|
||||||
0x0471,0x2afb ,0x03e3,0x2b45 ,0x0355,0x2b8f ,
|
|
||||||
0x02c7,0x2bd8 ,0x0239,0x2c21 ,0x01aa,0x2c6a ,
|
|
||||||
0x011c,0x2cb2 ,0x008e,0x2cfa ,0x0000,0x2d41 ,
|
|
||||||
0xff72,0x2d88 ,0xfee4,0x2dcf ,0xfe56,0x2e15 ,
|
|
||||||
0xfdc7,0x2e5a ,0xfd39,0x2e9f ,0xfcab,0x2ee4 ,
|
|
||||||
0xfc1d,0x2f28 ,0xfb8f,0x2f6c ,0xfb01,0x2faf ,
|
|
||||||
0xfa73,0x2ff2 ,0xf9e5,0x3034 ,0xf957,0x3076 ,
|
|
||||||
0xf8ca,0x30b8 ,0xf83c,0x30f9 ,0xf7ae,0x3139 ,
|
|
||||||
0xf721,0x3179 ,0xf693,0x31b9 ,0xf606,0x31f8 ,
|
|
||||||
0xf579,0x3236 ,0xf4ec,0x3274 ,0xf45f,0x32b2 ,
|
|
||||||
0xf3d2,0x32ef ,0xf345,0x332c ,0xf2b8,0x3368 ,
|
|
||||||
0xf22c,0x33a3 ,0xf19f,0x33df ,0xf113,0x3419 ,
|
|
||||||
0xf087,0x3453 ,0xeffb,0x348d ,0xef6f,0x34c6 ,
|
|
||||||
0xeee3,0x34ff ,0xee58,0x3537 ,0xedcc,0x356e ,
|
|
||||||
0xed41,0x35a5 ,0xecb6,0x35dc ,0xec2b,0x3612 ,
|
|
||||||
0xeba1,0x3648 ,0xeb16,0x367d ,0xea8c,0x36b1 ,
|
|
||||||
0xea02,0x36e5 ,0xe978,0x3718 ,0xe8ef,0x374b ,
|
|
||||||
0xe865,0x377e ,0xe7dc,0x37b0 ,0xe753,0x37e1 ,
|
|
||||||
0xe6cb,0x3812 ,0xe642,0x3842 ,0xe5ba,0x3871 ,
|
|
||||||
0xe532,0x38a1 ,0xe4aa,0x38cf ,0xe423,0x38fd ,
|
|
||||||
0xe39c,0x392b ,0xe315,0x3958 ,0xe28e,0x3984 ,
|
|
||||||
0xe208,0x39b0 ,0xe182,0x39db ,0xe0fc,0x3a06 ,
|
|
||||||
0xe077,0x3a30 ,0xdff2,0x3a59 ,0xdf6d,0x3a82 ,
|
|
||||||
0xdee9,0x3aab ,0xde64,0x3ad3 ,0xdde1,0x3afa ,
|
|
||||||
0xdd5d,0x3b21 ,0xdcda,0x3b47 ,0xdc57,0x3b6d ,
|
|
||||||
0xdbd5,0x3b92 ,0xdb52,0x3bb6 ,0xdad1,0x3bda ,
|
|
||||||
0xda4f,0x3bfd ,0xd9ce,0x3c20 ,0xd94d,0x3c42 ,
|
|
||||||
0xd8cd,0x3c64 ,0xd84d,0x3c85 ,0xd7cd,0x3ca5 ,
|
|
||||||
0xd74e,0x3cc5 ,0xd6cf,0x3ce4 ,0xd651,0x3d03 ,
|
|
||||||
0xd5d3,0x3d21 ,0xd556,0x3d3f ,0xd4d8,0x3d5b ,
|
|
||||||
0xd45c,0x3d78 ,0xd3df,0x3d93 ,0xd363,0x3daf ,
|
|
||||||
0xd2e8,0x3dc9 ,0xd26d,0x3de3 ,0xd1f2,0x3dfc ,
|
|
||||||
0xd178,0x3e15 ,0xd0fe,0x3e2d ,0xd085,0x3e45 ,
|
|
||||||
0xd00c,0x3e5c ,0xcf94,0x3e72 ,0xcf1c,0x3e88 ,
|
|
||||||
0xcea5,0x3e9d ,0xce2e,0x3eb1 ,0xcdb7,0x3ec5 ,
|
|
||||||
0xcd41,0x3ed8 ,0xcccc,0x3eeb ,0xcc57,0x3efd ,
|
|
||||||
0xcbe2,0x3f0f ,0xcb6e,0x3f20 ,0xcafb,0x3f30 ,
|
|
||||||
0xca88,0x3f40 ,0xca15,0x3f4f ,0xc9a3,0x3f5d ,
|
|
||||||
0xc932,0x3f6b ,0xc8c1,0x3f78 ,0xc851,0x3f85 ,
|
|
||||||
0xc7e1,0x3f91 ,0xc772,0x3f9c ,0xc703,0x3fa7 ,
|
|
||||||
0xc695,0x3fb1 ,0xc627,0x3fbb ,0xc5ba,0x3fc4 ,
|
|
||||||
0xc54e,0x3fcc ,0xc4e2,0x3fd4 ,0xc476,0x3fdb ,
|
|
||||||
0xc40c,0x3fe1 ,0xc3a1,0x3fe7 ,0xc338,0x3fec ,
|
|
||||||
0xc2cf,0x3ff1 ,0xc266,0x3ff5 ,0xc1fe,0x3ff8 ,
|
|
||||||
0xc197,0x3ffb ,0xc130,0x3ffd ,0xc0ca,0x3fff ,
|
|
||||||
0xc065,0x4000 ,0xc000,0x4000 ,0xbf9c,0x4000 ,
|
|
||||||
0xbf38,0x3fff ,0xbed5,0x3ffd ,0xbe73,0x3ffb ,
|
|
||||||
0xbe11,0x3ff8 ,0xbdb0,0x3ff5 ,0xbd50,0x3ff1 ,
|
|
||||||
0xbcf0,0x3fec ,0xbc91,0x3fe7 ,0xbc32,0x3fe1 ,
|
|
||||||
0xbbd4,0x3fdb ,0xbb77,0x3fd4 ,0xbb1b,0x3fcc ,
|
|
||||||
0xbabf,0x3fc4 ,0xba64,0x3fbb ,0xba09,0x3fb1 ,
|
|
||||||
0xb9af,0x3fa7 ,0xb956,0x3f9c ,0xb8fd,0x3f91 ,
|
|
||||||
0xb8a6,0x3f85 ,0xb84f,0x3f78 ,0xb7f8,0x3f6b ,
|
|
||||||
0xb7a2,0x3f5d ,0xb74d,0x3f4f ,0xb6f9,0x3f40 ,
|
|
||||||
0xb6a5,0x3f30 ,0xb652,0x3f20 ,0xb600,0x3f0f ,
|
|
||||||
0xb5af,0x3efd ,0xb55e,0x3eeb ,0xb50e,0x3ed8 ,
|
|
||||||
0xb4be,0x3ec5 ,0xb470,0x3eb1 ,0xb422,0x3e9d ,
|
|
||||||
0xb3d5,0x3e88 ,0xb388,0x3e72 ,0xb33d,0x3e5c ,
|
|
||||||
0xb2f2,0x3e45 ,0xb2a7,0x3e2d ,0xb25e,0x3e15 ,
|
|
||||||
0xb215,0x3dfc ,0xb1cd,0x3de3 ,0xb186,0x3dc9 ,
|
|
||||||
0xb140,0x3daf ,0xb0fa,0x3d93 ,0xb0b5,0x3d78 ,
|
|
||||||
0xb071,0x3d5b ,0xb02d,0x3d3f ,0xafeb,0x3d21 ,
|
|
||||||
0xafa9,0x3d03 ,0xaf68,0x3ce4 ,0xaf28,0x3cc5 ,
|
|
||||||
0xaee8,0x3ca5 ,0xaea9,0x3c85 ,0xae6b,0x3c64 ,
|
|
||||||
0xae2e,0x3c42 ,0xadf2,0x3c20 ,0xadb6,0x3bfd ,
|
|
||||||
0xad7b,0x3bda ,0xad41,0x3bb6 ,0xad08,0x3b92 ,
|
|
||||||
0xacd0,0x3b6d ,0xac98,0x3b47 ,0xac61,0x3b21 ,
|
|
||||||
0xac2b,0x3afa ,0xabf6,0x3ad3 ,0xabc2,0x3aab ,
|
|
||||||
0xab8e,0x3a82 ,0xab5b,0x3a59 ,0xab29,0x3a30 ,
|
|
||||||
0xaaf8,0x3a06 ,0xaac8,0x39db ,0xaa98,0x39b0 ,
|
|
||||||
0xaa6a,0x3984 ,0xaa3c,0x3958 ,0xaa0f,0x392b ,
|
|
||||||
0xa9e3,0x38fd ,0xa9b7,0x38cf ,0xa98d,0x38a1 ,
|
|
||||||
0xa963,0x3871 ,0xa93a,0x3842 ,0xa912,0x3812 ,
|
|
||||||
0xa8eb,0x37e1 ,0xa8c5,0x37b0 ,0xa89f,0x377e ,
|
|
||||||
0xa87b,0x374b ,0xa857,0x3718 ,0xa834,0x36e5 ,
|
|
||||||
0xa812,0x36b1 ,0xa7f1,0x367d ,0xa7d0,0x3648 ,
|
|
||||||
0xa7b1,0x3612 ,0xa792,0x35dc ,0xa774,0x35a5 ,
|
|
||||||
0xa757,0x356e ,0xa73b,0x3537 ,0xa71f,0x34ff ,
|
|
||||||
0xa705,0x34c6 ,0xa6eb,0x348d ,0xa6d3,0x3453 ,
|
|
||||||
0xa6bb,0x3419 ,0xa6a4,0x33df ,0xa68e,0x33a3 ,
|
|
||||||
0xa678,0x3368 ,0xa664,0x332c ,0xa650,0x32ef ,
|
|
||||||
0xa63e,0x32b2 ,0xa62c,0x3274 ,0xa61b,0x3236 ,
|
|
||||||
0xa60b,0x31f8 ,0xa5fb,0x31b9 ,0xa5ed,0x3179 ,
|
|
||||||
0xa5e0,0x3139 ,0xa5d3,0x30f9 ,0xa5c7,0x30b8 ,
|
|
||||||
0xa5bc,0x3076 ,0xa5b2,0x3034 ,0xa5a9,0x2ff2 ,
|
|
||||||
0xa5a1,0x2faf ,0xa599,0x2f6c ,0xa593,0x2f28 ,
|
|
||||||
0xa58d,0x2ee4 ,0xa588,0x2e9f ,0xa585,0x2e5a ,
|
|
||||||
0xa581,0x2e15 ,0xa57f,0x2dcf ,0xa57e,0x2d88 ,
|
|
||||||
0xa57e,0x2d41 ,0xa57e,0x2cfa ,0xa57f,0x2cb2 ,
|
|
||||||
0xa581,0x2c6a ,0xa585,0x2c21 ,0xa588,0x2bd8 ,
|
|
||||||
0xa58d,0x2b8f ,0xa593,0x2b45 ,0xa599,0x2afb ,
|
|
||||||
0xa5a1,0x2ab0 ,0xa5a9,0x2a65 ,0xa5b2,0x2a1a ,
|
|
||||||
0xa5bc,0x29ce ,0xa5c7,0x2981 ,0xa5d3,0x2935 ,
|
|
||||||
0xa5e0,0x28e7 ,0xa5ed,0x289a ,0xa5fb,0x284c ,
|
|
||||||
0xa60b,0x27fe ,0xa61b,0x27af ,0xa62c,0x2760 ,
|
|
||||||
0xa63e,0x2711 ,0xa650,0x26c1 ,0xa664,0x2671 ,
|
|
||||||
0xa678,0x2620 ,0xa68e,0x25cf ,0xa6a4,0x257e ,
|
|
||||||
0xa6bb,0x252c ,0xa6d3,0x24da ,0xa6eb,0x2488 ,
|
|
||||||
0xa705,0x2435 ,0xa71f,0x23e2 ,0xa73b,0x238e ,
|
|
||||||
0xa757,0x233b ,0xa774,0x22e7 ,0xa792,0x2292 ,
|
|
||||||
0xa7b1,0x223d ,0xa7d0,0x21e8 ,0xa7f1,0x2193 ,
|
|
||||||
0xa812,0x213d ,0xa834,0x20e7 ,0xa857,0x2091 ,
|
|
||||||
0xa87b,0x203a ,0xa89f,0x1fe3 ,0xa8c5,0x1f8c ,
|
|
||||||
0xa8eb,0x1f34 ,0xa912,0x1edc ,0xa93a,0x1e84 ,
|
|
||||||
0xa963,0x1e2b ,0xa98d,0x1dd3 ,0xa9b7,0x1d79 ,
|
|
||||||
0xa9e3,0x1d20 ,0xaa0f,0x1cc6 ,0xaa3c,0x1c6c ,
|
|
||||||
0xaa6a,0x1c12 ,0xaa98,0x1bb8 ,0xaac8,0x1b5d ,
|
|
||||||
0xaaf8,0x1b02 ,0xab29,0x1aa7 ,0xab5b,0x1a4b ,
|
|
||||||
0xab8e,0x19ef ,0xabc2,0x1993 ,0xabf6,0x1937 ,
|
|
||||||
0xac2b,0x18db ,0xac61,0x187e ,0xac98,0x1821 ,
|
|
||||||
0xacd0,0x17c4 ,0xad08,0x1766 ,0xad41,0x1709 ,
|
|
||||||
0xad7b,0x16ab ,0xadb6,0x164c ,0xadf2,0x15ee ,
|
|
||||||
0xae2e,0x1590 ,0xae6b,0x1531 ,0xaea9,0x14d2 ,
|
|
||||||
0xaee8,0x1473 ,0xaf28,0x1413 ,0xaf68,0x13b4 ,
|
|
||||||
0xafa9,0x1354 ,0xafeb,0x12f4 ,0xb02d,0x1294 ,
|
|
||||||
0xb071,0x1234 ,0xb0b5,0x11d3 ,0xb0fa,0x1173 ,
|
|
||||||
0xb140,0x1112 ,0xb186,0x10b1 ,0xb1cd,0x1050 ,
|
|
||||||
0xb215,0x0fee ,0xb25e,0x0f8d ,0xb2a7,0x0f2b ,
|
|
||||||
0xb2f2,0x0eca ,0xb33d,0x0e68 ,0xb388,0x0e06 ,
|
|
||||||
0xb3d5,0x0da4 ,0xb422,0x0d41 ,0xb470,0x0cdf ,
|
|
||||||
0xb4be,0x0c7c ,0xb50e,0x0c1a ,0xb55e,0x0bb7 ,
|
|
||||||
0xb5af,0x0b54 ,0xb600,0x0af1 ,0xb652,0x0a8e ,
|
|
||||||
0xb6a5,0x0a2b ,0xb6f9,0x09c7 ,0xb74d,0x0964 ,
|
|
||||||
0xb7a2,0x0901 ,0xb7f8,0x089d ,0xb84f,0x0839 ,
|
|
||||||
0xb8a6,0x07d6 ,0xb8fd,0x0772 ,0xb956,0x070e ,
|
|
||||||
0xb9af,0x06aa ,0xba09,0x0646 ,0xba64,0x05e2 ,
|
|
||||||
0xbabf,0x057e ,0xbb1b,0x051a ,0xbb77,0x04b5 ,
|
|
||||||
0xbbd4,0x0451 ,0xbc32,0x03ed ,0xbc91,0x0388 ,
|
|
||||||
0xbcf0,0x0324 ,0xbd50,0x02c0 ,0xbdb0,0x025b ,
|
|
||||||
0xbe11,0x01f7 ,0xbe73,0x0192 ,0xbed5,0x012e ,
|
|
||||||
0xbf38,0x00c9 ,0xbf9c,0x0065 };
|
|
||||||
|
|
||||||
|
|
||||||
extern const int s_Q14R_8;
|
|
||||||
const int s_Q14R_8 = 1024;
|
|
||||||
extern const unsigned short t_Q14R_8[2032];
|
|
||||||
const unsigned short t_Q14R_8[2032] = {
|
|
||||||
0x4000,0x0000 ,0x4000,0x0000 ,0x4000,0x0000 ,
|
|
||||||
0x3b21,0x187e ,0x3ec5,0x0c7c ,0x3537,0x238e ,
|
|
||||||
0x2d41,0x2d41 ,0x3b21,0x187e ,0x187e,0x3b21 ,
|
|
||||||
0x187e,0x3b21 ,0x3537,0x238e ,0xf384,0x3ec5 ,
|
|
||||||
0x0000,0x4000 ,0x2d41,0x2d41 ,0xd2bf,0x2d41 ,
|
|
||||||
0xe782,0x3b21 ,0x238e,0x3537 ,0xc13b,0x0c7c ,
|
|
||||||
0xd2bf,0x2d41 ,0x187e,0x3b21 ,0xc4df,0xe782 ,
|
|
||||||
0xc4df,0x187e ,0x0c7c,0x3ec5 ,0xdc72,0xcac9 ,
|
|
||||||
0x4000,0x0000 ,0x4000,0x0000 ,0x4000,0x0000 ,
|
|
||||||
0x3fb1,0x0646 ,0x3fec,0x0324 ,0x3f4f,0x0964 ,
|
|
||||||
0x3ec5,0x0c7c ,0x3fb1,0x0646 ,0x3d3f,0x1294 ,
|
|
||||||
0x3d3f,0x1294 ,0x3f4f,0x0964 ,0x39db,0x1b5d ,
|
|
||||||
0x3b21,0x187e ,0x3ec5,0x0c7c ,0x3537,0x238e ,
|
|
||||||
0x3871,0x1e2b ,0x3e15,0x0f8d ,0x2f6c,0x2afb ,
|
|
||||||
0x3537,0x238e ,0x3d3f,0x1294 ,0x289a,0x3179 ,
|
|
||||||
0x3179,0x289a ,0x3c42,0x1590 ,0x20e7,0x36e5 ,
|
|
||||||
0x2d41,0x2d41 ,0x3b21,0x187e ,0x187e,0x3b21 ,
|
|
||||||
0x289a,0x3179 ,0x39db,0x1b5d ,0x0f8d,0x3e15 ,
|
|
||||||
0x238e,0x3537 ,0x3871,0x1e2b ,0x0646,0x3fb1 ,
|
|
||||||
0x1e2b,0x3871 ,0x36e5,0x20e7 ,0xfcdc,0x3fec ,
|
|
||||||
0x187e,0x3b21 ,0x3537,0x238e ,0xf384,0x3ec5 ,
|
|
||||||
0x1294,0x3d3f ,0x3368,0x2620 ,0xea70,0x3c42 ,
|
|
||||||
0x0c7c,0x3ec5 ,0x3179,0x289a ,0xe1d5,0x3871 ,
|
|
||||||
0x0646,0x3fb1 ,0x2f6c,0x2afb ,0xd9e0,0x3368 ,
|
|
||||||
0x0000,0x4000 ,0x2d41,0x2d41 ,0xd2bf,0x2d41 ,
|
|
||||||
0xf9ba,0x3fb1 ,0x2afb,0x2f6c ,0xcc98,0x2620 ,
|
|
||||||
0xf384,0x3ec5 ,0x289a,0x3179 ,0xc78f,0x1e2b ,
|
|
||||||
0xed6c,0x3d3f ,0x2620,0x3368 ,0xc3be,0x1590 ,
|
|
||||||
0xe782,0x3b21 ,0x238e,0x3537 ,0xc13b,0x0c7c ,
|
|
||||||
0xe1d5,0x3871 ,0x20e7,0x36e5 ,0xc014,0x0324 ,
|
|
||||||
0xdc72,0x3537 ,0x1e2b,0x3871 ,0xc04f,0xf9ba ,
|
|
||||||
0xd766,0x3179 ,0x1b5d,0x39db ,0xc1eb,0xf073 ,
|
|
||||||
0xd2bf,0x2d41 ,0x187e,0x3b21 ,0xc4df,0xe782 ,
|
|
||||||
0xce87,0x289a ,0x1590,0x3c42 ,0xc91b,0xdf19 ,
|
|
||||||
0xcac9,0x238e ,0x1294,0x3d3f ,0xce87,0xd766 ,
|
|
||||||
0xc78f,0x1e2b ,0x0f8d,0x3e15 ,0xd505,0xd094 ,
|
|
||||||
0xc4df,0x187e ,0x0c7c,0x3ec5 ,0xdc72,0xcac9 ,
|
|
||||||
0xc2c1,0x1294 ,0x0964,0x3f4f ,0xe4a3,0xc625 ,
|
|
||||||
0xc13b,0x0c7c ,0x0646,0x3fb1 ,0xed6c,0xc2c1 ,
|
|
||||||
0xc04f,0x0646 ,0x0324,0x3fec ,0xf69c,0xc0b1 ,
|
|
||||||
0x4000,0x0000 ,0x4000,0x0000 ,0x4000,0x0000 ,
|
|
||||||
0x3ffb,0x0192 ,0x3fff,0x00c9 ,0x3ff5,0x025b ,
|
|
||||||
0x3fec,0x0324 ,0x3ffb,0x0192 ,0x3fd4,0x04b5 ,
|
|
||||||
0x3fd4,0x04b5 ,0x3ff5,0x025b ,0x3f9c,0x070e ,
|
|
||||||
0x3fb1,0x0646 ,0x3fec,0x0324 ,0x3f4f,0x0964 ,
|
|
||||||
0x3f85,0x07d6 ,0x3fe1,0x03ed ,0x3eeb,0x0bb7 ,
|
|
||||||
0x3f4f,0x0964 ,0x3fd4,0x04b5 ,0x3e72,0x0e06 ,
|
|
||||||
0x3f0f,0x0af1 ,0x3fc4,0x057e ,0x3de3,0x1050 ,
|
|
||||||
0x3ec5,0x0c7c ,0x3fb1,0x0646 ,0x3d3f,0x1294 ,
|
|
||||||
0x3e72,0x0e06 ,0x3f9c,0x070e ,0x3c85,0x14d2 ,
|
|
||||||
0x3e15,0x0f8d ,0x3f85,0x07d6 ,0x3bb6,0x1709 ,
|
|
||||||
0x3daf,0x1112 ,0x3f6b,0x089d ,0x3ad3,0x1937 ,
|
|
||||||
0x3d3f,0x1294 ,0x3f4f,0x0964 ,0x39db,0x1b5d ,
|
|
||||||
0x3cc5,0x1413 ,0x3f30,0x0a2b ,0x38cf,0x1d79 ,
|
|
||||||
0x3c42,0x1590 ,0x3f0f,0x0af1 ,0x37b0,0x1f8c ,
|
|
||||||
0x3bb6,0x1709 ,0x3eeb,0x0bb7 ,0x367d,0x2193 ,
|
|
||||||
0x3b21,0x187e ,0x3ec5,0x0c7c ,0x3537,0x238e ,
|
|
||||||
0x3a82,0x19ef ,0x3e9d,0x0d41 ,0x33df,0x257e ,
|
|
||||||
0x39db,0x1b5d ,0x3e72,0x0e06 ,0x3274,0x2760 ,
|
|
||||||
0x392b,0x1cc6 ,0x3e45,0x0eca ,0x30f9,0x2935 ,
|
|
||||||
0x3871,0x1e2b ,0x3e15,0x0f8d ,0x2f6c,0x2afb ,
|
|
||||||
0x37b0,0x1f8c ,0x3de3,0x1050 ,0x2dcf,0x2cb2 ,
|
|
||||||
0x36e5,0x20e7 ,0x3daf,0x1112 ,0x2c21,0x2e5a ,
|
|
||||||
0x3612,0x223d ,0x3d78,0x11d3 ,0x2a65,0x2ff2 ,
|
|
||||||
0x3537,0x238e ,0x3d3f,0x1294 ,0x289a,0x3179 ,
|
|
||||||
0x3453,0x24da ,0x3d03,0x1354 ,0x26c1,0x32ef ,
|
|
||||||
0x3368,0x2620 ,0x3cc5,0x1413 ,0x24da,0x3453 ,
|
|
||||||
0x3274,0x2760 ,0x3c85,0x14d2 ,0x22e7,0x35a5 ,
|
|
||||||
0x3179,0x289a ,0x3c42,0x1590 ,0x20e7,0x36e5 ,
|
|
||||||
0x3076,0x29ce ,0x3bfd,0x164c ,0x1edc,0x3812 ,
|
|
||||||
0x2f6c,0x2afb ,0x3bb6,0x1709 ,0x1cc6,0x392b ,
|
|
||||||
0x2e5a,0x2c21 ,0x3b6d,0x17c4 ,0x1aa7,0x3a30 ,
|
|
||||||
0x2d41,0x2d41 ,0x3b21,0x187e ,0x187e,0x3b21 ,
|
|
||||||
0x2c21,0x2e5a ,0x3ad3,0x1937 ,0x164c,0x3bfd ,
|
|
||||||
0x2afb,0x2f6c ,0x3a82,0x19ef ,0x1413,0x3cc5 ,
|
|
||||||
0x29ce,0x3076 ,0x3a30,0x1aa7 ,0x11d3,0x3d78 ,
|
|
||||||
0x289a,0x3179 ,0x39db,0x1b5d ,0x0f8d,0x3e15 ,
|
|
||||||
0x2760,0x3274 ,0x3984,0x1c12 ,0x0d41,0x3e9d ,
|
|
||||||
0x2620,0x3368 ,0x392b,0x1cc6 ,0x0af1,0x3f0f ,
|
|
||||||
0x24da,0x3453 ,0x38cf,0x1d79 ,0x089d,0x3f6b ,
|
|
||||||
0x238e,0x3537 ,0x3871,0x1e2b ,0x0646,0x3fb1 ,
|
|
||||||
0x223d,0x3612 ,0x3812,0x1edc ,0x03ed,0x3fe1 ,
|
|
||||||
0x20e7,0x36e5 ,0x37b0,0x1f8c ,0x0192,0x3ffb ,
|
|
||||||
0x1f8c,0x37b0 ,0x374b,0x203a ,0xff37,0x3fff ,
|
|
||||||
0x1e2b,0x3871 ,0x36e5,0x20e7 ,0xfcdc,0x3fec ,
|
|
||||||
0x1cc6,0x392b ,0x367d,0x2193 ,0xfa82,0x3fc4 ,
|
|
||||||
0x1b5d,0x39db ,0x3612,0x223d ,0xf82a,0x3f85 ,
|
|
||||||
0x19ef,0x3a82 ,0x35a5,0x22e7 ,0xf5d5,0x3f30 ,
|
|
||||||
0x187e,0x3b21 ,0x3537,0x238e ,0xf384,0x3ec5 ,
|
|
||||||
0x1709,0x3bb6 ,0x34c6,0x2435 ,0xf136,0x3e45 ,
|
|
||||||
0x1590,0x3c42 ,0x3453,0x24da ,0xeeee,0x3daf ,
|
|
||||||
0x1413,0x3cc5 ,0x33df,0x257e ,0xecac,0x3d03 ,
|
|
||||||
0x1294,0x3d3f ,0x3368,0x2620 ,0xea70,0x3c42 ,
|
|
||||||
0x1112,0x3daf ,0x32ef,0x26c1 ,0xe83c,0x3b6d ,
|
|
||||||
0x0f8d,0x3e15 ,0x3274,0x2760 ,0xe611,0x3a82 ,
|
|
||||||
0x0e06,0x3e72 ,0x31f8,0x27fe ,0xe3ee,0x3984 ,
|
|
||||||
0x0c7c,0x3ec5 ,0x3179,0x289a ,0xe1d5,0x3871 ,
|
|
||||||
0x0af1,0x3f0f ,0x30f9,0x2935 ,0xdfc6,0x374b ,
|
|
||||||
0x0964,0x3f4f ,0x3076,0x29ce ,0xddc3,0x3612 ,
|
|
||||||
0x07d6,0x3f85 ,0x2ff2,0x2a65 ,0xdbcb,0x34c6 ,
|
|
||||||
0x0646,0x3fb1 ,0x2f6c,0x2afb ,0xd9e0,0x3368 ,
|
|
||||||
0x04b5,0x3fd4 ,0x2ee4,0x2b8f ,0xd802,0x31f8 ,
|
|
||||||
0x0324,0x3fec ,0x2e5a,0x2c21 ,0xd632,0x3076 ,
|
|
||||||
0x0192,0x3ffb ,0x2dcf,0x2cb2 ,0xd471,0x2ee4 ,
|
|
||||||
0x0000,0x4000 ,0x2d41,0x2d41 ,0xd2bf,0x2d41 ,
|
|
||||||
0xfe6e,0x3ffb ,0x2cb2,0x2dcf ,0xd11c,0x2b8f ,
|
|
||||||
0xfcdc,0x3fec ,0x2c21,0x2e5a ,0xcf8a,0x29ce ,
|
|
||||||
0xfb4b,0x3fd4 ,0x2b8f,0x2ee4 ,0xce08,0x27fe ,
|
|
||||||
0xf9ba,0x3fb1 ,0x2afb,0x2f6c ,0xcc98,0x2620 ,
|
|
||||||
0xf82a,0x3f85 ,0x2a65,0x2ff2 ,0xcb3a,0x2435 ,
|
|
||||||
0xf69c,0x3f4f ,0x29ce,0x3076 ,0xc9ee,0x223d ,
|
|
||||||
0xf50f,0x3f0f ,0x2935,0x30f9 ,0xc8b5,0x203a ,
|
|
||||||
0xf384,0x3ec5 ,0x289a,0x3179 ,0xc78f,0x1e2b ,
|
|
||||||
0xf1fa,0x3e72 ,0x27fe,0x31f8 ,0xc67c,0x1c12 ,
|
|
||||||
0xf073,0x3e15 ,0x2760,0x3274 ,0xc57e,0x19ef ,
|
|
||||||
0xeeee,0x3daf ,0x26c1,0x32ef ,0xc493,0x17c4 ,
|
|
||||||
0xed6c,0x3d3f ,0x2620,0x3368 ,0xc3be,0x1590 ,
|
|
||||||
0xebed,0x3cc5 ,0x257e,0x33df ,0xc2fd,0x1354 ,
|
|
||||||
0xea70,0x3c42 ,0x24da,0x3453 ,0xc251,0x1112 ,
|
|
||||||
0xe8f7,0x3bb6 ,0x2435,0x34c6 ,0xc1bb,0x0eca ,
|
|
||||||
0xe782,0x3b21 ,0x238e,0x3537 ,0xc13b,0x0c7c ,
|
|
||||||
0xe611,0x3a82 ,0x22e7,0x35a5 ,0xc0d0,0x0a2b ,
|
|
||||||
0xe4a3,0x39db ,0x223d,0x3612 ,0xc07b,0x07d6 ,
|
|
||||||
0xe33a,0x392b ,0x2193,0x367d ,0xc03c,0x057e ,
|
|
||||||
0xe1d5,0x3871 ,0x20e7,0x36e5 ,0xc014,0x0324 ,
|
|
||||||
0xe074,0x37b0 ,0x203a,0x374b ,0xc001,0x00c9 ,
|
|
||||||
0xdf19,0x36e5 ,0x1f8c,0x37b0 ,0xc005,0xfe6e ,
|
|
||||||
0xddc3,0x3612 ,0x1edc,0x3812 ,0xc01f,0xfc13 ,
|
|
||||||
0xdc72,0x3537 ,0x1e2b,0x3871 ,0xc04f,0xf9ba ,
|
|
||||||
0xdb26,0x3453 ,0x1d79,0x38cf ,0xc095,0xf763 ,
|
|
||||||
0xd9e0,0x3368 ,0x1cc6,0x392b ,0xc0f1,0xf50f ,
|
|
||||||
0xd8a0,0x3274 ,0x1c12,0x3984 ,0xc163,0xf2bf ,
|
|
||||||
0xd766,0x3179 ,0x1b5d,0x39db ,0xc1eb,0xf073 ,
|
|
||||||
0xd632,0x3076 ,0x1aa7,0x3a30 ,0xc288,0xee2d ,
|
|
||||||
0xd505,0x2f6c ,0x19ef,0x3a82 ,0xc33b,0xebed ,
|
|
||||||
0xd3df,0x2e5a ,0x1937,0x3ad3 ,0xc403,0xe9b4 ,
|
|
||||||
0xd2bf,0x2d41 ,0x187e,0x3b21 ,0xc4df,0xe782 ,
|
|
||||||
0xd1a6,0x2c21 ,0x17c4,0x3b6d ,0xc5d0,0xe559 ,
|
|
||||||
0xd094,0x2afb ,0x1709,0x3bb6 ,0xc6d5,0xe33a ,
|
|
||||||
0xcf8a,0x29ce ,0x164c,0x3bfd ,0xc7ee,0xe124 ,
|
|
||||||
0xce87,0x289a ,0x1590,0x3c42 ,0xc91b,0xdf19 ,
|
|
||||||
0xcd8c,0x2760 ,0x14d2,0x3c85 ,0xca5b,0xdd19 ,
|
|
||||||
0xcc98,0x2620 ,0x1413,0x3cc5 ,0xcbad,0xdb26 ,
|
|
||||||
0xcbad,0x24da ,0x1354,0x3d03 ,0xcd11,0xd93f ,
|
|
||||||
0xcac9,0x238e ,0x1294,0x3d3f ,0xce87,0xd766 ,
|
|
||||||
0xc9ee,0x223d ,0x11d3,0x3d78 ,0xd00e,0xd59b ,
|
|
||||||
0xc91b,0x20e7 ,0x1112,0x3daf ,0xd1a6,0xd3df ,
|
|
||||||
0xc850,0x1f8c ,0x1050,0x3de3 ,0xd34e,0xd231 ,
|
|
||||||
0xc78f,0x1e2b ,0x0f8d,0x3e15 ,0xd505,0xd094 ,
|
|
||||||
0xc6d5,0x1cc6 ,0x0eca,0x3e45 ,0xd6cb,0xcf07 ,
|
|
||||||
0xc625,0x1b5d ,0x0e06,0x3e72 ,0xd8a0,0xcd8c ,
|
|
||||||
0xc57e,0x19ef ,0x0d41,0x3e9d ,0xda82,0xcc21 ,
|
|
||||||
0xc4df,0x187e ,0x0c7c,0x3ec5 ,0xdc72,0xcac9 ,
|
|
||||||
0xc44a,0x1709 ,0x0bb7,0x3eeb ,0xde6d,0xc983 ,
|
|
||||||
0xc3be,0x1590 ,0x0af1,0x3f0f ,0xe074,0xc850 ,
|
|
||||||
0xc33b,0x1413 ,0x0a2b,0x3f30 ,0xe287,0xc731 ,
|
|
||||||
0xc2c1,0x1294 ,0x0964,0x3f4f ,0xe4a3,0xc625 ,
|
|
||||||
0xc251,0x1112 ,0x089d,0x3f6b ,0xe6c9,0xc52d ,
|
|
||||||
0xc1eb,0x0f8d ,0x07d6,0x3f85 ,0xe8f7,0xc44a ,
|
|
||||||
0xc18e,0x0e06 ,0x070e,0x3f9c ,0xeb2e,0xc37b ,
|
|
||||||
0xc13b,0x0c7c ,0x0646,0x3fb1 ,0xed6c,0xc2c1 ,
|
|
||||||
0xc0f1,0x0af1 ,0x057e,0x3fc4 ,0xefb0,0xc21d ,
|
|
||||||
0xc0b1,0x0964 ,0x04b5,0x3fd4 ,0xf1fa,0xc18e ,
|
|
||||||
0xc07b,0x07d6 ,0x03ed,0x3fe1 ,0xf449,0xc115 ,
|
|
||||||
0xc04f,0x0646 ,0x0324,0x3fec ,0xf69c,0xc0b1 ,
|
|
||||||
0xc02c,0x04b5 ,0x025b,0x3ff5 ,0xf8f2,0xc064 ,
|
|
||||||
0xc014,0x0324 ,0x0192,0x3ffb ,0xfb4b,0xc02c ,
|
|
||||||
0xc005,0x0192 ,0x00c9,0x3fff ,0xfda5,0xc00b ,
|
|
||||||
0x4000,0x0000 ,0x4000,0x0065 ,0x3fff,0x00c9 ,
|
|
||||||
0x3ffd,0x012e ,0x3ffb,0x0192 ,0x3ff8,0x01f7 ,
|
|
||||||
0x3ff5,0x025b ,0x3ff1,0x02c0 ,0x3fec,0x0324 ,
|
|
||||||
0x3fe7,0x0388 ,0x3fe1,0x03ed ,0x3fdb,0x0451 ,
|
|
||||||
0x3fd4,0x04b5 ,0x3fcc,0x051a ,0x3fc4,0x057e ,
|
|
||||||
0x3fbb,0x05e2 ,0x3fb1,0x0646 ,0x3fa7,0x06aa ,
|
|
||||||
0x3f9c,0x070e ,0x3f91,0x0772 ,0x3f85,0x07d6 ,
|
|
||||||
0x3f78,0x0839 ,0x3f6b,0x089d ,0x3f5d,0x0901 ,
|
|
||||||
0x3f4f,0x0964 ,0x3f40,0x09c7 ,0x3f30,0x0a2b ,
|
|
||||||
0x3f20,0x0a8e ,0x3f0f,0x0af1 ,0x3efd,0x0b54 ,
|
|
||||||
0x3eeb,0x0bb7 ,0x3ed8,0x0c1a ,0x3ec5,0x0c7c ,
|
|
||||||
0x3eb1,0x0cdf ,0x3e9d,0x0d41 ,0x3e88,0x0da4 ,
|
|
||||||
0x3e72,0x0e06 ,0x3e5c,0x0e68 ,0x3e45,0x0eca ,
|
|
||||||
0x3e2d,0x0f2b ,0x3e15,0x0f8d ,0x3dfc,0x0fee ,
|
|
||||||
0x3de3,0x1050 ,0x3dc9,0x10b1 ,0x3daf,0x1112 ,
|
|
||||||
0x3d93,0x1173 ,0x3d78,0x11d3 ,0x3d5b,0x1234 ,
|
|
||||||
0x3d3f,0x1294 ,0x3d21,0x12f4 ,0x3d03,0x1354 ,
|
|
||||||
0x3ce4,0x13b4 ,0x3cc5,0x1413 ,0x3ca5,0x1473 ,
|
|
||||||
0x3c85,0x14d2 ,0x3c64,0x1531 ,0x3c42,0x1590 ,
|
|
||||||
0x3c20,0x15ee ,0x3bfd,0x164c ,0x3bda,0x16ab ,
|
|
||||||
0x3bb6,0x1709 ,0x3b92,0x1766 ,0x3b6d,0x17c4 ,
|
|
||||||
0x3b47,0x1821 ,0x3b21,0x187e ,0x3afa,0x18db ,
|
|
||||||
0x3ad3,0x1937 ,0x3aab,0x1993 ,0x3a82,0x19ef ,
|
|
||||||
0x3a59,0x1a4b ,0x3a30,0x1aa7 ,0x3a06,0x1b02 ,
|
|
||||||
0x39db,0x1b5d ,0x39b0,0x1bb8 ,0x3984,0x1c12 ,
|
|
||||||
0x3958,0x1c6c ,0x392b,0x1cc6 ,0x38fd,0x1d20 ,
|
|
||||||
0x38cf,0x1d79 ,0x38a1,0x1dd3 ,0x3871,0x1e2b ,
|
|
||||||
0x3842,0x1e84 ,0x3812,0x1edc ,0x37e1,0x1f34 ,
|
|
||||||
0x37b0,0x1f8c ,0x377e,0x1fe3 ,0x374b,0x203a ,
|
|
||||||
0x3718,0x2091 ,0x36e5,0x20e7 ,0x36b1,0x213d ,
|
|
||||||
0x367d,0x2193 ,0x3648,0x21e8 ,0x3612,0x223d ,
|
|
||||||
0x35dc,0x2292 ,0x35a5,0x22e7 ,0x356e,0x233b ,
|
|
||||||
0x3537,0x238e ,0x34ff,0x23e2 ,0x34c6,0x2435 ,
|
|
||||||
0x348d,0x2488 ,0x3453,0x24da ,0x3419,0x252c ,
|
|
||||||
0x33df,0x257e ,0x33a3,0x25cf ,0x3368,0x2620 ,
|
|
||||||
0x332c,0x2671 ,0x32ef,0x26c1 ,0x32b2,0x2711 ,
|
|
||||||
0x3274,0x2760 ,0x3236,0x27af ,0x31f8,0x27fe ,
|
|
||||||
0x31b9,0x284c ,0x3179,0x289a ,0x3139,0x28e7 ,
|
|
||||||
0x30f9,0x2935 ,0x30b8,0x2981 ,0x3076,0x29ce ,
|
|
||||||
0x3034,0x2a1a ,0x2ff2,0x2a65 ,0x2faf,0x2ab0 ,
|
|
||||||
0x2f6c,0x2afb ,0x2f28,0x2b45 ,0x2ee4,0x2b8f ,
|
|
||||||
0x2e9f,0x2bd8 ,0x2e5a,0x2c21 ,0x2e15,0x2c6a ,
|
|
||||||
0x2dcf,0x2cb2 ,0x2d88,0x2cfa ,0x2d41,0x2d41 ,
|
|
||||||
0x2cfa,0x2d88 ,0x2cb2,0x2dcf ,0x2c6a,0x2e15 ,
|
|
||||||
0x2c21,0x2e5a ,0x2bd8,0x2e9f ,0x2b8f,0x2ee4 ,
|
|
||||||
0x2b45,0x2f28 ,0x2afb,0x2f6c ,0x2ab0,0x2faf ,
|
|
||||||
0x2a65,0x2ff2 ,0x2a1a,0x3034 ,0x29ce,0x3076 ,
|
|
||||||
0x2981,0x30b8 ,0x2935,0x30f9 ,0x28e7,0x3139 ,
|
|
||||||
0x289a,0x3179 ,0x284c,0x31b9 ,0x27fe,0x31f8 ,
|
|
||||||
0x27af,0x3236 ,0x2760,0x3274 ,0x2711,0x32b2 ,
|
|
||||||
0x26c1,0x32ef ,0x2671,0x332c ,0x2620,0x3368 ,
|
|
||||||
0x25cf,0x33a3 ,0x257e,0x33df ,0x252c,0x3419 ,
|
|
||||||
0x24da,0x3453 ,0x2488,0x348d ,0x2435,0x34c6 ,
|
|
||||||
0x23e2,0x34ff ,0x238e,0x3537 ,0x233b,0x356e ,
|
|
||||||
0x22e7,0x35a5 ,0x2292,0x35dc ,0x223d,0x3612 ,
|
|
||||||
0x21e8,0x3648 ,0x2193,0x367d ,0x213d,0x36b1 ,
|
|
||||||
0x20e7,0x36e5 ,0x2091,0x3718 ,0x203a,0x374b ,
|
|
||||||
0x1fe3,0x377e ,0x1f8c,0x37b0 ,0x1f34,0x37e1 ,
|
|
||||||
0x1edc,0x3812 ,0x1e84,0x3842 ,0x1e2b,0x3871 ,
|
|
||||||
0x1dd3,0x38a1 ,0x1d79,0x38cf ,0x1d20,0x38fd ,
|
|
||||||
0x1cc6,0x392b ,0x1c6c,0x3958 ,0x1c12,0x3984 ,
|
|
||||||
0x1bb8,0x39b0 ,0x1b5d,0x39db ,0x1b02,0x3a06 ,
|
|
||||||
0x1aa7,0x3a30 ,0x1a4b,0x3a59 ,0x19ef,0x3a82 ,
|
|
||||||
0x1993,0x3aab ,0x1937,0x3ad3 ,0x18db,0x3afa ,
|
|
||||||
0x187e,0x3b21 ,0x1821,0x3b47 ,0x17c4,0x3b6d ,
|
|
||||||
0x1766,0x3b92 ,0x1709,0x3bb6 ,0x16ab,0x3bda ,
|
|
||||||
0x164c,0x3bfd ,0x15ee,0x3c20 ,0x1590,0x3c42 ,
|
|
||||||
0x1531,0x3c64 ,0x14d2,0x3c85 ,0x1473,0x3ca5 ,
|
|
||||||
0x1413,0x3cc5 ,0x13b4,0x3ce4 ,0x1354,0x3d03 ,
|
|
||||||
0x12f4,0x3d21 ,0x1294,0x3d3f ,0x1234,0x3d5b ,
|
|
||||||
0x11d3,0x3d78 ,0x1173,0x3d93 ,0x1112,0x3daf ,
|
|
||||||
0x10b1,0x3dc9 ,0x1050,0x3de3 ,0x0fee,0x3dfc ,
|
|
||||||
0x0f8d,0x3e15 ,0x0f2b,0x3e2d ,0x0eca,0x3e45 ,
|
|
||||||
0x0e68,0x3e5c ,0x0e06,0x3e72 ,0x0da4,0x3e88 ,
|
|
||||||
0x0d41,0x3e9d ,0x0cdf,0x3eb1 ,0x0c7c,0x3ec5 ,
|
|
||||||
0x0c1a,0x3ed8 ,0x0bb7,0x3eeb ,0x0b54,0x3efd ,
|
|
||||||
0x0af1,0x3f0f ,0x0a8e,0x3f20 ,0x0a2b,0x3f30 ,
|
|
||||||
0x09c7,0x3f40 ,0x0964,0x3f4f ,0x0901,0x3f5d ,
|
|
||||||
0x089d,0x3f6b ,0x0839,0x3f78 ,0x07d6,0x3f85 ,
|
|
||||||
0x0772,0x3f91 ,0x070e,0x3f9c ,0x06aa,0x3fa7 ,
|
|
||||||
0x0646,0x3fb1 ,0x05e2,0x3fbb ,0x057e,0x3fc4 ,
|
|
||||||
0x051a,0x3fcc ,0x04b5,0x3fd4 ,0x0451,0x3fdb ,
|
|
||||||
0x03ed,0x3fe1 ,0x0388,0x3fe7 ,0x0324,0x3fec ,
|
|
||||||
0x02c0,0x3ff1 ,0x025b,0x3ff5 ,0x01f7,0x3ff8 ,
|
|
||||||
0x0192,0x3ffb ,0x012e,0x3ffd ,0x00c9,0x3fff ,
|
|
||||||
0x0065,0x4000 ,0x0000,0x4000 ,0xff9b,0x4000 ,
|
|
||||||
0xff37,0x3fff ,0xfed2,0x3ffd ,0xfe6e,0x3ffb ,
|
|
||||||
0xfe09,0x3ff8 ,0xfda5,0x3ff5 ,0xfd40,0x3ff1 ,
|
|
||||||
0xfcdc,0x3fec ,0xfc78,0x3fe7 ,0xfc13,0x3fe1 ,
|
|
||||||
0xfbaf,0x3fdb ,0xfb4b,0x3fd4 ,0xfae6,0x3fcc ,
|
|
||||||
0xfa82,0x3fc4 ,0xfa1e,0x3fbb ,0xf9ba,0x3fb1 ,
|
|
||||||
0xf956,0x3fa7 ,0xf8f2,0x3f9c ,0xf88e,0x3f91 ,
|
|
||||||
0xf82a,0x3f85 ,0xf7c7,0x3f78 ,0xf763,0x3f6b ,
|
|
||||||
0xf6ff,0x3f5d ,0xf69c,0x3f4f ,0xf639,0x3f40 ,
|
|
||||||
0xf5d5,0x3f30 ,0xf572,0x3f20 ,0xf50f,0x3f0f ,
|
|
||||||
0xf4ac,0x3efd ,0xf449,0x3eeb ,0xf3e6,0x3ed8 ,
|
|
||||||
0xf384,0x3ec5 ,0xf321,0x3eb1 ,0xf2bf,0x3e9d ,
|
|
||||||
0xf25c,0x3e88 ,0xf1fa,0x3e72 ,0xf198,0x3e5c ,
|
|
||||||
0xf136,0x3e45 ,0xf0d5,0x3e2d ,0xf073,0x3e15 ,
|
|
||||||
0xf012,0x3dfc ,0xefb0,0x3de3 ,0xef4f,0x3dc9 ,
|
|
||||||
0xeeee,0x3daf ,0xee8d,0x3d93 ,0xee2d,0x3d78 ,
|
|
||||||
0xedcc,0x3d5b ,0xed6c,0x3d3f ,0xed0c,0x3d21 ,
|
|
||||||
0xecac,0x3d03 ,0xec4c,0x3ce4 ,0xebed,0x3cc5 ,
|
|
||||||
0xeb8d,0x3ca5 ,0xeb2e,0x3c85 ,0xeacf,0x3c64 ,
|
|
||||||
0xea70,0x3c42 ,0xea12,0x3c20 ,0xe9b4,0x3bfd ,
|
|
||||||
0xe955,0x3bda ,0xe8f7,0x3bb6 ,0xe89a,0x3b92 ,
|
|
||||||
0xe83c,0x3b6d ,0xe7df,0x3b47 ,0xe782,0x3b21 ,
|
|
||||||
0xe725,0x3afa ,0xe6c9,0x3ad3 ,0xe66d,0x3aab ,
|
|
||||||
0xe611,0x3a82 ,0xe5b5,0x3a59 ,0xe559,0x3a30 ,
|
|
||||||
0xe4fe,0x3a06 ,0xe4a3,0x39db ,0xe448,0x39b0 ,
|
|
||||||
0xe3ee,0x3984 ,0xe394,0x3958 ,0xe33a,0x392b ,
|
|
||||||
0xe2e0,0x38fd ,0xe287,0x38cf ,0xe22d,0x38a1 ,
|
|
||||||
0xe1d5,0x3871 ,0xe17c,0x3842 ,0xe124,0x3812 ,
|
|
||||||
0xe0cc,0x37e1 ,0xe074,0x37b0 ,0xe01d,0x377e ,
|
|
||||||
0xdfc6,0x374b ,0xdf6f,0x3718 ,0xdf19,0x36e5 ,
|
|
||||||
0xdec3,0x36b1 ,0xde6d,0x367d ,0xde18,0x3648 ,
|
|
||||||
0xddc3,0x3612 ,0xdd6e,0x35dc ,0xdd19,0x35a5 ,
|
|
||||||
0xdcc5,0x356e ,0xdc72,0x3537 ,0xdc1e,0x34ff ,
|
|
||||||
0xdbcb,0x34c6 ,0xdb78,0x348d ,0xdb26,0x3453 ,
|
|
||||||
0xdad4,0x3419 ,0xda82,0x33df ,0xda31,0x33a3 ,
|
|
||||||
0xd9e0,0x3368 ,0xd98f,0x332c ,0xd93f,0x32ef ,
|
|
||||||
0xd8ef,0x32b2 ,0xd8a0,0x3274 ,0xd851,0x3236 ,
|
|
||||||
0xd802,0x31f8 ,0xd7b4,0x31b9 ,0xd766,0x3179 ,
|
|
||||||
0xd719,0x3139 ,0xd6cb,0x30f9 ,0xd67f,0x30b8 ,
|
|
||||||
0xd632,0x3076 ,0xd5e6,0x3034 ,0xd59b,0x2ff2 ,
|
|
||||||
0xd550,0x2faf ,0xd505,0x2f6c ,0xd4bb,0x2f28 ,
|
|
||||||
0xd471,0x2ee4 ,0xd428,0x2e9f ,0xd3df,0x2e5a ,
|
|
||||||
0xd396,0x2e15 ,0xd34e,0x2dcf ,0xd306,0x2d88 ,
|
|
||||||
0xd2bf,0x2d41 ,0xd278,0x2cfa ,0xd231,0x2cb2 ,
|
|
||||||
0xd1eb,0x2c6a ,0xd1a6,0x2c21 ,0xd161,0x2bd8 ,
|
|
||||||
0xd11c,0x2b8f ,0xd0d8,0x2b45 ,0xd094,0x2afb ,
|
|
||||||
0xd051,0x2ab0 ,0xd00e,0x2a65 ,0xcfcc,0x2a1a ,
|
|
||||||
0xcf8a,0x29ce ,0xcf48,0x2981 ,0xcf07,0x2935 ,
|
|
||||||
0xcec7,0x28e7 ,0xce87,0x289a ,0xce47,0x284c ,
|
|
||||||
0xce08,0x27fe ,0xcdca,0x27af ,0xcd8c,0x2760 ,
|
|
||||||
0xcd4e,0x2711 ,0xcd11,0x26c1 ,0xccd4,0x2671 ,
|
|
||||||
0xcc98,0x2620 ,0xcc5d,0x25cf ,0xcc21,0x257e ,
|
|
||||||
0xcbe7,0x252c ,0xcbad,0x24da ,0xcb73,0x2488 ,
|
|
||||||
0xcb3a,0x2435 ,0xcb01,0x23e2 ,0xcac9,0x238e ,
|
|
||||||
0xca92,0x233b ,0xca5b,0x22e7 ,0xca24,0x2292 ,
|
|
||||||
0xc9ee,0x223d ,0xc9b8,0x21e8 ,0xc983,0x2193 ,
|
|
||||||
0xc94f,0x213d ,0xc91b,0x20e7 ,0xc8e8,0x2091 ,
|
|
||||||
0xc8b5,0x203a ,0xc882,0x1fe3 ,0xc850,0x1f8c ,
|
|
||||||
0xc81f,0x1f34 ,0xc7ee,0x1edc ,0xc7be,0x1e84 ,
|
|
||||||
0xc78f,0x1e2b ,0xc75f,0x1dd3 ,0xc731,0x1d79 ,
|
|
||||||
0xc703,0x1d20 ,0xc6d5,0x1cc6 ,0xc6a8,0x1c6c ,
|
|
||||||
0xc67c,0x1c12 ,0xc650,0x1bb8 ,0xc625,0x1b5d ,
|
|
||||||
0xc5fa,0x1b02 ,0xc5d0,0x1aa7 ,0xc5a7,0x1a4b ,
|
|
||||||
0xc57e,0x19ef ,0xc555,0x1993 ,0xc52d,0x1937 ,
|
|
||||||
0xc506,0x18db ,0xc4df,0x187e ,0xc4b9,0x1821 ,
|
|
||||||
0xc493,0x17c4 ,0xc46e,0x1766 ,0xc44a,0x1709 ,
|
|
||||||
0xc426,0x16ab ,0xc403,0x164c ,0xc3e0,0x15ee ,
|
|
||||||
0xc3be,0x1590 ,0xc39c,0x1531 ,0xc37b,0x14d2 ,
|
|
||||||
0xc35b,0x1473 ,0xc33b,0x1413 ,0xc31c,0x13b4 ,
|
|
||||||
0xc2fd,0x1354 ,0xc2df,0x12f4 ,0xc2c1,0x1294 ,
|
|
||||||
0xc2a5,0x1234 ,0xc288,0x11d3 ,0xc26d,0x1173 ,
|
|
||||||
0xc251,0x1112 ,0xc237,0x10b1 ,0xc21d,0x1050 ,
|
|
||||||
0xc204,0x0fee ,0xc1eb,0x0f8d ,0xc1d3,0x0f2b ,
|
|
||||||
0xc1bb,0x0eca ,0xc1a4,0x0e68 ,0xc18e,0x0e06 ,
|
|
||||||
0xc178,0x0da4 ,0xc163,0x0d41 ,0xc14f,0x0cdf ,
|
|
||||||
0xc13b,0x0c7c ,0xc128,0x0c1a ,0xc115,0x0bb7 ,
|
|
||||||
0xc103,0x0b54 ,0xc0f1,0x0af1 ,0xc0e0,0x0a8e ,
|
|
||||||
0xc0d0,0x0a2b ,0xc0c0,0x09c7 ,0xc0b1,0x0964 ,
|
|
||||||
0xc0a3,0x0901 ,0xc095,0x089d ,0xc088,0x0839 ,
|
|
||||||
0xc07b,0x07d6 ,0xc06f,0x0772 ,0xc064,0x070e ,
|
|
||||||
0xc059,0x06aa ,0xc04f,0x0646 ,0xc045,0x05e2 ,
|
|
||||||
0xc03c,0x057e ,0xc034,0x051a ,0xc02c,0x04b5 ,
|
|
||||||
0xc025,0x0451 ,0xc01f,0x03ed ,0xc019,0x0388 ,
|
|
||||||
0xc014,0x0324 ,0xc00f,0x02c0 ,0xc00b,0x025b ,
|
|
||||||
0xc008,0x01f7 ,0xc005,0x0192 ,0xc003,0x012e ,
|
|
||||||
0xc001,0x00c9 ,0xc000,0x0065 };
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file contains the Q14 radix-2 tables used in ARM9E optimization routines.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern const unsigned short t_Q14S_rad8[2];
|
|
||||||
const unsigned short t_Q14S_rad8[2] = { 0x0000,0x2d41 };
|
|
||||||
|
|
||||||
//extern const int t_Q30S_rad8[2];
|
|
||||||
//const int t_Q30S_rad8[2] = { 0x00000000,0x2d413ccd };
|
|
||||||
|
|
||||||
extern const unsigned short t_Q14R_rad8[2];
|
|
||||||
const unsigned short t_Q14R_rad8[2] = { 0x2d41,0x2d41 };
|
|
||||||
|
|
||||||
//extern const int t_Q30R_rad8[2];
|
|
||||||
//const int t_Q30R_rad8[2] = { 0x2d413ccd,0x2d413ccd };
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_TRANSFORM_H_
|
|
||||||
#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_TRANSFORM_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "webrtc/modules/audio_coding/codecs/isac/fix/source/settings.h"
|
|
||||||
#include "webrtc/typedefs.h"
|
|
||||||
|
|
||||||
/* Cosine table 1 in Q14 */
|
|
||||||
extern const int16_t kCosTab1[FRAMESAMPLES/2];
|
|
||||||
|
|
||||||
/* Sine table 1 in Q14 */
|
|
||||||
extern const int16_t kSinTab1[FRAMESAMPLES/2];
|
|
||||||
|
|
||||||
/* Cosine table 2 in Q14 */
|
|
||||||
extern const int16_t kCosTab2[FRAMESAMPLES/4];
|
|
||||||
|
|
||||||
/* Sine table 2 in Q14 */
|
|
||||||
extern const int16_t kSinTab2[FRAMESAMPLES/4];
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /* extern "C" */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_TRANSFORM_H_ */
|
|
||||||
@@ -1,173 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
//#include "isac_codec.h"
|
|
||||||
//#include "isac_structs.h"
|
|
||||||
#include "isacfix.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define NUM_CODECS 1
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
FILE *inFileList;
|
|
||||||
FILE *audioFile;
|
|
||||||
FILE *outFile;
|
|
||||||
char audioFileName[501];
|
|
||||||
short audioBuff[960];
|
|
||||||
short encoded[600];
|
|
||||||
short startAudio;
|
|
||||||
short encodedLen;
|
|
||||||
ISACFIX_MainStruct *isac_struct;
|
|
||||||
unsigned long int hist[601];
|
|
||||||
|
|
||||||
// reset the histogram
|
|
||||||
for(short n=0; n < 601; n++)
|
|
||||||
{
|
|
||||||
hist[n] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inFileList = fopen(argv[1], "r");
|
|
||||||
if(inFileList == NULL)
|
|
||||||
{
|
|
||||||
printf("Could not open the input file.\n");
|
|
||||||
getchar();
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
outFile = fopen(argv[2], "w");
|
|
||||||
if(outFile == NULL)
|
|
||||||
{
|
|
||||||
printf("Could not open the histogram file.\n");
|
|
||||||
getchar();
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
short frameSizeMsec = 30;
|
|
||||||
if(argc > 3)
|
|
||||||
{
|
|
||||||
frameSizeMsec = atoi(argv[3]);
|
|
||||||
}
|
|
||||||
|
|
||||||
short audioOffset = 0;
|
|
||||||
if(argc > 4)
|
|
||||||
{
|
|
||||||
audioOffset = atoi(argv[4]);
|
|
||||||
}
|
|
||||||
int ok;
|
|
||||||
ok = WebRtcIsacfix_Create(&isac_struct);
|
|
||||||
// instantaneous mode
|
|
||||||
ok |= WebRtcIsacfix_EncoderInit(isac_struct, 1);
|
|
||||||
// is not used but initialize
|
|
||||||
ok |= WebRtcIsacfix_DecoderInit(isac_struct);
|
|
||||||
ok |= WebRtcIsacfix_Control(isac_struct, 32000, frameSizeMsec);
|
|
||||||
|
|
||||||
if(ok != 0)
|
|
||||||
{
|
|
||||||
printf("\nProblem in seting up iSAC\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
while( fgets(audioFileName, 500, inFileList) != NULL )
|
|
||||||
{
|
|
||||||
// remove trailing white-spaces and any Cntrl character
|
|
||||||
if(strlen(audioFileName) == 0)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
short n = strlen(audioFileName) - 1;
|
|
||||||
while(isspace(audioFileName[n]) || iscntrl(audioFileName[n]))
|
|
||||||
{
|
|
||||||
audioFileName[n] = '\0';
|
|
||||||
n--;
|
|
||||||
if(n < 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove leading spaces
|
|
||||||
if(strlen(audioFileName) == 0)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
n = 0;
|
|
||||||
while((isspace(audioFileName[n]) || iscntrl(audioFileName[n])) &&
|
|
||||||
(audioFileName[n] != '\0'))
|
|
||||||
{
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
memmove(audioFileName, &audioFileName[n], 500 - n);
|
|
||||||
if(strlen(audioFileName) == 0)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
audioFile = fopen(audioFileName, "rb");
|
|
||||||
if(audioFile == NULL)
|
|
||||||
{
|
|
||||||
printf("\nCannot open %s!!!!!\n", audioFileName);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(audioOffset > 0)
|
|
||||||
{
|
|
||||||
fseek(audioFile, (audioOffset<<1), SEEK_SET);
|
|
||||||
}
|
|
||||||
|
|
||||||
while(fread(audioBuff, sizeof(short), (480*frameSizeMsec/30), audioFile) >= (480*frameSizeMsec/30))
|
|
||||||
{
|
|
||||||
startAudio = 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
encodedLen = WebRtcIsacfix_Encode(isac_struct,
|
|
||||||
&audioBuff[startAudio], encoded);
|
|
||||||
startAudio += 160;
|
|
||||||
} while(encodedLen == 0);
|
|
||||||
|
|
||||||
if(encodedLen < 0)
|
|
||||||
{
|
|
||||||
printf("\nEncoding Error!!!\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
hist[encodedLen]++;
|
|
||||||
}
|
|
||||||
fclose(audioFile);
|
|
||||||
}
|
|
||||||
fclose(inFileList);
|
|
||||||
unsigned long totalFrames = 0;
|
|
||||||
for(short n=0; n < 601; n++)
|
|
||||||
{
|
|
||||||
totalFrames += hist[n];
|
|
||||||
fprintf(outFile, "%10lu\n", hist[n]);
|
|
||||||
}
|
|
||||||
fclose(outFile);
|
|
||||||
|
|
||||||
short topTenCntr = 0;
|
|
||||||
printf("\nTotal number of Frames %lu\n\n", totalFrames);
|
|
||||||
printf("Payload Len # occurences\n");
|
|
||||||
printf("=========== ============\n");
|
|
||||||
|
|
||||||
for(short n = 600; (n >= 0) && (topTenCntr < 10); n--)
|
|
||||||
{
|
|
||||||
if(hist[n] > 0)
|
|
||||||
{
|
|
||||||
topTenCntr++;
|
|
||||||
printf(" %3d %3d\n", n, hist[n]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
WebRtcIsacfix_Free(isac_struct);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
Stand Alone test application for ISACFIX and ISAC LC
|
|
||||||
|
|
||||||
******************************************************************/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "typedefs.h"
|
|
||||||
|
|
||||||
#include "isacfix.h"
|
|
||||||
ISACFIX_MainStruct *ISACfix_inst;
|
|
||||||
|
|
||||||
#define FS 16000
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint32_t arrival_time; /* samples */
|
|
||||||
uint32_t sample_count; /* samples */
|
|
||||||
uint16_t rtp_number;
|
|
||||||
} BottleNeckModel;
|
|
||||||
|
|
||||||
void get_arrival_time(int current_framesamples, /* samples */
|
|
||||||
int packet_size, /* bytes */
|
|
||||||
int bottleneck, /* excluding headers; bits/s */
|
|
||||||
BottleNeckModel *BN_data)
|
|
||||||
{
|
|
||||||
const int HeaderSize = 35;
|
|
||||||
int HeaderRate;
|
|
||||||
|
|
||||||
HeaderRate = HeaderSize * 8 * FS / current_framesamples; /* bits/s */
|
|
||||||
|
|
||||||
/* everything in samples */
|
|
||||||
BN_data->sample_count = BN_data->sample_count + current_framesamples;
|
|
||||||
|
|
||||||
BN_data->arrival_time += ((packet_size + HeaderSize) * 8 * FS) / (bottleneck + HeaderRate);
|
|
||||||
|
|
||||||
if (BN_data->arrival_time < BN_data->sample_count)
|
|
||||||
BN_data->arrival_time = BN_data->sample_count;
|
|
||||||
|
|
||||||
BN_data->rtp_number++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
int main(int argc, char* argv[]){
|
|
||||||
|
|
||||||
/* Parameters */
|
|
||||||
FILE *pInFile, *pOutFile, *pChcFile;
|
|
||||||
int8_t inFile[40];
|
|
||||||
int8_t outFile[40];
|
|
||||||
int8_t chcFile[40];
|
|
||||||
int8_t codec[10];
|
|
||||||
int16_t bitrt, spType, size;
|
|
||||||
uint16_t frameLen;
|
|
||||||
int16_t sigOut[1000], sigIn[1000];
|
|
||||||
uint16_t bitStream[500]; /* double to 32 kbps for 60 ms */
|
|
||||||
|
|
||||||
int16_t chc, ok;
|
|
||||||
int noOfCalls, cdlen;
|
|
||||||
int16_t noOfLostFrames;
|
|
||||||
int err, errtype;
|
|
||||||
|
|
||||||
BottleNeckModel BN_data;
|
|
||||||
|
|
||||||
int totalbits =0;
|
|
||||||
int totalsmpls =0;
|
|
||||||
|
|
||||||
/*End Parameters*/
|
|
||||||
|
|
||||||
|
|
||||||
if ((argc==6)||(argc==7) ){
|
|
||||||
|
|
||||||
strcpy(codec,argv[5]);
|
|
||||||
|
|
||||||
if(argc==7){
|
|
||||||
if (!_stricmp("isac",codec)){
|
|
||||||
bitrt = atoi(argv[6]);
|
|
||||||
if ( (bitrt<10000)&&(bitrt>32000)){
|
|
||||||
printf("Error: Supported bit rate in the range 10000-32000 bps!\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
|
||||||
printf("Error: Codec not recognized. Check spelling!\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
printf("Error: Codec not recognized. Check spelling!\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
printf("Error: Wrong number of input parameter!\n\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
frameLen = atoi(argv[4]);
|
|
||||||
strcpy(chcFile,argv[3]);
|
|
||||||
strcpy(outFile,argv[2]);
|
|
||||||
strcpy(inFile,argv[1]);
|
|
||||||
|
|
||||||
/* Open file streams */
|
|
||||||
if( (pInFile = fopen(inFile,"rb")) == NULL ) {
|
|
||||||
printf( "Error: Did not find input file!\n" );
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
strcat(outFile,"_");
|
|
||||||
strcat(outFile, argv[4]);
|
|
||||||
strcat(outFile,"_");
|
|
||||||
strcat(outFile, codec);
|
|
||||||
|
|
||||||
if (argc==7){
|
|
||||||
strcat(outFile,"_");
|
|
||||||
strcat(outFile, argv[6]);
|
|
||||||
}
|
|
||||||
if (_stricmp("none", chcFile)){
|
|
||||||
strcat(outFile,"_");
|
|
||||||
strcat(outFile, "plc");
|
|
||||||
}
|
|
||||||
|
|
||||||
strcat(outFile, ".otp");
|
|
||||||
|
|
||||||
if (_stricmp("none", chcFile)){
|
|
||||||
if( (pChcFile = fopen(chcFile,"rb")) == NULL ) {
|
|
||||||
printf( "Error: Did not find channel file!\n" );
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/******************************************************************/
|
|
||||||
if (!_stricmp("isac", codec)){ /* ISAC */
|
|
||||||
if ((frameLen!=480)&&(frameLen!=960)) {
|
|
||||||
printf("Error: ISAC only supports 480 and 960 samples per frame (not %d)\n", frameLen);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
if( (pOutFile = fopen(outFile,"wb")) == NULL ) {
|
|
||||||
printf( "Could not open output file!\n" );
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
ok=WebRtcIsacfix_Create(&ISACfix_inst);
|
|
||||||
if (ok!=0) {
|
|
||||||
printf("Couldn't allocate memory for iSAC fix instance\n");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
BN_data.arrival_time = 0;
|
|
||||||
BN_data.sample_count = 0;
|
|
||||||
BN_data.rtp_number = 0;
|
|
||||||
|
|
||||||
WebRtcIsacfix_EncoderInit(ISACfix_inst,1);
|
|
||||||
WebRtcIsacfix_DecoderInit(ISACfix_inst);
|
|
||||||
err = WebRtcIsacfix_Control(ISACfix_inst, bitrt, (frameLen>>4));
|
|
||||||
if (err < 0) {
|
|
||||||
/* exit if returned with error */
|
|
||||||
errtype=WebRtcIsacfix_GetErrorCode(ISACfix_inst);
|
|
||||||
printf("\n\n Error in initialization: %d.\n\n", errtype);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
/* loop over frame */
|
|
||||||
while (fread(sigIn,sizeof(int16_t),frameLen,pInFile) == frameLen) {
|
|
||||||
|
|
||||||
noOfCalls=0;
|
|
||||||
cdlen=0;
|
|
||||||
while (cdlen<=0) {
|
|
||||||
cdlen=WebRtcIsacfix_Encode(ISACfix_inst,&sigIn[noOfCalls*160],(int16_t*)bitStream);
|
|
||||||
if(cdlen==-1){
|
|
||||||
errtype=WebRtcIsacfix_GetErrorCode(ISACfix_inst);
|
|
||||||
printf("\n\nError in encoder: %d.\n\n", errtype);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
noOfCalls++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(_stricmp("none", chcFile)){
|
|
||||||
if (fread(&chc,sizeof(int16_t),1,pChcFile)!=1) /* packet may be lost */
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
chc = 1; /* packets never lost */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* simulate packet handling through NetEq and the modem */
|
|
||||||
get_arrival_time(frameLen, cdlen, bitrt, &BN_data);
|
|
||||||
|
|
||||||
if (chc){ /* decode */
|
|
||||||
|
|
||||||
err = WebRtcIsacfix_UpdateBwEstimate1(ISACfix_inst,
|
|
||||||
bitStream,
|
|
||||||
cdlen,
|
|
||||||
BN_data.rtp_number,
|
|
||||||
BN_data.arrival_time);
|
|
||||||
|
|
||||||
if (err < 0) {
|
|
||||||
/* exit if returned with error */
|
|
||||||
errtype=WebRtcIsacfix_GetErrorCode(ISACfix_inst);
|
|
||||||
printf("\n\nError in decoder: %d.\n\n", errtype);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
size = WebRtcIsacfix_Decode(ISACfix_inst, bitStream, cdlen, sigOut, &spType);
|
|
||||||
if(size<=0){
|
|
||||||
/* exit if returned with error */
|
|
||||||
errtype=WebRtcIsacfix_GetErrorCode(ISACfix_inst);
|
|
||||||
printf("\n\nError in decoder: %d.\n\n", errtype);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
} else { /* PLC */
|
|
||||||
if (frameLen == 480){
|
|
||||||
noOfLostFrames = 1;
|
|
||||||
} else{
|
|
||||||
noOfLostFrames = 2;
|
|
||||||
}
|
|
||||||
size = WebRtcIsacfix_DecodePlc(ISACfix_inst, sigOut, noOfLostFrames );
|
|
||||||
if(size<=0){
|
|
||||||
errtype=WebRtcIsacfix_GetErrorCode(ISACfix_inst);
|
|
||||||
printf("\n\nError in decoder: %d.\n\n", errtype);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write decoded speech to file */
|
|
||||||
fwrite(sigOut,sizeof(short),size,pOutFile);
|
|
||||||
|
|
||||||
totalbits += 8 * cdlen;
|
|
||||||
totalsmpls += size;
|
|
||||||
|
|
||||||
}
|
|
||||||
/******************************************************************/
|
|
||||||
}
|
|
||||||
|
|
||||||
// printf("\n\ntotal bits = %d bits", totalbits);
|
|
||||||
printf("\nmeasured average bitrate = %0.3f kbits/s", (double)totalbits * 16 / totalsmpls);
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
|
|
||||||
fclose(pInFile);
|
|
||||||
fclose(pOutFile);
|
|
||||||
if (_stricmp("none", chcFile)){
|
|
||||||
fclose(pChcFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_stricmp("isac", codec)){
|
|
||||||
WebRtcIsacfix_Free(ISACfix_inst);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,276 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_TEST_FUNCTIONTEST_FUNCTIONTEST_H_
|
|
||||||
#define WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_TEST_FUNCTIONTEST_FUNCTIONTEST_H_
|
|
||||||
|
|
||||||
#include "webrtc/modules/audio_conference_mixer/interface/audio_conference_mixer.h"
|
|
||||||
#include "webrtc/modules/audio_conference_mixer/interface/audio_conference_mixer_defines.h"
|
|
||||||
#include "webrtc/modules/audio_conference_mixer/source/level_indicator.h"
|
|
||||||
#include "webrtc/modules/interface/module_common_types.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/list_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/map_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
|
||||||
|
|
||||||
namespace webrtc {
|
|
||||||
class EventWrapper;
|
|
||||||
class ThreadWrapper;
|
|
||||||
class Trace;
|
|
||||||
}
|
|
||||||
struct WebRtcVadInst;
|
|
||||||
|
|
||||||
class FileWriter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FileWriter();
|
|
||||||
~FileWriter();
|
|
||||||
|
|
||||||
bool SetFileName(
|
|
||||||
const char* fileName);
|
|
||||||
|
|
||||||
bool WriteToFile(
|
|
||||||
const AudioFrame& audioFrame);
|
|
||||||
private:
|
|
||||||
FILE* _file;
|
|
||||||
};
|
|
||||||
|
|
||||||
class FileReader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum {kProcessPeriodicityInMs = 10};
|
|
||||||
enum Frequency
|
|
||||||
{
|
|
||||||
kNbInHz = 8000,
|
|
||||||
kWbInHz = 16000,
|
|
||||||
kDefaultFrequency = kWbInHz
|
|
||||||
};
|
|
||||||
|
|
||||||
FileReader();
|
|
||||||
~FileReader();
|
|
||||||
|
|
||||||
bool SetFileName(
|
|
||||||
const char* fileName);
|
|
||||||
|
|
||||||
bool ReadFromFile(
|
|
||||||
AudioFrame& audioFrame);
|
|
||||||
|
|
||||||
bool FastForwardFile(
|
|
||||||
const int32_t samples);
|
|
||||||
|
|
||||||
bool EnableAutomaticVAD(
|
|
||||||
bool enable,
|
|
||||||
int mode);
|
|
||||||
|
|
||||||
bool SetVAD(
|
|
||||||
bool vad);
|
|
||||||
private:
|
|
||||||
bool GetVAD(
|
|
||||||
int16_t* buffer,
|
|
||||||
uint8_t bufferLengthInSamples,
|
|
||||||
bool& vad);
|
|
||||||
|
|
||||||
Frequency _frequency;
|
|
||||||
uint8_t _sampleSize;
|
|
||||||
|
|
||||||
uint32_t _timeStamp;
|
|
||||||
|
|
||||||
FILE* _file;
|
|
||||||
|
|
||||||
WebRtcVadInst* _vadInstr;
|
|
||||||
bool _automaticVad;
|
|
||||||
bool _vad;
|
|
||||||
|
|
||||||
LevelIndicator _volumeCalculator;
|
|
||||||
};
|
|
||||||
|
|
||||||
class MixerParticipant : public MixerParticipant
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum ParticipantType
|
|
||||||
{
|
|
||||||
VIP = 0,
|
|
||||||
REGULAR = 1,
|
|
||||||
MIXED_ANONYMOUS = 2,
|
|
||||||
RANDOM = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
static MixerParticipant* CreateParticipant(
|
|
||||||
const uint32_t id,
|
|
||||||
ParticipantType participantType,
|
|
||||||
const int32_t startPosition,
|
|
||||||
char* outputPath);
|
|
||||||
~MixerParticipant();
|
|
||||||
|
|
||||||
int32_t GetAudioFrame(
|
|
||||||
const int32_t id,
|
|
||||||
AudioFrame& audioFrame);
|
|
||||||
|
|
||||||
int32_t MixedAudioFrame(
|
|
||||||
const AudioFrame& audioFrame);
|
|
||||||
|
|
||||||
int32_t GetParticipantType(
|
|
||||||
ParticipantType& participantType);
|
|
||||||
private:
|
|
||||||
MixerParticipant(
|
|
||||||
const uint32_t id,
|
|
||||||
ParticipantType participantType);
|
|
||||||
|
|
||||||
bool InitializeFileReader(
|
|
||||||
const int32_t startPositionInSamples);
|
|
||||||
|
|
||||||
bool InitializeFileWriter(
|
|
||||||
char* outputPath);
|
|
||||||
|
|
||||||
uint32_t _id;
|
|
||||||
ParticipantType _participantType;
|
|
||||||
|
|
||||||
FileReader _fileReader;
|
|
||||||
FileWriter _fileWriter;
|
|
||||||
};
|
|
||||||
|
|
||||||
class StatusReceiver : public AudioMixerStatusReceiver
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
StatusReceiver(
|
|
||||||
const int32_t id);
|
|
||||||
~StatusReceiver();
|
|
||||||
|
|
||||||
void MixedParticipants(
|
|
||||||
const int32_t id,
|
|
||||||
const ParticipantStatistics* participantStatistics,
|
|
||||||
const uint32_t size);
|
|
||||||
|
|
||||||
void VADPositiveParticipants(
|
|
||||||
const int32_t id,
|
|
||||||
const ParticipantStatistics* participantStatistics,
|
|
||||||
const uint32_t size);
|
|
||||||
|
|
||||||
void MixedAudioLevel(
|
|
||||||
const int32_t id,
|
|
||||||
const uint32_t level);
|
|
||||||
|
|
||||||
void PrintMixedParticipants();
|
|
||||||
|
|
||||||
void PrintVadPositiveParticipants();
|
|
||||||
|
|
||||||
void PrintMixedAudioLevel();
|
|
||||||
private:
|
|
||||||
int32_t _id;
|
|
||||||
|
|
||||||
ParticipantStatistics* _mixedParticipants;
|
|
||||||
uint32_t _mixedParticipantsAmount;
|
|
||||||
uint32_t _mixedParticipantsSize;
|
|
||||||
|
|
||||||
ParticipantStatistics* _vadPositiveParticipants;
|
|
||||||
uint32_t _vadPositiveParticipantsAmount;
|
|
||||||
uint32_t _vadPositiveParticipantsSize;
|
|
||||||
|
|
||||||
uint32_t _mixedAudioLevel;
|
|
||||||
};
|
|
||||||
|
|
||||||
class MixerWrapper : public AudioMixerOutputReceiver
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static MixerWrapper* CreateMixerWrapper();
|
|
||||||
~MixerWrapper();
|
|
||||||
|
|
||||||
bool SetMixFrequency(
|
|
||||||
const AudioConferenceMixer::Frequency frequency);
|
|
||||||
|
|
||||||
bool CreateParticipant(
|
|
||||||
MixerParticipant::ParticipantType participantType);
|
|
||||||
|
|
||||||
bool CreateParticipant(
|
|
||||||
MixerParticipant::ParticipantType participantType,
|
|
||||||
const int32_t startPosition);
|
|
||||||
|
|
||||||
bool DeleteParticipant(
|
|
||||||
const uint32_t id);
|
|
||||||
|
|
||||||
bool StartMixing(
|
|
||||||
const uint32_t mixedParticipants = AudioConferenceMixer::kDefaultAmountOfMixedParticipants);
|
|
||||||
|
|
||||||
bool StopMixing();
|
|
||||||
|
|
||||||
void NewMixedAudio(
|
|
||||||
const int32_t id,
|
|
||||||
const AudioFrame& generalAudioFrame,
|
|
||||||
const AudioFrame** uniqueAudioFrames,
|
|
||||||
const uint32_t size);
|
|
||||||
|
|
||||||
bool GetParticipantList(
|
|
||||||
ListWrapper& participants);
|
|
||||||
|
|
||||||
void PrintStatus();
|
|
||||||
private:
|
|
||||||
MixerWrapper();
|
|
||||||
|
|
||||||
bool InitializeFileWriter();
|
|
||||||
|
|
||||||
static bool Process(
|
|
||||||
void* instance);
|
|
||||||
|
|
||||||
bool Process();
|
|
||||||
|
|
||||||
bool StartMixingParticipant(
|
|
||||||
const uint32_t id);
|
|
||||||
|
|
||||||
bool StopMixingParticipant(
|
|
||||||
const uint32_t id);
|
|
||||||
|
|
||||||
bool GetFreeItemIds(
|
|
||||||
uint32_t& itemId);
|
|
||||||
|
|
||||||
void AddFreeItemIds(
|
|
||||||
const uint32_t itemId);
|
|
||||||
|
|
||||||
void ClearAllItemIds();
|
|
||||||
|
|
||||||
webrtc::ThreadWrapper* _processThread;
|
|
||||||
unsigned int _threadId;
|
|
||||||
|
|
||||||
// Performance hooks
|
|
||||||
enum{WARNING_COUNTER = 100};
|
|
||||||
|
|
||||||
bool _firstProcessCall;
|
|
||||||
TickTime _previousTime; // Tick time of previous process
|
|
||||||
const int64_t _periodicityInTicks; // Periodicity
|
|
||||||
|
|
||||||
webrtc::EventWrapper* _synchronizationEvent;
|
|
||||||
|
|
||||||
ListWrapper _freeItemIds;
|
|
||||||
uint32_t _itemIdCounter;
|
|
||||||
|
|
||||||
MapWrapper _mixerParticipants;
|
|
||||||
|
|
||||||
static int32_t _mixerWrapperIdCounter;
|
|
||||||
int32_t _mixerWrappererId;
|
|
||||||
char _instanceOutputPath[128];
|
|
||||||
|
|
||||||
webrtc::Trace* _trace;
|
|
||||||
AudioConferenceMixer* _mixer;
|
|
||||||
|
|
||||||
StatusReceiver _statusReceiver;
|
|
||||||
|
|
||||||
FileWriter _generalAudioWriter;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool
|
|
||||||
LoopedFileRead(
|
|
||||||
int16_t* buffer,
|
|
||||||
uint32_t bufferSizeInSamples,
|
|
||||||
uint32_t samplesToRead,
|
|
||||||
FILE* file);
|
|
||||||
|
|
||||||
void
|
|
||||||
GenerateRandomPosition(
|
|
||||||
int32_t& startPosition);
|
|
||||||
|
|
||||||
#endif // WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_TEST_FUNCTIONTEST_FUNCTIONTEST_H_
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <android/log.h>
|
|
||||||
#include <string.h> // memset
|
|
||||||
|
|
||||||
#include "webrtc/modules/audio_device/test/android/audio_device_android_test/jni/org_webrtc_voiceengine_test_AudioDeviceAndroidTest.h"
|
|
||||||
|
|
||||||
#include "webrtc/modules/audio_device/main/interface/audio_device.h"
|
|
||||||
|
|
||||||
#define LOG_TAG "WebRTC ADM Native"
|
|
||||||
|
|
||||||
void api_test();
|
|
||||||
void func_test(int);
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
// Other
|
|
||||||
JavaVM* jvm;
|
|
||||||
} AdmData;
|
|
||||||
|
|
||||||
static AdmData admData;
|
|
||||||
|
|
||||||
jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/)
|
|
||||||
{
|
|
||||||
if (!vm)
|
|
||||||
{
|
|
||||||
__android_log_write(ANDROID_LOG_ERROR, LOG_TAG,
|
|
||||||
"JNI_OnLoad did not receive a valid VM pointer");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get JNI
|
|
||||||
JNIEnv* env;
|
|
||||||
if (JNI_OK != vm->GetEnv(reinterpret_cast<void**> (&env),
|
|
||||||
JNI_VERSION_1_4))
|
|
||||||
{
|
|
||||||
__android_log_write(ANDROID_LOG_ERROR, LOG_TAG,
|
|
||||||
"JNI_OnLoad could not get JNI env");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get class to register the native functions with
|
|
||||||
// jclass regClass =
|
|
||||||
// env->FindClass("org/webrtc/voiceengine/test/AudioDeviceAndroidTest");
|
|
||||||
// if (!regClass) {
|
|
||||||
// return -1; // Exception thrown
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Register native functions
|
|
||||||
// JNINativeMethod methods[1];
|
|
||||||
// methods[0].name = NULL;
|
|
||||||
// methods[0].signature = NULL;
|
|
||||||
// methods[0].fnPtr = NULL;
|
|
||||||
// if (JNI_OK != env->RegisterNatives(regClass, methods, 1))
|
|
||||||
// {
|
|
||||||
// return -1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Init VoiceEngine data
|
|
||||||
memset(&admData, 0, sizeof(admData));
|
|
||||||
|
|
||||||
// Store the JVM
|
|
||||||
admData.jvm = vm;
|
|
||||||
|
|
||||||
return JNI_VERSION_1_4;
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL
|
|
||||||
Java_org_webrtc_voiceengine_test_AudioDeviceAndroidTest_NativeInit(JNIEnv * env,
|
|
||||||
jclass)
|
|
||||||
{
|
|
||||||
// Look up and cache any interesting class, field and method IDs for
|
|
||||||
// any used java class here
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL
|
|
||||||
Java_org_webrtc_voiceengine_test_AudioDeviceAndroidTest_RunTest(JNIEnv *env,
|
|
||||||
jobject context,
|
|
||||||
jint test)
|
|
||||||
{
|
|
||||||
// Set instance independent Java objects
|
|
||||||
webrtc::AudioDeviceModule::SetAndroidObjects(admData.jvm, env, context);
|
|
||||||
|
|
||||||
// Start test
|
|
||||||
if (0 == test)
|
|
||||||
{
|
|
||||||
api_test();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
func_test(test);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear instance independent Java objects
|
|
||||||
webrtc::AudioDeviceModule::SetAndroidObjects(NULL, NULL, NULL);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
|
||||||
#include <jni.h>
|
|
||||||
/* Header for class org_webrtc_voiceengine_test_AudioDeviceAndroidTest */
|
|
||||||
|
|
||||||
#ifndef _Included_org_webrtc_voiceengine_test_AudioDeviceAndroidTest
|
|
||||||
#define _Included_org_webrtc_voiceengine_test_AudioDeviceAndroidTest
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Class: org_webrtc_voiceengine_test_AudioDeviceAndroidTest
|
|
||||||
* Method: NativeInit
|
|
||||||
* Signature: ()Z
|
|
||||||
*/
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_webrtc_voiceengine_test_AudioDeviceAndroidTest_NativeInit
|
|
||||||
(JNIEnv *, jclass);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: org_webrtc_voiceengine_test_AudioDeviceAndroidTest
|
|
||||||
* Method: RunTest
|
|
||||||
* Signature: (I)I
|
|
||||||
*/
|
|
||||||
JNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AudioDeviceAndroidTest_RunTest
|
|
||||||
(JNIEnv *, jobject, jint);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWEConvergenceTest.h"
|
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
|
||||||
|
|
||||||
|
|
||||||
BWEConvergenceTestUp::BWEConvergenceTestUp(std::string testName, int startRateKbps, int availBWkbps)
|
|
||||||
:
|
|
||||||
_availBWkbps(availBWkbps),
|
|
||||||
BWEOneWayTest(testName, startRateKbps)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BWEConvergenceTestUp::~BWEConvergenceTestUp()
|
|
||||||
{
|
|
||||||
if (_gen)
|
|
||||||
{
|
|
||||||
delete _gen;
|
|
||||||
_gen = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BWEConvergenceTestUp::Init(std::string ip, uint16_t port)
|
|
||||||
{
|
|
||||||
// create the load generator object
|
|
||||||
const int rtpSampleRate = 90000;
|
|
||||||
const int frameRate = 30;
|
|
||||||
const double spreadFactor = 0.2;
|
|
||||||
|
|
||||||
if (_master)
|
|
||||||
{
|
|
||||||
_gen = new CBRFixFRGenerator(_sendrec, _startRateKbps, rtpSampleRate, frameRate, spreadFactor);
|
|
||||||
if (!_gen)
|
|
||||||
{
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return BWEOneWayTest::Init(ip, port);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWEConvergenceTestUp::StoppingCriterionMaster()
|
|
||||||
{
|
|
||||||
return ((_sendrec->BitrateSent() / 1000.0) > (0.9 * _availBWkbps));
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWECONVERGENCETEST_H_
|
|
||||||
#define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWECONVERGENCETEST_H_
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWETestBase.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.h"
|
|
||||||
#include "webrtc/typedefs.h"
|
|
||||||
|
|
||||||
class BWEConvergenceTestUp : public BWEOneWayTest
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BWEConvergenceTestUp(std::string testName, int startRateKbps, int availBWkbps);
|
|
||||||
virtual ~BWEConvergenceTestUp();
|
|
||||||
|
|
||||||
virtual int Init(std::string ip, uint16_t port);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual bool StoppingCriterionMaster();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int _availBWkbps;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWECONVERGENCETEST_H_
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWEStabilityTest.h"
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
|
||||||
|
|
||||||
|
|
||||||
BWEStabilityTest::BWEStabilityTest(std::string testName, int rateKbps, int testDurationSeconds)
|
|
||||||
:
|
|
||||||
_testDurationSeconds(testDurationSeconds),
|
|
||||||
BWEOneWayTest(testName, rateKbps)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BWEStabilityTest::~BWEStabilityTest()
|
|
||||||
{
|
|
||||||
if (_gen)
|
|
||||||
{
|
|
||||||
delete _gen;
|
|
||||||
_gen = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BWEStabilityTest::Init(std::string ip, uint16_t port)
|
|
||||||
{
|
|
||||||
// create the load generator object
|
|
||||||
const int rtpSampleRate = 90000;
|
|
||||||
const int frameRate = 30;
|
|
||||||
const double spreadFactor = 0.2;
|
|
||||||
const double keyToDeltaRatio = 7;
|
|
||||||
const int keyFramePeriod = 300;
|
|
||||||
|
|
||||||
if (_master)
|
|
||||||
{
|
|
||||||
_gen = new CBRFixFRGenerator(_sendrec, _startRateKbps, rtpSampleRate, frameRate, spreadFactor);
|
|
||||||
//_gen = new PeriodicKeyFixFRGenerator(_sendrec, _startRateKbps, rtpSampleRate, frameRate,
|
|
||||||
// spreadFactor, keyToDeltaRatio, keyFramePeriod);
|
|
||||||
if (!_gen)
|
|
||||||
{
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return BWEOneWayTest::Init(ip, port);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BWEStabilityTest::Report(std::fstream &log)
|
|
||||||
{
|
|
||||||
// cannot report on a running test
|
|
||||||
if(_running) return;
|
|
||||||
|
|
||||||
BWETest::Report(log);
|
|
||||||
|
|
||||||
CriticalSectionScoped cs(_statCritSect);
|
|
||||||
|
|
||||||
log << "Bitrate statistics\n";
|
|
||||||
log << "\tAverage = " << _rateVecKbps.Mean() << " kbps\n";
|
|
||||||
log << "\tMin = " << _rateVecKbps.Min() << " kbps\n";
|
|
||||||
log << "\tMax = " << _rateVecKbps.Max() << " kbps\n";
|
|
||||||
log << "\tStd = " << _rateVecKbps.Std() << " kbps\n";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWEStabilityTest::StoppingCriterionMaster()
|
|
||||||
{
|
|
||||||
return (TickTime::MillisecondTimestamp() - _startTimeMs >= _testDurationSeconds * 1000);
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWESTABILITYTEST_H_
|
|
||||||
#define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWESTABILITYTEST_H_
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWETestBase.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.h"
|
|
||||||
#include "webrtc/typedefs.h"
|
|
||||||
|
|
||||||
class BWEStabilityTest : public BWEOneWayTest
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BWEStabilityTest(std::string testName, int rateKbps, int testDurationSeconds);
|
|
||||||
virtual ~BWEStabilityTest();
|
|
||||||
|
|
||||||
virtual int Init(std::string ip, uint16_t port);
|
|
||||||
virtual void Report(std::fstream &log);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual bool StoppingCriterionMaster();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int _testDurationSeconds;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWESTABILITYTEST_H_
|
|
||||||
@@ -1,453 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWETestBase.h"
|
|
||||||
|
|
||||||
#include <algorithm> // sort
|
|
||||||
#include <fstream>
|
|
||||||
#include <math.h>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
|
||||||
|
|
||||||
|
|
||||||
double StatVec::Mean()
|
|
||||||
{
|
|
||||||
double sum = 0;
|
|
||||||
|
|
||||||
// sanity
|
|
||||||
if (size() <= 0) return (0);
|
|
||||||
|
|
||||||
std::vector<double>::iterator it;
|
|
||||||
for (it = begin(); it < end(); ++it)
|
|
||||||
{
|
|
||||||
sum += (*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (sum / size());
|
|
||||||
}
|
|
||||||
|
|
||||||
double StatVec::Variance()
|
|
||||||
{
|
|
||||||
double sumSqaure = 0;
|
|
||||||
double sum = 0;
|
|
||||||
|
|
||||||
std::vector<double>::iterator it;
|
|
||||||
for (it = begin(); it < end(); ++it)
|
|
||||||
{
|
|
||||||
sum += (*it);
|
|
||||||
sumSqaure += (*it) * (*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Normalizes by N-1. This produces the best unbiased estimate of the
|
|
||||||
// variance if X is a sample from a normal distribution.
|
|
||||||
int M = static_cast<int> (size() - 1);
|
|
||||||
|
|
||||||
if (M > 0)
|
|
||||||
{
|
|
||||||
double var = (sumSqaure / M) - (sum / (M+1)) * (sum / M);
|
|
||||||
assert(var >= 0);
|
|
||||||
return (var);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double StatVec::Std()
|
|
||||||
{
|
|
||||||
return (sqrt(Variance()));
|
|
||||||
}
|
|
||||||
|
|
||||||
double StatVec::Max()
|
|
||||||
{
|
|
||||||
// sanity
|
|
||||||
if (size() <= 0) return (0);
|
|
||||||
|
|
||||||
std::vector<double>::iterator it = begin();
|
|
||||||
double maxVal = (*it);
|
|
||||||
++it;
|
|
||||||
|
|
||||||
for (; it < end(); ++it)
|
|
||||||
{
|
|
||||||
if ((*it) > maxVal) maxVal = (*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (maxVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
double StatVec::Min()
|
|
||||||
{
|
|
||||||
// sanity
|
|
||||||
if (size() <= 0) return (0);
|
|
||||||
|
|
||||||
std::vector<double>::iterator it = begin();
|
|
||||||
double minVal = (*it);
|
|
||||||
++it;
|
|
||||||
|
|
||||||
for (; it < end(); ++it)
|
|
||||||
{
|
|
||||||
if ((*it) < minVal) minVal = (*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (minVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
double StatVec::Median()
|
|
||||||
{
|
|
||||||
double median;
|
|
||||||
|
|
||||||
// sanity
|
|
||||||
if (size() <= 0) return (0);
|
|
||||||
|
|
||||||
// sort the vector
|
|
||||||
sort(begin(), end());
|
|
||||||
|
|
||||||
if ((size() % 2) == 0)
|
|
||||||
{
|
|
||||||
// even size; use average of two center elements
|
|
||||||
median = (at(size()/2 - 1) + at(size()/2)) / 2.0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// odd size; take center element
|
|
||||||
median = at(size()/2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (median);
|
|
||||||
}
|
|
||||||
|
|
||||||
double StatVec::Percentile(double p)
|
|
||||||
{
|
|
||||||
// sanity
|
|
||||||
if (size() <= 0) return (0);
|
|
||||||
|
|
||||||
// sort the vector
|
|
||||||
sort(begin(), end());
|
|
||||||
|
|
||||||
int rank = static_cast<int> (((size() - 1) * p) / 100 + 0.5); // between 1 and size()
|
|
||||||
rank -= 1; // between 0 and size()-1
|
|
||||||
|
|
||||||
assert(rank >= 0);
|
|
||||||
assert(rank < static_cast<int>(size()));
|
|
||||||
|
|
||||||
return (at(rank));
|
|
||||||
}
|
|
||||||
|
|
||||||
void StatVec::Export(std::fstream &file, bool colVec /*= false*/)
|
|
||||||
{
|
|
||||||
// sanity
|
|
||||||
if (size() <= 0) return;
|
|
||||||
|
|
||||||
std::string separator;
|
|
||||||
if (colVec) separator = "\n";
|
|
||||||
else separator = ", ";
|
|
||||||
|
|
||||||
std::vector<double>::iterator it = begin();
|
|
||||||
file << (*it);
|
|
||||||
++it;
|
|
||||||
|
|
||||||
for (; it < end(); ++it)
|
|
||||||
{
|
|
||||||
file << separator << (*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
file << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWETestProcThreadFunction(void *obj)
|
|
||||||
{
|
|
||||||
if (obj == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
BWETest *theObj = static_cast<BWETest *>(obj);
|
|
||||||
|
|
||||||
theObj->ProcLoop();
|
|
||||||
|
|
||||||
theObj->Stop();
|
|
||||||
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BWETest::BWETest(std::string testName, int startRateKbps):
|
|
||||||
_testName(testName),
|
|
||||||
_startRateKbps(startRateKbps),
|
|
||||||
_master(false),
|
|
||||||
_sendrec(NULL),
|
|
||||||
_gen(NULL),
|
|
||||||
_initialized(false),
|
|
||||||
_started(false),
|
|
||||||
_running(false),
|
|
||||||
_eventPtr(NULL),
|
|
||||||
_procThread(NULL),
|
|
||||||
_startTimeMs(-1),
|
|
||||||
_stopTimeMs(-1),
|
|
||||||
_statCritSect(CriticalSectionWrapper::CreateCriticalSection())
|
|
||||||
{
|
|
||||||
_sendrec = new TestSenderReceiver();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BWETest::~BWETest()
|
|
||||||
{
|
|
||||||
if (_running)
|
|
||||||
{
|
|
||||||
Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
_statCritSect->Enter();
|
|
||||||
delete &_statCritSect;
|
|
||||||
|
|
||||||
if (_sendrec)
|
|
||||||
{
|
|
||||||
delete _sendrec;
|
|
||||||
_sendrec = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWETest::SetMaster(bool isMaster /*= true*/)
|
|
||||||
{
|
|
||||||
if (!_initialized)
|
|
||||||
{
|
|
||||||
// Can only set status before initializing.
|
|
||||||
_master = isMaster;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (_master);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BWETest::Init(std::string ip, uint16_t port)
|
|
||||||
{
|
|
||||||
if (_initialized)
|
|
||||||
{
|
|
||||||
// cannot init twice
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_sendrec)
|
|
||||||
{
|
|
||||||
throw "SenderReceiver must be created";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_started)
|
|
||||||
{
|
|
||||||
// cannot init after start
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// initialize receiver port (for feedback)
|
|
||||||
_sendrec->InitReceiver(port);
|
|
||||||
|
|
||||||
// initialize sender
|
|
||||||
_sendrec->SetLoadGenerator(_gen);
|
|
||||||
_sendrec->InitSender(_startRateKbps, ip.c_str(), port);
|
|
||||||
//_gen->Start();
|
|
||||||
|
|
||||||
_sendrec->SetCallback(this);
|
|
||||||
|
|
||||||
_initialized = true;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWETest::Start()
|
|
||||||
{
|
|
||||||
if (!_initialized)
|
|
||||||
{
|
|
||||||
// must init first
|
|
||||||
return (false);
|
|
||||||
}
|
|
||||||
if (_started)
|
|
||||||
{
|
|
||||||
// already started, do nothing
|
|
||||||
return (true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_sendrec->Start() != 0)
|
|
||||||
{
|
|
||||||
// failed
|
|
||||||
return (false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_gen)
|
|
||||||
{
|
|
||||||
if (_gen->Start() != 0)
|
|
||||||
{
|
|
||||||
// failed
|
|
||||||
return (false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_eventPtr = EventWrapper::Create();
|
|
||||||
|
|
||||||
_startTimeMs = TickTime::MillisecondTimestamp();
|
|
||||||
_started = true;
|
|
||||||
_running = true;
|
|
||||||
|
|
||||||
return (true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWETest::Stop()
|
|
||||||
{
|
|
||||||
if (_procThread)
|
|
||||||
{
|
|
||||||
_stopTimeMs = TickTime::MillisecondTimestamp();
|
|
||||||
_procThread->SetNotAlive();
|
|
||||||
_running = false;
|
|
||||||
_eventPtr->Set();
|
|
||||||
|
|
||||||
while (!_procThread->Stop())
|
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete _procThread;
|
|
||||||
_procThread = NULL;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_eventPtr)
|
|
||||||
{
|
|
||||||
delete _eventPtr;
|
|
||||||
_eventPtr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
_procThread = NULL;
|
|
||||||
|
|
||||||
if(_gen)
|
|
||||||
{
|
|
||||||
_gen->Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWETest::ProcLoop(void)
|
|
||||||
{
|
|
||||||
bool receiving = false;
|
|
||||||
|
|
||||||
// no critSect
|
|
||||||
while (_running)
|
|
||||||
{
|
|
||||||
|
|
||||||
// check stopping criterions
|
|
||||||
if (_master && StoppingCriterionMaster())
|
|
||||||
{
|
|
||||||
printf("StoppingCriterionMaster()\n");
|
|
||||||
_stopTimeMs = TickTime::MillisecondTimestamp();
|
|
||||||
_running = false;
|
|
||||||
}
|
|
||||||
else if (!_master && StoppingCriterionSlave())
|
|
||||||
{
|
|
||||||
printf("StoppingCriterionSlave()\n");
|
|
||||||
_running = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// wait
|
|
||||||
_eventPtr->Wait(1000); // 1000 ms
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BWETest::Report(std::fstream &log)
|
|
||||||
{
|
|
||||||
// cannot report on a running test
|
|
||||||
if(_running) return;
|
|
||||||
|
|
||||||
CriticalSectionScoped cs(_statCritSect);
|
|
||||||
|
|
||||||
log << "\n\n*** Test name = " << _testName << "\n";
|
|
||||||
log << "Execution time = " << static_cast<double>(_stopTimeMs - _startTimeMs) / 1000 << " s\n";
|
|
||||||
log << "\n";
|
|
||||||
log << "RTT statistics\n";
|
|
||||||
log << "\tMin = " << _rttVecMs.Min() << " ms\n";
|
|
||||||
log << "\tMax = " << _rttVecMs.Max() << " ms\n";
|
|
||||||
log << "\n";
|
|
||||||
log << "Loss statistics\n";
|
|
||||||
log << "\tAverage = " << _lossVec.Mean() << "%\n";
|
|
||||||
log << "\tMax = " << _lossVec.Max() << "%\n";
|
|
||||||
|
|
||||||
log << "\n" << "Rates" << "\n";
|
|
||||||
_rateVecKbps.Export(log);
|
|
||||||
|
|
||||||
log << "\n" << "RTT" << "\n";
|
|
||||||
_rttVecMs.Export(log);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// SenderReceiver callback
|
|
||||||
void BWETest::OnOnNetworkChanged(const uint32_t bitrateTargetBps,
|
|
||||||
const uint8_t fractionLost,
|
|
||||||
const uint16_t roundTripTimeMs,
|
|
||||||
const uint32_t jitterMS,
|
|
||||||
const uint16_t bwEstimateKbitMin,
|
|
||||||
const uint16_t bwEstimateKbitMax)
|
|
||||||
{
|
|
||||||
CriticalSectionScoped cs(_statCritSect);
|
|
||||||
|
|
||||||
// bitrate statistics
|
|
||||||
int32_t newBitrateKbps = bitrateTargetBps/1000;
|
|
||||||
|
|
||||||
_rateVecKbps.push_back(newBitrateKbps);
|
|
||||||
_rttVecMs.push_back(roundTripTimeMs);
|
|
||||||
_lossVec.push_back(static_cast<double>(fractionLost) / 255.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BWEOneWayTest::Init(std::string ip, uint16_t port)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!_master)
|
|
||||||
{
|
|
||||||
// Use timeout stopping criterion by default for receiver
|
|
||||||
UseRecvTimeout();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (BWETest::Init(ip, port));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWEOneWayTest::Start()
|
|
||||||
{
|
|
||||||
bool ret = BWETest::Start();
|
|
||||||
|
|
||||||
if (!_master)
|
|
||||||
{
|
|
||||||
// send one dummy RTP packet to enable RTT measurements
|
|
||||||
const uint8_t dummy = 0;
|
|
||||||
//_gen->sendPayload(TickTime::MillisecondTimestamp(), &dummy, 0);
|
|
||||||
_sendrec->SendOutgoingData(
|
|
||||||
static_cast<uint32_t>(TickTime::MillisecondTimestamp()*90),
|
|
||||||
&dummy, 1, webrtc::kVideoFrameDelta);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETESTBASE_H_
|
|
||||||
#define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETESTBASE_H_
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "webrtc/typedefs.h"
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.h"
|
|
||||||
|
|
||||||
|
|
||||||
class StatVec : public std::vector<double>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
double Mean();
|
|
||||||
double Variance();
|
|
||||||
double Std();
|
|
||||||
double Max();
|
|
||||||
double Min();
|
|
||||||
double Median();
|
|
||||||
double Percentile(double p); // 0 <= p <= 100%
|
|
||||||
void Export(std::fstream &file, bool colVec = false);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class BWETest : public SendRecCB
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BWETest(std::string testName, int startRateKbps);
|
|
||||||
virtual ~BWETest();
|
|
||||||
|
|
||||||
bool SetMaster(bool isMaster = true);
|
|
||||||
void UseRecvTimeout() { _sendrec->SetPacketTimeout(1000); };
|
|
||||||
virtual int Init(std::string ip, uint16_t port);
|
|
||||||
virtual bool Start();
|
|
||||||
virtual bool Stop();
|
|
||||||
bool ProcLoop(void);
|
|
||||||
virtual void Report(std::fstream &log);
|
|
||||||
std::string TestName() { return (_testName); };
|
|
||||||
|
|
||||||
// SenderReceiver callback
|
|
||||||
virtual void OnOnNetworkChanged(const uint32_t bitrateTargetBps,
|
|
||||||
const uint8_t fractionLost,
|
|
||||||
const uint16_t roundTripTimeMs,
|
|
||||||
const uint32_t jitterMS,
|
|
||||||
const uint16_t bwEstimateKbitMin,
|
|
||||||
const uint16_t bwEstimateKbitMax);
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual bool StoppingCriterionMaster() = 0;
|
|
||||||
virtual bool StoppingCriterionSlave() { return (_sendrec->timeOutTriggered()); };
|
|
||||||
|
|
||||||
TestSenderReceiver * _sendrec;
|
|
||||||
TestLoadGenerator * _gen;
|
|
||||||
|
|
||||||
std::string _testName;
|
|
||||||
int _startRateKbps;
|
|
||||||
bool _master;
|
|
||||||
bool _initialized;
|
|
||||||
bool _started;
|
|
||||||
bool _running;
|
|
||||||
EventWrapper *_eventPtr;
|
|
||||||
ThreadWrapper* _procThread;
|
|
||||||
int64_t _startTimeMs;
|
|
||||||
int64_t _stopTimeMs;
|
|
||||||
|
|
||||||
// Statistics, protected by separate CritSect
|
|
||||||
CriticalSectionWrapper* _statCritSect;
|
|
||||||
StatVec _rateVecKbps;
|
|
||||||
StatVec _rttVecMs;
|
|
||||||
StatVec _lossVec;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class BWEOneWayTest : public BWETest
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BWEOneWayTest(std::string testName, int startRateKbps) :
|
|
||||||
BWETest(testName, startRateKbps) {};
|
|
||||||
|
|
||||||
virtual int Init(std::string ip, uint16_t port);
|
|
||||||
virtual bool Start();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual bool StoppingCriterionSlave() {return ( _sendrec->timeOutTriggered()); };
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETESTBASE_H_
|
|
||||||
@@ -1,269 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// BWETester.cpp : Defines the entry point for the console application.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWEConvergenceTest.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWEStabilityTest.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWETwoWayLimitFinding.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/MatlabPlot.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
|
||||||
|
|
||||||
#ifdef MATLAB
|
|
||||||
MatlabEngine eng;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class testContainer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
testContainer(BWETest *test, bool waitForKeyStroke, int delayStartSec,
|
|
||||||
std::string instruction) :
|
|
||||||
_test(test),
|
|
||||||
_waitMaster(waitForKeyStroke),
|
|
||||||
_waitSlave(waitForKeyStroke),
|
|
||||||
_delayMaster(delayStartSec),
|
|
||||||
_delaySlave(delayStartSec),
|
|
||||||
_instr(instruction) {};
|
|
||||||
|
|
||||||
testContainer(BWETest *test,
|
|
||||||
bool waitForKeyStrokeMaster,
|
|
||||||
bool waitForKeyStrokeSlave,
|
|
||||||
int delayStartSecMaster,
|
|
||||||
int delayStartSecSlave,
|
|
||||||
std::string instruction) :
|
|
||||||
_test(test),
|
|
||||||
_waitMaster(waitForKeyStrokeMaster),
|
|
||||||
_waitSlave(waitForKeyStrokeSlave),
|
|
||||||
_delayMaster(delayStartSecMaster),
|
|
||||||
_delaySlave(delayStartSecSlave),
|
|
||||||
_instr(instruction) {};
|
|
||||||
|
|
||||||
~testContainer() { if(_test) delete _test; _test = NULL; };
|
|
||||||
|
|
||||||
BWETest *_test;
|
|
||||||
bool _waitMaster;
|
|
||||||
bool _waitSlave;
|
|
||||||
int _delayMaster;
|
|
||||||
int _delaySlave;
|
|
||||||
std::string _instr;
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is were the test cases are created.
|
|
||||||
// Syntax:
|
|
||||||
// tests->push_back(new testContainer(
|
|
||||||
// new _BWETestConstructor_, // constructor for the test case
|
|
||||||
// _wait_, // wait for user key press before start
|
|
||||||
// _delay_, // delay test start (after a key press if enabled)
|
|
||||||
// "Intruction to user.")); // message to show in console before starting
|
|
||||||
//
|
|
||||||
// Or:
|
|
||||||
// tests->push_back(new testContainer(
|
|
||||||
// new _BWETestConstructor_, // constructor for the test case
|
|
||||||
// _waitMaster_, // master will wait for user key press before start
|
|
||||||
// _waitSlave_, // slave will wait for user key press before start
|
|
||||||
// _delayMaster_, // delay master test start (after a key press if enabled)
|
|
||||||
// _delaySlave_, // delay slave test start (after a key press if enabled)
|
|
||||||
// "Intruction to user.")); // message to show in console before starting
|
|
||||||
//
|
|
||||||
// Valid test cases are:
|
|
||||||
// BWEConvergenceTestUp
|
|
||||||
// BWEStabilityTest
|
|
||||||
// BWETwoWayLimitFinding
|
|
||||||
|
|
||||||
|
|
||||||
void PopulateTests(std::vector<testContainer *>* tests, bool isMaster)
|
|
||||||
{
|
|
||||||
tests->push_back(new testContainer(
|
|
||||||
new BWEStabilityTest("Stability", 400, 5*60),
|
|
||||||
true, true,
|
|
||||||
0, 0,
|
|
||||||
"Set bandwidth limit to 512 kbps"));
|
|
||||||
|
|
||||||
tests->push_back(new testContainer(
|
|
||||||
new BWEStabilityTest("Stability", 4000, 5*60),
|
|
||||||
true, true,
|
|
||||||
0, 0,
|
|
||||||
"Set bandwidth limit to 5120 kbps"));
|
|
||||||
|
|
||||||
tests->push_back(new testContainer(
|
|
||||||
new BWEStabilityTest("Stability", 400, 5*60),
|
|
||||||
true, true,
|
|
||||||
0, 0,
|
|
||||||
"Set bandwidth limit to 512 kbps and a normal distributed delay\
|
|
||||||
with mean 100 ms and std dev 15 ms"));
|
|
||||||
|
|
||||||
tests->push_back(new testContainer(
|
|
||||||
new BWEConvergenceTestUp("Convergence 256->512", 256, 512),
|
|
||||||
true,
|
|
||||||
0,
|
|
||||||
"Set bandwith limit to 512 kbps"));
|
|
||||||
|
|
||||||
tests->push_back(new testContainer(
|
|
||||||
new BWEConvergenceTestUp("Convergence 1024->5120", 1024, 5120),
|
|
||||||
true,
|
|
||||||
0,
|
|
||||||
"Set bandwith limit to 5120 kbps"));
|
|
||||||
|
|
||||||
tests->push_back(new testContainer(
|
|
||||||
new BWETwoWayLimitFinding("Asymmetric limit finding {1024, 2048} kbps",
|
|
||||||
500, 1024,
|
|
||||||
500, 2048,
|
|
||||||
isMaster),
|
|
||||||
true,
|
|
||||||
0,
|
|
||||||
"Set bandwith limit to {1024, 2048} kbps asymmetric"));
|
|
||||||
|
|
||||||
tests->push_back(new testContainer(
|
|
||||||
new BWETwoWayLimitFinding("Symmetric limit finding {1024, 1024} kbps",
|
|
||||||
500, 1024,
|
|
||||||
500, 1024,
|
|
||||||
isMaster),
|
|
||||||
true,
|
|
||||||
0,
|
|
||||||
"Set bandwith limit to 1024 kbps symmetric"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
|
|
||||||
bool isMaster = false;
|
|
||||||
uint16_t port;
|
|
||||||
std::string ip;
|
|
||||||
std::fstream log;
|
|
||||||
log.open("TestLog.txt", std::fstream::out | std::fstream::app);
|
|
||||||
|
|
||||||
log << "\n\nBWE TESTER\n";
|
|
||||||
|
|
||||||
time_t t = time(0); // get time now
|
|
||||||
struct tm * now = localtime( & t );
|
|
||||||
log << (now->tm_year + 1900) << '-'
|
|
||||||
<< (now->tm_mon + 1) << '-'
|
|
||||||
<< now->tm_mday << " "
|
|
||||||
<< now->tm_hour << ":" << now->tm_min
|
|
||||||
<< "\n";
|
|
||||||
|
|
||||||
if (argc == 4)
|
|
||||||
{
|
|
||||||
// read IP
|
|
||||||
ip = argv[1];
|
|
||||||
|
|
||||||
// read port
|
|
||||||
port = atoi(argv[2]);
|
|
||||||
|
|
||||||
// read master/slave
|
|
||||||
isMaster = (atoi(argv[3]) != 0);
|
|
||||||
|
|
||||||
std::cout << "Destination: " << ip << "\n";
|
|
||||||
log << "Destination: " << ip << "\n";
|
|
||||||
std::cout << "Port: " << port << "\n";
|
|
||||||
log << "Port: " << port << "\n";
|
|
||||||
if (isMaster)
|
|
||||||
{
|
|
||||||
std::cout << "Master\n";
|
|
||||||
log << "Master\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cout << "Slave\n";
|
|
||||||
log << "Slave\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("Usage\nBWETester dstIP port master\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<testContainer*> tests;
|
|
||||||
PopulateTests(&tests, isMaster);
|
|
||||||
|
|
||||||
int testIndex = 0;
|
|
||||||
EventWrapper* event = EventWrapper::Create();
|
|
||||||
std::vector<testContainer*>::iterator it;
|
|
||||||
for (it=tests.begin() ; it < tests.end(); it++)
|
|
||||||
{
|
|
||||||
++testIndex;
|
|
||||||
|
|
||||||
BWETest *theTest = (*it)->_test;
|
|
||||||
|
|
||||||
if (theTest)
|
|
||||||
{
|
|
||||||
std::cout << "\nTest " << testIndex << ": " << theTest->TestName() << "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Print instructions
|
|
||||||
std::cout << "--> " << (*it)->_instr << std::endl;
|
|
||||||
|
|
||||||
if ((isMaster && (*it)->_waitMaster)
|
|
||||||
|| (!isMaster && (*it)->_waitSlave))
|
|
||||||
{
|
|
||||||
// Wait for a key press
|
|
||||||
std::cout << "Press enter to start test\n";
|
|
||||||
getc(stdin);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isMaster)
|
|
||||||
{
|
|
||||||
if ((*it)->_delayMaster > 0)
|
|
||||||
{
|
|
||||||
// Wait
|
|
||||||
std::cout << "Test starting in "
|
|
||||||
<< (*it)->_delayMaster
|
|
||||||
<< " seconds" << std::endl;
|
|
||||||
event->Wait((*it)->_delayMaster * 1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((*it)->_delaySlave > 0)
|
|
||||||
{
|
|
||||||
// Wait
|
|
||||||
std::cout << "Test starting in "
|
|
||||||
<< (*it)->_delaySlave
|
|
||||||
<< " seconds" << std::endl;
|
|
||||||
event->Wait((*it)->_delaySlave * 1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start execution
|
|
||||||
if (theTest)
|
|
||||||
{
|
|
||||||
theTest->SetMaster(isMaster);
|
|
||||||
if (theTest->Init(ip, port) != 0)
|
|
||||||
{
|
|
||||||
throw "Error initializing sender";
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
theTest->Start();
|
|
||||||
theTest->ProcLoop();
|
|
||||||
theTest->Stop();
|
|
||||||
theTest->Report(log);
|
|
||||||
log << std::flush;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete (*it); // deletes the test too
|
|
||||||
}
|
|
||||||
delete event;
|
|
||||||
event = NULL;
|
|
||||||
|
|
||||||
log.close();
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWETwoWayLimitFinding.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.h"
|
|
||||||
|
|
||||||
|
|
||||||
BWETwoWayLimitFinding::BWETwoWayLimitFinding(
|
|
||||||
std::string testName,
|
|
||||||
int masterStartRateKbps, int masterAvailBWkbps,
|
|
||||||
int slaveStartRateKbps, int slaveAvailBWkbps,
|
|
||||||
bool isMaster /*= false*/)
|
|
||||||
:
|
|
||||||
BWETest(testName, (isMaster ? masterStartRateKbps : slaveStartRateKbps)),
|
|
||||||
_availBWkbps(isMaster ? masterAvailBWkbps : slaveAvailBWkbps),
|
|
||||||
_incomingAvailBWkbps(isMaster ? slaveAvailBWkbps : masterAvailBWkbps),
|
|
||||||
_forwLimitReached(false),
|
|
||||||
_revLimitReached(false)
|
|
||||||
{
|
|
||||||
_master = isMaster;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BWETwoWayLimitFinding::~BWETwoWayLimitFinding()
|
|
||||||
{
|
|
||||||
if (_gen)
|
|
||||||
{
|
|
||||||
delete _gen;
|
|
||||||
_gen = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int BWETwoWayLimitFinding::Init(std::string ip, uint16_t port)
|
|
||||||
{
|
|
||||||
// create the load generator object
|
|
||||||
const int rtpSampleRate = 90000;
|
|
||||||
const int frameRate = 30;
|
|
||||||
const double spreadFactor = 0.2;
|
|
||||||
|
|
||||||
_gen = new CBRFixFRGenerator(_sendrec, _startRateKbps, rtpSampleRate, frameRate, spreadFactor);
|
|
||||||
if (!_gen)
|
|
||||||
{
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_master) UseRecvTimeout(); // slave shuts down when incoming stream dies
|
|
||||||
|
|
||||||
return BWETest::Init(ip, port);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool BWETwoWayLimitFinding::StoppingCriterionMaster()
|
|
||||||
{
|
|
||||||
if ((_sendrec->BitrateSent() / 1000.0) > (0.95 * _availBWkbps))
|
|
||||||
{
|
|
||||||
_forwLimitReached = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t revRateKbps = _sendrec->ReceiveBitrateKbps();
|
|
||||||
if (revRateKbps > (0.95 * _incomingAvailBWkbps))
|
|
||||||
{
|
|
||||||
_revLimitReached = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (_forwLimitReached && _revLimitReached);
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETWOWAYLIMITFINDING_H_
|
|
||||||
#define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETWOWAYLIMITFINDING_H_
|
|
||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/BWETestBase.h"
|
|
||||||
|
|
||||||
class BWETwoWayLimitFinding : public BWETest
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BWETwoWayLimitFinding(std::string testName,
|
|
||||||
int masterStartRateKbps, int masterAvailBWkbps,
|
|
||||||
int slaveStartRateKbps, int slaveAvailBWkbps,
|
|
||||||
bool isMaster = false);
|
|
||||||
|
|
||||||
virtual ~BWETwoWayLimitFinding();
|
|
||||||
|
|
||||||
virtual int Init(std::string ip, uint16_t port);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual bool StoppingCriterionMaster();
|
|
||||||
//virtual bool StoppingCriterionSlave();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int _availBWkbps;
|
|
||||||
int _incomingAvailBWkbps;
|
|
||||||
bool _forwLimitReached;
|
|
||||||
bool _revLimitReached;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_BWETWOWAYLIMITFINDING_H_
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,109 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include "JitterEstimateTest.h"
|
|
||||||
|
|
||||||
using namespace webrtc;
|
|
||||||
|
|
||||||
JitterEstimateTest::JitterEstimateTest(unsigned int frameRate) :
|
|
||||||
_frameRate(frameRate),
|
|
||||||
_capacity(2000),
|
|
||||||
_rate(500),
|
|
||||||
_jitter(5, 0),
|
|
||||||
_keyFrameRate(1.0),
|
|
||||||
_deltaFrameSize(10000, 1e6),
|
|
||||||
_counter(0),
|
|
||||||
_lossrate(0.0)
|
|
||||||
{
|
|
||||||
// Assign to random value between 0 and max of unsigned int
|
|
||||||
_seed = static_cast<unsigned>(time(0));
|
|
||||||
srand(_seed);
|
|
||||||
_prevTimestamp = static_cast<unsigned int>((std::rand() + 1.0)/(RAND_MAX + 1.0)*(pow((float) 2, (long) sizeof(unsigned int)*8)-1));
|
|
||||||
_prevWallClock = VCMTickTime::MillisecondTimestamp();
|
|
||||||
}
|
|
||||||
|
|
||||||
FrameSample
|
|
||||||
JitterEstimateTest::GenerateFrameSample()
|
|
||||||
{
|
|
||||||
double increment = 1.0/_frameRate;
|
|
||||||
unsigned int frameSize = static_cast<unsigned int>(_deltaFrameSize.RandValue());
|
|
||||||
bool keyFrame = false;
|
|
||||||
bool resent = false;
|
|
||||||
_prevTimestamp += static_cast<unsigned int>(90000*increment + 0.5);
|
|
||||||
double deltaFrameRate = _frameRate - _keyFrameRate;
|
|
||||||
double ratio = deltaFrameRate/static_cast<double>(_keyFrameRate);
|
|
||||||
if (ratio < 1.0)
|
|
||||||
{
|
|
||||||
ratio = 1.0/ratio;
|
|
||||||
if (_counter >= ratio)
|
|
||||||
_counter = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_counter++;
|
|
||||||
frameSize += static_cast<unsigned int>(3*_deltaFrameSize.GetAverage());
|
|
||||||
keyFrame = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (_counter >= ratio)
|
|
||||||
{
|
|
||||||
frameSize += static_cast<unsigned int>(3*_deltaFrameSize.GetAverage());
|
|
||||||
_counter = 0;
|
|
||||||
keyFrame = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_counter++;
|
|
||||||
}
|
|
||||||
int64_t jitter = static_cast<int64_t>(_jitter.RandValue() + 1.0/_capacity * frameSize + 0.5);
|
|
||||||
_prevWallClock += static_cast<int64_t>(1000*increment + 0.5);
|
|
||||||
double rndValue = RandUniform();
|
|
||||||
resent = (rndValue < _lossrate);
|
|
||||||
//printf("rndValue = %f\n", rndValue);
|
|
||||||
return FrameSample(_prevTimestamp, _prevWallClock + jitter, frameSize, keyFrame, resent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
JitterEstimateTest::SetCapacity(unsigned int c)
|
|
||||||
{
|
|
||||||
_capacity = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
JitterEstimateTest::SetRate(unsigned int r)
|
|
||||||
{
|
|
||||||
_rate = r;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
JitterEstimateTest::SetJitter(double m, double v)
|
|
||||||
{
|
|
||||||
_jitter.SetParams(m, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
JitterEstimateTest::SetFrameSizeStats(double m, double v)
|
|
||||||
{
|
|
||||||
_deltaFrameSize.SetParams(m, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
JitterEstimateTest::SetKeyFrameRate(int rate)
|
|
||||||
{
|
|
||||||
_keyFrameRate = rate;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
JitterEstimateTest::SetLossRate(double rate)
|
|
||||||
{
|
|
||||||
_lossrate = rate;
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ReleaseTest.h"
|
|
||||||
#include "ReceiverTests.h"
|
|
||||||
#include "TestMacros.h"
|
|
||||||
#include "MediaOptTest.h"
|
|
||||||
#include "CodecDataBaseTest.h"
|
|
||||||
#include "GenericCodecTest.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ReleaseTest()
|
|
||||||
{
|
|
||||||
printf("VCM RELEASE TESTS \n\n");
|
|
||||||
|
|
||||||
// Automatic tests
|
|
||||||
|
|
||||||
printf("Testing receive side timing...\n");
|
|
||||||
TEST(ReceiverTimingTests() == 0);
|
|
||||||
|
|
||||||
printf("Testing jitter buffer...\n");
|
|
||||||
TEST(JitterBufferTest() == 0);
|
|
||||||
|
|
||||||
printf("Testing Codec Data Base...\n");
|
|
||||||
TEST(CodecDBTest() == 0);
|
|
||||||
|
|
||||||
printf("Testing Media Optimization....\n");
|
|
||||||
TEST(VCMMediaOptTest(1) == 0);
|
|
||||||
|
|
||||||
// Tests requiring verification
|
|
||||||
|
|
||||||
printf("Testing Multi thread send-receive....\n");
|
|
||||||
TEST(MTRxTxTest() == 0);
|
|
||||||
printf("Verify by viewing output file MTRxTx_out.yuv \n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by a BSD-style license
|
|
||||||
* that can be found in the LICENSE file in the root of the source
|
|
||||||
* tree. An additional intellectual property rights grant can be found
|
|
||||||
* in the file PATENTS. All contributing project authors may
|
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ReleaseTest.h"
|
|
||||||
#include "ReceiverTests.h"
|
|
||||||
#include "TestMacros.h"
|
|
||||||
#include "MediaOptTest.h"
|
|
||||||
#include "CodecDataBaseTest.h"
|
|
||||||
#include "GenericCodecTest.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ReleaseTestPart2()
|
|
||||||
{
|
|
||||||
printf("Verify that TICK_TIME_DEBUG and EVENT_DEBUG are uncommented");
|
|
||||||
// Tests requiring verification
|
|
||||||
|
|
||||||
printf("Testing Generic Codecs...\n");
|
|
||||||
TEST(VCMGenericCodecTest() == 0);
|
|
||||||
printf("Verify by viewing output file GCTest_out.yuv \n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user