From ea63d254bcfd91d85b08b3c1e6cef1752e977206 Mon Sep 17 00:00:00 2001
From: Manish Dewangan <manish@codeaurora.org>
Date: Mon, 23 Jan 2017 15:36:49 +0530
Subject: [PATCH 2/2] tinycompress: Add get_metadata() and set_metadata() API
 support

-Add generic get_metadata() and set_metadata() APIs so that client
 call these API to get/set metadata value based on key.
---
 include/tinycompress/tinycompress.h |  8 ++++++++
 src/lib/compress.c                  | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/include/tinycompress/tinycompress.h b/include/tinycompress/tinycompress.h
index 58bf7f6..6cceabc 100644
--- a/include/tinycompress/tinycompress.h
+++ b/include/tinycompress/tinycompress.h
@@ -84,6 +84,7 @@ struct compr_gapless_mdata {
 
 struct compress;
 struct snd_compr_tstamp;
+struct snd_compr_metadata;
 
 /*
  * compress_open: open a new compress stream
@@ -285,4 +286,11 @@ int is_compress_ready(struct compress *compress);
 /* Returns a human readable reason for the last error */
 const char *compress_get_error(struct compress *compress);
 
+/* set metadata */
+int compress_set_metadata(struct compress *compress,
+	    struct snd_compr_metadata *mdata);
+
+/* get metadata */
+int compress_get_metadata(struct compress *compress,
+	    struct snd_compr_metadata *mdata);
 #endif
diff --git a/src/lib/compress.c b/src/lib/compress.c
index 6a0c72f..10f5d76 100644
--- a/src/lib/compress.c
+++ b/src/lib/compress.c
@@ -644,3 +644,35 @@ int compress_wait(struct compress *compress, int timeout_ms)
 	return oops(compress, EIO, "poll signalled unhandled event");
 }
 
+int compress_get_metadata(struct compress *compress,
+		struct snd_compr_metadata *mdata) {
+	int version;
+	if (!is_compress_ready(compress))
+		return oops(compress, ENODEV, "device not ready");
+
+	version = get_compress_version(compress);
+	if (version <= 0)
+		return -1;
+
+	if (ioctl(compress->fd, SNDRV_COMPRESS_GET_METADATA, mdata)) {
+		return oops(compress, errno, "can't set metadata for stream\n");
+	}
+	return 0;
+}
+
+int compress_set_metadata(struct compress *compress,
+		struct snd_compr_metadata *mdata) {
+
+	int version;
+	if (!is_compress_ready(compress))
+		return oops(compress, ENODEV, "device not ready");
+
+	version = get_compress_version(compress);
+	if (version <= 0)
+		return -1;
+
+	if (ioctl(compress->fd, SNDRV_COMPRESS_SET_METADATA, mdata)) {
+		return oops(compress, errno, "can't set metadata for stream\n");
+	}
+	return 0;
+}
-- 
1.9.1

