OLD | NEW |
1 /* Copyright (c) 2007-2008 CSIRO | 1 /* Copyright (c) 2007-2008 CSIRO |
2 Copyright (c) 2007-2009 Xiph.Org Foundation | 2 Copyright (c) 2007-2009 Xiph.Org Foundation |
3 Written by Jean-Marc Valin */ | 3 Written by Jean-Marc Valin */ |
4 /* | 4 /* |
5 Redistribution and use in source and binary forms, with or without | 5 Redistribution and use in source and binary forms, with or without |
6 modification, are permitted provided that the following conditions | 6 modification, are permitted provided that the following conditions |
7 are met: | 7 are met: |
8 | 8 |
9 - Redistributions of source code must retain the above copyright | 9 - Redistributions of source code must retain the above copyright |
10 notice, this list of conditions and the following disclaimer. | 10 notice, this list of conditions and the following disclaimer. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 fprintf(stderr, "Usage: %s [-e] <application> <sampling rate (Hz)> <channels
(1/2)> " | 47 fprintf(stderr, "Usage: %s [-e] <application> <sampling rate (Hz)> <channels
(1/2)> " |
48 "<bits per second> [options] <input> <output>\n", argv[0]); | 48 "<bits per second> [options] <input> <output>\n", argv[0]); |
49 fprintf(stderr, " %s -d <sampling rate (Hz)> <channels (1/2)> " | 49 fprintf(stderr, " %s -d <sampling rate (Hz)> <channels (1/2)> " |
50 "[options] <input> <output>\n\n", argv[0]); | 50 "[options] <input> <output>\n\n", argv[0]); |
51 fprintf(stderr, "application: voip | audio | restricted-lowdelay\n" ); | 51 fprintf(stderr, "application: voip | audio | restricted-lowdelay\n" ); |
52 fprintf(stderr, "options:\n" ); | 52 fprintf(stderr, "options:\n" ); |
53 fprintf(stderr, "-e : only runs the encoder (output the bi
t-stream)\n" ); | 53 fprintf(stderr, "-e : only runs the encoder (output the bi
t-stream)\n" ); |
54 fprintf(stderr, "-d : only runs the decoder (reads the bit
-stream as input)\n" ); | 54 fprintf(stderr, "-d : only runs the decoder (reads the bit
-stream as input)\n" ); |
55 fprintf(stderr, "-cbr : enable constant bitrate; default: va
riable bitrate\n" ); | 55 fprintf(stderr, "-cbr : enable constant bitrate; default: va
riable bitrate\n" ); |
56 fprintf(stderr, "-cvbr : enable constrained variable bitrate;
default: unconstrained\n" ); | 56 fprintf(stderr, "-cvbr : enable constrained variable bitrate;
default: unconstrained\n" ); |
57 fprintf(stderr, "-variable-duration : enable frames of variable duration (
experts only); default: disabled\n" ); | 57 fprintf(stderr, "-delayed-decision : use look-ahead for speech/music dete
ction (experts only); default: disabled\n" ); |
58 fprintf(stderr, "-bandwidth <NB|MB|WB|SWB|FB> : audio bandwidth (from narrow
band to fullband); default: sampling rate\n" ); | 58 fprintf(stderr, "-bandwidth <NB|MB|WB|SWB|FB> : audio bandwidth (from narrow
band to fullband); default: sampling rate\n" ); |
59 fprintf(stderr, "-framesize <2.5|5|10|20|40|60> : frame size in ms; default:
20 \n" ); | 59 fprintf(stderr, "-framesize <2.5|5|10|20|40|60|80|100|120> : frame size in m
s; default: 20 \n" ); |
60 fprintf(stderr, "-max_payload <bytes> : maximum payload size in bytes, defau
lt: 1024\n" ); | 60 fprintf(stderr, "-max_payload <bytes> : maximum payload size in bytes, defau
lt: 1024\n" ); |
61 fprintf(stderr, "-complexity <comp> : complexity, 0 (lowest) ... 10 (highe
st); default: 10\n" ); | 61 fprintf(stderr, "-complexity <comp> : complexity, 0 (lowest) ... 10 (highe
st); default: 10\n" ); |
62 fprintf(stderr, "-inbandfec : enable SILK inband FEC\n" ); | 62 fprintf(stderr, "-inbandfec : enable SILK inband FEC\n" ); |
63 fprintf(stderr, "-forcemono : force mono encoding, even for stereo
input\n" ); | 63 fprintf(stderr, "-forcemono : force mono encoding, even for stereo
input\n" ); |
64 fprintf(stderr, "-dtx : enable SILK DTX\n" ); | 64 fprintf(stderr, "-dtx : enable SILK DTX\n" ); |
65 fprintf(stderr, "-loss <perc> : simulate packet loss, in percent (0-
100); default: 0\n" ); | 65 fprintf(stderr, "-loss <perc> : simulate packet loss, in percent (0-
100); default: 0\n" ); |
66 } | 66 } |
67 | 67 |
68 static void int_to_char(opus_uint32 i, unsigned char ch[4]) | 68 static void int_to_char(opus_uint32 i, unsigned char ch[4]) |
69 { | 69 { |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 double tot_samples=0; | 246 double tot_samples=0; |
247 opus_uint64 tot_in, tot_out; | 247 opus_uint64 tot_in, tot_out; |
248 int bandwidth=OPUS_AUTO; | 248 int bandwidth=OPUS_AUTO; |
249 const char *bandwidth_string; | 249 const char *bandwidth_string; |
250 int lost = 0, lost_prev = 1; | 250 int lost = 0, lost_prev = 1; |
251 int toggle = 0; | 251 int toggle = 0; |
252 opus_uint32 enc_final_range[2]; | 252 opus_uint32 enc_final_range[2]; |
253 opus_uint32 dec_final_range; | 253 opus_uint32 dec_final_range; |
254 int encode_only=0, decode_only=0; | 254 int encode_only=0, decode_only=0; |
255 int max_frame_size = 48000*2; | 255 int max_frame_size = 48000*2; |
| 256 size_t num_read; |
256 int curr_read=0; | 257 int curr_read=0; |
257 int sweep_bps = 0; | 258 int sweep_bps = 0; |
258 int random_framesize=0, newsize=0, delayed_celt=0; | 259 int random_framesize=0, newsize=0, delayed_celt=0; |
259 int sweep_max=0, sweep_min=0; | 260 int sweep_max=0, sweep_min=0; |
260 int random_fec=0; | 261 int random_fec=0; |
261 const int (*mode_list)[4]=NULL; | 262 const int (*mode_list)[4]=NULL; |
262 int nb_modes_in_list=0; | 263 int nb_modes_in_list=0; |
263 int curr_mode=0; | 264 int curr_mode=0; |
264 int curr_mode_count=0; | 265 int curr_mode_count=0; |
265 int mode_switch_time = 48000; | 266 int mode_switch_time = 48000; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 else if (strcmp(argv[ args + 1 ], "5")==0) | 376 else if (strcmp(argv[ args + 1 ], "5")==0) |
376 frame_size = sampling_rate/200; | 377 frame_size = sampling_rate/200; |
377 else if (strcmp(argv[ args + 1 ], "10")==0) | 378 else if (strcmp(argv[ args + 1 ], "10")==0) |
378 frame_size = sampling_rate/100; | 379 frame_size = sampling_rate/100; |
379 else if (strcmp(argv[ args + 1 ], "20")==0) | 380 else if (strcmp(argv[ args + 1 ], "20")==0) |
380 frame_size = sampling_rate/50; | 381 frame_size = sampling_rate/50; |
381 else if (strcmp(argv[ args + 1 ], "40")==0) | 382 else if (strcmp(argv[ args + 1 ], "40")==0) |
382 frame_size = sampling_rate/25; | 383 frame_size = sampling_rate/25; |
383 else if (strcmp(argv[ args + 1 ], "60")==0) | 384 else if (strcmp(argv[ args + 1 ], "60")==0) |
384 frame_size = 3*sampling_rate/50; | 385 frame_size = 3*sampling_rate/50; |
| 386 else if (strcmp(argv[ args + 1 ], "80")==0) |
| 387 frame_size = 4*sampling_rate/50; |
| 388 else if (strcmp(argv[ args + 1 ], "100")==0) |
| 389 frame_size = 5*sampling_rate/50; |
| 390 else if (strcmp(argv[ args + 1 ], "120")==0) |
| 391 frame_size = 6*sampling_rate/50; |
385 else { | 392 else { |
386 fprintf(stderr, "Unsupported frame size: %s ms. " | 393 fprintf(stderr, "Unsupported frame size: %s ms. " |
387 "Supported are 2.5, 5, 10, 20, 40, 60.\n", | 394 "Supported are 2.5, 5, 10, 20, 40, 60, 80, 100,
120.\n", |
388 argv[ args + 1 ]); | 395 argv[ args + 1 ]); |
389 return EXIT_FAILURE; | 396 return EXIT_FAILURE; |
390 } | 397 } |
391 args += 2; | 398 args += 2; |
392 } else if( strcmp( argv[ args ], "-max_payload" ) == 0 ) { | 399 } else if( strcmp( argv[ args ], "-max_payload" ) == 0 ) { |
393 check_encoder_option(decode_only, "-max_payload"); | 400 check_encoder_option(decode_only, "-max_payload"); |
394 max_payload_bytes = atoi( argv[ args + 1 ] ); | 401 max_payload_bytes = atoi( argv[ args + 1 ] ); |
395 args += 2; | 402 args += 2; |
396 } else if( strcmp( argv[ args ], "-complexity" ) == 0 ) { | 403 } else if( strcmp( argv[ args ], "-complexity" ) == 0 ) { |
397 check_encoder_option(decode_only, "-complexity"); | 404 check_encoder_option(decode_only, "-complexity"); |
398 complexity = atoi( argv[ args + 1 ] ); | 405 complexity = atoi( argv[ args + 1 ] ); |
399 args += 2; | 406 args += 2; |
400 } else if( strcmp( argv[ args ], "-inbandfec" ) == 0 ) { | 407 } else if( strcmp( argv[ args ], "-inbandfec" ) == 0 ) { |
401 use_inbandfec = 1; | 408 use_inbandfec = 1; |
402 args++; | 409 args++; |
403 } else if( strcmp( argv[ args ], "-forcemono" ) == 0 ) { | 410 } else if( strcmp( argv[ args ], "-forcemono" ) == 0 ) { |
404 check_encoder_option(decode_only, "-forcemono"); | 411 check_encoder_option(decode_only, "-forcemono"); |
405 forcechannels = 1; | 412 forcechannels = 1; |
406 args++; | 413 args++; |
407 } else if( strcmp( argv[ args ], "-cvbr" ) == 0 ) { | 414 } else if( strcmp( argv[ args ], "-cvbr" ) == 0 ) { |
408 check_encoder_option(decode_only, "-cvbr"); | 415 check_encoder_option(decode_only, "-cvbr"); |
409 cvbr = 1; | 416 cvbr = 1; |
410 args++; | 417 args++; |
411 } else if( strcmp( argv[ args ], "-variable-duration" ) == 0 ) { | |
412 check_encoder_option(decode_only, "-variable-duration"); | |
413 variable_duration = OPUS_FRAMESIZE_VARIABLE; | |
414 args++; | |
415 } else if( strcmp( argv[ args ], "-delayed-decision" ) == 0 ) { | 418 } else if( strcmp( argv[ args ], "-delayed-decision" ) == 0 ) { |
416 check_encoder_option(decode_only, "-delayed-decision"); | 419 check_encoder_option(decode_only, "-delayed-decision"); |
417 delayed_decision = 1; | 420 delayed_decision = 1; |
418 args++; | 421 args++; |
419 } else if( strcmp( argv[ args ], "-dtx") == 0 ) { | 422 } else if( strcmp( argv[ args ], "-dtx") == 0 ) { |
420 check_encoder_option(decode_only, "-dtx"); | 423 check_encoder_option(decode_only, "-dtx"); |
421 use_dtx = 1; | 424 use_dtx = 1; |
422 args++; | 425 args++; |
423 } else if( strcmp( argv[ args ], "-loss" ) == 0 ) { | 426 } else if( strcmp( argv[ args ], "-loss" ) == 0 ) { |
424 packet_loss_perc = atoi( argv[ args + 1 ] ); | 427 packet_loss_perc = atoi( argv[ args + 1 ] ); |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 in = (short*)malloc(max_frame_size*channels*sizeof(short)); | 595 in = (short*)malloc(max_frame_size*channels*sizeof(short)); |
593 out = (short*)malloc(max_frame_size*channels*sizeof(short)); | 596 out = (short*)malloc(max_frame_size*channels*sizeof(short)); |
594 /* We need to allocate for 16-bit PCM data, but we store it as unsigned char
. */ | 597 /* We need to allocate for 16-bit PCM data, but we store it as unsigned char
. */ |
595 fbytes = (unsigned char*)malloc(max_frame_size*channels*sizeof(short)); | 598 fbytes = (unsigned char*)malloc(max_frame_size*channels*sizeof(short)); |
596 data[0] = (unsigned char*)calloc(max_payload_bytes,sizeof(unsigned char)); | 599 data[0] = (unsigned char*)calloc(max_payload_bytes,sizeof(unsigned char)); |
597 if ( use_inbandfec ) { | 600 if ( use_inbandfec ) { |
598 data[1] = (unsigned char*)calloc(max_payload_bytes,sizeof(unsigned char)
); | 601 data[1] = (unsigned char*)calloc(max_payload_bytes,sizeof(unsigned char)
); |
599 } | 602 } |
600 if(delayed_decision) | 603 if(delayed_decision) |
601 { | 604 { |
602 if (variable_duration!=OPUS_FRAMESIZE_VARIABLE) | 605 if (frame_size==sampling_rate/400) |
603 { | 606 variable_duration = OPUS_FRAMESIZE_2_5_MS; |
604 if (frame_size==sampling_rate/400) | 607 else if (frame_size==sampling_rate/200) |
605 variable_duration = OPUS_FRAMESIZE_2_5_MS; | 608 variable_duration = OPUS_FRAMESIZE_5_MS; |
606 else if (frame_size==sampling_rate/200) | 609 else if (frame_size==sampling_rate/100) |
607 variable_duration = OPUS_FRAMESIZE_5_MS; | 610 variable_duration = OPUS_FRAMESIZE_10_MS; |
608 else if (frame_size==sampling_rate/100) | 611 else if (frame_size==sampling_rate/50) |
609 variable_duration = OPUS_FRAMESIZE_10_MS; | 612 variable_duration = OPUS_FRAMESIZE_20_MS; |
610 else if (frame_size==sampling_rate/50) | 613 else if (frame_size==sampling_rate/25) |
611 variable_duration = OPUS_FRAMESIZE_20_MS; | 614 variable_duration = OPUS_FRAMESIZE_40_MS; |
612 else if (frame_size==sampling_rate/25) | 615 else if (frame_size==3*sampling_rate/50) |
613 variable_duration = OPUS_FRAMESIZE_40_MS; | 616 variable_duration = OPUS_FRAMESIZE_60_MS; |
614 else | 617 else if (frame_size==4*sampling_rate/50) |
615 variable_duration = OPUS_FRAMESIZE_60_MS; | 618 variable_duration = OPUS_FRAMESIZE_80_MS; |
616 opus_encoder_ctl(enc, OPUS_SET_EXPERT_FRAME_DURATION(variable_duration
)); | 619 else if (frame_size==5*sampling_rate/50) |
617 } | 620 variable_duration = OPUS_FRAMESIZE_100_MS; |
| 621 else |
| 622 variable_duration = OPUS_FRAMESIZE_120_MS; |
| 623 opus_encoder_ctl(enc, OPUS_SET_EXPERT_FRAME_DURATION(variable_duration)); |
618 frame_size = 2*48000; | 624 frame_size = 2*48000; |
619 } | 625 } |
620 while (!stop) | 626 while (!stop) |
621 { | 627 { |
622 if (delayed_celt) | 628 if (delayed_celt) |
623 { | 629 { |
624 frame_size = newsize; | 630 frame_size = newsize; |
625 delayed_celt = 0; | 631 delayed_celt = 0; |
626 } else if (random_framesize && rand()%20==0) | 632 } else if (random_framesize && rand()%20==0) |
627 { | 633 { |
(...skipping 17 matching lines...) Expand all Loading... |
645 frame_size = newsize; | 651 frame_size = newsize; |
646 } | 652 } |
647 } | 653 } |
648 if (random_fec && rand()%30==0) | 654 if (random_fec && rand()%30==0) |
649 { | 655 { |
650 opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(rand()%4==0)); | 656 opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(rand()%4==0)); |
651 } | 657 } |
652 if (decode_only) | 658 if (decode_only) |
653 { | 659 { |
654 unsigned char ch[4]; | 660 unsigned char ch[4]; |
655 err = fread(ch, 1, 4, fin); | 661 num_read = fread(ch, 1, 4, fin); |
656 if (feof(fin)) | 662 if (num_read!=4) |
657 break; | 663 break; |
658 len[toggle] = char_to_int(ch); | 664 len[toggle] = char_to_int(ch); |
659 if (len[toggle]>max_payload_bytes || len[toggle]<0) | 665 if (len[toggle]>max_payload_bytes || len[toggle]<0) |
660 { | 666 { |
661 fprintf(stderr, "Invalid payload length: %d\n",len[toggle]); | 667 fprintf(stderr, "Invalid payload length: %d\n",len[toggle]); |
662 break; | 668 break; |
663 } | 669 } |
664 err = fread(ch, 1, 4, fin); | 670 num_read = fread(ch, 1, 4, fin); |
| 671 if (num_read!=4) |
| 672 break; |
665 enc_final_range[toggle] = char_to_int(ch); | 673 enc_final_range[toggle] = char_to_int(ch); |
666 err = fread(data[toggle], 1, len[toggle], fin); | 674 num_read = fread(data[toggle], 1, len[toggle], fin); |
667 if (err<len[toggle]) | 675 if (num_read!=(size_t)len[toggle]) |
668 { | 676 { |
669 fprintf(stderr, "Ran out of input, " | 677 fprintf(stderr, "Ran out of input, " |
670 "expecting %d bytes got %d\n", | 678 "expecting %d bytes got %d\n", |
671 len[toggle],err); | 679 len[toggle],(int)num_read); |
672 break; | 680 break; |
673 } | 681 } |
674 } else { | 682 } else { |
675 int i; | 683 int i; |
676 if (mode_list!=NULL) | 684 if (mode_list!=NULL) |
677 { | 685 { |
678 opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(mode_list[curr_mode][1]
)); | 686 opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(mode_list[curr_mode][1]
)); |
679 opus_encoder_ctl(enc, OPUS_SET_FORCE_MODE(mode_list[curr_mode][0
])); | 687 opus_encoder_ctl(enc, OPUS_SET_FORCE_MODE(mode_list[curr_mode][0
])); |
680 opus_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(mode_list[curr_mod
e][3])); | 688 opus_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(mode_list[curr_mod
e][3])); |
681 frame_size = mode_list[curr_mode][2]; | 689 frame_size = mode_list[curr_mode][2]; |
682 } | 690 } |
683 err = fread(fbytes, sizeof(short)*channels, frame_size-remaining, fi
n); | 691 num_read = fread(fbytes, sizeof(short)*channels, frame_size-remainin
g, fin); |
684 curr_read = err; | 692 curr_read = (int)num_read; |
685 tot_in += curr_read; | 693 tot_in += curr_read; |
686 for(i=0;i<curr_read*channels;i++) | 694 for(i=0;i<curr_read*channels;i++) |
687 { | 695 { |
688 opus_int32 s; | 696 opus_int32 s; |
689 s=fbytes[2*i+1]<<8|fbytes[2*i]; | 697 s=fbytes[2*i+1]<<8|fbytes[2*i]; |
690 s=((s&0xFFFF)^0x8000)-0x8000; | 698 s=((s&0xFFFF)^0x8000)-0x8000; |
691 in[i+remaining*channels]=s; | 699 in[i+remaining*channels]=s; |
692 } | 700 } |
693 if (curr_read+remaining < frame_size) | 701 if (curr_read+remaining < frame_size) |
694 { | 702 { |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 if (fwrite(int_field, 1, 4, fout) != 4) { | 765 if (fwrite(int_field, 1, 4, fout) != 4) { |
758 fprintf(stderr, "Error writing.\n"); | 766 fprintf(stderr, "Error writing.\n"); |
759 return EXIT_FAILURE; | 767 return EXIT_FAILURE; |
760 } | 768 } |
761 if (fwrite(data[toggle], 1, len[toggle], fout) != (unsigned)len[togg
le]) { | 769 if (fwrite(data[toggle], 1, len[toggle], fout) != (unsigned)len[togg
le]) { |
762 fprintf(stderr, "Error writing.\n"); | 770 fprintf(stderr, "Error writing.\n"); |
763 return EXIT_FAILURE; | 771 return EXIT_FAILURE; |
764 } | 772 } |
765 tot_samples += nb_encoded; | 773 tot_samples += nb_encoded; |
766 } else { | 774 } else { |
767 int output_samples; | 775 opus_int32 output_samples; |
768 lost = len[toggle]==0 || (packet_loss_perc>0 && rand()%100 < packet_
loss_perc); | 776 lost = len[toggle]==0 || (packet_loss_perc>0 && rand()%100 < packet_
loss_perc); |
769 if (lost) | 777 if (lost) |
770 opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&output_sampl
es)); | 778 opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&output_sampl
es)); |
771 else | 779 else |
772 output_samples = max_frame_size; | 780 output_samples = max_frame_size; |
773 if( count >= use_inbandfec ) { | 781 if( count >= use_inbandfec ) { |
774 /* delay by one packet when using in-band FEC */ | 782 /* delay by one packet when using in-band FEC */ |
775 if( use_inbandfec ) { | 783 if( use_inbandfec ) { |
776 if( lost_prev ) { | 784 if( lost_prev ) { |
777 /* attempt to decode with in-band FEC from next packet *
/ | 785 /* attempt to decode with in-band FEC from next packet *
/ |
778 opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&out
put_samples)); | 786 opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&out
put_samples)); |
779 output_samples = opus_decode(dec, lost ? NULL : data[tog
gle], len[toggle], out, output_samples, 1); | 787 output_samples = opus_decode(dec, lost ? NULL : data[tog
gle], len[toggle], out, output_samples, 1); |
780 } else { | 788 } else { |
781 /* regular decode */ | 789 /* regular decode */ |
782 output_samples = max_frame_size; | 790 output_samples = max_frame_size; |
783 output_samples = opus_decode(dec, data[1-toggle], len[1-
toggle], out, output_samples, 0); | 791 output_samples = opus_decode(dec, data[1-toggle], len[1-
toggle], out, output_samples, 0); |
784 } | 792 } |
785 } else { | 793 } else { |
786 output_samples = opus_decode(dec, lost ? NULL : data[toggle]
, len[toggle], out, output_samples, 0); | 794 output_samples = opus_decode(dec, lost ? NULL : data[toggle]
, len[toggle], out, output_samples, 0); |
787 } | 795 } |
788 if (output_samples>0) | 796 if (output_samples>0) |
789 { | 797 { |
790 if (!decode_only && tot_out + output_samples > tot_in) | 798 if (!decode_only && tot_out + output_samples > tot_in) |
791 { | 799 { |
792 stop=1; | 800 stop=1; |
793 output_samples = tot_in-tot_out; | 801 output_samples = (opus_int32)(tot_in - tot_out); |
794 } | 802 } |
795 if (output_samples>skip) { | 803 if (output_samples>skip) { |
796 int i; | 804 int i; |
797 for(i=0;i<(output_samples-skip)*channels;i++) | 805 for(i=0;i<(output_samples-skip)*channels;i++) |
798 { | 806 { |
799 short s; | 807 short s; |
800 s=out[i+(skip*channels)]; | 808 s=out[i+(skip*channels)]; |
801 fbytes[2*i]=s&0xFF; | 809 fbytes[2*i]=s&0xFF; |
802 fbytes[2*i+1]=(s>>8)&0xFF; | 810 fbytes[2*i+1]=(s>>8)&0xFF; |
803 } | 811 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 count -= use_inbandfec; | 871 count -= use_inbandfec; |
864 fprintf (stderr, "average bitrate: %7.3f kb/s\n", | 872 fprintf (stderr, "average bitrate: %7.3f kb/s\n", |
865 1e-3*bits*sampling_rate/tot_samples); | 873 1e-3*bits*sampling_rate/tot_samples); |
866 fprintf (stderr, "maximum bitrate: %7.3f kb/s\n", | 874 fprintf (stderr, "maximum bitrate: %7.3f kb/s\n", |
867 1e-3*bits_max*sampling_rate/frame_size); | 875 1e-3*bits_max*sampling_rate/frame_size); |
868 if (!decode_only) | 876 if (!decode_only) |
869 fprintf (stderr, "active bitrate: %7.3f kb/s\n", | 877 fprintf (stderr, "active bitrate: %7.3f kb/s\n", |
870 1e-3*bits_act*sampling_rate/(1e-15+frame_size*(double)count_act))
; | 878 1e-3*bits_act*sampling_rate/(1e-15+frame_size*(double)count_act))
; |
871 fprintf (stderr, "bitrate standard deviation: %7.3f kb/s\n", | 879 fprintf (stderr, "bitrate standard deviation: %7.3f kb/s\n", |
872 1e-3*sqrt(bits2/count - bits*bits/(count*(double)count))*sampling_ra
te/frame_size); | 880 1e-3*sqrt(bits2/count - bits*bits/(count*(double)count))*sampling_ra
te/frame_size); |
873 /* Close any files to which intermediate results were stored */ | |
874 SILK_DEBUG_STORE_CLOSE_FILES | |
875 silk_TimerSave("opus_timing.txt"); | 881 silk_TimerSave("opus_timing.txt"); |
876 opus_encoder_destroy(enc); | 882 opus_encoder_destroy(enc); |
877 opus_decoder_destroy(dec); | 883 opus_decoder_destroy(dec); |
878 free(data[0]); | 884 free(data[0]); |
879 if (use_inbandfec) | 885 if (use_inbandfec) |
880 free(data[1]); | 886 free(data[1]); |
881 fclose(fin); | 887 fclose(fin); |
882 fclose(fout); | 888 fclose(fout); |
883 free(in); | 889 free(in); |
884 free(out); | 890 free(out); |
885 free(fbytes); | 891 free(fbytes); |
886 return EXIT_SUCCESS; | 892 return EXIT_SUCCESS; |
887 } | 893 } |
OLD | NEW |