Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(609)

Side by Side Diff: third_party/opus/src/tests/test_opus_decode.c

Issue 2962373002: [Opus] Update to v1.2.1 (Closed)
Patch Set: Include minor updates including fix for win_clang Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* Copyright (c) 2011-2013 Xiph.Org Foundation 1 /* Copyright (c) 2011-2013 Xiph.Org Foundation
2 Written by Gregory Maxwell */ 2 Written by Gregory Maxwell */
3 /* 3 /*
4 Redistribution and use in source and binary forms, with or without 4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions 5 modification, are permitted provided that the following conditions
6 are met: 6 are met:
7 7
8 - Redistributions of source code must retain the above copyright 8 - Redistributions of source code must retain the above copyright
9 notice, this list of conditions and the following disclaimer. 9 notice, this list of conditions and the following disclaimer.
10 10
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 97
98 decsize=opus_decoder_get_size(1); 98 decsize=opus_decoder_get_size(1);
99 decbak=(OpusDecoder *)malloc(decsize); 99 decbak=(OpusDecoder *)malloc(decsize);
100 if(decbak==NULL)test_failed(); 100 if(decbak==NULL)test_failed();
101 101
102 for(t=0;t<5*2;t++) 102 for(t=0;t<5*2;t++)
103 { 103 {
104 int factor=48000/fsv[t>>1]; 104 int factor=48000/fsv[t>>1];
105 for(fec=0;fec<2;fec++) 105 for(fec=0;fec<2;fec++)
106 { 106 {
107 int dur; 107 opus_int32 dur;
108 /*Test PLC on a fresh decoder*/ 108 /*Test PLC on a fresh decoder*/
109 out_samples = opus_decode(dec[t], 0, 0, outbuf, 120/factor, fec); 109 out_samples = opus_decode(dec[t], 0, 0, outbuf, 120/factor, fec);
110 if(out_samples!=120/factor)test_failed(); 110 if(out_samples!=120/factor)test_failed();
111 if(opus_decoder_ctl(dec[t], OPUS_GET_LAST_PACKET_DURATION(&dur))!=OPUS_ OK)test_failed(); 111 if(opus_decoder_ctl(dec[t], OPUS_GET_LAST_PACKET_DURATION(&dur))!=OPUS_ OK)test_failed();
112 if(dur!=120/factor)test_failed(); 112 if(dur!=120/factor)test_failed();
113 113
114 /*Test on a size which isn't a multiple of 2.5ms*/ 114 /*Test on a size which isn't a multiple of 2.5ms*/
115 out_samples = opus_decode(dec[t], 0, 0, outbuf, 120/factor+2, fec); 115 out_samples = opus_decode(dec[t], 0, 0, outbuf, 120/factor+2, fec);
116 if(out_samples!=OPUS_BAD_ARG)test_failed(); 116 if(out_samples!=OPUS_BAD_ARG)test_failed();
117 117
(...skipping 10 matching lines...) Expand all
128 if(dur!=120/factor)test_failed(); 128 if(dur!=120/factor)test_failed();
129 129
130 /*Zero lengths*/ 130 /*Zero lengths*/
131 out_samples = opus_decode(dec[t], packet, 0, outbuf, 120/factor, fec); 131 out_samples = opus_decode(dec[t], packet, 0, outbuf, 120/factor, fec);
132 if(out_samples!=120/factor)test_failed(); 132 if(out_samples!=120/factor)test_failed();
133 133
134 /*Zero buffer*/ 134 /*Zero buffer*/
135 outbuf[0]=32749; 135 outbuf[0]=32749;
136 out_samples = opus_decode(dec[t], packet, 0, outbuf, 0, fec); 136 out_samples = opus_decode(dec[t], packet, 0, outbuf, 0, fec);
137 if(out_samples>0)test_failed(); 137 if(out_samples>0)test_failed();
138 #if !defined(OPUS_BUILD) && (OPUS_GNUC_PREREQ(4, 6) || (defined(__clang_major__) && __clang_major__ >= 3))
139 #pragma GCC diagnostic push
140 #pragma GCC diagnostic ignored "-Wnonnull"
141 #endif
138 out_samples = opus_decode(dec[t], packet, 0, 0, 0, fec); 142 out_samples = opus_decode(dec[t], packet, 0, 0, 0, fec);
143 #if !defined(OPUS_BUILD) && (OPUS_GNUC_PREREQ(4, 6) || (defined(__clang_major__) && __clang_major__ >= 3))
144 #pragma GCC diagnostic pop
145 #endif
139 if(out_samples>0)test_failed(); 146 if(out_samples>0)test_failed();
140 if(outbuf[0]!=32749)test_failed(); 147 if(outbuf[0]!=32749)test_failed();
141 148
142 /*Invalid lengths*/ 149 /*Invalid lengths*/
143 out_samples = opus_decode(dec[t], packet, -1, outbuf, MAX_FRAME_SAMP, f ec); 150 out_samples = opus_decode(dec[t], packet, -1, outbuf, MAX_FRAME_SAMP, f ec);
144 if(out_samples>=0)test_failed(); 151 if(out_samples>=0)test_failed();
145 out_samples = opus_decode(dec[t], packet, INT_MIN, outbuf, MAX_FRAME_SA MP, fec); 152 out_samples = opus_decode(dec[t], packet, INT_MIN, outbuf, MAX_FRAME_SA MP, fec);
146 if(out_samples>=0)test_failed(); 153 if(out_samples>=0)test_failed();
147 out_samples = opus_decode(dec[t], packet, -1, outbuf, -1, fec); 154 out_samples = opus_decode(dec[t], packet, -1, outbuf, -1, fec);
148 if(out_samples>=0)test_failed(); 155 if(out_samples>=0)test_failed();
149 156
150 /*Crazy FEC values*/ 157 /*Crazy FEC values*/
151 out_samples = opus_decode(dec[t], packet, 1, outbuf, MAX_FRAME_SAMP, fe c?-1:2); 158 out_samples = opus_decode(dec[t], packet, 1, outbuf, MAX_FRAME_SAMP, fe c?-1:2);
152 if(out_samples>=0)test_failed(); 159 if(out_samples>=0)test_failed();
153 160
154 /*Reset the decoder*/ 161 /*Reset the decoder*/
155 if(opus_decoder_ctl(dec[t], OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 162 if(opus_decoder_ctl(dec[t], OPUS_RESET_STATE)!=OPUS_OK)test_failed();
156 } 163 }
157 } 164 }
158 fprintf(stdout," dec[all] initial frame PLC OK.\n"); 165 fprintf(stdout," dec[all] initial frame PLC OK.\n");
159 166
160 /*Count code 0 tests*/ 167 /*Count code 0 tests*/
161 for(i=0;i<64;i++) 168 for(i=0;i<64;i++)
162 { 169 {
163 int dur; 170 opus_int32 dur;
164 int j,expected[5*2]; 171 int j,expected[5*2];
165 packet[0]=i<<2; 172 packet[0]=i<<2;
166 packet[1]=255; 173 packet[1]=255;
167 packet[2]=255; 174 packet[2]=255;
168 err=opus_packet_get_nb_channels(packet); 175 err=opus_packet_get_nb_channels(packet);
169 if(err!=(i&1)+1)test_failed(); 176 if(err!=(i&1)+1)test_failed();
170 177
171 for(t=0;t<5*2;t++){ 178 for(t=0;t<5*2;t++){
172 expected[t]=opus_decoder_get_nb_samples(dec[t],packet,1); 179 expected[t]=opus_decoder_get_nb_samples(dec[t],packet,1);
173 if(expected[t]>2880)test_failed(); 180 if(expected[t]>2880)test_failed();
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 for(t=0;t<5*2;t++)expected[t]=opus_decoder_get_nb_samples(dec[t],packet,pl en); 314 for(t=0;t<5*2;t++)expected[t]=opus_decoder_get_nb_samples(dec[t],packet,pl en);
308 for(j=0;j<plen;j++)packet[j+1]=(fast_rand()|fast_rand())&255; 315 for(j=0;j<plen;j++)packet[j+1]=(fast_rand()|fast_rand())&255;
309 memcpy(decbak,dec[0],decsize); 316 memcpy(decbak,dec[0],decsize);
310 if(opus_decode(decbak, packet, plen+1, outbuf, expected[0], 1)!=expected[0 ])test_failed(); 317 if(opus_decode(decbak, packet, plen+1, outbuf, expected[0], 1)!=expected[0 ])test_failed();
311 memcpy(decbak,dec[0],decsize); 318 memcpy(decbak,dec[0],decsize);
312 if(opus_decode(decbak, 0, 0, outbuf, MAX_FRAME_SAMP, 1)<20)test_failed(); 319 if(opus_decode(decbak, 0, 0, outbuf, MAX_FRAME_SAMP, 1)<20)test_failed();
313 memcpy(decbak,dec[0],decsize); 320 memcpy(decbak,dec[0],decsize);
314 if(opus_decode(decbak, 0, 0, outbuf, MAX_FRAME_SAMP, 0)<20)test_failed(); 321 if(opus_decode(decbak, 0, 0, outbuf, MAX_FRAME_SAMP, 0)<20)test_failed();
315 for(t=0;t<5*2;t++) 322 for(t=0;t<5*2;t++)
316 { 323 {
317 int dur; 324 opus_int32 dur;
318 out_samples = opus_decode(dec[t], packet, plen+1, outbuf, MAX_FRAME_SAM P, 0); 325 out_samples = opus_decode(dec[t], packet, plen+1, outbuf, MAX_FRAME_SAM P, 0);
319 if(out_samples!=expected[t])test_failed(); 326 if(out_samples!=expected[t])test_failed();
320 if(t==0)dec_final_range2=dec_final_range1; 327 if(t==0)dec_final_range2=dec_final_range1;
321 else if(dec_final_range1!=dec_final_range2)test_failed(); 328 else if(dec_final_range1!=dec_final_range2)test_failed();
322 if(opus_decoder_ctl(dec[t], OPUS_GET_LAST_PACKET_DURATION(&dur))!=OPUS_ OK)test_failed(); 329 if(opus_decoder_ctl(dec[t], OPUS_GET_LAST_PACKET_DURATION(&dur))!=OPUS_ OK)test_failed();
323 if(dur!=out_samples)test_failed(); 330 if(dur!=out_samples)test_failed();
324 } 331 }
325 } 332 }
326 fprintf(stdout," dec[all] random packets, all mode pairs (4096), %d bytes/fr ame OK.\n",plen+1); 333 fprintf(stdout," dec[all] random packets, all mode pairs (4096), %d bytes/fr ame OK.\n",plen+1);
327 334
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 void test_soft_clip(void) 384 void test_soft_clip(void)
378 { 385 {
379 int i,j; 386 int i,j;
380 float x[1024]; 387 float x[1024];
381 float s[8] = {0, 0, 0, 0, 0, 0, 0, 0}; 388 float s[8] = {0, 0, 0, 0, 0, 0, 0, 0};
382 fprintf(stdout," Testing opus_pcm_soft_clip... "); 389 fprintf(stdout," Testing opus_pcm_soft_clip... ");
383 for(i=0;i<1024;i++) 390 for(i=0;i<1024;i++)
384 { 391 {
385 for (j=0;j<1024;j++) 392 for (j=0;j<1024;j++)
386 { 393 {
387 x[j]=(i&255)*(1/32.f)-4.f; 394 x[j]=(j&255)*(1/32.f)-4.f;
388 } 395 }
389 opus_pcm_soft_clip(&x[i],1024-i,1,s); 396 opus_pcm_soft_clip(&x[i],1024-i,1,s);
390 for (j=i;j<1024;j++) 397 for (j=i;j<1024;j++)
391 { 398 {
392 if(x[i]>1.f)test_failed(); 399 if(x[j]>1.f)test_failed();
393 if(x[i]<-1.f)test_failed(); 400 if(x[j]<-1.f)test_failed();
394 } 401 }
395 } 402 }
396 for(i=1;i<9;i++) 403 for(i=1;i<9;i++)
397 { 404 {
398 for (j=0;j<1024;j++) 405 for (j=0;j<1024;j++)
399 { 406 {
400 x[j]=(i&255)*(1/32.f)-4.f; 407 x[j]=(j&255)*(1/32.f)-4.f;
401 } 408 }
402 opus_pcm_soft_clip(x,1024/i,i,s); 409 opus_pcm_soft_clip(x,1024/i,i,s);
403 for (j=0;j<(1024/i)*i;j++) 410 for (j=0;j<(1024/i)*i;j++)
404 { 411 {
405 if(x[i]>1.f)test_failed(); 412 if(x[j]>1.f)test_failed();
406 if(x[i]<-1.f)test_failed(); 413 if(x[j]<-1.f)test_failed();
407 } 414 }
408 } 415 }
409 opus_pcm_soft_clip(x,0,1,s); 416 opus_pcm_soft_clip(x,0,1,s);
410 opus_pcm_soft_clip(x,1,0,s); 417 opus_pcm_soft_clip(x,1,0,s);
411 opus_pcm_soft_clip(x,1,1,0); 418 opus_pcm_soft_clip(x,1,1,0);
412 opus_pcm_soft_clip(x,1,-1,s); 419 opus_pcm_soft_clip(x,1,-1,s);
413 opus_pcm_soft_clip(x,-1,1,s); 420 opus_pcm_soft_clip(x,-1,1,s);
414 opus_pcm_soft_clip(0,1,1,s); 421 opus_pcm_soft_clip(0,1,1,s);
415 printf("OK.\n"); 422 printf("OK.\n");
416 } 423 }
(...skipping 12 matching lines...) Expand all
429 } 436 }
430 437
431 env_used=0; 438 env_used=0;
432 env_seed=getenv("SEED"); 439 env_seed=getenv("SEED");
433 if(_argc>1)iseed=atoi(_argv[1]); 440 if(_argc>1)iseed=atoi(_argv[1]);
434 else if(env_seed) 441 else if(env_seed)
435 { 442 {
436 iseed=atoi(env_seed); 443 iseed=atoi(env_seed);
437 env_used=1; 444 env_used=1;
438 } 445 }
439 else iseed=(opus_uint32)time(NULL)^((getpid()&65535)<<16); 446 else iseed=(opus_uint32)time(NULL)^(((opus_uint32)getpid()&65535)<<16);
440 Rw=Rz=iseed; 447 Rw=Rz=iseed;
441 448
442 oversion=opus_get_version_string(); 449 oversion=opus_get_version_string();
443 if(!oversion)test_failed(); 450 if(!oversion)test_failed();
444 fprintf(stderr,"Testing %s decoder. Random seed: %u (%.4X)\n", oversion, isee d, fast_rand() % 65535); 451 fprintf(stderr,"Testing %s decoder. Random seed: %u (%.4X)\n", oversion, isee d, fast_rand() % 65535);
445 if(env_used)fprintf(stderr," Random seed set from the environment (SEED=%s). \n", env_seed); 452 if(env_used)fprintf(stderr," Random seed set from the environment (SEED=%s). \n", env_seed);
446 453
447 /*Setting TEST_OPUS_NOFUZZ tells the tool not to send garbage data 454 /*Setting TEST_OPUS_NOFUZZ tells the tool not to send garbage data
448 into the decoders. This is helpful because garbage data 455 into the decoders. This is helpful because garbage data
449 may cause the decoders to clip, which angers CLANG IOC.*/ 456 may cause the decoders to clip, which angers CLANG IOC.*/
450 test_decoder_code0(getenv("TEST_OPUS_NOFUZZ")!=NULL); 457 test_decoder_code0(getenv("TEST_OPUS_NOFUZZ")!=NULL);
451 #ifndef DISABLE_FLOAT_API 458 #ifndef DISABLE_FLOAT_API
452 test_soft_clip(); 459 test_soft_clip();
453 #endif 460 #endif
454 461
455 return 0; 462 return 0;
456 } 463 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698