diff options
author | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2020-06-09 17:33:00 +0100 |
---|---|---|
committer | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2020-06-09 17:33:00 +0100 |
commit | 31a0a4c57026cd4ee682e4c5eccfaba153cd8f03 (patch) | |
tree | 56c37e9276bdfea087f8ae4005fd634810b615a4 | |
parent | 31cafaecc42110c23468e7a839422325996d06ac (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.h | 1 | ||||
-rw-r--r-- | include/tinycompress/tinycompress.h | 12 | ||||
-rw-r--r-- | src/lib/compress.c | 19 |
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) { |