public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Simon Ser <simon.ser@intel.com>
To: igt-dev@lists.freedesktop.org
Subject: [igt-dev] [RFC PATCH 1/3] lib/igt_infoframe: new library
Date: Tue, 16 Jul 2019 14:58:12 +0300	[thread overview]
Message-ID: <20190716115814.17676-2-simon.ser@intel.com> (raw)
In-Reply-To: <20190716115814.17676-1-simon.ser@intel.com>

This commit introduces a new igt_infoframe library, used to parse InfoFrames.
For now only audio InfoFrames are supported. Support for AVI and other types of
InfoFrames is planned (and will come with the matching tests).

Unlike igt_edid, InfoFrames are parsed into a higher-level user-friendly
struct.

Signed-off-by: Simon Ser <simon.ser@intel.com>
---
 lib/Makefile.sources |  2 +
 lib/igt_infoframe.c  | 94 ++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_infoframe.h  | 64 ++++++++++++++++++++++++++++++
 lib/meson.build      |  1 +
 4 files changed, 161 insertions(+)
 create mode 100644 lib/igt_infoframe.c
 create mode 100644 lib/igt_infoframe.h

diff --git a/lib/Makefile.sources b/lib/Makefile.sources
index e16de86eaa08..cf094ab89ac3 100644
--- a/lib/Makefile.sources
+++ b/lib/Makefile.sources
@@ -41,6 +41,8 @@ lib_source_list =	 	\
 	igt_gvt.h		\
 	igt_halffloat.c		\
 	igt_halffloat.h		\
+	igt_infoframe.c		\
+	igt_infoframe.h		\
 	igt_matrix.c		\
 	igt_matrix.h		\
 	igt_primes.c		\
diff --git a/lib/igt_infoframe.c b/lib/igt_infoframe.c
new file mode 100644
index 000000000000..7e4fb45881a6
--- /dev/null
+++ b/lib/igt_infoframe.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright © 2019 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors: Simon Ser <simon.ser@intel.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "igt_infoframe.h"
+
+/**
+ * SECTION:igt_infoframe
+ * @short_description: InfoFrame parsing library
+ * @title: InfoFrame
+ * @include: igt_infoframe.h
+ *
+ * This library provides helpers to parse InfoFrames as defined in CEA-861-D
+ * section 6.
+ */
+
+static const int sampling_freqs[] = {
+	-1, /* refer to stream header */
+	33000,
+	44100,
+	48000,
+	88200,
+	96000,
+	176400,
+	192000,
+};
+
+static const size_t sampling_freqs_len = sizeof(sampling_freqs) / sizeof(sampling_freqs[0]);
+
+static const int sample_sizes[] = {
+	-1, /* refer to stream header */
+	16,
+	20,
+	24,
+};
+
+static const size_t sample_sizes_len = sizeof(sample_sizes) / sizeof(sample_sizes[0]);
+
+bool infoframe_audio_parse(struct infoframe_audio *infoframe, int version,
+			   const uint8_t *buf, size_t buf_size)
+{
+	int channel_count;
+	size_t sampling_freq_idx, sample_size_idx;
+
+	memset(infoframe, 0, sizeof(*infoframe));
+
+	if (version != 1 || buf_size < 5)
+		return false;
+
+	infoframe->coding_type = buf[0] >> 4;
+
+	channel_count = buf[0] & 0x7;
+	if (channel_count == 0)
+		infoframe->channel_count = -1;
+	else
+		infoframe->channel_count = channel_count + 1;
+
+	sampling_freq_idx = (buf[1] >> 2) & 0x7;
+	if (sampling_freq_idx >= sampling_freqs_len)
+		return false;
+	infoframe->sampling_freq = sampling_freqs[sampling_freq_idx];
+
+	sample_size_idx = buf[1] & 0x3;
+	if (sample_size_idx >= sample_sizes_len)
+		return false;
+	infoframe->sample_size = sample_sizes[sample_size_idx];
+
+	return true;
+}
diff --git a/lib/igt_infoframe.h b/lib/igt_infoframe.h
new file mode 100644
index 000000000000..35daa3ea169d
--- /dev/null
+++ b/lib/igt_infoframe.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright © 2019 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors: Simon Ser <simon.ser@intel.com>
+ */
+
+#ifndef IGT_INFOFRAME_H
+#define IGT_INFOFRAME_H
+
+#include "config.h"
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+enum infoframe_audio_coding_type {
+	INFOFRAME_AUDIO_CT_UNSPECIFIED = 0, /* refer to stream header */
+	INFOFRAME_AUDIO_CT_PCM = 1, /* IEC 60958 PCM */
+	INFOFRAME_AUDIO_CT_AC3 = 2,
+	INFOFRAME_AUDIO_CT_MPEG1 = 3,
+	INFOFRAME_AUDIO_CT_MP3 = 4,
+	INFOFRAME_AUDIO_CT_MPEG2 = 5,
+	INFOFRAME_AUDIO_CT_AAC = 6,
+	INFOFRAME_AUDIO_CT_DTS = 7,
+	INFOFRAME_AUDIO_CT_ATRAC = 8,
+	INFOFRAME_AUDIO_CT_ONE_BIT = 9,
+	INFOFRAME_AUDIO_CT_DOLBY = 10, /* Dolby Digital + */
+	INFOFRAME_AUDIO_CT_DTS_HD = 11,
+	INFOFRAME_AUDIO_CT_MAT = 12,
+	INFOFRAME_AUDIO_CT_DST = 13,
+	INFOFRAME_AUDIO_CT_WMA_PRO = 14,
+};
+
+struct infoframe_audio {
+	enum infoframe_audio_coding_type coding_type;
+	int channel_count; /* -1 if unspecified */
+	int sampling_freq; /* in Hz, -1 if unspecified */
+	int sample_size; /* in bits, -1 if unspecified */
+	/* TODO: speaker allocation */
+};
+
+bool infoframe_audio_parse(struct infoframe_audio *infoframe, int version,
+			   const uint8_t *buf, size_t buf_size);
+
+#endif
diff --git a/lib/meson.build b/lib/meson.build
index 157624e71952..221ae28c084b 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -61,6 +61,7 @@ lib_sources = [
 	'igt_amd.c',
 	'igt_edid.c',
 	'igt_eld.c',
+	'igt_infoframe.c',
 ]
 
 lib_deps = [
-- 
2.22.0

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2019-07-16 11:58 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-16 11:58 [igt-dev] [RFC PATCH 0/3] Chamelium audio InfoFrame tests Simon Ser
2019-07-16 11:58 ` Simon Ser [this message]
2019-07-16 11:58 ` [igt-dev] [RFC PATCH 2/3] lib/igt_chamelium: add support for GetLastInfoFrame Simon Ser
2019-07-16 11:58 ` [igt-dev] [RFC PATCH 3/3] tests/kms_chamelium: add InfoFrame checks to audio tests Simon Ser
2019-07-17 13:36   ` Martin Peres
2019-07-16 13:18 ` [igt-dev] ✓ Fi.CI.BAT: success for Chamelium audio InfoFrame tests Patchwork
2019-07-16 14:26 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

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=20190716115814.17676-2-simon.ser@intel.com \
    --to=simon.ser@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox