annotate src/opus-1.3/tests/test_opus_api.c @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 4664ac0c1032
children
rev   line source
cannam@154 1 /* Copyright (c) 2011-2013 Xiph.Org Foundation
cannam@154 2 Written by Gregory Maxwell */
cannam@154 3 /*
cannam@154 4 Redistribution and use in source and binary forms, with or without
cannam@154 5 modification, are permitted provided that the following conditions
cannam@154 6 are met:
cannam@154 7
cannam@154 8 - Redistributions of source code must retain the above copyright
cannam@154 9 notice, this list of conditions and the following disclaimer.
cannam@154 10
cannam@154 11 - Redistributions in binary form must reproduce the above copyright
cannam@154 12 notice, this list of conditions and the following disclaimer in the
cannam@154 13 documentation and/or other materials provided with the distribution.
cannam@154 14
cannam@154 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
cannam@154 16 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
cannam@154 17 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
cannam@154 18 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
cannam@154 19 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
cannam@154 20 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
cannam@154 21 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
cannam@154 22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
cannam@154 23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
cannam@154 24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
cannam@154 25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cannam@154 26 */
cannam@154 27
cannam@154 28 /* This tests the API presented by the libopus system.
cannam@154 29 It does not attempt to extensively exercise the codec internals.
cannam@154 30 The strategy here is to simply the API interface invariants:
cannam@154 31 That sane options are accepted, insane options are rejected,
cannam@154 32 and that nothing blows up. In particular we don't actually test
cannam@154 33 that settings are heeded by the codec (though we do check that
cannam@154 34 get after set returns a sane value when it should). Other
cannam@154 35 tests check the actual codec behavior.
cannam@154 36 In cases where its reasonable to do so we test exhaustively,
cannam@154 37 but its not reasonable to do so in all cases.
cannam@154 38 Although these tests are simple they found several library bugs
cannam@154 39 when they were initially developed. */
cannam@154 40
cannam@154 41 /* These tests are more sensitive if compiled with -DVALGRIND and
cannam@154 42 run inside valgrind. Malloc failure testing requires glibc. */
cannam@154 43
cannam@154 44 #ifdef HAVE_CONFIG_H
cannam@154 45 #include "config.h"
cannam@154 46 #endif
cannam@154 47
cannam@154 48 #include <stdio.h>
cannam@154 49 #include <stdlib.h>
cannam@154 50 #include <stdint.h>
cannam@154 51 #include <string.h>
cannam@154 52 #include "arch.h"
cannam@154 53 #include "opus_multistream.h"
cannam@154 54 #include "opus.h"
cannam@154 55 #include "test_opus_common.h"
cannam@154 56
cannam@154 57 #ifdef VALGRIND
cannam@154 58 #include <valgrind/memcheck.h>
cannam@154 59 #define VG_UNDEF(x,y) VALGRIND_MAKE_MEM_UNDEFINED((x),(y))
cannam@154 60 #define VG_CHECK(x,y) VALGRIND_CHECK_MEM_IS_DEFINED((x),(y))
cannam@154 61 #else
cannam@154 62 #define VG_UNDEF(x,y)
cannam@154 63 #define VG_CHECK(x,y)
cannam@154 64 #endif
cannam@154 65
cannam@154 66 #if defined(HAVE___MALLOC_HOOK)
cannam@154 67 #define MALLOC_FAIL
cannam@154 68 #include "os_support.h"
cannam@154 69 #include <malloc.h>
cannam@154 70
cannam@154 71 static const opus_int32 opus_apps[3] = {OPUS_APPLICATION_VOIP,
cannam@154 72 OPUS_APPLICATION_AUDIO,OPUS_APPLICATION_RESTRICTED_LOWDELAY};
cannam@154 73
cannam@154 74 void *malloc_hook(__attribute__((unused)) size_t size,
cannam@154 75 __attribute__((unused)) const void *caller)
cannam@154 76 {
cannam@154 77 return 0;
cannam@154 78 }
cannam@154 79 #endif
cannam@154 80
cannam@154 81 opus_int32 *null_int_ptr = (opus_int32 *)NULL;
cannam@154 82 opus_uint32 *null_uint_ptr = (opus_uint32 *)NULL;
cannam@154 83
cannam@154 84 static const opus_int32 opus_rates[5] = {48000,24000,16000,12000,8000};
cannam@154 85
cannam@154 86 opus_int32 test_dec_api(void)
cannam@154 87 {
cannam@154 88 opus_uint32 dec_final_range;
cannam@154 89 OpusDecoder *dec;
cannam@154 90 OpusDecoder *dec2;
cannam@154 91 opus_int32 i,j,cfgs;
cannam@154 92 unsigned char packet[1276];
cannam@154 93 #ifndef DISABLE_FLOAT_API
cannam@154 94 float fbuf[960*2];
cannam@154 95 #endif
cannam@154 96 short sbuf[960*2];
cannam@154 97 int c,err;
cannam@154 98
cannam@154 99 cfgs=0;
cannam@154 100 /*First test invalid configurations which should fail*/
cannam@154 101 fprintf(stdout,"\n Decoder basic API tests\n");
cannam@154 102 fprintf(stdout," ---------------------------------------------------\n");
cannam@154 103 for(c=0;c<4;c++)
cannam@154 104 {
cannam@154 105 i=opus_decoder_get_size(c);
cannam@154 106 if(((c==1||c==2)&&(i<=2048||i>1<<16))||((c!=1&&c!=2)&&i!=0))test_failed();
cannam@154 107 fprintf(stdout," opus_decoder_get_size(%d)=%d ...............%s OK.\n",c,i,i>0?"":"....");
cannam@154 108 cfgs++;
cannam@154 109 }
cannam@154 110
cannam@154 111 /*Test with unsupported sample rates*/
cannam@154 112 for(c=0;c<4;c++)
cannam@154 113 {
cannam@154 114 for(i=-7;i<=96000;i++)
cannam@154 115 {
cannam@154 116 int fs;
cannam@154 117 if((i==8000||i==12000||i==16000||i==24000||i==48000)&&(c==1||c==2))continue;
cannam@154 118 switch(i)
cannam@154 119 {
cannam@154 120 case(-5):fs=-8000;break;
cannam@154 121 case(-6):fs=INT32_MAX;break;
cannam@154 122 case(-7):fs=INT32_MIN;break;
cannam@154 123 default:fs=i;
cannam@154 124 }
cannam@154 125 err = OPUS_OK;
cannam@154 126 VG_UNDEF(&err,sizeof(err));
cannam@154 127 dec = opus_decoder_create(fs, c, &err);
cannam@154 128 if(err!=OPUS_BAD_ARG || dec!=NULL)test_failed();
cannam@154 129 cfgs++;
cannam@154 130 dec = opus_decoder_create(fs, c, 0);
cannam@154 131 if(dec!=NULL)test_failed();
cannam@154 132 cfgs++;
cannam@154 133 dec=malloc(opus_decoder_get_size(2));
cannam@154 134 if(dec==NULL)test_failed();
cannam@154 135 err = opus_decoder_init(dec,fs,c);
cannam@154 136 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 137 cfgs++;
cannam@154 138 free(dec);
cannam@154 139 }
cannam@154 140 }
cannam@154 141
cannam@154 142 VG_UNDEF(&err,sizeof(err));
cannam@154 143 dec = opus_decoder_create(48000, 2, &err);
cannam@154 144 if(err!=OPUS_OK || dec==NULL)test_failed();
cannam@154 145 VG_CHECK(dec,opus_decoder_get_size(2));
cannam@154 146 cfgs++;
cannam@154 147
cannam@154 148 fprintf(stdout," opus_decoder_create() ........................ OK.\n");
cannam@154 149 fprintf(stdout," opus_decoder_init() .......................... OK.\n");
cannam@154 150
cannam@154 151 err=opus_decoder_ctl(dec, OPUS_GET_FINAL_RANGE(null_uint_ptr));
cannam@154 152 if(err != OPUS_BAD_ARG)test_failed();
cannam@154 153 VG_UNDEF(&dec_final_range,sizeof(dec_final_range));
cannam@154 154 err=opus_decoder_ctl(dec, OPUS_GET_FINAL_RANGE(&dec_final_range));
cannam@154 155 if(err!=OPUS_OK)test_failed();
cannam@154 156 VG_CHECK(&dec_final_range,sizeof(dec_final_range));
cannam@154 157 fprintf(stdout," OPUS_GET_FINAL_RANGE ......................... OK.\n");
cannam@154 158 cfgs++;
cannam@154 159
cannam@154 160 err=opus_decoder_ctl(dec,OPUS_UNIMPLEMENTED);
cannam@154 161 if(err!=OPUS_UNIMPLEMENTED)test_failed();
cannam@154 162 fprintf(stdout," OPUS_UNIMPLEMENTED ........................... OK.\n");
cannam@154 163 cfgs++;
cannam@154 164
cannam@154 165 err=opus_decoder_ctl(dec, OPUS_GET_BANDWIDTH(null_int_ptr));
cannam@154 166 if(err != OPUS_BAD_ARG)test_failed();
cannam@154 167 VG_UNDEF(&i,sizeof(i));
cannam@154 168 err=opus_decoder_ctl(dec, OPUS_GET_BANDWIDTH(&i));
cannam@154 169 if(err != OPUS_OK || i!=0)test_failed();
cannam@154 170 fprintf(stdout," OPUS_GET_BANDWIDTH ........................... OK.\n");
cannam@154 171 cfgs++;
cannam@154 172
cannam@154 173 err=opus_decoder_ctl(dec, OPUS_GET_SAMPLE_RATE(null_int_ptr));
cannam@154 174 if(err != OPUS_BAD_ARG)test_failed();
cannam@154 175 VG_UNDEF(&i,sizeof(i));
cannam@154 176 err=opus_decoder_ctl(dec, OPUS_GET_SAMPLE_RATE(&i));
cannam@154 177 if(err != OPUS_OK || i!=48000)test_failed();
cannam@154 178 fprintf(stdout," OPUS_GET_SAMPLE_RATE ......................... OK.\n");
cannam@154 179 cfgs++;
cannam@154 180
cannam@154 181 /*GET_PITCH has different execution paths depending on the previously decoded frame.*/
cannam@154 182 err=opus_decoder_ctl(dec, OPUS_GET_PITCH(null_int_ptr));
cannam@154 183 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 184 cfgs++;
cannam@154 185 VG_UNDEF(&i,sizeof(i));
cannam@154 186 err=opus_decoder_ctl(dec, OPUS_GET_PITCH(&i));
cannam@154 187 if(err != OPUS_OK || i>0 || i<-1)test_failed();
cannam@154 188 cfgs++;
cannam@154 189 VG_UNDEF(packet,sizeof(packet));
cannam@154 190 packet[0]=63<<2;packet[1]=packet[2]=0;
cannam@154 191 if(opus_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed();
cannam@154 192 cfgs++;
cannam@154 193 VG_UNDEF(&i,sizeof(i));
cannam@154 194 err=opus_decoder_ctl(dec, OPUS_GET_PITCH(&i));
cannam@154 195 if(err != OPUS_OK || i>0 || i<-1)test_failed();
cannam@154 196 cfgs++;
cannam@154 197 packet[0]=1;
cannam@154 198 if(opus_decode(dec, packet, 1, sbuf, 960, 0)!=960)test_failed();
cannam@154 199 cfgs++;
cannam@154 200 VG_UNDEF(&i,sizeof(i));
cannam@154 201 err=opus_decoder_ctl(dec, OPUS_GET_PITCH(&i));
cannam@154 202 if(err != OPUS_OK || i>0 || i<-1)test_failed();
cannam@154 203 cfgs++;
cannam@154 204 fprintf(stdout," OPUS_GET_PITCH ............................... OK.\n");
cannam@154 205
cannam@154 206 err=opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(null_int_ptr));
cannam@154 207 if(err != OPUS_BAD_ARG)test_failed();
cannam@154 208 VG_UNDEF(&i,sizeof(i));
cannam@154 209 err=opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&i));
cannam@154 210 if(err != OPUS_OK || i!=960)test_failed();
cannam@154 211 cfgs++;
cannam@154 212 fprintf(stdout," OPUS_GET_LAST_PACKET_DURATION ................ OK.\n");
cannam@154 213
cannam@154 214 VG_UNDEF(&i,sizeof(i));
cannam@154 215 err=opus_decoder_ctl(dec, OPUS_GET_GAIN(&i));
cannam@154 216 VG_CHECK(&i,sizeof(i));
cannam@154 217 if(err != OPUS_OK || i!=0)test_failed();
cannam@154 218 cfgs++;
cannam@154 219 err=opus_decoder_ctl(dec, OPUS_GET_GAIN(null_int_ptr));
cannam@154 220 if(err != OPUS_BAD_ARG)test_failed();
cannam@154 221 cfgs++;
cannam@154 222 err=opus_decoder_ctl(dec, OPUS_SET_GAIN(-32769));
cannam@154 223 if(err != OPUS_BAD_ARG)test_failed();
cannam@154 224 cfgs++;
cannam@154 225 err=opus_decoder_ctl(dec, OPUS_SET_GAIN(32768));
cannam@154 226 if(err != OPUS_BAD_ARG)test_failed();
cannam@154 227 cfgs++;
cannam@154 228 err=opus_decoder_ctl(dec, OPUS_SET_GAIN(-15));
cannam@154 229 if(err != OPUS_OK)test_failed();
cannam@154 230 cfgs++;
cannam@154 231 VG_UNDEF(&i,sizeof(i));
cannam@154 232 err=opus_decoder_ctl(dec, OPUS_GET_GAIN(&i));
cannam@154 233 VG_CHECK(&i,sizeof(i));
cannam@154 234 if(err != OPUS_OK || i!=-15)test_failed();
cannam@154 235 cfgs++;
cannam@154 236 fprintf(stdout," OPUS_SET_GAIN ................................ OK.\n");
cannam@154 237 fprintf(stdout," OPUS_GET_GAIN ................................ OK.\n");
cannam@154 238
cannam@154 239 /*Reset the decoder*/
cannam@154 240 dec2=malloc(opus_decoder_get_size(2));
cannam@154 241 memcpy(dec2,dec,opus_decoder_get_size(2));
cannam@154 242 if(opus_decoder_ctl(dec, OPUS_RESET_STATE)!=OPUS_OK)test_failed();
cannam@154 243 if(memcmp(dec2,dec,opus_decoder_get_size(2))==0)test_failed();
cannam@154 244 free(dec2);
cannam@154 245 fprintf(stdout," OPUS_RESET_STATE ............................. OK.\n");
cannam@154 246 cfgs++;
cannam@154 247
cannam@154 248 VG_UNDEF(packet,sizeof(packet));
cannam@154 249 packet[0]=0;
cannam@154 250 if(opus_decoder_get_nb_samples(dec,packet,1)!=480)test_failed();
cannam@154 251 if(opus_packet_get_nb_samples(packet,1,48000)!=480)test_failed();
cannam@154 252 if(opus_packet_get_nb_samples(packet,1,96000)!=960)test_failed();
cannam@154 253 if(opus_packet_get_nb_samples(packet,1,32000)!=320)test_failed();
cannam@154 254 if(opus_packet_get_nb_samples(packet,1,8000)!=80)test_failed();
cannam@154 255 packet[0]=3;
cannam@154 256 if(opus_packet_get_nb_samples(packet,1,24000)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 257 packet[0]=(63<<2)|3;
cannam@154 258 packet[1]=63;
cannam@154 259 if(opus_packet_get_nb_samples(packet,0,24000)!=OPUS_BAD_ARG)test_failed();
cannam@154 260 if(opus_packet_get_nb_samples(packet,2,48000)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 261 if(opus_decoder_get_nb_samples(dec,packet,2)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 262 fprintf(stdout," opus_{packet,decoder}_get_nb_samples() ....... OK.\n");
cannam@154 263 cfgs+=9;
cannam@154 264
cannam@154 265 if(OPUS_BAD_ARG!=opus_packet_get_nb_frames(packet,0))test_failed();
cannam@154 266 for(i=0;i<256;i++) {
cannam@154 267 int l1res[4]={1,2,2,OPUS_INVALID_PACKET};
cannam@154 268 packet[0]=i;
cannam@154 269 if(l1res[packet[0]&3]!=opus_packet_get_nb_frames(packet,1))test_failed();
cannam@154 270 cfgs++;
cannam@154 271 for(j=0;j<256;j++) {
cannam@154 272 packet[1]=j;
cannam@154 273 if(((packet[0]&3)!=3?l1res[packet[0]&3]:packet[1]&63)!=opus_packet_get_nb_frames(packet,2))test_failed();
cannam@154 274 cfgs++;
cannam@154 275 }
cannam@154 276 }
cannam@154 277 fprintf(stdout," opus_packet_get_nb_frames() .................. OK.\n");
cannam@154 278
cannam@154 279 for(i=0;i<256;i++) {
cannam@154 280 int bw;
cannam@154 281 packet[0]=i;
cannam@154 282 bw=packet[0]>>4;
cannam@154 283 bw=OPUS_BANDWIDTH_NARROWBAND+(((((bw&7)*9)&(63-(bw&8)))+2+12*((bw&8)!=0))>>4);
cannam@154 284 if(bw!=opus_packet_get_bandwidth(packet))test_failed();
cannam@154 285 cfgs++;
cannam@154 286 }
cannam@154 287 fprintf(stdout," opus_packet_get_bandwidth() .................. OK.\n");
cannam@154 288
cannam@154 289 for(i=0;i<256;i++) {
cannam@154 290 int fp3s,rate;
cannam@154 291 packet[0]=i;
cannam@154 292 fp3s=packet[0]>>3;
cannam@154 293 fp3s=((((3-(fp3s&3))*13&119)+9)>>2)*((fp3s>13)*(3-((fp3s&3)==3))+1)*25;
cannam@154 294 for(rate=0;rate<5;rate++) {
cannam@154 295 if((opus_rates[rate]*3/fp3s)!=opus_packet_get_samples_per_frame(packet,opus_rates[rate]))test_failed();
cannam@154 296 cfgs++;
cannam@154 297 }
cannam@154 298 }
cannam@154 299 fprintf(stdout," opus_packet_get_samples_per_frame() .......... OK.\n");
cannam@154 300
cannam@154 301 packet[0]=(63<<2)+3;
cannam@154 302 packet[1]=49;
cannam@154 303 for(j=2;j<51;j++)packet[j]=0;
cannam@154 304 VG_UNDEF(sbuf,sizeof(sbuf));
cannam@154 305 if(opus_decode(dec, packet, 51, sbuf, 960, 0)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 306 cfgs++;
cannam@154 307 packet[0]=(63<<2);
cannam@154 308 packet[1]=packet[2]=0;
cannam@154 309 if(opus_decode(dec, packet, -1, sbuf, 960, 0)!=OPUS_BAD_ARG)test_failed();
cannam@154 310 cfgs++;
cannam@154 311 if(opus_decode(dec, packet, 3, sbuf, 60, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 312 cfgs++;
cannam@154 313 if(opus_decode(dec, packet, 3, sbuf, 480, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 314 cfgs++;
cannam@154 315 if(opus_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed();
cannam@154 316 cfgs++;
cannam@154 317 fprintf(stdout," opus_decode() ................................ OK.\n");
cannam@154 318 #ifndef DISABLE_FLOAT_API
cannam@154 319 VG_UNDEF(fbuf,sizeof(fbuf));
cannam@154 320 if(opus_decode_float(dec, packet, 3, fbuf, 960, 0)!=960)test_failed();
cannam@154 321 cfgs++;
cannam@154 322 fprintf(stdout," opus_decode_float() .......................... OK.\n");
cannam@154 323 #endif
cannam@154 324
cannam@154 325 #if 0
cannam@154 326 /*These tests are disabled because the library crashes with null states*/
cannam@154 327 if(opus_decoder_ctl(0,OPUS_RESET_STATE) !=OPUS_INVALID_STATE)test_failed();
cannam@154 328 if(opus_decoder_init(0,48000,1) !=OPUS_INVALID_STATE)test_failed();
cannam@154 329 if(opus_decode(0,packet,1,outbuf,2880,0) !=OPUS_INVALID_STATE)test_failed();
cannam@154 330 if(opus_decode_float(0,packet,1,0,2880,0) !=OPUS_INVALID_STATE)test_failed();
cannam@154 331 if(opus_decoder_get_nb_samples(0,packet,1) !=OPUS_INVALID_STATE)test_failed();
cannam@154 332 if(opus_packet_get_nb_frames(NULL,1) !=OPUS_BAD_ARG)test_failed();
cannam@154 333 if(opus_packet_get_bandwidth(NULL) !=OPUS_BAD_ARG)test_failed();
cannam@154 334 if(opus_packet_get_samples_per_frame(NULL,48000)!=OPUS_BAD_ARG)test_failed();
cannam@154 335 #endif
cannam@154 336 opus_decoder_destroy(dec);
cannam@154 337 cfgs++;
cannam@154 338 fprintf(stdout," All decoder interface tests passed\n");
cannam@154 339 fprintf(stdout," (%6d API invocations)\n",cfgs);
cannam@154 340 return cfgs;
cannam@154 341 }
cannam@154 342
cannam@154 343 opus_int32 test_msdec_api(void)
cannam@154 344 {
cannam@154 345 opus_uint32 dec_final_range;
cannam@154 346 OpusMSDecoder *dec;
cannam@154 347 OpusDecoder *streamdec;
cannam@154 348 opus_int32 i,j,cfgs;
cannam@154 349 unsigned char packet[1276];
cannam@154 350 unsigned char mapping[256];
cannam@154 351 #ifndef DISABLE_FLOAT_API
cannam@154 352 float fbuf[960*2];
cannam@154 353 #endif
cannam@154 354 short sbuf[960*2];
cannam@154 355 int a,b,c,err;
cannam@154 356
cannam@154 357 mapping[0]=0;
cannam@154 358 mapping[1]=1;
cannam@154 359 for(i=2;i<256;i++)VG_UNDEF(&mapping[i],sizeof(unsigned char));
cannam@154 360
cannam@154 361 cfgs=0;
cannam@154 362 /*First test invalid configurations which should fail*/
cannam@154 363 fprintf(stdout,"\n Multistream decoder basic API tests\n");
cannam@154 364 fprintf(stdout," ---------------------------------------------------\n");
cannam@154 365 for(a=-1;a<4;a++)
cannam@154 366 {
cannam@154 367 for(b=-1;b<4;b++)
cannam@154 368 {
cannam@154 369 i=opus_multistream_decoder_get_size(a,b);
cannam@154 370 if(((a>0&&b<=a&&b>=0)&&(i<=2048||i>((1<<16)*a)))||((a<1||b>a||b<0)&&i!=0))test_failed();
cannam@154 371 fprintf(stdout," opus_multistream_decoder_get_size(%2d,%2d)=%d %sOK.\n",a,b,i,i>0?"":"... ");
cannam@154 372 cfgs++;
cannam@154 373 }
cannam@154 374 }
cannam@154 375
cannam@154 376 /*Test with unsupported sample rates*/
cannam@154 377 for(c=1;c<3;c++)
cannam@154 378 {
cannam@154 379 for(i=-7;i<=96000;i++)
cannam@154 380 {
cannam@154 381 int fs;
cannam@154 382 if((i==8000||i==12000||i==16000||i==24000||i==48000)&&(c==1||c==2))continue;
cannam@154 383 switch(i)
cannam@154 384 {
cannam@154 385 case(-5):fs=-8000;break;
cannam@154 386 case(-6):fs=INT32_MAX;break;
cannam@154 387 case(-7):fs=INT32_MIN;break;
cannam@154 388 default:fs=i;
cannam@154 389 }
cannam@154 390 err = OPUS_OK;
cannam@154 391 VG_UNDEF(&err,sizeof(err));
cannam@154 392 dec = opus_multistream_decoder_create(fs, c, 1, c-1, mapping, &err);
cannam@154 393 if(err!=OPUS_BAD_ARG || dec!=NULL)test_failed();
cannam@154 394 cfgs++;
cannam@154 395 dec = opus_multistream_decoder_create(fs, c, 1, c-1, mapping, 0);
cannam@154 396 if(dec!=NULL)test_failed();
cannam@154 397 cfgs++;
cannam@154 398 dec=malloc(opus_multistream_decoder_get_size(1,1));
cannam@154 399 if(dec==NULL)test_failed();
cannam@154 400 err = opus_multistream_decoder_init(dec,fs,c,1,c-1, mapping);
cannam@154 401 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 402 cfgs++;
cannam@154 403 free(dec);
cannam@154 404 }
cannam@154 405 }
cannam@154 406
cannam@154 407 for(c=0;c<2;c++)
cannam@154 408 {
cannam@154 409 int *ret_err;
cannam@154 410 ret_err = c?0:&err;
cannam@154 411
cannam@154 412 mapping[0]=0;
cannam@154 413 mapping[1]=1;
cannam@154 414 for(i=2;i<256;i++)VG_UNDEF(&mapping[i],sizeof(unsigned char));
cannam@154 415
cannam@154 416 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 417 dec = opus_multistream_decoder_create(48000, 2, 1, 0, mapping, ret_err);
cannam@154 418 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 419 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 420 cfgs++;
cannam@154 421
cannam@154 422 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 423 mapping[0]=mapping[1]=0;
cannam@154 424 dec = opus_multistream_decoder_create(48000, 2, 1, 0, mapping, ret_err);
cannam@154 425 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 426 if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed();
cannam@154 427 cfgs++;
cannam@154 428 opus_multistream_decoder_destroy(dec);
cannam@154 429 cfgs++;
cannam@154 430
cannam@154 431 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 432 dec = opus_multistream_decoder_create(48000, 1, 4, 1, mapping, ret_err);
cannam@154 433 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 434 if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed();
cannam@154 435 cfgs++;
cannam@154 436
cannam@154 437 err = opus_multistream_decoder_init(dec,48000, 1, 0, 0, mapping);
cannam@154 438 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 439 cfgs++;
cannam@154 440
cannam@154 441 err = opus_multistream_decoder_init(dec,48000, 1, 1, -1, mapping);
cannam@154 442 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 443 cfgs++;
cannam@154 444
cannam@154 445 opus_multistream_decoder_destroy(dec);
cannam@154 446 cfgs++;
cannam@154 447
cannam@154 448 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 449 dec = opus_multistream_decoder_create(48000, 2, 1, 1, mapping, ret_err);
cannam@154 450 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 451 if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed();
cannam@154 452 cfgs++;
cannam@154 453 opus_multistream_decoder_destroy(dec);
cannam@154 454 cfgs++;
cannam@154 455
cannam@154 456 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 457 dec = opus_multistream_decoder_create(48000, 255, 255, 1, mapping, ret_err);
cannam@154 458 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 459 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 460 cfgs++;
cannam@154 461
cannam@154 462 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 463 dec = opus_multistream_decoder_create(48000, -1, 1, 1, mapping, ret_err);
cannam@154 464 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 465 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 466 cfgs++;
cannam@154 467
cannam@154 468 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 469 dec = opus_multistream_decoder_create(48000, 0, 1, 1, mapping, ret_err);
cannam@154 470 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 471 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 472 cfgs++;
cannam@154 473
cannam@154 474 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 475 dec = opus_multistream_decoder_create(48000, 1, -1, 2, mapping, ret_err);
cannam@154 476 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 477 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 478 cfgs++;
cannam@154 479
cannam@154 480 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 481 dec = opus_multistream_decoder_create(48000, 1, -1, -1, mapping, ret_err);
cannam@154 482 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 483 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 484 cfgs++;
cannam@154 485
cannam@154 486 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 487 dec = opus_multistream_decoder_create(48000, 256, 255, 1, mapping, ret_err);
cannam@154 488 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 489 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 490 cfgs++;
cannam@154 491
cannam@154 492 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 493 dec = opus_multistream_decoder_create(48000, 256, 255, 0, mapping, ret_err);
cannam@154 494 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 495 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 496 cfgs++;
cannam@154 497
cannam@154 498 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 499 mapping[0]=255;
cannam@154 500 mapping[1]=1;
cannam@154 501 mapping[2]=2;
cannam@154 502 dec = opus_multistream_decoder_create(48000, 3, 2, 0, mapping, ret_err);
cannam@154 503 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 504 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 505 cfgs++;
cannam@154 506
cannam@154 507 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 508 mapping[0]=0;
cannam@154 509 mapping[1]=0;
cannam@154 510 mapping[2]=0;
cannam@154 511 dec = opus_multistream_decoder_create(48000, 3, 2, 1, mapping, ret_err);
cannam@154 512 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 513 if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed();
cannam@154 514 cfgs++;
cannam@154 515 opus_multistream_decoder_destroy(dec);
cannam@154 516 cfgs++;
cannam@154 517
cannam@154 518 VG_UNDEF(ret_err,sizeof(*ret_err));
cannam@154 519 mapping[0]=0;
cannam@154 520 mapping[1]=255;
cannam@154 521 mapping[2]=1;
cannam@154 522 mapping[3]=2;
cannam@154 523 mapping[4]=3;
cannam@154 524 dec = opus_multistream_decoder_create(48001, 5, 4, 1, mapping, ret_err);
cannam@154 525 if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));}
cannam@154 526 if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed();
cannam@154 527 cfgs++;
cannam@154 528 }
cannam@154 529
cannam@154 530 VG_UNDEF(&err,sizeof(err));
cannam@154 531 mapping[0]=0;
cannam@154 532 mapping[1]=255;
cannam@154 533 mapping[2]=1;
cannam@154 534 mapping[3]=2;
cannam@154 535 dec = opus_multistream_decoder_create(48000, 4, 2, 1, mapping, &err);
cannam@154 536 VG_CHECK(&err,sizeof(err));
cannam@154 537 if(err!=OPUS_OK || dec==NULL)test_failed();
cannam@154 538 cfgs++;
cannam@154 539
cannam@154 540 fprintf(stdout," opus_multistream_decoder_create() ............ OK.\n");
cannam@154 541 fprintf(stdout," opus_multistream_decoder_init() .............. OK.\n");
cannam@154 542
cannam@154 543 VG_UNDEF(&dec_final_range,sizeof(dec_final_range));
cannam@154 544 err=opus_multistream_decoder_ctl(dec, OPUS_GET_FINAL_RANGE(&dec_final_range));
cannam@154 545 if(err!=OPUS_OK)test_failed();
cannam@154 546 VG_CHECK(&dec_final_range,sizeof(dec_final_range));
cannam@154 547 fprintf(stdout," OPUS_GET_FINAL_RANGE ......................... OK.\n");
cannam@154 548 cfgs++;
cannam@154 549
cannam@154 550 streamdec=0;
cannam@154 551 VG_UNDEF(&streamdec,sizeof(streamdec));
cannam@154 552 err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(-1,&streamdec));
cannam@154 553 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 554 cfgs++;
cannam@154 555 err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(1,&streamdec));
cannam@154 556 if(err!=OPUS_OK||streamdec==NULL)test_failed();
cannam@154 557 VG_CHECK(streamdec,opus_decoder_get_size(1));
cannam@154 558 cfgs++;
cannam@154 559 err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(2,&streamdec));
cannam@154 560 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 561 cfgs++;
cannam@154 562 err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(0,&streamdec));
cannam@154 563 if(err!=OPUS_OK||streamdec==NULL)test_failed();
cannam@154 564 VG_CHECK(streamdec,opus_decoder_get_size(1));
cannam@154 565 fprintf(stdout," OPUS_MULTISTREAM_GET_DECODER_STATE ........... OK.\n");
cannam@154 566 cfgs++;
cannam@154 567
cannam@154 568 for(j=0;j<2;j++)
cannam@154 569 {
cannam@154 570 OpusDecoder *od;
cannam@154 571 err=opus_multistream_decoder_ctl(dec,OPUS_MULTISTREAM_GET_DECODER_STATE(j,&od));
cannam@154 572 if(err != OPUS_OK)test_failed();
cannam@154 573 VG_UNDEF(&i,sizeof(i));
cannam@154 574 err=opus_decoder_ctl(od, OPUS_GET_GAIN(&i));
cannam@154 575 VG_CHECK(&i,sizeof(i));
cannam@154 576 if(err != OPUS_OK || i!=0)test_failed();
cannam@154 577 cfgs++;
cannam@154 578 }
cannam@154 579 err=opus_multistream_decoder_ctl(dec,OPUS_SET_GAIN(15));
cannam@154 580 if(err!=OPUS_OK)test_failed();
cannam@154 581 fprintf(stdout," OPUS_SET_GAIN ................................ OK.\n");
cannam@154 582 for(j=0;j<2;j++)
cannam@154 583 {
cannam@154 584 OpusDecoder *od;
cannam@154 585 err=opus_multistream_decoder_ctl(dec,OPUS_MULTISTREAM_GET_DECODER_STATE(j,&od));
cannam@154 586 if(err != OPUS_OK)test_failed();
cannam@154 587 VG_UNDEF(&i,sizeof(i));
cannam@154 588 err=opus_decoder_ctl(od, OPUS_GET_GAIN(&i));
cannam@154 589 VG_CHECK(&i,sizeof(i));
cannam@154 590 if(err != OPUS_OK || i!=15)test_failed();
cannam@154 591 cfgs++;
cannam@154 592 }
cannam@154 593 fprintf(stdout," OPUS_GET_GAIN ................................ OK.\n");
cannam@154 594
cannam@154 595 VG_UNDEF(&i,sizeof(i));
cannam@154 596 err=opus_multistream_decoder_ctl(dec, OPUS_GET_BANDWIDTH(&i));
cannam@154 597 if(err != OPUS_OK || i!=0)test_failed();
cannam@154 598 fprintf(stdout," OPUS_GET_BANDWIDTH ........................... OK.\n");
cannam@154 599 cfgs++;
cannam@154 600
cannam@154 601 err=opus_multistream_decoder_ctl(dec,OPUS_UNIMPLEMENTED);
cannam@154 602 if(err!=OPUS_UNIMPLEMENTED)test_failed();
cannam@154 603 fprintf(stdout," OPUS_UNIMPLEMENTED ........................... OK.\n");
cannam@154 604 cfgs++;
cannam@154 605
cannam@154 606 #if 0
cannam@154 607 /*Currently unimplemented for multistream*/
cannam@154 608 /*GET_PITCH has different execution paths depending on the previously decoded frame.*/
cannam@154 609 err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(null_int_ptr));
cannam@154 610 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 611 cfgs++;
cannam@154 612 VG_UNDEF(&i,sizeof(i));
cannam@154 613 err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(&i));
cannam@154 614 if(err != OPUS_OK || i>0 || i<-1)test_failed();
cannam@154 615 cfgs++;
cannam@154 616 VG_UNDEF(packet,sizeof(packet));
cannam@154 617 packet[0]=63<<2;packet[1]=packet[2]=0;
cannam@154 618 if(opus_multistream_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed();
cannam@154 619 cfgs++;
cannam@154 620 VG_UNDEF(&i,sizeof(i));
cannam@154 621 err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(&i));
cannam@154 622 if(err != OPUS_OK || i>0 || i<-1)test_failed();
cannam@154 623 cfgs++;
cannam@154 624 packet[0]=1;
cannam@154 625 if(opus_multistream_decode(dec, packet, 1, sbuf, 960, 0)!=960)test_failed();
cannam@154 626 cfgs++;
cannam@154 627 VG_UNDEF(&i,sizeof(i));
cannam@154 628 err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(&i));
cannam@154 629 if(err != OPUS_OK || i>0 || i<-1)test_failed();
cannam@154 630 cfgs++;
cannam@154 631 fprintf(stdout," OPUS_GET_PITCH ............................... OK.\n");
cannam@154 632 #endif
cannam@154 633
cannam@154 634 /*Reset the decoder*/
cannam@154 635 if(opus_multistream_decoder_ctl(dec, OPUS_RESET_STATE)!=OPUS_OK)test_failed();
cannam@154 636 fprintf(stdout," OPUS_RESET_STATE ............................. OK.\n");
cannam@154 637 cfgs++;
cannam@154 638
cannam@154 639 opus_multistream_decoder_destroy(dec);
cannam@154 640 cfgs++;
cannam@154 641 VG_UNDEF(&err,sizeof(err));
cannam@154 642 dec = opus_multistream_decoder_create(48000, 2, 1, 1, mapping, &err);
cannam@154 643 if(err!=OPUS_OK || dec==NULL)test_failed();
cannam@154 644 cfgs++;
cannam@154 645
cannam@154 646 packet[0]=(63<<2)+3;
cannam@154 647 packet[1]=49;
cannam@154 648 for(j=2;j<51;j++)packet[j]=0;
cannam@154 649 VG_UNDEF(sbuf,sizeof(sbuf));
cannam@154 650 if(opus_multistream_decode(dec, packet, 51, sbuf, 960, 0)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 651 cfgs++;
cannam@154 652 packet[0]=(63<<2);
cannam@154 653 packet[1]=packet[2]=0;
cannam@154 654 if(opus_multistream_decode(dec, packet, -1, sbuf, 960, 0)!=OPUS_BAD_ARG){printf("%d\n",opus_multistream_decode(dec, packet, -1, sbuf, 960, 0));test_failed();}
cannam@154 655 cfgs++;
cannam@154 656 if(opus_multistream_decode(dec, packet, 3, sbuf, -960, 0)!=OPUS_BAD_ARG)test_failed();
cannam@154 657 cfgs++;
cannam@154 658 if(opus_multistream_decode(dec, packet, 3, sbuf, 60, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 659 cfgs++;
cannam@154 660 if(opus_multistream_decode(dec, packet, 3, sbuf, 480, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 661 cfgs++;
cannam@154 662 if(opus_multistream_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed();
cannam@154 663 cfgs++;
cannam@154 664 fprintf(stdout," opus_multistream_decode() .................... OK.\n");
cannam@154 665 #ifndef DISABLE_FLOAT_API
cannam@154 666 VG_UNDEF(fbuf,sizeof(fbuf));
cannam@154 667 if(opus_multistream_decode_float(dec, packet, 3, fbuf, 960, 0)!=960)test_failed();
cannam@154 668 cfgs++;
cannam@154 669 fprintf(stdout," opus_multistream_decode_float() .............. OK.\n");
cannam@154 670 #endif
cannam@154 671
cannam@154 672 #if 0
cannam@154 673 /*These tests are disabled because the library crashes with null states*/
cannam@154 674 if(opus_multistream_decoder_ctl(0,OPUS_RESET_STATE) !=OPUS_INVALID_STATE)test_failed();
cannam@154 675 if(opus_multistream_decoder_init(0,48000,1) !=OPUS_INVALID_STATE)test_failed();
cannam@154 676 if(opus_multistream_decode(0,packet,1,outbuf,2880,0) !=OPUS_INVALID_STATE)test_failed();
cannam@154 677 if(opus_multistream_decode_float(0,packet,1,0,2880,0) !=OPUS_INVALID_STATE)test_failed();
cannam@154 678 if(opus_multistream_decoder_get_nb_samples(0,packet,1) !=OPUS_INVALID_STATE)test_failed();
cannam@154 679 #endif
cannam@154 680 opus_multistream_decoder_destroy(dec);
cannam@154 681 cfgs++;
cannam@154 682 fprintf(stdout," All multistream decoder interface tests passed\n");
cannam@154 683 fprintf(stdout," (%6d API invocations)\n",cfgs);
cannam@154 684 return cfgs;
cannam@154 685 }
cannam@154 686
cannam@154 687 #ifdef VALGRIND
cannam@154 688 #define UNDEFINE_FOR_PARSE toc=-1; \
cannam@154 689 frames[0]=(unsigned char *)0; \
cannam@154 690 frames[1]=(unsigned char *)0; \
cannam@154 691 payload_offset=-1; \
cannam@154 692 VG_UNDEF(&toc,sizeof(toc)); \
cannam@154 693 VG_UNDEF(frames,sizeof(frames));\
cannam@154 694 VG_UNDEF(&payload_offset,sizeof(payload_offset));
cannam@154 695 #else
cannam@154 696 #define UNDEFINE_FOR_PARSE toc=-1; \
cannam@154 697 frames[0]=(unsigned char *)0; \
cannam@154 698 frames[1]=(unsigned char *)0; \
cannam@154 699 payload_offset=-1;
cannam@154 700 #endif
cannam@154 701
cannam@154 702 /* This test exercises the heck out of the libopus parser.
cannam@154 703 It is much larger than the parser itself in part because
cannam@154 704 it tries to hit a lot of corner cases that could never
cannam@154 705 fail with the libopus code, but might be problematic for
cannam@154 706 other implementations. */
cannam@154 707 opus_int32 test_parse(void)
cannam@154 708 {
cannam@154 709 opus_int32 i,j,jj,sz;
cannam@154 710 unsigned char packet[1276];
cannam@154 711 opus_int32 cfgs,cfgs_total;
cannam@154 712 unsigned char toc;
cannam@154 713 const unsigned char *frames[48];
cannam@154 714 short size[48];
cannam@154 715 int payload_offset, ret;
cannam@154 716 fprintf(stdout,"\n Packet header parsing tests\n");
cannam@154 717 fprintf(stdout," ---------------------------------------------------\n");
cannam@154 718 memset(packet,0,sizeof(char)*1276);
cannam@154 719 packet[0]=63<<2;
cannam@154 720 if(opus_packet_parse(packet,1,&toc,frames,0,&payload_offset)!=OPUS_BAD_ARG)test_failed();
cannam@154 721 cfgs_total=cfgs=1;
cannam@154 722 /*code 0*/
cannam@154 723 for(i=0;i<64;i++)
cannam@154 724 {
cannam@154 725 packet[0]=i<<2;
cannam@154 726 UNDEFINE_FOR_PARSE
cannam@154 727 ret=opus_packet_parse(packet,4,&toc,frames,size,&payload_offset);
cannam@154 728 cfgs++;
cannam@154 729 if(ret!=1)test_failed();
cannam@154 730 if(size[0]!=3)test_failed();
cannam@154 731 if(frames[0]!=packet+1)test_failed();
cannam@154 732 }
cannam@154 733 fprintf(stdout," code 0 (%2d cases) ............................ OK.\n",cfgs);
cannam@154 734 cfgs_total+=cfgs;cfgs=0;
cannam@154 735
cannam@154 736 /*code 1, two frames of the same size*/
cannam@154 737 for(i=0;i<64;i++)
cannam@154 738 {
cannam@154 739 packet[0]=(i<<2)+1;
cannam@154 740 for(jj=0;jj<=1275*2+3;jj++)
cannam@154 741 {
cannam@154 742 UNDEFINE_FOR_PARSE
cannam@154 743 ret=opus_packet_parse(packet,jj,&toc,frames,size,&payload_offset);
cannam@154 744 cfgs++;
cannam@154 745 if((jj&1)==1 && jj<=2551)
cannam@154 746 {
cannam@154 747 /* Must pass if payload length even (packet length odd) and
cannam@154 748 size<=2551, must fail otherwise. */
cannam@154 749 if(ret!=2)test_failed();
cannam@154 750 if(size[0]!=size[1] || size[0]!=((jj-1)>>1))test_failed();
cannam@154 751 if(frames[0]!=packet+1)test_failed();
cannam@154 752 if(frames[1]!=frames[0]+size[0])test_failed();
cannam@154 753 if((toc>>2)!=i)test_failed();
cannam@154 754 } else if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 755 }
cannam@154 756 }
cannam@154 757 fprintf(stdout," code 1 (%6d cases) ........................ OK.\n",cfgs);
cannam@154 758 cfgs_total+=cfgs;cfgs=0;
cannam@154 759
cannam@154 760 for(i=0;i<64;i++)
cannam@154 761 {
cannam@154 762 /*code 2, length code overflow*/
cannam@154 763 packet[0]=(i<<2)+2;
cannam@154 764 UNDEFINE_FOR_PARSE
cannam@154 765 ret=opus_packet_parse(packet,1,&toc,frames,size,&payload_offset);
cannam@154 766 cfgs++;
cannam@154 767 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 768 packet[1]=252;
cannam@154 769 UNDEFINE_FOR_PARSE
cannam@154 770 ret=opus_packet_parse(packet,2,&toc,frames,size,&payload_offset);
cannam@154 771 cfgs++;
cannam@154 772 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 773 for(j=0;j<1275;j++)
cannam@154 774 {
cannam@154 775 if(j<252)packet[1]=j;
cannam@154 776 else{packet[1]=252+(j&3);packet[2]=(j-252)>>2;}
cannam@154 777 /*Code 2, one too short*/
cannam@154 778 UNDEFINE_FOR_PARSE
cannam@154 779 ret=opus_packet_parse(packet,j+(j<252?2:3)-1,&toc,frames,size,&payload_offset);
cannam@154 780 cfgs++;
cannam@154 781 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 782 /*Code 2, one too long*/
cannam@154 783 UNDEFINE_FOR_PARSE
cannam@154 784 ret=opus_packet_parse(packet,j+(j<252?2:3)+1276,&toc,frames,size,&payload_offset);
cannam@154 785 cfgs++;
cannam@154 786 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 787 /*Code 2, second zero*/
cannam@154 788 UNDEFINE_FOR_PARSE
cannam@154 789 ret=opus_packet_parse(packet,j+(j<252?2:3),&toc,frames,size,&payload_offset);
cannam@154 790 cfgs++;
cannam@154 791 if(ret!=2)test_failed();
cannam@154 792 if(size[0]!=j||size[1]!=0)test_failed();
cannam@154 793 if(frames[1]!=frames[0]+size[0])test_failed();
cannam@154 794 if((toc>>2)!=i)test_failed();
cannam@154 795 /*Code 2, normal*/
cannam@154 796 UNDEFINE_FOR_PARSE
cannam@154 797 ret=opus_packet_parse(packet,(j<<1)+4,&toc,frames,size,&payload_offset);
cannam@154 798 cfgs++;
cannam@154 799 if(ret!=2)test_failed();
cannam@154 800 if(size[0]!=j||size[1]!=(j<<1)+3-j-(j<252?1:2))test_failed();
cannam@154 801 if(frames[1]!=frames[0]+size[0])test_failed();
cannam@154 802 if((toc>>2)!=i)test_failed();
cannam@154 803 }
cannam@154 804 }
cannam@154 805 fprintf(stdout," code 2 (%6d cases) ........................ OK.\n",cfgs);
cannam@154 806 cfgs_total+=cfgs;cfgs=0;
cannam@154 807
cannam@154 808 for(i=0;i<64;i++)
cannam@154 809 {
cannam@154 810 packet[0]=(i<<2)+3;
cannam@154 811 /*code 3, length code overflow*/
cannam@154 812 UNDEFINE_FOR_PARSE
cannam@154 813 ret=opus_packet_parse(packet,1,&toc,frames,size,&payload_offset);
cannam@154 814 cfgs++;
cannam@154 815 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 816 }
cannam@154 817 fprintf(stdout," code 3 m-truncation (%2d cases) ............... OK.\n",cfgs);
cannam@154 818 cfgs_total+=cfgs;cfgs=0;
cannam@154 819
cannam@154 820 for(i=0;i<64;i++)
cannam@154 821 {
cannam@154 822 /*code 3, m is zero or 49-63*/
cannam@154 823 packet[0]=(i<<2)+3;
cannam@154 824 for(jj=49;jj<=64;jj++)
cannam@154 825 {
cannam@154 826 packet[1]=0+(jj&63); /*CBR, no padding*/
cannam@154 827 UNDEFINE_FOR_PARSE
cannam@154 828 ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset);
cannam@154 829 cfgs++;
cannam@154 830 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 831 packet[1]=128+(jj&63); /*VBR, no padding*/
cannam@154 832 UNDEFINE_FOR_PARSE
cannam@154 833 ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset);
cannam@154 834 cfgs++;
cannam@154 835 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 836 packet[1]=64+(jj&63); /*CBR, padding*/
cannam@154 837 UNDEFINE_FOR_PARSE
cannam@154 838 ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset);
cannam@154 839 cfgs++;
cannam@154 840 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 841 packet[1]=128+64+(jj&63); /*VBR, padding*/
cannam@154 842 UNDEFINE_FOR_PARSE
cannam@154 843 ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset);
cannam@154 844 cfgs++;
cannam@154 845 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 846 }
cannam@154 847 }
cannam@154 848 fprintf(stdout," code 3 m=0,49-64 (%2d cases) ................ OK.\n",cfgs);
cannam@154 849 cfgs_total+=cfgs;cfgs=0;
cannam@154 850
cannam@154 851 for(i=0;i<64;i++)
cannam@154 852 {
cannam@154 853 packet[0]=(i<<2)+3;
cannam@154 854 /*code 3, m is one, cbr*/
cannam@154 855 packet[1]=1;
cannam@154 856 for(j=0;j<1276;j++)
cannam@154 857 {
cannam@154 858 UNDEFINE_FOR_PARSE
cannam@154 859 ret=opus_packet_parse(packet,j+2,&toc,frames,size,&payload_offset);
cannam@154 860 cfgs++;
cannam@154 861 if(ret!=1)test_failed();
cannam@154 862 if(size[0]!=j)test_failed();
cannam@154 863 if((toc>>2)!=i)test_failed();
cannam@154 864 }
cannam@154 865 UNDEFINE_FOR_PARSE
cannam@154 866 ret=opus_packet_parse(packet,1276+2,&toc,frames,size,&payload_offset);
cannam@154 867 cfgs++;
cannam@154 868 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 869 }
cannam@154 870 fprintf(stdout," code 3 m=1 CBR (%2d cases) ................. OK.\n",cfgs);
cannam@154 871 cfgs_total+=cfgs;cfgs=0;
cannam@154 872
cannam@154 873 for(i=0;i<64;i++)
cannam@154 874 {
cannam@154 875 int frame_samp;
cannam@154 876 /*code 3, m>1 CBR*/
cannam@154 877 packet[0]=(i<<2)+3;
cannam@154 878 frame_samp=opus_packet_get_samples_per_frame(packet,48000);
cannam@154 879 for(j=2;j<49;j++)
cannam@154 880 {
cannam@154 881 packet[1]=j;
cannam@154 882 for(sz=2;sz<((j+2)*1275);sz++)
cannam@154 883 {
cannam@154 884 UNDEFINE_FOR_PARSE
cannam@154 885 ret=opus_packet_parse(packet,sz,&toc,frames,size,&payload_offset);
cannam@154 886 cfgs++;
cannam@154 887 /*Must be <=120ms, must be evenly divisible, can't have frames>1275 bytes*/
cannam@154 888 if(frame_samp*j<=5760 && (sz-2)%j==0 && (sz-2)/j<1276)
cannam@154 889 {
cannam@154 890 if(ret!=j)test_failed();
cannam@154 891 for(jj=1;jj<ret;jj++)if(frames[jj]!=frames[jj-1]+size[jj-1])test_failed();
cannam@154 892 if((toc>>2)!=i)test_failed();
cannam@154 893 } else if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 894 }
cannam@154 895 }
cannam@154 896 /*Super jumbo packets*/
cannam@154 897 packet[1]=5760/frame_samp;
cannam@154 898 UNDEFINE_FOR_PARSE
cannam@154 899 ret=opus_packet_parse(packet,1275*packet[1]+2,&toc,frames,size,&payload_offset);
cannam@154 900 cfgs++;
cannam@154 901 if(ret!=packet[1])test_failed();
cannam@154 902 for(jj=0;jj<ret;jj++)if(size[jj]!=1275)test_failed();
cannam@154 903 }
cannam@154 904 fprintf(stdout," code 3 m=1-48 CBR (%2d cases) .......... OK.\n",cfgs);
cannam@154 905 cfgs_total+=cfgs;cfgs=0;
cannam@154 906
cannam@154 907 for(i=0;i<64;i++)
cannam@154 908 {
cannam@154 909 int frame_samp;
cannam@154 910 /*Code 3 VBR, m one*/
cannam@154 911 packet[0]=(i<<2)+3;
cannam@154 912 packet[1]=128+1;
cannam@154 913 frame_samp=opus_packet_get_samples_per_frame(packet,48000);
cannam@154 914 for(jj=0;jj<1276;jj++)
cannam@154 915 {
cannam@154 916 UNDEFINE_FOR_PARSE
cannam@154 917 ret=opus_packet_parse(packet,2+jj,&toc,frames,size,&payload_offset);
cannam@154 918 cfgs++;
cannam@154 919 if(ret!=1)test_failed();
cannam@154 920 if(size[0]!=jj)test_failed();
cannam@154 921 if((toc>>2)!=i)test_failed();
cannam@154 922 }
cannam@154 923 UNDEFINE_FOR_PARSE
cannam@154 924 ret=opus_packet_parse(packet,2+1276,&toc,frames,size,&payload_offset);
cannam@154 925 cfgs++;
cannam@154 926 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 927 for(j=2;j<49;j++)
cannam@154 928 {
cannam@154 929 packet[1]=128+j;
cannam@154 930 /*Length code overflow*/
cannam@154 931 UNDEFINE_FOR_PARSE
cannam@154 932 ret=opus_packet_parse(packet,2+j-2,&toc,frames,size,&payload_offset);
cannam@154 933 cfgs++;
cannam@154 934 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 935 packet[2]=252;
cannam@154 936 packet[3]=0;
cannam@154 937 for(jj=4;jj<2+j;jj++)packet[jj]=0;
cannam@154 938 UNDEFINE_FOR_PARSE
cannam@154 939 ret=opus_packet_parse(packet,2+j,&toc,frames,size,&payload_offset);
cannam@154 940 cfgs++;
cannam@154 941 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 942 /*One byte too short*/
cannam@154 943 for(jj=2;jj<2+j;jj++)packet[jj]=0;
cannam@154 944 UNDEFINE_FOR_PARSE
cannam@154 945 ret=opus_packet_parse(packet,2+j-2,&toc,frames,size,&payload_offset);
cannam@154 946 cfgs++;
cannam@154 947 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 948 /*One byte too short thanks to length coding*/
cannam@154 949 packet[2]=252;
cannam@154 950 packet[3]=0;
cannam@154 951 for(jj=4;jj<2+j;jj++)packet[jj]=0;
cannam@154 952 UNDEFINE_FOR_PARSE
cannam@154 953 ret=opus_packet_parse(packet,2+j+252-1,&toc,frames,size,&payload_offset);
cannam@154 954 cfgs++;
cannam@154 955 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 956 /*Most expensive way of coding zeros*/
cannam@154 957 for(jj=2;jj<2+j;jj++)packet[jj]=0;
cannam@154 958 UNDEFINE_FOR_PARSE
cannam@154 959 ret=opus_packet_parse(packet,2+j-1,&toc,frames,size,&payload_offset);
cannam@154 960 cfgs++;
cannam@154 961 if(frame_samp*j<=5760){
cannam@154 962 if(ret!=j)test_failed();
cannam@154 963 for(jj=0;jj<j;jj++)if(size[jj]!=0)test_failed();
cannam@154 964 if((toc>>2)!=i)test_failed();
cannam@154 965 } else if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 966 /*Quasi-CBR use of mode 3*/
cannam@154 967 for(sz=0;sz<8;sz++)
cannam@154 968 {
cannam@154 969 const int tsz[8]={50,201,403,700,1472,5110,20400,61298};
cannam@154 970 int pos=0;
cannam@154 971 int as=(tsz[sz]+i-j-2)/j;
cannam@154 972 for(jj=0;jj<j-1;jj++)
cannam@154 973 {
cannam@154 974 if(as<252){packet[2+pos]=as;pos++;}
cannam@154 975 else{packet[2+pos]=252+(as&3);packet[3+pos]=(as-252)>>2;pos+=2;}
cannam@154 976 }
cannam@154 977 UNDEFINE_FOR_PARSE
cannam@154 978 ret=opus_packet_parse(packet,tsz[sz]+i,&toc,frames,size,&payload_offset);
cannam@154 979 cfgs++;
cannam@154 980 if(frame_samp*j<=5760 && as<1276 && (tsz[sz]+i-2-pos-as*(j-1))<1276){
cannam@154 981 if(ret!=j)test_failed();
cannam@154 982 for(jj=0;jj<j-1;jj++)if(size[jj]!=as)test_failed();
cannam@154 983 if(size[j-1]!=(tsz[sz]+i-2-pos-as*(j-1)))test_failed();
cannam@154 984 if((toc>>2)!=i)test_failed();
cannam@154 985 } else if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 986 }
cannam@154 987 }
cannam@154 988 }
cannam@154 989 fprintf(stdout," code 3 m=1-48 VBR (%2d cases) ............. OK.\n",cfgs);
cannam@154 990 cfgs_total+=cfgs;cfgs=0;
cannam@154 991
cannam@154 992 for(i=0;i<64;i++)
cannam@154 993 {
cannam@154 994 packet[0]=(i<<2)+3;
cannam@154 995 /*Padding*/
cannam@154 996 packet[1]=128+1+64;
cannam@154 997 /*Overflow the length coding*/
cannam@154 998 for(jj=2;jj<127;jj++)packet[jj]=255;
cannam@154 999 UNDEFINE_FOR_PARSE
cannam@154 1000 ret=opus_packet_parse(packet,127,&toc,frames,size,&payload_offset);
cannam@154 1001 cfgs++;
cannam@154 1002 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1003
cannam@154 1004 for(sz=0;sz<4;sz++)
cannam@154 1005 {
cannam@154 1006 const int tsz[4]={0,72,512,1275};
cannam@154 1007 for(jj=sz;jj<65025;jj+=11)
cannam@154 1008 {
cannam@154 1009 int pos;
cannam@154 1010 for(pos=0;pos<jj/254;pos++)packet[2+pos]=255;
cannam@154 1011 packet[2+pos]=jj%254;
cannam@154 1012 pos++;
cannam@154 1013 if(sz==0&&i==63)
cannam@154 1014 {
cannam@154 1015 /*Code more padding than there is room in the packet*/
cannam@154 1016 UNDEFINE_FOR_PARSE
cannam@154 1017 ret=opus_packet_parse(packet,2+jj+pos-1,&toc,frames,size,&payload_offset);
cannam@154 1018 cfgs++;
cannam@154 1019 if(ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1020 }
cannam@154 1021 UNDEFINE_FOR_PARSE
cannam@154 1022 ret=opus_packet_parse(packet,2+jj+tsz[sz]+i+pos,&toc,frames,size,&payload_offset);
cannam@154 1023 cfgs++;
cannam@154 1024 if(tsz[sz]+i<1276)
cannam@154 1025 {
cannam@154 1026 if(ret!=1)test_failed();
cannam@154 1027 if(size[0]!=tsz[sz]+i)test_failed();
cannam@154 1028 if((toc>>2)!=i)test_failed();
cannam@154 1029 } else if (ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1030 }
cannam@154 1031 }
cannam@154 1032 }
cannam@154 1033 fprintf(stdout," code 3 padding (%2d cases) ............... OK.\n",cfgs);
cannam@154 1034 cfgs_total+=cfgs;
cannam@154 1035 fprintf(stdout," opus_packet_parse ............................ OK.\n");
cannam@154 1036 fprintf(stdout," All packet parsing tests passed\n");
cannam@154 1037 fprintf(stdout," (%d API invocations)\n",cfgs_total);
cannam@154 1038 return cfgs_total;
cannam@154 1039 }
cannam@154 1040
cannam@154 1041 /* This is a helper macro for the encoder tests.
cannam@154 1042 The encoder api tests all have a pattern of set-must-fail, set-must-fail,
cannam@154 1043 set-must-pass, get-and-compare, set-must-pass, get-and-compare. */
cannam@154 1044 #define CHECK_SETGET(setcall,getcall,badv,badv2,goodv,goodv2,sok,gok) \
cannam@154 1045 i=(badv);\
cannam@154 1046 if(opus_encoder_ctl(enc,setcall)==OPUS_OK)test_failed();\
cannam@154 1047 i=(badv2);\
cannam@154 1048 if(opus_encoder_ctl(enc,setcall)==OPUS_OK)test_failed();\
cannam@154 1049 j=i=(goodv);\
cannam@154 1050 if(opus_encoder_ctl(enc,setcall)!=OPUS_OK)test_failed();\
cannam@154 1051 i=-12345;\
cannam@154 1052 VG_UNDEF(&i,sizeof(i)); \
cannam@154 1053 err=opus_encoder_ctl(enc,getcall);\
cannam@154 1054 if(err!=OPUS_OK || i!=j)test_failed();\
cannam@154 1055 j=i=(goodv2);\
cannam@154 1056 if(opus_encoder_ctl(enc,setcall)!=OPUS_OK)test_failed();\
cannam@154 1057 fprintf(stdout,sok);\
cannam@154 1058 i=-12345;\
cannam@154 1059 VG_UNDEF(&i,sizeof(i)); \
cannam@154 1060 err=opus_encoder_ctl(enc,getcall);\
cannam@154 1061 if(err!=OPUS_OK || i!=j)test_failed();\
cannam@154 1062 fprintf(stdout,gok);\
cannam@154 1063 cfgs+=6;
cannam@154 1064
cannam@154 1065 opus_int32 test_enc_api(void)
cannam@154 1066 {
cannam@154 1067 opus_uint32 enc_final_range;
cannam@154 1068 OpusEncoder *enc;
cannam@154 1069 opus_int32 i,j;
cannam@154 1070 unsigned char packet[1276];
cannam@154 1071 #ifndef DISABLE_FLOAT_API
cannam@154 1072 float fbuf[960*2];
cannam@154 1073 #endif
cannam@154 1074 short sbuf[960*2];
cannam@154 1075 int c,err,cfgs;
cannam@154 1076
cannam@154 1077 cfgs=0;
cannam@154 1078 /*First test invalid configurations which should fail*/
cannam@154 1079 fprintf(stdout,"\n Encoder basic API tests\n");
cannam@154 1080 fprintf(stdout," ---------------------------------------------------\n");
cannam@154 1081 for(c=0;c<4;c++)
cannam@154 1082 {
cannam@154 1083 i=opus_encoder_get_size(c);
cannam@154 1084 if(((c==1||c==2)&&(i<=2048||i>1<<17))||((c!=1&&c!=2)&&i!=0))test_failed();
cannam@154 1085 fprintf(stdout," opus_encoder_get_size(%d)=%d ...............%s OK.\n",c,i,i>0?"":"....");
cannam@154 1086 cfgs++;
cannam@154 1087 }
cannam@154 1088
cannam@154 1089 /*Test with unsupported sample rates, channel counts*/
cannam@154 1090 for(c=0;c<4;c++)
cannam@154 1091 {
cannam@154 1092 for(i=-7;i<=96000;i++)
cannam@154 1093 {
cannam@154 1094 int fs;
cannam@154 1095 if((i==8000||i==12000||i==16000||i==24000||i==48000)&&(c==1||c==2))continue;
cannam@154 1096 switch(i)
cannam@154 1097 {
cannam@154 1098 case(-5):fs=-8000;break;
cannam@154 1099 case(-6):fs=INT32_MAX;break;
cannam@154 1100 case(-7):fs=INT32_MIN;break;
cannam@154 1101 default:fs=i;
cannam@154 1102 }
cannam@154 1103 err = OPUS_OK;
cannam@154 1104 VG_UNDEF(&err,sizeof(err));
cannam@154 1105 enc = opus_encoder_create(fs, c, OPUS_APPLICATION_VOIP, &err);
cannam@154 1106 if(err!=OPUS_BAD_ARG || enc!=NULL)test_failed();
cannam@154 1107 cfgs++;
cannam@154 1108 enc = opus_encoder_create(fs, c, OPUS_APPLICATION_VOIP, 0);
cannam@154 1109 if(enc!=NULL)test_failed();
cannam@154 1110 cfgs++;
cannam@154 1111 opus_encoder_destroy(enc);
cannam@154 1112 enc=malloc(opus_encoder_get_size(2));
cannam@154 1113 if(enc==NULL)test_failed();
cannam@154 1114 err = opus_encoder_init(enc, fs, c, OPUS_APPLICATION_VOIP);
cannam@154 1115 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1116 cfgs++;
cannam@154 1117 free(enc);
cannam@154 1118 }
cannam@154 1119 }
cannam@154 1120
cannam@154 1121 enc = opus_encoder_create(48000, 2, OPUS_AUTO, NULL);
cannam@154 1122 if(enc!=NULL)test_failed();
cannam@154 1123 cfgs++;
cannam@154 1124
cannam@154 1125 VG_UNDEF(&err,sizeof(err));
cannam@154 1126 enc = opus_encoder_create(48000, 2, OPUS_AUTO, &err);
cannam@154 1127 if(err!=OPUS_BAD_ARG || enc!=NULL)test_failed();
cannam@154 1128 cfgs++;
cannam@154 1129
cannam@154 1130 VG_UNDEF(&err,sizeof(err));
cannam@154 1131 enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, NULL);
cannam@154 1132 if(enc==NULL)test_failed();
cannam@154 1133 opus_encoder_destroy(enc);
cannam@154 1134 cfgs++;
cannam@154 1135
cannam@154 1136 VG_UNDEF(&err,sizeof(err));
cannam@154 1137 enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_RESTRICTED_LOWDELAY, &err);
cannam@154 1138 if(err!=OPUS_OK || enc==NULL)test_failed();
cannam@154 1139 cfgs++;
cannam@154 1140 err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD(&i));
cannam@154 1141 if(err!=OPUS_OK || i<0 || i>32766)test_failed();
cannam@154 1142 cfgs++;
cannam@154 1143 opus_encoder_destroy(enc);
cannam@154 1144
cannam@154 1145 VG_UNDEF(&err,sizeof(err));
cannam@154 1146 enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_AUDIO, &err);
cannam@154 1147 if(err!=OPUS_OK || enc==NULL)test_failed();
cannam@154 1148 cfgs++;
cannam@154 1149 err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD(&i));
cannam@154 1150 if(err!=OPUS_OK || i<0 || i>32766)test_failed();
cannam@154 1151 opus_encoder_destroy(enc);
cannam@154 1152 cfgs++;
cannam@154 1153
cannam@154 1154 VG_UNDEF(&err,sizeof(err));
cannam@154 1155 enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, &err);
cannam@154 1156 if(err!=OPUS_OK || enc==NULL)test_failed();
cannam@154 1157 cfgs++;
cannam@154 1158
cannam@154 1159 fprintf(stdout," opus_encoder_create() ........................ OK.\n");
cannam@154 1160 fprintf(stdout," opus_encoder_init() .......................... OK.\n");
cannam@154 1161
cannam@154 1162 i=-12345;
cannam@154 1163 VG_UNDEF(&i,sizeof(i));
cannam@154 1164 err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD(&i));
cannam@154 1165 if(err!=OPUS_OK || i<0 || i>32766)test_failed();
cannam@154 1166 cfgs++;
cannam@154 1167 err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD(null_int_ptr));
cannam@154 1168 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1169 cfgs++;
cannam@154 1170 fprintf(stdout," OPUS_GET_LOOKAHEAD ........................... OK.\n");
cannam@154 1171
cannam@154 1172 err=opus_encoder_ctl(enc,OPUS_GET_SAMPLE_RATE(&i));
cannam@154 1173 if(err!=OPUS_OK || i!=48000)test_failed();
cannam@154 1174 cfgs++;
cannam@154 1175 err=opus_encoder_ctl(enc,OPUS_GET_SAMPLE_RATE(null_int_ptr));
cannam@154 1176 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1177 cfgs++;
cannam@154 1178 fprintf(stdout," OPUS_GET_SAMPLE_RATE ......................... OK.\n");
cannam@154 1179
cannam@154 1180 if(opus_encoder_ctl(enc,OPUS_UNIMPLEMENTED)!=OPUS_UNIMPLEMENTED)test_failed();
cannam@154 1181 fprintf(stdout," OPUS_UNIMPLEMENTED ........................... OK.\n");
cannam@154 1182 cfgs++;
cannam@154 1183
cannam@154 1184 err=opus_encoder_ctl(enc,OPUS_GET_APPLICATION(null_int_ptr));
cannam@154 1185 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1186 cfgs++;
cannam@154 1187 CHECK_SETGET(OPUS_SET_APPLICATION(i),OPUS_GET_APPLICATION(&i),-1,OPUS_AUTO,
cannam@154 1188 OPUS_APPLICATION_AUDIO,OPUS_APPLICATION_RESTRICTED_LOWDELAY,
cannam@154 1189 " OPUS_SET_APPLICATION ......................... OK.\n",
cannam@154 1190 " OPUS_GET_APPLICATION ......................... OK.\n")
cannam@154 1191
cannam@154 1192 err=opus_encoder_ctl(enc,OPUS_GET_BITRATE(null_int_ptr));
cannam@154 1193 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1194 cfgs++;
cannam@154 1195 if(opus_encoder_ctl(enc,OPUS_SET_BITRATE(1073741832))!=OPUS_OK)test_failed();
cannam@154 1196 cfgs++;
cannam@154 1197 VG_UNDEF(&i,sizeof(i));
cannam@154 1198 if(opus_encoder_ctl(enc,OPUS_GET_BITRATE(&i))!=OPUS_OK)test_failed();
cannam@154 1199 if(i>700000||i<256000)test_failed();
cannam@154 1200 cfgs++;
cannam@154 1201 CHECK_SETGET(OPUS_SET_BITRATE(i),OPUS_GET_BITRATE(&i),-12345,0,
cannam@154 1202 500,256000,
cannam@154 1203 " OPUS_SET_BITRATE ............................. OK.\n",
cannam@154 1204 " OPUS_GET_BITRATE ............................. OK.\n")
cannam@154 1205
cannam@154 1206 err=opus_encoder_ctl(enc,OPUS_GET_FORCE_CHANNELS(null_int_ptr));
cannam@154 1207 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1208 cfgs++;
cannam@154 1209 CHECK_SETGET(OPUS_SET_FORCE_CHANNELS(i),OPUS_GET_FORCE_CHANNELS(&i),-1,3,
cannam@154 1210 1,OPUS_AUTO,
cannam@154 1211 " OPUS_SET_FORCE_CHANNELS ...................... OK.\n",
cannam@154 1212 " OPUS_GET_FORCE_CHANNELS ...................... OK.\n")
cannam@154 1213
cannam@154 1214 i=-2;
cannam@154 1215 if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))==OPUS_OK)test_failed();
cannam@154 1216 cfgs++;
cannam@154 1217 i=OPUS_BANDWIDTH_FULLBAND+1;
cannam@154 1218 if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))==OPUS_OK)test_failed();
cannam@154 1219 cfgs++;
cannam@154 1220 i=OPUS_BANDWIDTH_NARROWBAND;
cannam@154 1221 if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1222 cfgs++;
cannam@154 1223 i=OPUS_BANDWIDTH_FULLBAND;
cannam@154 1224 if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1225 cfgs++;
cannam@154 1226 i=OPUS_BANDWIDTH_WIDEBAND;
cannam@154 1227 if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1228 cfgs++;
cannam@154 1229 i=OPUS_BANDWIDTH_MEDIUMBAND;
cannam@154 1230 if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1231 cfgs++;
cannam@154 1232 fprintf(stdout," OPUS_SET_BANDWIDTH ........................... OK.\n");
cannam@154 1233 /*We don't test if the bandwidth has actually changed.
cannam@154 1234 because the change may be delayed until the encoder is advanced.*/
cannam@154 1235 i=-12345;
cannam@154 1236 VG_UNDEF(&i,sizeof(i));
cannam@154 1237 err=opus_encoder_ctl(enc,OPUS_GET_BANDWIDTH(&i));
cannam@154 1238 if(err!=OPUS_OK || (i!=OPUS_BANDWIDTH_NARROWBAND&&
cannam@154 1239 i!=OPUS_BANDWIDTH_MEDIUMBAND&&i!=OPUS_BANDWIDTH_WIDEBAND&&
cannam@154 1240 i!=OPUS_BANDWIDTH_FULLBAND&&i!=OPUS_AUTO))test_failed();
cannam@154 1241 cfgs++;
cannam@154 1242 if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(OPUS_AUTO))!=OPUS_OK)test_failed();
cannam@154 1243 cfgs++;
cannam@154 1244 err=opus_encoder_ctl(enc,OPUS_GET_BANDWIDTH(null_int_ptr));
cannam@154 1245 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1246 cfgs++;
cannam@154 1247 fprintf(stdout," OPUS_GET_BANDWIDTH ........................... OK.\n");
cannam@154 1248
cannam@154 1249 i=-2;
cannam@154 1250 if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))==OPUS_OK)test_failed();
cannam@154 1251 cfgs++;
cannam@154 1252 i=OPUS_BANDWIDTH_FULLBAND+1;
cannam@154 1253 if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))==OPUS_OK)test_failed();
cannam@154 1254 cfgs++;
cannam@154 1255 i=OPUS_BANDWIDTH_NARROWBAND;
cannam@154 1256 if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1257 cfgs++;
cannam@154 1258 i=OPUS_BANDWIDTH_FULLBAND;
cannam@154 1259 if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1260 cfgs++;
cannam@154 1261 i=OPUS_BANDWIDTH_WIDEBAND;
cannam@154 1262 if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1263 cfgs++;
cannam@154 1264 i=OPUS_BANDWIDTH_MEDIUMBAND;
cannam@154 1265 if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed();
cannam@154 1266 cfgs++;
cannam@154 1267 fprintf(stdout," OPUS_SET_MAX_BANDWIDTH ....................... OK.\n");
cannam@154 1268 /*We don't test if the bandwidth has actually changed.
cannam@154 1269 because the change may be delayed until the encoder is advanced.*/
cannam@154 1270 i=-12345;
cannam@154 1271 VG_UNDEF(&i,sizeof(i));
cannam@154 1272 err=opus_encoder_ctl(enc,OPUS_GET_MAX_BANDWIDTH(&i));
cannam@154 1273 if(err!=OPUS_OK || (i!=OPUS_BANDWIDTH_NARROWBAND&&
cannam@154 1274 i!=OPUS_BANDWIDTH_MEDIUMBAND&&i!=OPUS_BANDWIDTH_WIDEBAND&&
cannam@154 1275 i!=OPUS_BANDWIDTH_FULLBAND))test_failed();
cannam@154 1276 cfgs++;
cannam@154 1277 err=opus_encoder_ctl(enc,OPUS_GET_MAX_BANDWIDTH(null_int_ptr));
cannam@154 1278 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1279 cfgs++;
cannam@154 1280 fprintf(stdout," OPUS_GET_MAX_BANDWIDTH ....................... OK.\n");
cannam@154 1281
cannam@154 1282 err=opus_encoder_ctl(enc,OPUS_GET_DTX(null_int_ptr));
cannam@154 1283 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1284 cfgs++;
cannam@154 1285 CHECK_SETGET(OPUS_SET_DTX(i),OPUS_GET_DTX(&i),-1,2,
cannam@154 1286 1,0,
cannam@154 1287 " OPUS_SET_DTX ................................. OK.\n",
cannam@154 1288 " OPUS_GET_DTX ................................. OK.\n")
cannam@154 1289
cannam@154 1290 err=opus_encoder_ctl(enc,OPUS_GET_COMPLEXITY(null_int_ptr));
cannam@154 1291 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1292 cfgs++;
cannam@154 1293 CHECK_SETGET(OPUS_SET_COMPLEXITY(i),OPUS_GET_COMPLEXITY(&i),-1,11,
cannam@154 1294 0,10,
cannam@154 1295 " OPUS_SET_COMPLEXITY .......................... OK.\n",
cannam@154 1296 " OPUS_GET_COMPLEXITY .......................... OK.\n")
cannam@154 1297
cannam@154 1298 err=opus_encoder_ctl(enc,OPUS_GET_INBAND_FEC(null_int_ptr));
cannam@154 1299 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1300 cfgs++;
cannam@154 1301 CHECK_SETGET(OPUS_SET_INBAND_FEC(i),OPUS_GET_INBAND_FEC(&i),-1,2,
cannam@154 1302 1,0,
cannam@154 1303 " OPUS_SET_INBAND_FEC .......................... OK.\n",
cannam@154 1304 " OPUS_GET_INBAND_FEC .......................... OK.\n")
cannam@154 1305
cannam@154 1306 err=opus_encoder_ctl(enc,OPUS_GET_PACKET_LOSS_PERC(null_int_ptr));
cannam@154 1307 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1308 cfgs++;
cannam@154 1309 CHECK_SETGET(OPUS_SET_PACKET_LOSS_PERC(i),OPUS_GET_PACKET_LOSS_PERC(&i),-1,101,
cannam@154 1310 100,0,
cannam@154 1311 " OPUS_SET_PACKET_LOSS_PERC .................... OK.\n",
cannam@154 1312 " OPUS_GET_PACKET_LOSS_PERC .................... OK.\n")
cannam@154 1313
cannam@154 1314 err=opus_encoder_ctl(enc,OPUS_GET_VBR(null_int_ptr));
cannam@154 1315 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1316 cfgs++;
cannam@154 1317 CHECK_SETGET(OPUS_SET_VBR(i),OPUS_GET_VBR(&i),-1,2,
cannam@154 1318 1,0,
cannam@154 1319 " OPUS_SET_VBR ................................. OK.\n",
cannam@154 1320 " OPUS_GET_VBR ................................. OK.\n")
cannam@154 1321
cannam@154 1322 /* err=opus_encoder_ctl(enc,OPUS_GET_VOICE_RATIO(null_int_ptr));
cannam@154 1323 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1324 cfgs++;
cannam@154 1325 CHECK_SETGET(OPUS_SET_VOICE_RATIO(i),OPUS_GET_VOICE_RATIO(&i),-2,101,
cannam@154 1326 0,50,
cannam@154 1327 " OPUS_SET_VOICE_RATIO ......................... OK.\n",
cannam@154 1328 " OPUS_GET_VOICE_RATIO ......................... OK.\n")*/
cannam@154 1329
cannam@154 1330 err=opus_encoder_ctl(enc,OPUS_GET_VBR_CONSTRAINT(null_int_ptr));
cannam@154 1331 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1332 cfgs++;
cannam@154 1333 CHECK_SETGET(OPUS_SET_VBR_CONSTRAINT(i),OPUS_GET_VBR_CONSTRAINT(&i),-1,2,
cannam@154 1334 1,0,
cannam@154 1335 " OPUS_SET_VBR_CONSTRAINT ...................... OK.\n",
cannam@154 1336 " OPUS_GET_VBR_CONSTRAINT ...................... OK.\n")
cannam@154 1337
cannam@154 1338 err=opus_encoder_ctl(enc,OPUS_GET_SIGNAL(null_int_ptr));
cannam@154 1339 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1340 cfgs++;
cannam@154 1341 CHECK_SETGET(OPUS_SET_SIGNAL(i),OPUS_GET_SIGNAL(&i),-12345,0x7FFFFFFF,
cannam@154 1342 OPUS_SIGNAL_MUSIC,OPUS_AUTO,
cannam@154 1343 " OPUS_SET_SIGNAL .............................. OK.\n",
cannam@154 1344 " OPUS_GET_SIGNAL .............................. OK.\n")
cannam@154 1345
cannam@154 1346 err=opus_encoder_ctl(enc,OPUS_GET_LSB_DEPTH(null_int_ptr));
cannam@154 1347 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1348 cfgs++;
cannam@154 1349 CHECK_SETGET(OPUS_SET_LSB_DEPTH(i),OPUS_GET_LSB_DEPTH(&i),7,25,16,24,
cannam@154 1350 " OPUS_SET_LSB_DEPTH ........................... OK.\n",
cannam@154 1351 " OPUS_GET_LSB_DEPTH ........................... OK.\n")
cannam@154 1352
cannam@154 1353 err=opus_encoder_ctl(enc,OPUS_GET_PREDICTION_DISABLED(&i));
cannam@154 1354 if(i!=0)test_failed();
cannam@154 1355 cfgs++;
cannam@154 1356 err=opus_encoder_ctl(enc,OPUS_GET_PREDICTION_DISABLED(null_int_ptr));
cannam@154 1357 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1358 cfgs++;
cannam@154 1359 CHECK_SETGET(OPUS_SET_PREDICTION_DISABLED(i),OPUS_GET_PREDICTION_DISABLED(&i),-1,2,1,0,
cannam@154 1360 " OPUS_SET_PREDICTION_DISABLED ................. OK.\n",
cannam@154 1361 " OPUS_GET_PREDICTION_DISABLED ................. OK.\n")
cannam@154 1362
cannam@154 1363 err=opus_encoder_ctl(enc,OPUS_GET_EXPERT_FRAME_DURATION(null_int_ptr));
cannam@154 1364 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1365 cfgs++;
cannam@154 1366 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_2_5_MS));
cannam@154 1367 if(err!=OPUS_OK)test_failed();
cannam@154 1368 cfgs++;
cannam@154 1369 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_5_MS));
cannam@154 1370 if(err!=OPUS_OK)test_failed();
cannam@154 1371 cfgs++;
cannam@154 1372 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_10_MS));
cannam@154 1373 if(err!=OPUS_OK)test_failed();
cannam@154 1374 cfgs++;
cannam@154 1375 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_20_MS));
cannam@154 1376 if(err!=OPUS_OK)test_failed();
cannam@154 1377 cfgs++;
cannam@154 1378 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_40_MS));
cannam@154 1379 if(err!=OPUS_OK)test_failed();
cannam@154 1380 cfgs++;
cannam@154 1381 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_60_MS));
cannam@154 1382 if(err!=OPUS_OK)test_failed();
cannam@154 1383 cfgs++;
cannam@154 1384 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_80_MS));
cannam@154 1385 if(err!=OPUS_OK)test_failed();
cannam@154 1386 cfgs++;
cannam@154 1387 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_100_MS));
cannam@154 1388 if(err!=OPUS_OK)test_failed();
cannam@154 1389 cfgs++;
cannam@154 1390 err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_120_MS));
cannam@154 1391 if(err!=OPUS_OK)test_failed();
cannam@154 1392 cfgs++;
cannam@154 1393 CHECK_SETGET(OPUS_SET_EXPERT_FRAME_DURATION(i),OPUS_GET_EXPERT_FRAME_DURATION(&i),0,-1,
cannam@154 1394 OPUS_FRAMESIZE_60_MS,OPUS_FRAMESIZE_ARG,
cannam@154 1395 " OPUS_SET_EXPERT_FRAME_DURATION ............... OK.\n",
cannam@154 1396 " OPUS_GET_EXPERT_FRAME_DURATION ............... OK.\n")
cannam@154 1397
cannam@154 1398 /*OPUS_SET_FORCE_MODE is not tested here because it's not a public API, however the encoder tests use it*/
cannam@154 1399
cannam@154 1400 err=opus_encoder_ctl(enc,OPUS_GET_FINAL_RANGE(null_uint_ptr));
cannam@154 1401 if(err!=OPUS_BAD_ARG)test_failed();
cannam@154 1402 cfgs++;
cannam@154 1403 if(opus_encoder_ctl(enc,OPUS_GET_FINAL_RANGE(&enc_final_range))!=OPUS_OK)test_failed();
cannam@154 1404 cfgs++;
cannam@154 1405 fprintf(stdout," OPUS_GET_FINAL_RANGE ......................... OK.\n");
cannam@154 1406
cannam@154 1407 /*Reset the encoder*/
cannam@154 1408 if(opus_encoder_ctl(enc, OPUS_RESET_STATE)!=OPUS_OK)test_failed();
cannam@154 1409 cfgs++;
cannam@154 1410 fprintf(stdout," OPUS_RESET_STATE ............................. OK.\n");
cannam@154 1411
cannam@154 1412 memset(sbuf,0,sizeof(short)*2*960);
cannam@154 1413 VG_UNDEF(packet,sizeof(packet));
cannam@154 1414 i=opus_encode(enc, sbuf, 960, packet, sizeof(packet));
cannam@154 1415 if(i<1 || (i>(opus_int32)sizeof(packet)))test_failed();
cannam@154 1416 VG_CHECK(packet,i);
cannam@154 1417 cfgs++;
cannam@154 1418 fprintf(stdout," opus_encode() ................................ OK.\n");
cannam@154 1419 #ifndef DISABLE_FLOAT_API
cannam@154 1420 memset(fbuf,0,sizeof(float)*2*960);
cannam@154 1421 VG_UNDEF(packet,sizeof(packet));
cannam@154 1422 i=opus_encode_float(enc, fbuf, 960, packet, sizeof(packet));
cannam@154 1423 if(i<1 || (i>(opus_int32)sizeof(packet)))test_failed();
cannam@154 1424 VG_CHECK(packet,i);
cannam@154 1425 cfgs++;
cannam@154 1426 fprintf(stdout," opus_encode_float() .......................... OK.\n");
cannam@154 1427 #endif
cannam@154 1428
cannam@154 1429 #if 0
cannam@154 1430 /*These tests are disabled because the library crashes with null states*/
cannam@154 1431 if(opus_encoder_ctl(0,OPUS_RESET_STATE) !=OPUS_INVALID_STATE)test_failed();
cannam@154 1432 if(opus_encoder_init(0,48000,1,OPUS_APPLICATION_VOIP) !=OPUS_INVALID_STATE)test_failed();
cannam@154 1433 if(opus_encode(0,sbuf,960,packet,sizeof(packet)) !=OPUS_INVALID_STATE)test_failed();
cannam@154 1434 if(opus_encode_float(0,fbuf,960,packet,sizeof(packet))!=OPUS_INVALID_STATE)test_failed();
cannam@154 1435 #endif
cannam@154 1436 opus_encoder_destroy(enc);
cannam@154 1437 cfgs++;
cannam@154 1438 fprintf(stdout," All encoder interface tests passed\n");
cannam@154 1439 fprintf(stdout," (%d API invocations)\n",cfgs);
cannam@154 1440 return cfgs;
cannam@154 1441 }
cannam@154 1442
cannam@154 1443 #define max_out (1276*48+48*2+2)
cannam@154 1444 int test_repacketizer_api(void)
cannam@154 1445 {
cannam@154 1446 int ret,cfgs,i,j,k;
cannam@154 1447 OpusRepacketizer *rp;
cannam@154 1448 unsigned char *packet;
cannam@154 1449 unsigned char *po;
cannam@154 1450 cfgs=0;
cannam@154 1451 fprintf(stdout,"\n Repacketizer tests\n");
cannam@154 1452 fprintf(stdout," ---------------------------------------------------\n");
cannam@154 1453
cannam@154 1454 packet=malloc(max_out);
cannam@154 1455 if(packet==NULL)test_failed();
cannam@154 1456 memset(packet,0,max_out);
cannam@154 1457 po=malloc(max_out+256);
cannam@154 1458 if(po==NULL)test_failed();
cannam@154 1459
cannam@154 1460 i=opus_repacketizer_get_size();
cannam@154 1461 if(i<=0)test_failed();
cannam@154 1462 cfgs++;
cannam@154 1463 fprintf(stdout," opus_repacketizer_get_size()=%d ............. OK.\n",i);
cannam@154 1464
cannam@154 1465 rp=malloc(i);
cannam@154 1466 rp=opus_repacketizer_init(rp);
cannam@154 1467 if(rp==NULL)test_failed();
cannam@154 1468 cfgs++;
cannam@154 1469 free(rp);
cannam@154 1470 fprintf(stdout," opus_repacketizer_init ....................... OK.\n");
cannam@154 1471
cannam@154 1472 rp=opus_repacketizer_create();
cannam@154 1473 if(rp==NULL)test_failed();
cannam@154 1474 cfgs++;
cannam@154 1475 fprintf(stdout," opus_repacketizer_create ..................... OK.\n");
cannam@154 1476
cannam@154 1477 if(opus_repacketizer_get_nb_frames(rp)!=0)test_failed();
cannam@154 1478 cfgs++;
cannam@154 1479 fprintf(stdout," opus_repacketizer_get_nb_frames .............. OK.\n");
cannam@154 1480
cannam@154 1481 /*Length overflows*/
cannam@154 1482 VG_UNDEF(packet,4);
cannam@154 1483 if(opus_repacketizer_cat(rp,packet,0)!=OPUS_INVALID_PACKET)test_failed(); /* Zero len */
cannam@154 1484 cfgs++;
cannam@154 1485 packet[0]=1;
cannam@154 1486 if(opus_repacketizer_cat(rp,packet,2)!=OPUS_INVALID_PACKET)test_failed(); /* Odd payload code 1 */
cannam@154 1487 cfgs++;
cannam@154 1488 packet[0]=2;
cannam@154 1489 if(opus_repacketizer_cat(rp,packet,1)!=OPUS_INVALID_PACKET)test_failed(); /* Code 2 overflow one */
cannam@154 1490 cfgs++;
cannam@154 1491 packet[0]=3;
cannam@154 1492 if(opus_repacketizer_cat(rp,packet,1)!=OPUS_INVALID_PACKET)test_failed(); /* Code 3 no count */
cannam@154 1493 cfgs++;
cannam@154 1494 packet[0]=2;
cannam@154 1495 packet[1]=255;
cannam@154 1496 if(opus_repacketizer_cat(rp,packet,2)!=OPUS_INVALID_PACKET)test_failed(); /* Code 2 overflow two */
cannam@154 1497 cfgs++;
cannam@154 1498 packet[0]=2;
cannam@154 1499 packet[1]=250;
cannam@154 1500 if(opus_repacketizer_cat(rp,packet,251)!=OPUS_INVALID_PACKET)test_failed(); /* Code 2 overflow three */
cannam@154 1501 cfgs++;
cannam@154 1502 packet[0]=3;
cannam@154 1503 packet[1]=0;
cannam@154 1504 if(opus_repacketizer_cat(rp,packet,2)!=OPUS_INVALID_PACKET)test_failed(); /* Code 3 m=0 */
cannam@154 1505 cfgs++;
cannam@154 1506 packet[1]=49;
cannam@154 1507 if(opus_repacketizer_cat(rp,packet,100)!=OPUS_INVALID_PACKET)test_failed(); /* Code 3 m=49 */
cannam@154 1508 cfgs++;
cannam@154 1509 packet[0]=0;
cannam@154 1510 if(opus_repacketizer_cat(rp,packet,3)!=OPUS_OK)test_failed();
cannam@154 1511 cfgs++;
cannam@154 1512 packet[0]=1<<2;
cannam@154 1513 if(opus_repacketizer_cat(rp,packet,3)!=OPUS_INVALID_PACKET)test_failed(); /* Change in TOC */
cannam@154 1514 cfgs++;
cannam@154 1515
cannam@154 1516 /* Code 0,1,3 CBR -> Code 0,1,3 CBR */
cannam@154 1517 opus_repacketizer_init(rp);
cannam@154 1518 for(j=0;j<32;j++)
cannam@154 1519 {
cannam@154 1520 /* TOC types, test half with stereo */
cannam@154 1521 int maxi;
cannam@154 1522 packet[0]=((j<<1)+(j&1))<<2;
cannam@154 1523 maxi=960/opus_packet_get_samples_per_frame(packet,8000);
cannam@154 1524 for(i=1;i<=maxi;i++)
cannam@154 1525 {
cannam@154 1526 /* Number of CBR frames in the input packets */
cannam@154 1527 int maxp;
cannam@154 1528 packet[0]=((j<<1)+(j&1))<<2;
cannam@154 1529 if(i>1)packet[0]+=i==2?1:3;
cannam@154 1530 packet[1]=i>2?i:0;
cannam@154 1531 maxp=960/(i*opus_packet_get_samples_per_frame(packet,8000));
cannam@154 1532 for(k=0;k<=(1275+75);k+=3)
cannam@154 1533 {
cannam@154 1534 /*Payload size*/
cannam@154 1535 opus_int32 cnt,rcnt;
cannam@154 1536 if(k%i!=0)continue; /* Only testing CBR here, payload must be a multiple of the count */
cannam@154 1537 for(cnt=0;cnt<maxp+2;cnt++)
cannam@154 1538 {
cannam@154 1539 if(cnt>0)
cannam@154 1540 {
cannam@154 1541 ret=opus_repacketizer_cat(rp,packet,k+(i>2?2:1));
cannam@154 1542 if((cnt<=maxp&&k<=(1275*i))?ret!=OPUS_OK:ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1543 cfgs++;
cannam@154 1544 }
cannam@154 1545 rcnt=k<=(1275*i)?(cnt<maxp?cnt:maxp):0;
cannam@154 1546 if(opus_repacketizer_get_nb_frames(rp)!=rcnt*i)test_failed();
cannam@154 1547 cfgs++;
cannam@154 1548 ret=opus_repacketizer_out_range(rp,0,rcnt*i,po,max_out);
cannam@154 1549 if(rcnt>0)
cannam@154 1550 {
cannam@154 1551 int len;
cannam@154 1552 len=k*rcnt+((rcnt*i)>2?2:1);
cannam@154 1553 if(ret!=len)test_failed();
cannam@154 1554 if((rcnt*i)<2&&(po[0]&3)!=0)test_failed(); /* Code 0 */
cannam@154 1555 if((rcnt*i)==2&&(po[0]&3)!=1)test_failed(); /* Code 1 */
cannam@154 1556 if((rcnt*i)>2&&(((po[0]&3)!=3)||(po[1]!=rcnt*i)))test_failed(); /* Code 3 CBR */
cannam@154 1557 cfgs++;
cannam@154 1558 if(opus_repacketizer_out(rp,po,len)!=len)test_failed();
cannam@154 1559 cfgs++;
cannam@154 1560 if(opus_packet_unpad(po,len)!=len)test_failed();
cannam@154 1561 cfgs++;
cannam@154 1562 if(opus_packet_pad(po,len,len+1)!=OPUS_OK)test_failed();
cannam@154 1563 cfgs++;
cannam@154 1564 if(opus_packet_pad(po,len+1,len+256)!=OPUS_OK)test_failed();
cannam@154 1565 cfgs++;
cannam@154 1566 if(opus_packet_unpad(po,len+256)!=len)test_failed();
cannam@154 1567 cfgs++;
cannam@154 1568 if(opus_multistream_packet_unpad(po,len,1)!=len)test_failed();
cannam@154 1569 cfgs++;
cannam@154 1570 if(opus_multistream_packet_pad(po,len,len+1,1)!=OPUS_OK)test_failed();
cannam@154 1571 cfgs++;
cannam@154 1572 if(opus_multistream_packet_pad(po,len+1,len+256,1)!=OPUS_OK)test_failed();
cannam@154 1573 cfgs++;
cannam@154 1574 if(opus_multistream_packet_unpad(po,len+256,1)!=len)test_failed();
cannam@154 1575 cfgs++;
cannam@154 1576 if(opus_repacketizer_out(rp,po,len-1)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 1577 cfgs++;
cannam@154 1578 if(len>1)
cannam@154 1579 {
cannam@154 1580 if(opus_repacketizer_out(rp,po,1)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 1581 cfgs++;
cannam@154 1582 }
cannam@154 1583 if(opus_repacketizer_out(rp,po,0)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 1584 cfgs++;
cannam@154 1585 } else if (ret!=OPUS_BAD_ARG)test_failed(); /* M must not be 0 */
cannam@154 1586 }
cannam@154 1587 opus_repacketizer_init(rp);
cannam@154 1588 }
cannam@154 1589 }
cannam@154 1590 }
cannam@154 1591
cannam@154 1592 /*Change in input count code, CBR out*/
cannam@154 1593 opus_repacketizer_init(rp);
cannam@154 1594 packet[0]=0;
cannam@154 1595 if(opus_repacketizer_cat(rp,packet,5)!=OPUS_OK)test_failed();
cannam@154 1596 cfgs++;
cannam@154 1597 packet[0]+=1;
cannam@154 1598 if(opus_repacketizer_cat(rp,packet,9)!=OPUS_OK)test_failed();
cannam@154 1599 cfgs++;
cannam@154 1600 i=opus_repacketizer_out(rp,po,max_out);
cannam@154 1601 if((i!=(4+8+2))||((po[0]&3)!=3)||((po[1]&63)!=3)||((po[1]>>7)!=0))test_failed();
cannam@154 1602 cfgs++;
cannam@154 1603 i=opus_repacketizer_out_range(rp,0,1,po,max_out);
cannam@154 1604 if(i!=5||(po[0]&3)!=0)test_failed();
cannam@154 1605 cfgs++;
cannam@154 1606 i=opus_repacketizer_out_range(rp,1,2,po,max_out);
cannam@154 1607 if(i!=5||(po[0]&3)!=0)test_failed();
cannam@154 1608 cfgs++;
cannam@154 1609
cannam@154 1610 /*Change in input count code, VBR out*/
cannam@154 1611 opus_repacketizer_init(rp);
cannam@154 1612 packet[0]=1;
cannam@154 1613 if(opus_repacketizer_cat(rp,packet,9)!=OPUS_OK)test_failed();
cannam@154 1614 cfgs++;
cannam@154 1615 packet[0]=0;
cannam@154 1616 if(opus_repacketizer_cat(rp,packet,3)!=OPUS_OK)test_failed();
cannam@154 1617 cfgs++;
cannam@154 1618 i=opus_repacketizer_out(rp,po,max_out);
cannam@154 1619 if((i!=(2+8+2+2))||((po[0]&3)!=3)||((po[1]&63)!=3)||((po[1]>>7)!=1))test_failed();
cannam@154 1620 cfgs++;
cannam@154 1621
cannam@154 1622 /*VBR in, VBR out*/
cannam@154 1623 opus_repacketizer_init(rp);
cannam@154 1624 packet[0]=2;
cannam@154 1625 packet[1]=4;
cannam@154 1626 if(opus_repacketizer_cat(rp,packet,8)!=OPUS_OK)test_failed();
cannam@154 1627 cfgs++;
cannam@154 1628 if(opus_repacketizer_cat(rp,packet,8)!=OPUS_OK)test_failed();
cannam@154 1629 cfgs++;
cannam@154 1630 i=opus_repacketizer_out(rp,po,max_out);
cannam@154 1631 if((i!=(2+1+1+1+4+2+4+2))||((po[0]&3)!=3)||((po[1]&63)!=4)||((po[1]>>7)!=1))test_failed();
cannam@154 1632 cfgs++;
cannam@154 1633
cannam@154 1634 /*VBR in, CBR out*/
cannam@154 1635 opus_repacketizer_init(rp);
cannam@154 1636 packet[0]=2;
cannam@154 1637 packet[1]=4;
cannam@154 1638 if(opus_repacketizer_cat(rp,packet,10)!=OPUS_OK)test_failed();
cannam@154 1639 cfgs++;
cannam@154 1640 if(opus_repacketizer_cat(rp,packet,10)!=OPUS_OK)test_failed();
cannam@154 1641 cfgs++;
cannam@154 1642 i=opus_repacketizer_out(rp,po,max_out);
cannam@154 1643 if((i!=(2+4+4+4+4))||((po[0]&3)!=3)||((po[1]&63)!=4)||((po[1]>>7)!=0))test_failed();
cannam@154 1644 cfgs++;
cannam@154 1645
cannam@154 1646 /*Count 0 in, VBR out*/
cannam@154 1647 for(j=0;j<32;j++)
cannam@154 1648 {
cannam@154 1649 /* TOC types, test half with stereo */
cannam@154 1650 int maxi,sum,rcnt;
cannam@154 1651 packet[0]=((j<<1)+(j&1))<<2;
cannam@154 1652 maxi=960/opus_packet_get_samples_per_frame(packet,8000);
cannam@154 1653 sum=0;
cannam@154 1654 rcnt=0;
cannam@154 1655 opus_repacketizer_init(rp);
cannam@154 1656 for(i=1;i<=maxi+2;i++)
cannam@154 1657 {
cannam@154 1658 int len;
cannam@154 1659 ret=opus_repacketizer_cat(rp,packet,i);
cannam@154 1660 if(rcnt<maxi)
cannam@154 1661 {
cannam@154 1662 if(ret!=OPUS_OK)test_failed();
cannam@154 1663 rcnt++;
cannam@154 1664 sum+=i-1;
cannam@154 1665 } else if (ret!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1666 cfgs++;
cannam@154 1667 len=sum+(rcnt<2?1:rcnt<3?2:2+rcnt-1);
cannam@154 1668 if(opus_repacketizer_out(rp,po,max_out)!=len)test_failed();
cannam@154 1669 if(rcnt>2&&(po[1]&63)!=rcnt)test_failed();
cannam@154 1670 if(rcnt==2&&(po[0]&3)!=2)test_failed();
cannam@154 1671 if(rcnt==1&&(po[0]&3)!=0)test_failed();
cannam@154 1672 cfgs++;
cannam@154 1673 if(opus_repacketizer_out(rp,po,len)!=len)test_failed();
cannam@154 1674 cfgs++;
cannam@154 1675 if(opus_packet_unpad(po,len)!=len)test_failed();
cannam@154 1676 cfgs++;
cannam@154 1677 if(opus_packet_pad(po,len,len+1)!=OPUS_OK)test_failed();
cannam@154 1678 cfgs++;
cannam@154 1679 if(opus_packet_pad(po,len+1,len+256)!=OPUS_OK)test_failed();
cannam@154 1680 cfgs++;
cannam@154 1681 if(opus_packet_unpad(po,len+256)!=len)test_failed();
cannam@154 1682 cfgs++;
cannam@154 1683 if(opus_multistream_packet_unpad(po,len,1)!=len)test_failed();
cannam@154 1684 cfgs++;
cannam@154 1685 if(opus_multistream_packet_pad(po,len,len+1,1)!=OPUS_OK)test_failed();
cannam@154 1686 cfgs++;
cannam@154 1687 if(opus_multistream_packet_pad(po,len+1,len+256,1)!=OPUS_OK)test_failed();
cannam@154 1688 cfgs++;
cannam@154 1689 if(opus_multistream_packet_unpad(po,len+256,1)!=len)test_failed();
cannam@154 1690 cfgs++;
cannam@154 1691 if(opus_repacketizer_out(rp,po,len-1)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 1692 cfgs++;
cannam@154 1693 if(len>1)
cannam@154 1694 {
cannam@154 1695 if(opus_repacketizer_out(rp,po,1)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 1696 cfgs++;
cannam@154 1697 }
cannam@154 1698 if(opus_repacketizer_out(rp,po,0)!=OPUS_BUFFER_TOO_SMALL)test_failed();
cannam@154 1699 cfgs++;
cannam@154 1700 }
cannam@154 1701 }
cannam@154 1702
cannam@154 1703 po[0]='O';
cannam@154 1704 po[1]='p';
cannam@154 1705 if(opus_packet_pad(po,4,4)!=OPUS_OK)test_failed();
cannam@154 1706 cfgs++;
cannam@154 1707 if(opus_multistream_packet_pad(po,4,4,1)!=OPUS_OK)test_failed();
cannam@154 1708 cfgs++;
cannam@154 1709 if(opus_packet_pad(po,4,5)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1710 cfgs++;
cannam@154 1711 if(opus_multistream_packet_pad(po,4,5,1)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1712 cfgs++;
cannam@154 1713 if(opus_packet_pad(po,0,5)!=OPUS_BAD_ARG)test_failed();
cannam@154 1714 cfgs++;
cannam@154 1715 if(opus_multistream_packet_pad(po,0,5,1)!=OPUS_BAD_ARG)test_failed();
cannam@154 1716 cfgs++;
cannam@154 1717 if(opus_packet_unpad(po,0)!=OPUS_BAD_ARG)test_failed();
cannam@154 1718 cfgs++;
cannam@154 1719 if(opus_multistream_packet_unpad(po,0,1)!=OPUS_BAD_ARG)test_failed();
cannam@154 1720 cfgs++;
cannam@154 1721 if(opus_packet_unpad(po,4)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1722 cfgs++;
cannam@154 1723 if(opus_multistream_packet_unpad(po,4,1)!=OPUS_INVALID_PACKET)test_failed();
cannam@154 1724 cfgs++;
cannam@154 1725 po[0]=0;
cannam@154 1726 po[1]=0;
cannam@154 1727 po[2]=0;
cannam@154 1728 if(opus_packet_pad(po,5,4)!=OPUS_BAD_ARG)test_failed();
cannam@154 1729 cfgs++;
cannam@154 1730 if(opus_multistream_packet_pad(po,5,4,1)!=OPUS_BAD_ARG)test_failed();
cannam@154 1731 cfgs++;
cannam@154 1732
cannam@154 1733 fprintf(stdout," opus_repacketizer_cat ........................ OK.\n");
cannam@154 1734 fprintf(stdout," opus_repacketizer_out ........................ OK.\n");
cannam@154 1735 fprintf(stdout," opus_repacketizer_out_range .................. OK.\n");
cannam@154 1736 fprintf(stdout," opus_packet_pad .............................. OK.\n");
cannam@154 1737 fprintf(stdout," opus_packet_unpad ............................ OK.\n");
cannam@154 1738 fprintf(stdout," opus_multistream_packet_pad .................. OK.\n");
cannam@154 1739 fprintf(stdout," opus_multistream_packet_unpad ................ OK.\n");
cannam@154 1740
cannam@154 1741 opus_repacketizer_destroy(rp);
cannam@154 1742 cfgs++;
cannam@154 1743 free(packet);
cannam@154 1744 free(po);
cannam@154 1745 fprintf(stdout," All repacketizer tests passed\n");
cannam@154 1746 fprintf(stdout," (%7d API invocations)\n",cfgs);
cannam@154 1747
cannam@154 1748 return cfgs;
cannam@154 1749 }
cannam@154 1750
cannam@154 1751 #ifdef MALLOC_FAIL
cannam@154 1752 /* GLIBC 2.14 declares __malloc_hook as deprecated, generating a warning
cannam@154 1753 * under GCC. However, this is the cleanest way to test malloc failure
cannam@154 1754 * handling in our codebase, and the lack of thread safety isn't an
cannam@154 1755 * issue here. We therefore disable the warning for this function.
cannam@154 1756 */
cannam@154 1757 #if OPUS_GNUC_PREREQ(4,6)
cannam@154 1758 /* Save the current warning settings */
cannam@154 1759 #pragma GCC diagnostic push
cannam@154 1760 #endif
cannam@154 1761 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
cannam@154 1762
cannam@154 1763 typedef void *(*mhook)(size_t __size, __const void *);
cannam@154 1764 #endif
cannam@154 1765
cannam@154 1766 int test_malloc_fail(void)
cannam@154 1767 {
cannam@154 1768 #ifdef MALLOC_FAIL
cannam@154 1769 OpusDecoder *dec;
cannam@154 1770 OpusEncoder *enc;
cannam@154 1771 OpusRepacketizer *rp;
cannam@154 1772 unsigned char mapping[256] = {0,1};
cannam@154 1773 OpusMSDecoder *msdec;
cannam@154 1774 OpusMSEncoder *msenc;
cannam@154 1775 int rate,c,app,cfgs,err,useerr;
cannam@154 1776 int *ep;
cannam@154 1777 mhook orig_malloc;
cannam@154 1778 cfgs=0;
cannam@154 1779 #endif
cannam@154 1780 fprintf(stdout,"\n malloc() failure tests\n");
cannam@154 1781 fprintf(stdout," ---------------------------------------------------\n");
cannam@154 1782 #ifdef MALLOC_FAIL
cannam@154 1783 orig_malloc=__malloc_hook;
cannam@154 1784 __malloc_hook=malloc_hook;
cannam@154 1785 ep=(int *)opus_alloc(sizeof(int));
cannam@154 1786 if(ep!=NULL)
cannam@154 1787 {
cannam@154 1788 if(ep)free(ep);
cannam@154 1789 __malloc_hook=orig_malloc;
cannam@154 1790 #endif
cannam@154 1791 fprintf(stdout," opus_decoder_create() ................... SKIPPED.\n");
cannam@154 1792 fprintf(stdout," opus_encoder_create() ................... SKIPPED.\n");
cannam@154 1793 fprintf(stdout," opus_repacketizer_create() .............. SKIPPED.\n");
cannam@154 1794 fprintf(stdout," opus_multistream_decoder_create() ....... SKIPPED.\n");
cannam@154 1795 fprintf(stdout," opus_multistream_encoder_create() ....... SKIPPED.\n");
cannam@154 1796 fprintf(stdout,"(Test only supported with GLIBC and without valgrind)\n");
cannam@154 1797 return 0;
cannam@154 1798 #ifdef MALLOC_FAIL
cannam@154 1799 }
cannam@154 1800 for(useerr=0;useerr<2;useerr++)
cannam@154 1801 {
cannam@154 1802 ep=useerr?&err:0;
cannam@154 1803 for(rate=0;rate<5;rate++)
cannam@154 1804 {
cannam@154 1805 for(c=1;c<3;c++)
cannam@154 1806 {
cannam@154 1807 err=1;
cannam@154 1808 if(useerr)
cannam@154 1809 {
cannam@154 1810 VG_UNDEF(&err,sizeof(err));
cannam@154 1811 }
cannam@154 1812 dec=opus_decoder_create(opus_rates[rate], c, ep);
cannam@154 1813 if(dec!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL))
cannam@154 1814 {
cannam@154 1815 __malloc_hook=orig_malloc;
cannam@154 1816 test_failed();
cannam@154 1817 }
cannam@154 1818 cfgs++;
cannam@154 1819 msdec=opus_multistream_decoder_create(opus_rates[rate], c, 1, c-1, mapping, ep);
cannam@154 1820 if(msdec!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL))
cannam@154 1821 {
cannam@154 1822 __malloc_hook=orig_malloc;
cannam@154 1823 test_failed();
cannam@154 1824 }
cannam@154 1825 cfgs++;
cannam@154 1826 for(app=0;app<3;app++)
cannam@154 1827 {
cannam@154 1828 if(useerr)
cannam@154 1829 {
cannam@154 1830 VG_UNDEF(&err,sizeof(err));
cannam@154 1831 }
cannam@154 1832 enc=opus_encoder_create(opus_rates[rate], c, opus_apps[app],ep);
cannam@154 1833 if(enc!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL))
cannam@154 1834 {
cannam@154 1835 __malloc_hook=orig_malloc;
cannam@154 1836 test_failed();
cannam@154 1837 }
cannam@154 1838 cfgs++;
cannam@154 1839 msenc=opus_multistream_encoder_create(opus_rates[rate], c, 1, c-1, mapping, opus_apps[app],ep);
cannam@154 1840 if(msenc!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL))
cannam@154 1841 {
cannam@154 1842 __malloc_hook=orig_malloc;
cannam@154 1843 test_failed();
cannam@154 1844 }
cannam@154 1845 cfgs++;
cannam@154 1846 }
cannam@154 1847 }
cannam@154 1848 }
cannam@154 1849 }
cannam@154 1850 rp=opus_repacketizer_create();
cannam@154 1851 if(rp!=NULL)
cannam@154 1852 {
cannam@154 1853 __malloc_hook=orig_malloc;
cannam@154 1854 test_failed();
cannam@154 1855 }
cannam@154 1856 cfgs++;
cannam@154 1857 __malloc_hook=orig_malloc;
cannam@154 1858 fprintf(stdout," opus_decoder_create() ........................ OK.\n");
cannam@154 1859 fprintf(stdout," opus_encoder_create() ........................ OK.\n");
cannam@154 1860 fprintf(stdout," opus_repacketizer_create() ................... OK.\n");
cannam@154 1861 fprintf(stdout," opus_multistream_decoder_create() ............ OK.\n");
cannam@154 1862 fprintf(stdout," opus_multistream_encoder_create() ............ OK.\n");
cannam@154 1863 fprintf(stdout," All malloc failure tests passed\n");
cannam@154 1864 fprintf(stdout," (%2d API invocations)\n",cfgs);
cannam@154 1865 return cfgs;
cannam@154 1866 #endif
cannam@154 1867 }
cannam@154 1868
cannam@154 1869 #ifdef MALLOC_FAIL
cannam@154 1870 #if __GNUC_PREREQ(4,6)
cannam@154 1871 #pragma GCC diagnostic pop /* restore -Wdeprecated-declarations */
cannam@154 1872 #endif
cannam@154 1873 #endif
cannam@154 1874
cannam@154 1875 int main(int _argc, char **_argv)
cannam@154 1876 {
cannam@154 1877 opus_int32 total;
cannam@154 1878 const char * oversion;
cannam@154 1879 if(_argc>1)
cannam@154 1880 {
cannam@154 1881 fprintf(stderr,"Usage: %s\n",_argv[0]);
cannam@154 1882 return 1;
cannam@154 1883 }
cannam@154 1884 iseed=0;
cannam@154 1885
cannam@154 1886 oversion=opus_get_version_string();
cannam@154 1887 if(!oversion)test_failed();
cannam@154 1888 fprintf(stderr,"Testing the %s API deterministically\n", oversion);
cannam@154 1889 if(opus_strerror(-32768)==NULL)test_failed();
cannam@154 1890 if(opus_strerror(32767)==NULL)test_failed();
cannam@154 1891 if(strlen(opus_strerror(0))<1)test_failed();
cannam@154 1892 total=4;
cannam@154 1893
cannam@154 1894 total+=test_dec_api();
cannam@154 1895 total+=test_msdec_api();
cannam@154 1896 total+=test_parse();
cannam@154 1897 total+=test_enc_api();
cannam@154 1898 total+=test_repacketizer_api();
cannam@154 1899 total+=test_malloc_fail();
cannam@154 1900
cannam@154 1901 fprintf(stderr,"\nAll API tests passed.\nThe libopus API was invoked %d times.\n",total);
cannam@154 1902
cannam@154 1903 return 0;
cannam@154 1904 }