annotate src/opus-1.3/tests/test_opus_api.c @ 69:7aeed7906520

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