From: Mohammad Rafi Shaik Date: Thu, 28 Sep 2023 07:18:06 +0000 (+0530) Subject: fcplay: Modify play_samples func to support gapless playback. X-Git-Tag: v1.2.11~2 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=40603c037c8ddbcbcb7e1ccacb322bcc9c44324d;p=tinycompress.git fcplay: Modify play_samples func to support gapless playback. This patch will add changes which is required in play_samples function to support gapless playback. Signed-off-by: Srinivas Kandagatla Signed-off-by: Mohammad Rafi Shaik Signed-off-by: Vinod Koul --- diff --git a/src/utils-lgpl/fcplay.c b/src/utils-lgpl/fcplay.c index c534292..aff0915 100644 --- a/src/utils-lgpl/fcplay.c +++ b/src/utils-lgpl/fcplay.c @@ -303,16 +303,17 @@ exit: void play_samples(char **files, unsigned int card, unsigned int device, unsigned long buffer_size, unsigned int frag, - unsigned long codec_id, unsigned int file_count) + unsigned long codec_id, unsigned int file_count, unsigned int gapless) { struct compr_config config; struct snd_codec codec; struct compress *compress; + struct compr_gapless_mdata mdata; FILE *file; char *buffer; char *name; int size, num_read, wrote; - unsigned int file_idx = 0; + unsigned int file_idx = 0, rc = 0; if (verbose) printf("%s: entry\n", __func__); @@ -326,6 +327,7 @@ void play_samples(char **files, unsigned int card, unsigned int device, memset(&codec, 0, sizeof(codec)); memset(&config, 0, sizeof(config)); + memset(&mdata, 0, sizeof(mdata)); parse_file(name, &codec); @@ -347,6 +349,9 @@ void play_samples(char **files, unsigned int card, unsigned int device, goto COMP_EXIT; } + if (gapless) + compress_set_gapless_metadata(compress, &mdata); + /* we will write frag fragment_size and then start */ num_read = fread(buffer, 1, size * config.fragments, file); if (num_read > 0) { @@ -378,6 +383,31 @@ void play_samples(char **files, unsigned int card, unsigned int device, file = fopen(name, "rb"); if (!file) goto TRACK_EXIT; + + if (verbose) + printf("Playing file %s On Card %u device %u, with buffer of %lu bytes\n", + name, card, device, buffer_size); + + if (gapless) { + parse_file(name, &codec); + + rc = compress_next_track(compress); + if (rc) + fprintf(stderr, "ERR: compress next track set\n"); + + rc = compress_set_gapless_metadata(compress, &mdata); + if (rc) + fprintf(stderr, "ERR: set gapless metadata\n"); + + rc = compress_set_codec_params(compress, &codec); + if (rc) + fprintf(stderr, "ERR: set next track codec params\n"); + + /* issue partial drain if it supports */ + rc = compress_partial_drain(compress); + if (rc) + fprintf(stderr, "ERR: partial drain\n"); + } } do {