From 1ffbd0ab2809ce11319b23a12cc87c2fd7e40368 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 24 Oct 2008 09:24:32 +0200 Subject: [PATCH] ac3dec - Add -H option for HDMI The HD-audio can have an independent HDMI PCM device via "hdmi". The option -H is for using hdmi instead of spdif. Signed-off-by: Takashi Iwai --- ac3dec/ac3dec.c | 6 ++++++ ac3dec/output.c | 14 ++++++++++++-- ac3dec/output.h | 3 ++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ac3dec/ac3dec.c b/ac3dec/ac3dec.c index 933a41d..c45148c 100644 --- a/ac3dec/ac3dec.c +++ b/ac3dec/ac3dec.c @@ -56,6 +56,7 @@ static void help(void) printf(" -C,--iec958c raw IEC958 (S/PDIF) consumer mode\n"); printf(" -P,--iec958p raw IEC958 (S/PDIF) professional mode\n"); printf(" -R,--iec958r raw IEC958 (S/PDIF) PCM\n"); + printf(" -H,--hdmi output to HDMI device\n"); printf(" -Z,--zero=# add # zero-AC3-frames before stream\n"); printf(" -q,--quit quit mode\n"); } @@ -106,6 +107,7 @@ int main(int argc,char *argv[]) {"spdif", 0, NULL, 'C'}, {"iec958p", 0, NULL, 'P'}, {"iec958r", 0, NULL, 'R'}, + {"hdmi", 0, NULL, 'H'}, {"zero", 1, NULL, 'Z'}, {"quit", 0, NULL, 'q'}, {NULL, 0, NULL, 0}, @@ -126,6 +128,7 @@ int main(int argc,char *argv[]) out_config.rate = 48000; out_config.channels = 2; out_config.spdif = SPDIF_NONE; + out_config.hdmi = 0; morehelp = 0; while (1) { @@ -166,6 +169,9 @@ int main(int argc,char *argv[]) ac3_config.num_output_ch = 2; out_config.spdif = SPDIF_PCM; break; + case 'H': + out_config.hdmi = 1; + break; case 'Z': zero = atoi(optarg); break; diff --git a/ac3dec/output.c b/ac3dec/output.c index 06897e2..5f707f8 100644 --- a/ac3dec/output.c +++ b/ac3dec/output.c @@ -41,6 +41,7 @@ int output_open(output_t *output) { const char *pcm_name = output->pcm_name; char devstr[128]; + const char *basedev; snd_pcm_hw_params_t *params; unsigned int rate, buffer_time, period_time, tmp; snd_pcm_format_t format = output->bits == 16 ? SND_PCM_FORMAT_S16 : SND_PCM_FORMAT_U8; @@ -76,9 +77,18 @@ int output_open(output_t *output) s[2] = 0; s[3] = IEC958_AES3_CON_FS_48000; } - sprintf(devstr, "plug:iec958:{AES0 0x%x AES1 0x%x AES2 0x%x AES3 0x%x", s[0], s[1], s[2], s[3]); + if (output->hdmi) + basedev = "hdmi"; + else + basedev = "iec958"; + sprintf(devstr, "plug:%s:{" + "AES0 0x%x AES1 0x%x " + "AES2 0x%x AES3 0x%x", + basedev, + s[0], s[1], s[2], s[3]); if (out_config.card) - sprintf(devstr + strlen(devstr), " CARD %s", out_config.card); + sprintf(devstr + strlen(devstr), + " CARD %s", out_config.card); strcat(devstr, "}"); format = SND_PCM_FORMAT_S16_LE; } else { diff --git a/ac3dec/output.h b/ac3dec/output.h index 1087a73..95e535f 100644 --- a/ac3dec/output.h +++ b/ac3dec/output.h @@ -30,7 +30,8 @@ typedef struct { int bits; int rate; int channels; - int quiet: 1; + unsigned int quiet: 1; + unsigned int hdmi: 1; enum {SPDIF_NONE = 0, SPDIF_CON, SPDIF_PRO, SPDIF_PCM} spdif; } output_t; -- 2.47.1