shithub: opus-tools

Download patch

ref: b982c4c784095dccb77f57169416e02a0cd9c81d
parent: bc3dcac66196d162c4e88e3113c6813efe61e7fa
author: Mark Harris <[email protected]>
date: Sat Sep 4 08:47:29 EDT 2021

opusdec: Fix non-48kHz output progress timestamp

Samples from the opusfile library are always at 48 kHz.

--- a/src/opusdec.c
+++ b/src/opusdec.c
@@ -104,6 +104,15 @@
 #include "stack_alloc.h"
 #include "cpusupport.h"
 
+/* printf format specifier for opus_int64 */
+#if !defined opus_int64 && defined PRId64
+# define I64FORMAT PRId64
+#elif defined WIN32 || defined _WIN32
+# define I64FORMAT "I64d"
+#else
+# define I64FORMAT "lld"
+#endif
+
 #define MINI(_a,_b)      ((_a)<(_b)?(_a):(_b))
 #define MAXI(_a,_b)      ((_a)>(_b)?(_a):(_b))
 #define CLAMPI(_a,_b,_c) (MAXI(_a,MINI(_b,_c)))
@@ -699,7 +708,7 @@
       {0, 0, 0, 0}
    };
    opus_int64 audio_size=0;
-   double last_coded_seconds=0;
+   opus_int64 last_coded_seconds=-1;
    float loss_percent=-1;
    float manual_gain=0;
    int force_rate=0;
@@ -1111,18 +1120,18 @@
       {
          /*Display a progress spinner while decoding.*/
          static const char spinner[]="|/-\\";
-         double coded_seconds=nb_read_total/(double)rate;
-         if (coded_seconds>=last_coded_seconds+1 || li!=old_li)
+         opus_int64 coded_seconds = nb_read_total/48000;
+         if (coded_seconds > last_coded_seconds || li != old_li)
          {
-            fprintf(stderr,"\r[%c] %02d:%02d:%02d", spinner[last_spin&3],
-             (int)(coded_seconds/3600), (int)(coded_seconds/60)%60,
-             (int)(coded_seconds)%60);
+            if (coded_seconds > last_coded_seconds)
+            {
+               last_spin++;
+               last_coded_seconds = coded_seconds;
+            }
+            fprintf(stderr,"\r[%c] %02" I64FORMAT ":%02d:%02d",
+             spinner[last_spin&3], coded_seconds/3600,
+             (int)((coded_seconds/60)%60), (int)(coded_seconds%60));
             fflush(stderr);
-         }
-         if (coded_seconds>=last_coded_seconds+1)
-         {
-            last_spin++;
-            last_coded_seconds=coded_seconds;
          }
       }
       old_li=li;