[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4D585450.2050900@gmail.com>
Date: Sun, 13 Feb 2011 22:59:44 +0100
From: Sylwester Nawrocki <snjw23@...il.com>
To: Laurent Pinchart <laurent.pinchart@...asonboard.com>
CC: linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
alsa-devel@...a-project.org, clemens@...isch.de,
broonie@...nsource.wolfsonmicro.com,
sakari.ailus@...well.research.nokia.com
Subject: Re: [PATCH v8 07/12] media: Entities, pads and links enumeration
Hi Laurent,
Please see my little comment below..
On 2011-01-27 13:30, Laurent Pinchart wrote:
> Create the following two ioctls and implement them at the media device
> level to enumerate entities, pads and links.
>
> - MEDIA_IOC_ENUM_ENTITIES: Enumerate entities and their properties
> - MEDIA_IOC_ENUM_LINKS: Enumerate all pads and links for a given entity
>
> Entity IDs can be non-contiguous. Userspace applications should
> enumerate entities using the MEDIA_ENT_ID_FLAG_NEXT flag. When the flag
> is set in the entity ID, the MEDIA_IOC_ENUM_ENTITIES will return the
> next entity with an ID bigger than the requested one.
>
> Only forward links that originate at one of the entity's source pads are
> returned during the enumeration process.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@...asonboard.com>
> Signed-off-by: Sakari Ailus <sakari.ailus@...well.research.nokia.com>
> ---
> Documentation/DocBook/media-entities.tmpl | 8 +
> Documentation/DocBook/v4l/media-controller.xml | 2 +
> .../DocBook/v4l/media-ioc-device-info.xml | 3 +-
> .../DocBook/v4l/media-ioc-enum-entities.xml | 308 ++++++++++++++++++++
> Documentation/DocBook/v4l/media-ioc-enum-links.xml | 202 +++++++++++++
> drivers/media/media-device.c | 123 ++++++++
> include/linux/media.h | 85 ++++++
> include/media/media-entity.h | 24 +--
> 8 files changed, 731 insertions(+), 24 deletions(-)
> create mode 100644 Documentation/DocBook/v4l/media-ioc-enum-entities.xml
> create mode 100644 Documentation/DocBook/v4l/media-ioc-enum-links.xml
>
...
> diff --git a/Documentation/DocBook/v4l/media-ioc-enum-links.xml b/Documentation/DocBook/v4l/media-ioc-enum-links.xml
> new file mode 100644
> index 0000000..daf0360
> --- /dev/null
> +++ b/Documentation/DocBook/v4l/media-ioc-enum-links.xml
> @@ -0,0 +1,202 @@
> +<refentry id="media-ioc-enum-links">
> + <refmeta>
> + <refentrytitle>ioctl MEDIA_IOC_ENUM_LINKS</refentrytitle>
> + &manvol;
> + </refmeta>
> +
> + <refnamediv>
> + <refname>MEDIA_IOC_ENUM_LINKS</refname>
> + <refpurpose>Enumerate all pads and links for a given entity</refpurpose>
> + </refnamediv>
> +
> + <refsynopsisdiv>
> + <funcsynopsis>
> + <funcprototype>
> + <funcdef>int <function>ioctl</function></funcdef>
> + <paramdef>int <parameter>fd</parameter></paramdef>
> + <paramdef>int <parameter>request</parameter></paramdef>
> + <paramdef>struct media_links_enum *<parameter>argp</parameter></paramdef>
> + </funcprototype>
> + </funcsynopsis>
> + </refsynopsisdiv>
> +
> + <refsect1>
> + <title>Arguments</title>
> +
> + <variablelist>
> + <varlistentry>
> + <term><parameter>fd</parameter></term>
> + <listitem>
> + <para>File descriptor returned by
> + <link linkend='media-func-open'><function>open()</function></link>.</para>
> + </listitem>
> + </varlistentry>
> + <varlistentry>
> + <term><parameter>request</parameter></term>
> + <listitem>
> + <para>MEDIA_IOC_ENUM_LINKS</para>
> + </listitem>
> + </varlistentry>
> + <varlistentry>
> + <term><parameter>argp</parameter></term>
> + <listitem>
> + <para></para>
> + </listitem>
> + </varlistentry>
> + </variablelist>
> + </refsect1>
> +
> + <refsect1>
> + <title>Description</title>
> +
> + <para>To enumerate pads and/or links for a given entity, applications set
> + the entity field of a &media-links-enum; structure and initialize the
> + &media-pad-desc; and &media-link-desc; structure arrays pointed by the
> + <structfield>pads</structfield> and <structfield>links</structfield> fields.
> + They then call the MEDIA_IOC_ENUM_LINKS ioctl with a pointer to this
> + structure.</para>
> + <para>If the <structfield>pads</structfield> field is not NULL, the driver
> + fills the <structfield>pads</structfield> array with information about the
> + entity's pads. The array must have enough room to store all the entity's
> + pads. The number of pads can be retrieved with the &MEDIA-IOC-ENUM-ENTITIES;
> + ioctl.</para>
> + <para>If the <structfield>links</structfield> field is not NULL, the driver
> + fills the <structfield>links</structfield> array with information about the
> + entity's outbound links. The array must have enough room to store all the
> + entity's outbound links. The number of outbound links can be retrieved with
> + the &MEDIA-IOC-ENUM-ENTITIES; ioctl.</para>
> + <para>Only forward links that originate at one of the entity's source pads
> + are returned during the enumeration process.</para>
> +
> + <table pgwide="1" frame="none" id="media-links-enum">
> + <title>struct <structname>media_links_enum</structname></title>
> + <tgroup cols="3">
> + &cs-str;
> + <tbody valign="top">
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>entity</structfield></entry>
> + <entry>Entity id, set by the application.</entry>
> + </row>
> + <row>
> + <entry>struct &media-pad-desc;</entry>
> + <entry>*<structfield>pads</structfield></entry>
> + <entry>Pointer to a pads array allocated by the application. Ignored
> + if NULL.</entry>
> + </row>
> + <row>
> + <entry>struct &media-link-desc;</entry>
> + <entry>*<structfield>links</structfield></entry>
> + <entry>Pointer to a links array allocated by the application. Ignored
> + if NULL.</entry>
> + </row>
> + </tbody>
> + </tgroup>
> + </table>
> +
> + <table pgwide="1" frame="none" id="media-pad-desc">
> + <title>struct <structname>media_pad_desc</structname></title>
> + <tgroup cols="3">
> + &cs-str;
> + <tbody valign="top">
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>entity</structfield></entry>
> + <entry>ID of the entity this pad belongs to.</entry>
> + </row>
> + <row>
> + <entry>__u16</entry>
> + <entry><structfield>index</structfield></entry>
> + <entry>0-based pad index.</entry>
> + </row>
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>flags</structfield></entry>
> + <entry>Pad flags, see <xref linkend="media-pad-flag" /> for more details.</entry>
> + </row>
> + </tbody>
> + </tgroup>
> + </table>
> +
> + <table frame="none" pgwide="1" id="media-pad-flag">
> + <title>Media pad flags</title>
> + <tgroup cols="2">
> + <colspec colname="c1"/>
> + <colspec colname="c2"/>
> + <tbody valign="top">
> + <row>
> + <entry><constant>MEDIA_PAD_FL_INPUT</constant></entry>
> + <entry>Input pad, relative to the entity. Input pads sink data and
> + are targets of links.</entry>
> + </row>
> + <row>
> + <entry><constant>MEDIA_PAD_FL_OUTPUT</constant></entry>
> + <entry>Output pad, relative to the entity. Output pads source data
> + and are origins of links.</entry>
> + </row>
> + </tbody>
> + </tgroup>
> + </table>
> +
> + <table pgwide="1" frame="none" id="media-link-desc">
> + <title>struct <structname>media_links_enum</structname></title>
..the above line should perhaps be:
> + <title>struct <structname>media_links_desc</structname></title>
as "struct media_links_desc" is described above.
BTW, I was wondering how one makes use of the pads associated with
a media entity of type other than MEDIA_ENT_T_V4L2_SUBDEV*,
e.g. V4L2 device - MEDIA_ENT_T_DEVNODE_V4L.
I guess new standard ioctls should be added for per pads operations
at V4L2 device, similarly is it is done with v4l2-subdevs.
Is this right?
Regards,
Sylwester
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists