16b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org/* Copyright (c) 2008-2011 Xiph.Org Foundation, Mozilla Corporation 26b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org Written by Jean-Marc Valin and Timothy B. Terriberry */ 36b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org/* 46b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org Redistribution and use in source and binary forms, with or without 56b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org modification, are permitted provided that the following conditions 66b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org are met: 76b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 86b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org - Redistributions of source code must retain the above copyright 96b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org notice, this list of conditions and the following disclaimer. 106b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 116b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org - Redistributions in binary form must reproduce the above copyright 126b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org notice, this list of conditions and the following disclaimer in the 136b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org documentation and/or other materials provided with the distribution. 146b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 156b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 166b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 176b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 186b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 196b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 206b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 216b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 226b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 236b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 246b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 256b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 266b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org*/ 276b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef HAVE_CONFIG_H 29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "config.h" 30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdio.h> 33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdlib.h> 34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "laplace.h" 35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CELT_C 36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "stack_alloc.h" 37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "entenc.c" 39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "entdec.c" 40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "entcode.c" 41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "laplace.c" 42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DATA_SIZE 40000 44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint ec_laplace_get_start_freq(int decay) 46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 ft = 32768 - LAPLACE_MINP*(2*LAPLACE_NMIN+1); 48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int fs = (ft*(16384-decay))/(16384+decay); 49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return fs+LAPLACE_MINP; 50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint main(void) 53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int i; 55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int ret = 0; 56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_enc enc; 57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_dec dec; 58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char *ptr; 59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int val[10000], decay[10000]; 60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ALLOC_STACK; 61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ptr = (unsigned char *)malloc(DATA_SIZE); 62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_enc_init(&enc,ptr,DATA_SIZE); 63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org val[0] = 3; decay[0] = 6000; 65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org val[1] = 0; decay[1] = 5800; 66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org val[2] = -1; decay[2] = 5600; 67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for (i=3;i<10000;i++) 68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org val[i] = rand()%15-7; 70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org decay[i] = rand()%11000+5000; 71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for (i=0;i<10000;i++) 73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_laplace_encode(&enc, &val[i], 74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_laplace_get_start_freq(decay[i]), decay[i]); 75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_enc_done(&enc); 77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_dec_init(&dec,ec_get_buffer(&enc),ec_range_bytes(&enc)); 79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for (i=0;i<10000;i++) 81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int d = ec_laplace_decode(&dec, 83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ec_laplace_get_start_freq(decay[i]), decay[i]); 84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (d != val[i]) 85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf (stderr, "Got %d instead of %d\n", d, val[i]); 87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret = 1; 88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return ret; 92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 93