[automerger skipped] DO NOT MERGE - Merge pi-dev@5234907 into stage-aosp-master
am: b48936b8eb -s ours
am skip reason: subject contains skip directive

Change-Id: If64cb26ca4690bb70f0d6775d3ab326f13c88fdc
diff --git a/compress.c b/compress.c
index d1a2283..5845cae 100644
--- a/compress.c
+++ b/compress.c
@@ -572,6 +572,19 @@
 	return 0;
 }
 
+#ifdef ENABLE_EXTENDED_COMPRESS_FORMAT
+int compress_set_next_track_param(struct compress *compress,
+	union snd_codec_options *codec_options)
+{
+	if (!is_compress_running(compress))
+		return oops(compress, ENODEV, "device not ready");
+
+	if (ioctl(compress->fd, SNDRV_COMPRESS_SET_NEXT_TRACK_PARAM, codec_options))
+		return oops(compress, errno, "cannot set next track params\n");
+	return 0;
+}
+#endif
+
 bool is_codec_supported(unsigned int card, unsigned int device,
 		unsigned int flags, struct snd_codec *codec)
 {
@@ -630,3 +643,37 @@
 	return oops(compress, EIO, "poll signalled unhandled event");
 }
 
+#ifdef ENABLE_EXTENDED_COMPRESS_FORMAT
+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 get 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;
+}
+#endif
diff --git a/include/tinycompress/tinycompress.h b/include/tinycompress/tinycompress.h
index 9f95b87..0ab7134 100644
--- a/include/tinycompress/tinycompress.h
+++ b/include/tinycompress/tinycompress.h
@@ -82,6 +82,10 @@
 struct compress;
 struct snd_compr_tstamp;
 
+#ifdef ENABLE_EXTENDED_COMPRESS_FORMAT
+union snd_codec_options;
+struct snd_compr_metadata;
+#endif
 /*
  * compress_open: open a new compress stream
  * returns the valid struct compress on success, NULL on failure
@@ -235,6 +239,20 @@
 int compress_set_gapless_metadata(struct compress *compress,
 			struct compr_gapless_mdata *mdata);
 
+#ifdef ENABLE_EXTENDED_COMPRESS_FORMAT
+/*
+ * compress_set_next_track_param: set params of next compress stream in gapless
+ *
+ * return 0 on success, negative on error
+ *
+ * @compress: compress stream for which codec options has to be set
+ * @codec_options: codec options of compress stream based on codec type
+ */
+
+int compress_set_next_track_param(struct compress *compress,
+			union snd_codec_options *codec_options);
+#endif
+
 /*
  * is_codec_supported:check if the given codec is supported
  * returns true when supported, false if not
@@ -291,6 +309,15 @@
 /* utility functions */
 unsigned int compress_get_alsa_rate(unsigned int rate);
 
+#ifdef ENABLE_EXTENDED_COMPRESS_FORMAT
+/* 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
 
 #if defined(__cplusplus)
 }