diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-03-13 22:06:32 +0100 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-03-13 22:06:32 +0100 | 
| commit | c8aae2989c0b74d75f43bc08219459efbcc53d6f (patch) | |
| tree | 2a73a815edc534861d99fffdb8c290f0f4ab7ee7 /src | |
| parent | 30e401dd06b425f8c3c326f568e8b375f64043d7 (diff) | |
| download | ODR-AudioEnc-c8aae2989c0b74d75f43bc08219459efbcc53d6f.tar.gz ODR-AudioEnc-c8aae2989c0b74d75f43bc08219459efbcc53d6f.tar.bz2 ODR-AudioEnc-c8aae2989c0b74d75f43bc08219459efbcc53d6f.zip | |
Print some newlines from time to time
For some reason, my terminal emulator (KDE's Konsole) lags after
the encoder has been running for some time.
Diffstat (limited to 'src')
| -rw-r--r-- | src/dabplus-enc-alsa-zmq.cpp | 49 | 
1 files changed, 44 insertions, 5 deletions
| diff --git a/src/dabplus-enc-alsa-zmq.cpp b/src/dabplus-enc-alsa-zmq.cpp index 3bf252a..8025c4a 100644 --- a/src/dabplus-enc-alsa-zmq.cpp +++ b/src/dabplus-enc-alsa-zmq.cpp @@ -29,6 +29,7 @@  #include <unistd.h>  #include <sys/types.h>  #include <sys/stat.h> +#include <sys/ioctl.h>  #include "libAACenc/include/aacenc_lib.h" @@ -176,12 +177,44 @@ int prepare_aac_encoder(      return 0;  } +/* Get the number of columns of the terminal this runs in + */ +int get_win_columns() +{ +    struct winsize w; +    if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) == -1) { +        return 0; +    } + +    return w.ws_col; +} + +#define WINDOW_MARGIN_RIGHT 6 + +/* Add line breaks in regular intervals to the + * little sequence of dots because my terminal + */ +void print_status(const char* status, int *consumed_cols) +{ +    fprintf(stdout, "%s", status); +    *consumed_cols -= strnlen(status, *consumed_cols); + +    if (*consumed_cols <= 0) { +        fprintf(stdout, "\n"); +        *consumed_cols = get_win_columns(); + +        // Guarantee that it's never negative +        if (*consumed_cols > WINDOW_MARGIN_RIGHT) +            *consumed_cols -= WINDOW_MARGIN_RIGHT; +    } +}  #define no_argument 0  #define required_argument 1  #define optional_argument 2 -int main(int argc, char *argv[]) { +int main(int argc, char *argv[]) +{      int subchannel_index = 8; //64kbps subchannel      int ch=0;      const char *alsa_device = "default"; @@ -352,6 +385,8 @@ int main(int argc, char *argv[]) {      fprintf(stderr, "Starting encoding\n"); +    int remaining_line_len = get_win_columns() - 6; +      int send_error_count = 0;      struct timespec tp_next;      clock_gettime(CLOCK_MONOTONIC, &tp_next); @@ -414,7 +449,7 @@ int main(int argc, char *argv[]) {              // Otherwise, you're good to go and buffer should contain "count" bytes.              in_buf.numBufs = 2;    // Samples + Data;              if (ret > 0) -                fprintf(stderr, "p"); +                print_status("p", &remaining_line_len);          }          else {              // Some other error occurred during read. @@ -431,11 +466,13 @@ int main(int argc, char *argv[]) {              read = queue.pop(input_buf, input_size, &overruns); // returns bytes              if (read != input_size) { -                fprintf(stderr, "U"); +                print_status("U", &remaining_line_len);              }              if (overruns) { -                fprintf(stderr, "O%zu", overruns); +                char status[16]; +                snprintf(status, 16, "O%zu", overruns); +                print_status(status, &remaining_line_len);              }          }          else { @@ -520,8 +557,10 @@ int main(int argc, char *argv[]) {              }              if (out_args.numOutBytes + row*10 == outbuf_size) -                fprintf(stderr, "."); +                print_status(".", &remaining_line_len);          } + +        fflush(stdout);      }      zmq_sock.close(); | 
