summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@amazon.com>2022-12-13 02:31:40 -0500
committerJean-Marc Valin <jmvalin@amazon.com>2022-12-13 02:31:40 -0500
commitef0edb13776c07a83463f1ea90e2bcd8d76ee092 (patch)
treef376ff4ecd10ebad2f2e9f85fd3b15bdf3b94f39
parent5665b868b4ebeae3d149d8db4465481e2392d789 (diff)
downloadopus-ef0edb13776c07a83463f1ea90e2bcd8d76ee092.tar.gz
Adds -lossfile option to opus_demo
-rw-r--r--src/opus_demo.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/opus_demo.c b/src/opus_demo.c
index c154b98e..50a66db3 100644
--- a/src/opus_demo.c
+++ b/src/opus_demo.c
@@ -62,7 +62,8 @@ void print_usage( char* argv[] )
fprintf(stderr, "-inbandfec : enable SILK inband FEC\n" );
fprintf(stderr, "-forcemono : force mono encoding, even for stereo input\n" );
fprintf(stderr, "-dtx : enable SILK DTX\n" );
- fprintf(stderr, "-loss <perc> : simulate packet loss, in percent (0-100); default: 0\n" );
+ fprintf(stderr, "-loss <perc> : optimize for loss percentage and simulate packet loss, in percent (0-100); default: 0\n" );
+ fprintf(stderr, "-lossfile <file> : simulate packet loss, reading loss from file\n" );
}
static void int_to_char(opus_uint32 i, unsigned char ch[4])
@@ -264,6 +265,7 @@ int main(int argc, char *argv[])
int delayed_decision=0;
int ret = EXIT_FAILURE;
int lost_count=0;
+ FILE *packet_loss_file=NULL;
if (argc < 5 )
{
@@ -422,6 +424,13 @@ int main(int argc, char *argv[])
} else if( strcmp( argv[ args ], "-loss" ) == 0 ) {
packet_loss_perc = atoi( argv[ args + 1 ] );
args += 2;
+ } else if( strcmp( argv[ args ], "-lossfile" ) == 0 ) {
+ packet_loss_file = fopen( argv[ args + 1 ], "r" );
+ if (packet_loss_file == NULL) {
+ fprintf(stderr, "failed to open loss file %s\n", argv[ args + 1 ] );
+ exit(1);
+ }
+ args += 2;
} else if( strcmp( argv[ args ], "-sweep" ) == 0 ) {
check_encoder_option(decode_only, "-sweep");
sweep_bps = atoi( argv[ args + 1 ] );
@@ -760,7 +769,14 @@ int main(int argc, char *argv[])
} else {
int fr;
int run_decoder;
- lost = len==0 || (packet_loss_perc>0 && rand()%100 < packet_loss_perc);
+ if (packet_loss_file != NULL) {
+ if ( fscanf(packet_loss_file, "%d", &lost) != 1) {
+ lost = 0;
+ }
+ } else {
+ lost = (packet_loss_perc>0) && (rand()%100 < packet_loss_perc);
+ }
+ if (len == 0) lost = 1;
if (lost)
{
lost_count++;