From: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
To: vinod.koul@intel.com
Cc: alsa-devel@alsa-project.org, patches@opensource.wolfsonmicro.com
Subject: [PATCH] crec: Add option to specify codec ID
Date: Wed, 16 Nov 2016 11:44:09 +0000 [thread overview]
Message-ID: <1479296649-18278-1-git-send-email-rf@opensource.wolfsonmicro.com> (raw)
This patch adds a -I command line option to set the codec ID,
either from a defined set of string values or as a number.
Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
---
src/utils/crec.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 59 insertions(+), 7 deletions(-)
diff --git a/src/utils/crec.c b/src/utils/crec.c
index 8d5b7b0..a586fc4 100644
--- a/src/utils/crec.c
+++ b/src/utils/crec.c
@@ -83,6 +83,27 @@ static bool streamed;
static const unsigned int DEFAULT_CHANNELS = 1;
static const unsigned int DEFAULT_RATE = 44100;
static const unsigned int DEFAULT_FORMAT = SNDRV_PCM_FORMAT_S16_LE;
+static const unsigned int DEFAULT_CODEC_ID = SND_AUDIOCODEC_PCM;
+
+static const struct {
+ const char *name;
+ unsigned int id;
+} codec_ids[] = {
+ { "PCM", SND_AUDIOCODEC_PCM },
+ { "MP3", SND_AUDIOCODEC_MP3 },
+ { "AMR", SND_AUDIOCODEC_AMR },
+ { "AMRWB", SND_AUDIOCODEC_AMRWB },
+ { "ARMWBPLUS", SND_AUDIOCODEC_AMRWBPLUS },
+ { "AAC", SND_AUDIOCODEC_AAC },
+ { "WMA", SND_AUDIOCODEC_WMA },
+ { "REAL", SND_AUDIOCODEC_REAL },
+ { "VORBIS", SND_AUDIOCODEC_VORBIS },
+ { "FLAC", SND_AUDIOCODEC_FLAC },
+ { "IEC61937", SND_AUDIOCODEC_IEC61937 },
+ { "G723_1", SND_AUDIOCODEC_G723_1 },
+ { "G729", SND_AUDIOCODEC_G729 },
+};
+#define CREC_NUM_CODEC_IDS (sizeof(codec_ids) / sizeof(codec_ids[0]))
struct riff_chunk {
char desc[4];
@@ -153,6 +174,8 @@ static void size_wave_header(struct wave_header *header, uint32_t size)
static void usage(void)
{
+ int i;
+
fprintf(stderr, "usage: crec [OPTIONS] [filename]\n"
"-c\tcard number\n"
"-d\tdevice node\n"
@@ -163,14 +186,22 @@ static void usage(void)
"-h\tPrints this help list\n\n"
"-C\tSpecify the number of channels (default %u)\n"
"-R\tSpecify the sample rate (default %u)\n"
- "-F\tSpecify the format: S16_LE, S32_LE (default S16_LE)\n\n"
+ "-F\tSpecify the format: S16_LE, S32_LE (default S16_LE)\n"
+ "-I\tSpecify codec ID (default PCM)\n\n"
"If filename is not given the output is\n"
"written to stdout\n\n"
"Example:\n"
"\tcrec -c 1 -d 2 test.wav\n"
- "\tcrec -f 5 test.wav\n",
+ "\tcrec -f 5 test.wav\n\n"
+ "Valid codec IDs:\n",
DEFAULT_CHANNELS, DEFAULT_RATE);
+ for (i = 0; i < CREC_NUM_CODEC_IDS; ++i)
+ fprintf(stderr, "%s%c", codec_ids[i].name,
+ (i % 8) ? ' ' : '\n');
+
+ fprintf(stderr, "\nor the value in decimal or hex\n");
+
exit(EXIT_FAILURE);
}
@@ -239,7 +270,8 @@ static int finish_record(void)
static void capture_samples(char *name, unsigned int card, unsigned int device,
unsigned long buffer_size, unsigned int frag,
unsigned int length, unsigned int rate,
- unsigned int channels, unsigned int format)
+ unsigned int channels, unsigned int format,
+ unsigned int codec_id)
{
struct compr_config config;
struct snd_codec codec;
@@ -288,7 +320,7 @@ static void capture_samples(char *name, unsigned int card, unsigned int device,
memset(&codec, 0, sizeof(codec));
memset(&config, 0, sizeof(config));
- codec.id = SND_AUDIOCODEC_PCM;
+ codec.id = codec_id;
codec.ch_in = channels;
codec.ch_out = channels;
codec.sample_rate = rate;
@@ -408,10 +440,11 @@ int main(int argc, char **argv)
{
char *file;
unsigned long buffer_size = 0;
- int c;
+ int c, i;
unsigned int card = 0, device = 0, frag = 0, length = 0;
unsigned int rate = DEFAULT_RATE, channels = DEFAULT_CHANNELS;
unsigned int format = DEFAULT_FORMAT;
+ unsigned int codec_id = DEFAULT_CODEC_ID;
if (signal(SIGINT, sig_handler) == SIG_ERR) {
fprintf(stderr, "Error registering signal handler\n");
@@ -422,7 +455,7 @@ int main(int argc, char **argv)
usage();
verbose = 0;
- while ((c = getopt(argc, argv, "hvl:R:C:F:b:f:c:d:")) != -1) {
+ while ((c = getopt(argc, argv, "hvl:R:C:F:I:b:f:c:d:")) != -1) {
switch (c) {
case 'h':
usage();
@@ -462,6 +495,25 @@ int main(int argc, char **argv)
usage();
}
break;
+ case 'I':
+ if (optarg[0] == '0') {
+ codec_id = strtol(optarg, NULL, 0);
+ } else {
+ for (i = 0; i < CREC_NUM_CODEC_IDS; ++i) {
+ if (strcmp(optarg,
+ codec_ids[i].name) == 0) {
+ codec_id = codec_ids[i].id;
+ break;
+ }
+ }
+
+ if (i == CREC_NUM_CODEC_IDS) {
+ fprintf(stderr, "Unrecognised ID: %s\n",
+ optarg);
+ usage();
+ }
+ }
+ break;
default:
exit(EXIT_FAILURE);
}
@@ -477,7 +529,7 @@ int main(int argc, char **argv)
}
capture_samples(file, card, device, buffer_size, frag, length,
- rate, channels, format);
+ rate, channels, format, codec_id);
fprintf(finfo, "Finish capturing... Close Normally\n");
--
1.9.1
next reply other threads:[~2016-11-16 11:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-16 11:44 Richard Fitzgerald [this message]
2016-11-16 13:05 ` [PATCH] crec: Add option to specify codec ID Vinod Koul
2016-11-16 13:07 ` Richard Fitzgerald
2016-11-16 13:48 ` Charles Keepax
2016-11-16 14:53 ` Richard Fitzgerald
2016-11-18 3:53 ` Vinod Koul
2016-11-18 10:11 ` Richard Fitzgerald
2016-11-18 10:29 ` Vinod Koul
2016-11-18 14:39 ` Pierre-Louis Bossart
2016-11-18 16:17 ` Charles Keepax
2016-11-23 3:41 ` Vinod Koul
2016-11-23 10:21 ` Richard Fitzgerald
2016-11-23 10:38 ` Vinod Koul
2016-11-27 17:52 ` Pierre-Louis Bossart
2016-11-28 9:47 ` Richard Fitzgerald
2016-11-28 15:54 ` Vinod Koul
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1479296649-18278-1-git-send-email-rf@opensource.wolfsonmicro.com \
--to=rf@opensource.wolfsonmicro.com \
--cc=alsa-devel@alsa-project.org \
--cc=patches@opensource.wolfsonmicro.com \
--cc=vinod.koul@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.