aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2020-06-09 17:33:00 +0100
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2020-06-09 17:33:00 +0100
commit31a0a4c57026cd4ee682e4c5eccfaba153cd8f03 (patch)
tree56c37e9276bdfea087f8ae4005fd634810b615a4
parent31cafaecc42110c23468e7a839422325996d06ac (diff)
tinycompress: add compress_set_codec_params()
For gapless playback usecase where each track differs in encoding, new codec parameters that need to be propogated to kernel is done via compress_set_codec_params() Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r--include/sound/compress_offload.h1
-rw-r--r--include/tinycompress/tinycompress.h12
-rw-r--r--src/lib/compress.c19
3 files changed, 32 insertions, 0 deletions
diff --git a/include/sound/compress_offload.h b/include/sound/compress_offload.h
index 54e08a2..7f11949 100644
--- a/include/sound/compress_offload.h
+++ b/include/sound/compress_offload.h
@@ -86,6 +86,7 @@ struct snd_compr_metadata {
#define SNDRV_COMPRESS_GET_PARAMS _IOR('C', 0x13, struct snd_codec)
#define SNDRV_COMPRESS_SET_METADATA _IOW('C', 0x14, struct snd_compr_metadata)
#define SNDRV_COMPRESS_GET_METADATA _IOWR('C', 0x15, struct snd_compr_metadata)
+#define SNDRV_COMPRESS_SET_CODEC_PARAMS _IOW('C', 0x16, struct snd_codec)
#define SNDRV_COMPRESS_TSTAMP _IOR('C', 0x20, struct snd_compr_tstamp)
#define SNDRV_COMPRESS_AVAIL _IOR('C', 0x21, struct snd_compr_avail)
#define SNDRV_COMPRESS_PAUSE _IO('C', 0x30)
diff --git a/include/tinycompress/tinycompress.h b/include/tinycompress/tinycompress.h
index f0fae30..dd1bf8b 100644
--- a/include/tinycompress/tinycompress.h
+++ b/include/tinycompress/tinycompress.h
@@ -242,6 +242,18 @@ int compress_set_gapless_metadata(struct compress *compress,
struct compr_gapless_mdata *mdata);
/*
+ * compress_set_codec_params: set codec parameters for next track
+ *
+ * return 0 on success, negative on error
+ *
+ * @compress: compress stream for which codec params has to set
+ * @params: codec parameters for next track
+ */
+
+int compress_set_codec_params(struct compress *compress,
+ struct snd_codec *params);
+
+/*
* is_codec_supported:check if the given codec is supported
* returns true when supported, false if not
*
diff --git a/src/lib/compress.c b/src/lib/compress.c
index bba4fcf..0b230c6 100644
--- a/src/lib/compress.c
+++ b/src/lib/compress.c
@@ -524,6 +524,25 @@ int compress_set_gapless_metadata(struct compress *compress,
return 0;
}
+int compress_set_codec_params(struct compress *compress,
+ struct snd_codec *params)
+{
+ if (!is_compress_running(compress)) {
+ printf("Not in running state \n");
+ return oops(compress, ENODEV, "device not ready");
+ }
+
+ if (!compress->next_track) {
+ printf("Next track not set \n");
+ return oops(compress, EPERM, "next track not signalled");
+ }
+
+ if (ioctl(compress->fd, SNDRV_COMPRESS_SET_CODEC_PARAMS, params))
+ return oops(&bad_compress, errno, "cannot set device");
+
+ return 0;
+}
+
bool is_codec_supported(unsigned int card, unsigned int device,
unsigned int flags, struct snd_codec *codec)
{