1e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org/* Copyright (c) 2011-2013 Xiph.Org Foundation 2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Written by Gregory Maxwell */ 3885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* 4885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Redistribution and use in source and binary forms, with or without 5885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org modification, are permitted provided that the following conditions 6885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org are met: 7885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 8885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions of source code must retain the above copyright 9885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer. 10885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 11885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions in binary form must reproduce the above copyright 12885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer in the 13885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org documentation and/or other materials provided with the distribution. 14885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 15885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 19885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org*/ 27885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@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 <limits.h> 35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdint.h> 36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <math.h> 37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <string.h> 38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <time.h> 39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if (!defined WIN32 && !defined _WIN32) || defined(__MINGW32__) 40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <unistd.h> 416b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org#else 426b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org#include <process.h> 436b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org#define getpid _getpid 44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "opus_multistream.h" 46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "opus.h" 47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "../src/opus_private.h" 48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "test_opus_common.h" 49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_PACKET (1500) 51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SAMPLES (48000*30) 52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SSAMPLES (SAMPLES/3) 53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_FRAME_SAMP (5760) 54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PI (3.141592653589793238462643f) 56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid generate_music(short *buf, opus_int32 len) 58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 a1,b1,a2,b2; 60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 c1,c2,d1,d2; 61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 i,j; 62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org a1=b1=a2=b2=0; 63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org c1=c2=d1=d2=0; 64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org j=0; 65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*60ms silence*/ 66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<2880;i++)buf[i*2]=buf[i*2+1]=0; 67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=2880;i<len;i++) 68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 r; 70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 v1,v2; 71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org v1=v2=(((j*((j>>12)^((j>>10|j>>12)&26&j>>7)))&128)+128)<<15; 72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org r=fast_rand();v1+=r&65535;v1-=r>>16; 73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org r=fast_rand();v2+=r&65535;v2-=r>>16; 74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org b1=v1-a1+((b1*61+32)>>6);a1=v1; 75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org b2=v2-a2+((b2*61+32)>>6);a2=v2; 76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org c1=(30*(c1+b1+d1)+32)>>6;d1=b1; 77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org c2=(30*(c2+b2+d2)+32)>>6;d2=b2; 78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org v1=(c1+128)>>8; 79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org v2=(c2+128)>>8; 80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org buf[i*2]=v1>32767?32767:(v1<-32768?-32768:v1); 81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org buf[i*2+1]=v2>32767?32767:(v2<-32768?-32768:v2); 82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i%6==0)j++; 83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if 0 87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstatic int save_ctr = 0; 88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstatic void int_to_char(opus_uint32 i, unsigned char ch[4]) 89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[0] = i>>24; 91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[1] = (i>>16)&0xFF; 92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[2] = (i>>8)&0xFF; 93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[3] = i&0xFF; 94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 963c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.comstatic OPUS_INLINE void save_packet(unsigned char* p, int len, opus_uint32 rng) 97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org FILE *fout; 99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char int_field[4]; 100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org char name[256]; 101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org snprintf(name,255,"test_opus_encode.%llu.%d.bit",(unsigned long long)iseed,save_ctr); 102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"writing %d byte packet to %s\n",len,name); 103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fout=fopen(name, "wb+"); 104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(fout==NULL)test_failed(); 105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int_to_char(len, int_field); 106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fwrite(int_field, 1, 4, fout); 107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int_to_char(rng, int_field); 108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fwrite(int_field, 1, 4, fout); 109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fwrite(p, 1, len, fout); 110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fclose(fout); 111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org save_ctr++; 112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint run_test1(int no_fuzz) 116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 117885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org static const int fsizes[6]={960*3,960*2,120,240,480,960}; 118885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org static const char *mstrings[3] = {" LP","Hybrid"," MDCT"}; 119885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char mapping[256] = {0,1,255}; 120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char db62[36]; 121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 i; 122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int rc,j,err; 123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusEncoder *enc; 124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusMSEncoder *MSenc; 125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *dec; 126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusMSDecoder *MSdec; 127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusMSDecoder *MSdec_err; 128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *dec_err[10]; 129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short *inbuf; 130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short *outbuf; 131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short *out2buf; 132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 bitrate_bps; 1333c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com unsigned char packet[MAX_PACKET+257]; 134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 enc_final_range; 135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 dec_final_range; 136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int fswitch; 137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int fsize; 138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int count; 139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*FIXME: encoder api tests, fs!=48k, mono, VBR*/ 141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," Encode+Decode tests.\n"); 143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, &err); 145885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || enc==NULL)test_failed(); 146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1476b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org for(i=0;i<2;i++) 1486b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org { 1496b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org int *ret_err; 1506b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org ret_err = i?0:&err; 1516b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org MSenc = opus_multistream_encoder_create(8000, 2, 2, 0, mapping, OPUS_UNIMPLEMENTED, ret_err); 1526b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err != OPUS_BAD_ARG) || MSenc!=NULL)test_failed(); 1536b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 1546b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org MSenc = opus_multistream_encoder_create(8000, 0, 1, 0, mapping, OPUS_APPLICATION_VOIP, ret_err); 1556b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err != OPUS_BAD_ARG) || MSenc!=NULL)test_failed(); 1566b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 1576b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org MSenc = opus_multistream_encoder_create(44100, 2, 2, 0, mapping, OPUS_APPLICATION_VOIP, ret_err); 1586b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err != OPUS_BAD_ARG) || MSenc!=NULL)test_failed(); 1596b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 1606b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org MSenc = opus_multistream_encoder_create(8000, 2, 2, 3, mapping, OPUS_APPLICATION_VOIP, ret_err); 1616b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err != OPUS_BAD_ARG) || MSenc!=NULL)test_failed(); 1626b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 1636b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org MSenc = opus_multistream_encoder_create(8000, 2, -1, 0, mapping, OPUS_APPLICATION_VOIP, ret_err); 1646b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err != OPUS_BAD_ARG) || MSenc!=NULL)test_failed(); 1656b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 1666b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org MSenc = opus_multistream_encoder_create(8000, 256, 2, 0, mapping, OPUS_APPLICATION_VOIP, ret_err); 1676b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err != OPUS_BAD_ARG) || MSenc!=NULL)test_failed(); 1686b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org } 1696b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org MSenc = opus_multistream_encoder_create(8000, 2, 2, 0, mapping, OPUS_APPLICATION_AUDIO, &err); 171885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || MSenc==NULL)test_failed(); 172885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1736b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org /*Some multistream encoder API tests*/ 174885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_GET_BITRATE(&i))!=OPUS_OK)test_failed(); 175885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_GET_LSB_DEPTH(&i))!=OPUS_OK)test_failed(); 1766b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(i<16)test_failed(); 1776b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 1786b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org { 1796b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org OpusEncoder *tmp_enc; 1806b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_MULTISTREAM_GET_ENCODER_STATE(1,&tmp_enc))!=OPUS_OK)test_failed(); 1816b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_encoder_ctl(tmp_enc, OPUS_GET_LSB_DEPTH(&j))!=OPUS_OK)test_failed(); 1826b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(i!=j)test_failed(); 1836b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_MULTISTREAM_GET_ENCODER_STATE(2,&tmp_enc))!=OPUS_BAD_ARG)test_failed(); 1846b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org } 185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 186885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec = opus_decoder_create(48000, 2, &err); 187885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || dec==NULL)test_failed(); 188885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 189885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org MSdec = opus_multistream_decoder_create(48000, 2, 2, 0, mapping, &err); 190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || MSdec==NULL)test_failed(); 191885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 192885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org MSdec_err = opus_multistream_decoder_create(48000, 3, 2, 0, mapping, &err); 193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || MSdec_err==NULL)test_failed(); 194885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 195885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[0]=(OpusDecoder *)malloc(opus_decoder_get_size(2)); 196885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memcpy(dec_err[0],dec,opus_decoder_get_size(2)); 197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[1] = opus_decoder_create(48000, 1, &err); 198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[2] = opus_decoder_create(24000, 2, &err); 199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[3] = opus_decoder_create(24000, 1, &err); 200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[4] = opus_decoder_create(16000, 2, &err); 201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[5] = opus_decoder_create(16000, 1, &err); 202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[6] = opus_decoder_create(12000, 2, &err); 203885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[7] = opus_decoder_create(12000, 1, &err); 204885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[8] = opus_decoder_create(8000, 2, &err); 205885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec_err[9] = opus_decoder_create(8000, 1, &err); 206885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<10;i++)if(dec_err[i]==NULL)test_failed(); 207885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 208885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 209885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusEncoder *enccpy; 210885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*The opus state structures contain no pointers and can be freely copied*/ 211885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enccpy=(OpusEncoder *)malloc(opus_encoder_get_size(2)); 212885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memcpy(enccpy,enc,opus_encoder_get_size(2)); 213885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memset(enc,255,opus_encoder_get_size(2)); 214885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_destroy(enc); 215885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc=enccpy; 216885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 217885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 218885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org inbuf=(short *)malloc(sizeof(short)*SAMPLES*2); 219885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org outbuf=(short *)malloc(sizeof(short)*SAMPLES*2); 220885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org out2buf=(short *)malloc(sizeof(short)*MAX_FRAME_SAMP*3); 221885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(inbuf==NULL || outbuf==NULL || out2buf==NULL)test_failed(); 222885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 223885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org generate_music(inbuf,SAMPLES); 224885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 225885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* FILE *foo; 226885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org foo = fopen("foo.sw", "wb+"); 227885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fwrite(inbuf, 1, SAMPLES*2*2, foo); 228885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fclose(foo);*/ 229885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 230885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_AUTO))!=OPUS_OK)test_failed(); 231885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_FORCE_MODE(-2))!=OPUS_BAD_ARG)test_failed(); 232885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 233885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(rc=0;rc<3;rc++) 234885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 235885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_VBR(rc<2))!=OPUS_OK)test_failed(); 236885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(rc==1))!=OPUS_OK)test_failed(); 237885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(rc==1))!=OPUS_OK)test_failed(); 238885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(rc==0))!=OPUS_OK)test_failed(); 239885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<13;j++) 240885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 241885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int rate; 242885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int modes[13]={0,0,0,1,1,1,1,2,2,2,2,2,2}; 243885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int rates[13]={6000,12000,48000,16000,32000,48000,64000,512000,13000,24000,48000,64000,96000}; 244885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int frame[13]={960*2,960,480,960,960,960,480,960*3,960*3,960,480,240,120}; 245885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rate=rates[j]+fast_rand()%rates[j]; 246885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org count=i=0; 247885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org do { 248885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int bw,len,out_samples,frame_size; 249885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frame_size=frame[j]; 2503c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&255)==0) 2513c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 2523c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_encoder_ctl(enc, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 2533c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_decoder_ctl(dec, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 2543c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&1)!=0) 2553c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 2563c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_decoder_ctl(dec_err[fast_rand()&1], OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 2573c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 2583c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 2593c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&127)==0) 2603c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 2613c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_decoder_ctl(dec_err[fast_rand()&1], OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 2623c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 263e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(fast_rand()%10==0){ 264e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org int complex=fast_rand()%11; 265e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complex))!=OPUS_OK)test_failed(); 266e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org } 267885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(fast_rand()%50==0)opus_decoder_ctl(dec, OPUS_RESET_STATE); 268885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(rc==0))!=OPUS_OK)test_failed(); 269885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_FORCE_MODE(MODE_SILK_ONLY+modes[j]))!=OPUS_OK)test_failed(); 270885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_DTX(fast_rand()&1))!=OPUS_OK)test_failed(); 271885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_BITRATE(rate))!=OPUS_OK)test_failed(); 272885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS((rates[j]>=64000?2:1)))!=OPUS_OK)test_failed(); 273885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY((count>>2)%11))!=OPUS_OK)test_failed(); 274885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC((fast_rand()&15)&(fast_rand()%15)))!=OPUS_OK)test_failed(); 275885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org bw=modes[j]==0?OPUS_BANDWIDTH_NARROWBAND+(fast_rand()%3): 276885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org modes[j]==1?OPUS_BANDWIDTH_SUPERWIDEBAND+(fast_rand()&1): 277885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OPUS_BANDWIDTH_NARROWBAND+(fast_rand()%5); 278885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(modes[j]==2&&bw==OPUS_BANDWIDTH_MEDIUMBAND)bw+=3; 279885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(bw))!=OPUS_OK)test_failed(); 280885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org len = opus_encode(enc, &inbuf[i<<1], frame_size, packet, MAX_PACKET); 281885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(len<0 || len>MAX_PACKET)test_failed(); 282885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_GET_FINAL_RANGE(&enc_final_range))!=OPUS_OK)test_failed(); 2833c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&3)==0) 2843c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 2853c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(packet,len,len+1)!=OPUS_OK)test_failed(); 2863c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com len++; 2873c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 2883c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&7)==0) 2893c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 2903c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(packet,len,len+256)!=OPUS_OK)test_failed(); 2913c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com len+=256; 2923c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 2933c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&3)==0) 2943c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 2953c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com len=opus_packet_unpad(packet,len); 2963c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(len<1)test_failed(); 2973c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 298885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org out_samples = opus_decode(dec, packet, len, &outbuf[i<<1], MAX_FRAME_SAMP, 0); 299885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(out_samples!=frame_size)test_failed(); 300885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decoder_ctl(dec, OPUS_GET_FINAL_RANGE(&dec_final_range))!=OPUS_OK)test_failed(); 301885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(enc_final_range!=dec_final_range)test_failed(); 302885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*LBRR decode*/ 3036b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org out_samples = opus_decode(dec_err[0], packet, len, out2buf, frame_size, (fast_rand()&3)!=0); 304885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(out_samples!=frame_size)test_failed(); 305885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org out_samples = opus_decode(dec_err[1], packet, (fast_rand()&3)==0?0:len, out2buf, MAX_FRAME_SAMP, (fast_rand()&7)!=0); 306885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(out_samples<120)test_failed(); 307885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i+=frame_size; 308885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org count++; 309885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org }while(i<(SSAMPLES-MAX_FRAME_SAMP)); 310885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," Mode %s FB encode %s, %6d bps OK.\n",mstrings[modes[j]],rc==0?" VBR":rc==1?"CVBR":" CBR",rate); 311885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 312885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 313885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 314885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_FORCE_MODE(OPUS_AUTO))!=OPUS_OK)test_failed(); 315885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(OPUS_AUTO))!=OPUS_OK)test_failed(); 316885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(0))!=OPUS_OK)test_failed(); 317885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_SET_DTX(0))!=OPUS_OK)test_failed(); 318885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 319885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(rc=0;rc<3;rc++) 320885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 321885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_VBR(rc<2))!=OPUS_OK)test_failed(); 322885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_VBR_CONSTRAINT(rc==1))!=OPUS_OK)test_failed(); 323885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_VBR_CONSTRAINT(rc==1))!=OPUS_OK)test_failed(); 324885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_INBAND_FEC(rc==0))!=OPUS_OK)test_failed(); 325885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<16;j++) 326885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 327885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int rate; 328885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int modes[16]={0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2}; 329885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int rates[16]={4000,12000,32000,8000,16000,32000,48000,88000,4000,12000,32000,8000,16000,32000,48000,88000}; 330885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int frame[16]={160*1,160,80,160,160,80,40,20,160*1,160,80,160,160,80,40,20}; 331885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_INBAND_FEC(rc==0&&j==1))!=OPUS_OK)test_failed(); 332885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_FORCE_MODE(MODE_SILK_ONLY+modes[j]))!=OPUS_OK)test_failed(); 333885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rate=rates[j]+fast_rand()%rates[j]; 334885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_DTX(fast_rand()&1))!=OPUS_OK)test_failed(); 335885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_BITRATE(rate))!=OPUS_OK)test_failed(); 336885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org count=i=0; 337885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org do { 3383c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com int pred,len,out_samples,frame_size,loss; 3393c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_encoder_ctl(MSenc, OPUS_GET_PREDICTION_DISABLED(&pred))!=OPUS_OK)test_failed(); 3403c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_PREDICTION_DISABLED((int)(fast_rand()&15)<(pred?11:4)))!=OPUS_OK)test_failed(); 341885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frame_size=frame[j]; 342885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_COMPLEXITY((count>>2)%11))!=OPUS_OK)test_failed(); 343885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_SET_PACKET_LOSS_PERC((fast_rand()&15)&(fast_rand()%15)))!=OPUS_OK)test_failed(); 3443c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&255)==0) 3453c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 3463c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_encoder_ctl(MSenc, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 3473c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_decoder_ctl(MSdec, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 3483c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&3)!=0) 3493c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 3503c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_decoder_ctl(MSdec_err, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 3513c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 3523c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 3533c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&255)==0) 3543c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 3553c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_decoder_ctl(MSdec_err, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 3563c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 357885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org len = opus_multistream_encode(MSenc, &inbuf[i<<1], frame_size, packet, MAX_PACKET); 358885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(len<0 || len>MAX_PACKET)test_failed(); 359885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_encoder_ctl(MSenc, OPUS_GET_FINAL_RANGE(&enc_final_range))!=OPUS_OK)test_failed(); 3603c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&3)==0) 3613c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 3623c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(packet,len,len+1,2)!=OPUS_OK)test_failed(); 3633c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com len++; 3643c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 3653c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&7)==0) 3663c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 3673c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(packet,len,len+256,2)!=OPUS_OK)test_failed(); 3683c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com len+=256; 3693c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 3703c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if((fast_rand()&3)==0) 3713c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 3723c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com len=opus_multistream_packet_unpad(packet,len,2); 3733c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(len<1)test_failed(); 3743c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 375885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org out_samples = opus_multistream_decode(MSdec, packet, len, out2buf, MAX_FRAME_SAMP, 0); 376885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(out_samples!=frame_size*6)test_failed(); 377885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decoder_ctl(MSdec, OPUS_GET_FINAL_RANGE(&dec_final_range))!=OPUS_OK)test_failed(); 378885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(enc_final_range!=dec_final_range)test_failed(); 379885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*LBRR decode*/ 380885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org loss=(fast_rand()&63)==0; 3816b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org out_samples = opus_multistream_decode(MSdec_err, packet, loss?0:len, out2buf, frame_size*6, (fast_rand()&3)!=0); 3826b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(out_samples!=(frame_size*6))test_failed(); 383885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i+=frame_size; 384885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org count++; 385885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org }while(i<(SSAMPLES/12-MAX_FRAME_SAMP)); 386885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," Mode %s NB dual-mono MS encode %s, %6d bps OK.\n",mstrings[modes[j]],rc==0?" VBR":rc==1?"CVBR":" CBR",rate); 387885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 388885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 389885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 390885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org bitrate_bps=512000; 391885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fsize=fast_rand()%31; 392885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fswitch=100; 393885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 394885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org debruijn2(6,db62); 395885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org count=i=0; 396885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org do { 397885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char toc; 398885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const unsigned char *frames[48]; 399885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short size[48]; 400885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int payload_offset; 401885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 dec_final_range2; 402885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int jj,dec2; 403885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int len,out_samples; 404885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int frame_size=fsizes[db62[fsize]]; 405885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 offset=i%(SAMPLES-MAX_FRAME_SAMP); 406885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 407885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate_bps)); 408885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 409885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org len = opus_encode(enc, &inbuf[offset<<1], frame_size, packet, MAX_PACKET); 410885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(len<0 || len>MAX_PACKET)test_failed(); 411885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org count++; 412885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 413885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_ctl(enc, OPUS_GET_FINAL_RANGE(&enc_final_range)); 414885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 415885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org out_samples = opus_decode(dec, packet, len, &outbuf[offset<<1], MAX_FRAME_SAMP, 0); 416885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(out_samples!=frame_size)test_failed(); 417885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 418885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_decoder_ctl(dec, OPUS_GET_FINAL_RANGE(&dec_final_range)); 419885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 420885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /* compare final range encoder rng values of encoder and decoder */ 421885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(dec_final_range!=enc_final_range)test_failed(); 422885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 423885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /* We fuzz the packet, but take care not to only corrupt the payload 424885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Corrupted headers are tested elsewhere and we need to actually run 425885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org the decoders in order to compare them. */ 426885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_packet_parse(packet,len,&toc,frames,size,&payload_offset)<=0)test_failed(); 427885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((fast_rand()&1023)==0)len=0; 428885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=(frames[0]-packet);j<len;j++)for(jj=0;jj<8;jj++)packet[j]^=((!no_fuzz)&&((fast_rand()&1023)==0))<<jj; 429885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org out_samples = opus_decode(dec_err[0], len>0?packet:NULL, len, out2buf, MAX_FRAME_SAMP, 0); 430885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(out_samples<0||out_samples>MAX_FRAME_SAMP)test_failed(); 431885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((len>0&&out_samples!=frame_size))test_failed(); /*FIXME use lastframe*/ 432885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 433885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_decoder_ctl(dec_err[0], OPUS_GET_FINAL_RANGE(&dec_final_range)); 434885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 435885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*randomly select one of the decoders to compare with*/ 436885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec2=fast_rand()%9+1; 437885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org out_samples = opus_decode(dec_err[dec2], len>0?packet:NULL, len, out2buf, MAX_FRAME_SAMP, 0); 438885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(out_samples<0||out_samples>MAX_FRAME_SAMP)test_failed(); /*FIXME, use factor, lastframe for loss*/ 439885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 440885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_decoder_ctl(dec_err[dec2], OPUS_GET_FINAL_RANGE(&dec_final_range2)); 441885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(len>0&&dec_final_range!=dec_final_range2)test_failed(); 442885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 443885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fswitch--; 444885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(fswitch<1) 445885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 446885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int new_size; 447885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fsize=(fsize+1)%36; 448885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org new_size=fsizes[db62[fsize]]; 449885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(new_size==960||new_size==480)fswitch=2880/new_size*(fast_rand()%19+1); 450885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org else fswitch=(fast_rand()%(2880/new_size))+1; 451885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 452885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org bitrate_bps=((fast_rand()%508000+4000)+bitrate_bps)>>1; 453885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i+=frame_size; 454885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org }while(i<SAMPLES*4); 455885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," All framesize pairs switching encode, %d frames OK.\n",count); 456885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4573c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_encoder_ctl(enc, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 458885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_destroy(enc); 4593c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_encoder_ctl(MSenc, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 460885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_multistream_encoder_destroy(MSenc); 4613c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_decoder_ctl(dec, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 462885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_decoder_destroy(dec); 4633c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_decoder_ctl(MSdec, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 464885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_multistream_decoder_destroy(MSdec); 465885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_multistream_decoder_destroy(MSdec_err); 466885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<10;i++)opus_decoder_destroy(dec_err[i]); 467885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(inbuf); 468885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(outbuf); 469885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(out2buf); 470885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return 0; 471885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 472885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 473885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint main(int _argc, char **_argv) 474885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 475885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const char * oversion; 476885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const char * env_seed; 477885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int env_used; 478885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 479885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(_argc>2) 480885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 481885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr,"Usage: %s [<seed>]\n",_argv[0]); 482885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return 1; 483885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 484885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 485885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org env_used=0; 486885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org env_seed=getenv("SEED"); 487885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(_argc>1)iseed=atoi(_argv[1]); 488885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org else if(env_seed) 489885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 490885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org iseed=atoi(env_seed); 491885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org env_used=1; 492885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 493885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org else iseed=(opus_uint32)time(NULL)^((getpid()&65535)<<16); 494885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Rw=Rz=iseed; 495885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 496885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org oversion=opus_get_version_string(); 497885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(!oversion)test_failed(); 498885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr,"Testing %s encoder. Random seed: %u (%.4X)\n", oversion, iseed, fast_rand() % 65535); 499885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(env_used)fprintf(stderr," Random seed set from the environment (SEED=%s).\n", env_seed); 500885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 501885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Setting TEST_OPUS_NOFUZZ tells the tool not to send garbage data 502885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org into the decoders. This is helpful because garbage data 503885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org may cause the decoders to clip, which angers CLANG IOC.*/ 504885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org run_test1(getenv("TEST_OPUS_NOFUZZ")!=NULL); 505885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 506885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr,"Tests completed successfully.\n"); 507885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 508885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return 0; 509885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 510