- Backport upstream fixes: more topology fixes, a memory leak fix in mixer API, alsactl string handling fix, UCM config fixes: 0032-Update-the-attributes.m4-macro-file-from-xine.patch 0033-topology-avoid-to-use-the-atoi-directly-when-expecte.patch 0034-topology-use-snd_config_get_bool-instead-own-impleme.patch 0035-topology-fix-tplg_get_integer-handle-errno-ERANGE.patch 0036-topology-add-tplg_get_unsigned-function.patch 0037-topology-convert-builder-to-use-the-mallocated-memor.patch 0038-topology-add-binary-output-from-the-builder.patch 0039-topology-parser-recode-tplg_parse_config.patch 0040-topology-add-snd_tplg_load-remove-snd_tplg_build_bin.patch 0041-topology-move-the-topology-element-table-from-builde.patch 0042-topology-add-parser-to-the-tplg_table.patch 0043-topology-add-snd_tplg_save.patch 0044-topology-add-snd_tplg_create-with-flags.patch 0045-topology-add-snd_tplg_version-function.patch 0046-topology-cleanup-the-SNDERR-calls.patch 0047-topology-dapm-fix-the-SNDERR-Undefined.patch 0048-topology-fix-the-unitialized-tuples.patch 0049-topology-implement-shorter-hexa-uuid-00-00-parser.patch 0050-topology-fix-the-TPLG_DEBUG-compilation.patch 0051-topology-fix-the-ops-parser-accept-integer-hexa-valu.patch 0052-topology-fix-the-wrong-memory-access-object-realloc.patch 0053-topology-implement-snd_tplg_decode.patch 0054-topology-move-the-elem-list-delete-to-tplg_elem_free.patch 0055-topology-unify-the-log-mechanism.patch 0056-topology-tplg_dbg-cleanups.patch 0057-topology-cosmetic-changes-functions.patch 0058-mixer-Fix-memory-leak-for-more-than-16-file-descript.patch OBS-URL: https://build.opensuse.org/request/show/766329 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=265
209 lines
5.2 KiB
Diff
209 lines
5.2 KiB
Diff
From d52eaba63dfe1d845663a4cd1bf676fafc43874a Mon Sep 17 00:00:00 2001
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
Date: Sun, 15 Dec 2019 16:03:29 +0100
|
|
Subject: [PATCH 40/63] topology: add snd_tplg_load() remove
|
|
snd_tplg_build_bin_file()
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
---
|
|
include/topology.h | 16 ++++-----
|
|
src/topology/parser.c | 96 ++++++++++++++++++---------------------------------
|
|
2 files changed, 41 insertions(+), 71 deletions(-)
|
|
|
|
diff --git a/include/topology.h b/include/topology.h
|
|
index c9ef554a610f..c9f4ffea27de 100644
|
|
--- a/include/topology.h
|
|
+++ b/include/topology.h
|
|
@@ -784,25 +784,23 @@ snd_tplg_t *snd_tplg_new(void);
|
|
void snd_tplg_free(snd_tplg_t *tplg);
|
|
|
|
/**
|
|
- * \brief Parse and build topology text file into binary file.
|
|
+ * \brief Load topology from the text buffer.
|
|
* \param tplg Topology instance.
|
|
- * \param infile Topology text input file to be parsed
|
|
- * \param outfile Binary topology output file.
|
|
+ * \param buf Text buffer.
|
|
+ * \param size Text buffer size in bytes.
|
|
* \return Zero on success, otherwise a negative error code
|
|
*/
|
|
-int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
|
|
- const char *outfile);
|
|
+int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size);
|
|
|
|
/**
|
|
* \brief Parse and build topology text file into binary file.
|
|
* \param tplg Topology instance.
|
|
* \param infile Topology text input file to be parsed
|
|
- * \param bin Binary topology output buffer (malloc).
|
|
- * \param size Binary topology output buffer size in bytes.
|
|
+ * \param outfile Binary topology output file.
|
|
* \return Zero on success, otherwise a negative error code
|
|
*/
|
|
-int snd_tplg_build_bin_file(snd_tplg_t *tplg, const char *infile,
|
|
- void **bin, size_t *size);
|
|
+int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
|
|
+ const char *outfile);
|
|
|
|
/**
|
|
* \brief Enable verbose reporting of binary file output
|
|
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
index 82af7cc518d8..ed864d3223c4 100644
|
|
--- a/src/topology/parser.c
|
|
+++ b/src/topology/parser.c
|
|
@@ -259,52 +259,30 @@ static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
return 0;
|
|
}
|
|
|
|
-static int tplg_load_config(const char *file, snd_config_t **cfg)
|
|
+static int tplg_load_config(snd_tplg_t *tplg, snd_input_t *in)
|
|
{
|
|
- FILE *fp;
|
|
- snd_input_t *in;
|
|
snd_config_t *top;
|
|
int ret;
|
|
|
|
- fp = fopen(file, "r");
|
|
- if (fp == NULL) {
|
|
- SNDERR("error: could not open configuration file %s",
|
|
- file);
|
|
- return -errno;
|
|
- }
|
|
-
|
|
- ret = snd_input_stdio_attach(&in, fp, 1);
|
|
- if (ret < 0) {
|
|
- fclose(fp);
|
|
- SNDERR("error: could not attach stdio %s", file);
|
|
- return ret;
|
|
- }
|
|
ret = snd_config_top(&top);
|
|
if (ret < 0)
|
|
- goto err;
|
|
+ return ret;
|
|
|
|
ret = snd_config_load(top, in);
|
|
if (ret < 0) {
|
|
- SNDERR("error: could not load configuration file %s",
|
|
- file);
|
|
- goto err_load;
|
|
+ SNDERR("error: could not load configuration");
|
|
+ snd_config_delete(top);
|
|
+ return ret;
|
|
}
|
|
|
|
- ret = snd_input_close(in);
|
|
+ ret = tplg_parse_config(tplg, top);
|
|
+ snd_config_delete(top);
|
|
if (ret < 0) {
|
|
- in = NULL;
|
|
- goto err_load;
|
|
+ SNDERR("error: failed to parse topology");
|
|
+ return ret;
|
|
}
|
|
|
|
- *cfg = top;
|
|
return 0;
|
|
-
|
|
-err_load:
|
|
- snd_config_delete(top);
|
|
-err:
|
|
- if (in)
|
|
- snd_input_close(in);
|
|
- return ret;
|
|
}
|
|
|
|
static int tplg_build_integ(snd_tplg_t *tplg)
|
|
@@ -350,26 +328,20 @@ static int tplg_build_integ(snd_tplg_t *tplg)
|
|
return err;
|
|
}
|
|
|
|
-static int tplg_load(snd_tplg_t *tplg, const char *infile)
|
|
+int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size)
|
|
{
|
|
- snd_config_t *cfg = NULL;
|
|
- int err = 0;
|
|
-
|
|
- err = tplg_load_config(infile, &cfg);
|
|
- if (err < 0) {
|
|
- SNDERR("error: failed to load topology file %s\n",
|
|
- infile);
|
|
- return err;
|
|
- }
|
|
+ snd_input_t *in;
|
|
+ int err;
|
|
|
|
- err = tplg_parse_config(tplg, cfg);
|
|
+ err = snd_input_buffer_open(&in, buf, size);
|
|
if (err < 0) {
|
|
- SNDERR("error: failed to parse topology\n");
|
|
+ SNDERR("error: could not create input buffer");
|
|
return err;
|
|
}
|
|
|
|
- snd_config_delete(cfg);
|
|
- return 0;
|
|
+ err = tplg_load_config(tplg, in);
|
|
+ snd_input_close(in);
|
|
+ return err;
|
|
}
|
|
|
|
static int tplg_build(snd_tplg_t *tplg)
|
|
@@ -394,26 +366,30 @@ int snd_tplg_build_file(snd_tplg_t *tplg,
|
|
const char *infile,
|
|
const char *outfile)
|
|
{
|
|
+ FILE *fp;
|
|
+ snd_input_t *in;
|
|
int err;
|
|
|
|
- err = tplg_load(tplg, infile);
|
|
- if (err < 0)
|
|
- return err;
|
|
-
|
|
- return snd_tplg_build(tplg, outfile);
|
|
-}
|
|
+ fp = fopen(infile, "r");
|
|
+ if (fp == NULL) {
|
|
+ SNDERR("error: could not open configuration file %s",
|
|
+ infile);
|
|
+ return -errno;
|
|
+ }
|
|
|
|
-int snd_tplg_build_bin_file(snd_tplg_t *tplg,
|
|
- const char *infile,
|
|
- void **bin, size_t *size)
|
|
-{
|
|
- int err;
|
|
+ err = snd_input_stdio_attach(&in, fp, 1);
|
|
+ if (err < 0) {
|
|
+ fclose(fp);
|
|
+ SNDERR("error: could not attach stdio %s", infile);
|
|
+ return err;
|
|
+ }
|
|
|
|
- err = tplg_load(tplg, infile);
|
|
+ err = tplg_load_config(tplg, in);
|
|
+ snd_input_close(in);
|
|
if (err < 0)
|
|
return err;
|
|
|
|
- return snd_tplg_build_bin(tplg, bin, size);
|
|
+ return snd_tplg_build(tplg, outfile);
|
|
}
|
|
|
|
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
@@ -476,10 +452,6 @@ int snd_tplg_build_bin(snd_tplg_t *tplg,
|
|
{
|
|
int err;
|
|
|
|
- err = tplg_build(tplg);
|
|
- if (err < 0)
|
|
- return err;
|
|
-
|
|
err = tplg_build(tplg);
|
|
if (err < 0)
|
|
return err;
|
|
--
|
|
2.16.4
|
|
|