alsa-utils/0022-aplay-Add-option-for-specifying-subformat.patch
Takashi Iwai c349a7f6d8 Accepting request 1137523 from home:tiwai:branches:multimedia:libs
- Backport upstream fixes:
  buffer overflow fixes in aplay, segfault in aplaymidi, etc:
  0008-topology-include-locale.h.patch 
  0009-nhlt-dmic-info.c-include-sys-types.h.patch 
  0010-topology-pre-processor-Add-support-for-enum-controls.patch 
  0011-configure.ac-fix-UMP-support-detection.patch 
  0012-bat-really-skip-analysis-of-the-first-period-and-upd.patch 
  0013-topology-add-include-for-ENABLE_NLS-on-musl.patch 
  0014-nhlt-use-stdint.h-types.patch 
  0015-Revert-nhlt-dmic-info.c-include-sys-types.h.patch 
  0016-aplay-use-stdint.h-types-instead-u_int-u_short-u_cha.patch 
  0017-alsa-restore.rules-use-devnode-instead-number-atribu.patch 
  0018-nhlt-Revert-SSP_ANALOG-device_type-field.patch 
  0019-alsactl-fix-potential-buffer-overwrite.patch 
  0020-aplay-fix-buffer-overflow-and-tainted-format-string.patch 
  0021-misc-fix-incorrect-usages-of-strerror.patch 
  0022-aplay-Add-option-for-specifying-subformat.patch 
  0023-aplay-allow-to-compile-with-older-alsa-lib-subformat.patch 
  0024-aplay-log-pcm-status-before-reporting-a-fatal-error.patch 
  0025-aplay-enable-timestamps-by-default.patch 
  0026-aplay-status-dumps-are-called-only-in-verbose-mode.patch 
  0027-aplaymidi-Set-event-completely-for-tempo-event.patch

OBS-URL: https://build.opensuse.org/request/show/1137523
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa-utils?expand=0&rev=210
2024-01-08 12:04:12 +00:00

98 lines
3.0 KiB
Diff

From d55cd9fcd9e96e96b27bea778c70dd4459e6d2a3 Mon Sep 17 00:00:00 2001
From: Cezary Rojewski <cezary.rojewski@intel.com>
Date: Fri, 4 Aug 2023 10:26:50 +0200
Subject: [PATCH] aplay: Add option for specifying subformat
Make subformat first-class citizen by allowing users to specify it just
like it is the case for the format. Default to SND_PCM_SUBFORMAT_STD so
they are no surprises.
Closes: https://github.com/alsa-project/alsa-utils/pull/228
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
aplay/aplay.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/aplay/aplay.c b/aplay/aplay.c
index f1c27b6c4929..03443df52d33 100644
--- a/aplay/aplay.c
+++ b/aplay/aplay.c
@@ -101,6 +101,7 @@ static char *command;
static snd_pcm_t *handle;
static struct {
snd_pcm_format_t format;
+ snd_pcm_subformat_t subformat;
unsigned int channels;
unsigned int rate;
} hwparams, rhwparams;
@@ -216,6 +217,7 @@ _("Usage: %s [OPTION]... [FILE]...\n"
"-t, --file-type TYPE file type (voc, wav, raw or au)\n"
"-c, --channels=# channels\n"
"-f, --format=FORMAT sample format (case insensitive)\n"
+" --subformat=SUBFORMAT sample subformat (case insensitive)\n"
"-r, --rate=# sample rate\n"
"-d, --duration=# interrupt after # seconds\n"
"-s, --samples=# interrupt after # samples per channel\n"
@@ -434,6 +436,7 @@ enum {
OPT_USE_STRFTIME,
OPT_DUMP_HWPARAMS,
OPT_FATAL_ERRORS,
+ OPT_SUBFORMAT,
};
/*
@@ -491,6 +494,7 @@ int main(int argc, char *argv[])
{"file-type", 1, 0, 't'},
{"channels", 1, 0, 'c'},
{"format", 1, 0, 'f'},
+ {"subformat", 1, 0, OPT_SUBFORMAT},
{"rate", 1, 0, 'r'},
{"duration", 1, 0 ,'d'},
{"samples", 1, 0, 's'},
@@ -566,6 +570,7 @@ int main(int argc, char *argv[])
chunk_size = -1;
rhwparams.format = DEFAULT_FORMAT;
+ rhwparams.subformat = SND_PCM_SUBFORMAT_STD;
rhwparams.rate = DEFAULT_SPEED;
rhwparams.channels = 1;
@@ -635,6 +640,13 @@ int main(int argc, char *argv[])
}
}
break;
+ case OPT_SUBFORMAT:
+ rhwparams.subformat = snd_pcm_subformat_value(optarg);
+ if (rhwparams.subformat == SND_PCM_SUBFORMAT_UNKNOWN) {
+ error(_("wrong extended subformat '%s'"), optarg);
+ prg_exit(EXIT_FAILURE);
+ }
+ break;
case 'r':
tmp = parse_long(optarg, &err);
if (err < 0) {
@@ -1372,6 +1384,11 @@ static void set_params(void)
show_available_sample_formats(params);
prg_exit(EXIT_FAILURE);
}
+ err = snd_pcm_hw_params_set_subformat(handle, params, hwparams.subformat);
+ if (err < 0) {
+ error(_("Sample subformat not available"));
+ prg_exit(EXIT_FAILURE);
+ }
err = snd_pcm_hw_params_set_channels(handle, params, hwparams.channels);
if (err < 0) {
error(_("Channels count non available"));
@@ -2404,6 +2421,7 @@ static void voc_play(int fd, int ofs, char *name)
}
}
hwparams.format = DEFAULT_FORMAT;
+ hwparams.subformat = SND_PCM_SUBFORMAT_STD;
hwparams.channels = 1;
hwparams.rate = DEFAULT_SPEED;
set_params();
--
2.35.3