From: Hans Verkuil <hansverk@cisco.com>
To: Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
Linux Media Mailing List <linux-media@vger.kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>,
Kyungmin Park <kyungmin.park@samsung.com>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Kukjin Kim <kgene@kernel.org>,
Krzysztof Kozlowski <k.kozlowski@samsung.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Arnd Bergmann <arnd@arndb.de>,
Dan Carpenter <dan.carpenter@oracle.com>,
Tina Ruchandani <ruchandani.tina@gmail.com>,
Akihiro Tsukada <tskd08@gmail.com>,
Antti Palosaari <crope@iki.fi>,
Hans Verkuil <hans.verkuil@cisco.com>,
Prabhakar Lad <prabhakar.csengg@gmail.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Boris BREZILLON <boris.brezillon@free-electrons.com>,
Lars-Peter Clausen <lars@metafoo.de>,
Markus Elfring <elfring@users.sourceforge.net>,
linux-arm-kernel@lists.infradead.org,
linux-samsung-soc@vger.kernel.org, devel@driverdev.osuosl.org
Subject: Re: [PATCH RFC v2 09/16] media: use media_graph_obj for link endpoints
Date: Tue, 11 Aug 2015 14:25:18 +0200 [thread overview]
Message-ID: <55C9E9AE.5020602@cisco.com> (raw)
In-Reply-To: <6d02794028ea4f7ad33e3ba0e07e0c690e2feee2.1439292977.git.mchehab@osg.samsung.com>
Hi Mauro,
Thanks for posting the missing patches.
On 08/11/15 14:09, Mauro Carvalho Chehab wrote:
> As we'll need to create links between entities and interfaces,
> we need to identify the link endpoints by the media_graph_obj.
>
> Most of the changes here was done by this small script:
>
> for i in `find drivers/media -type f` `find drivers/staging/media -type f`; do
> perl -ne 's,([\w]+)\-\>(source|sink)\-\>entity,gobj_to_pad($1->$2)->entity,; print $_;' <$i >a && mv a $i
> done
>
> Please note that, while we're now using graph_obj to reference
> the link endpoints, we're still assuming that all endpoints are
> pads. This is true for all existing links, so no problems
> are expected so far.
>
> Yet, as we introduce links between entities and interfaces,
> we may need to change some existing code to work with links
> that aren't pad to pad.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
>
<snip>
> diff --git a/include/media/media-entity.h b/include/media/media-entity.h
> index 403019035424..f6e2136480f1 100644
> --- a/include/media/media-entity.h
> +++ b/include/media/media-entity.h
> @@ -43,6 +43,17 @@ enum media_graph_type {
> MEDIA_GRAPH_LINK,
> };
>
> +/**
> + * enum media_graph_link_dir - direction of a link
> + *
> + * @MEDIA_LINK_DIR_BIDIRECTIONAL Link is bidirectional
> + * @MEDIA_LINK_DIR_PAD_0_TO_1 Link is unidirectional,
> + * from port 0 (source) to port 1 (sink)
> + */
> +enum media_graph_link_dir {
> + MEDIA_LINK_DIR_BIDIRECTIONAL,
> + MEDIA_LINK_DIR_PORT0_TO_PORT1,
> +};
1) the comment and the actual enum are out-of-sync
2) why not just make a 'BIRECTIONAL' link flag instead of inventing
a new enum? Adding yet another field seems overkill to me. Have a
'BIDIRECTIONAL' flag seems perfectly OK to me (and useful for the
application as well).
>
> /* Structs to represent the objects that belong to a media graph */
>
> @@ -72,9 +83,9 @@ struct media_pipeline {
>
> struct media_link {
> struct list_head list;
> - struct media_graph_obj graph_obj;
> - struct media_pad *source; /* Source pad */
> - struct media_pad *sink; /* Sink pad */
> + struct media_graph_obj graph_obj;
> + enum media_graph_link_dir dir;
> + struct media_graph_obj *source, *sink;
I'm not too keen about all the gobj_to_foo(obj) macros that this requires. It
is rather ugly code.
What about this:
union {
struct media_graph_obj *source;
struct media_pad *source_pad;
struct media_interface *source_intf;
};
union {
struct media_graph_obj *sink;
struct media_pad *sink_pad;
struct media_entity *sink_ent;
};
Now the code can just use ->source_pad etc.
> struct media_link *reverse; /* Link in the reverse direction */
> unsigned long flags; /* Link flags (MEDIA_LNK_FL_*) */
> };
> @@ -115,6 +126,11 @@ struct media_entity {
> u32 group_id; /* Entity group ID */
>
> u16 num_pads; /* Number of sink and source pads */
> +
> + /*
> + * Both num_links and num_backlinks are used only to report
> + * the number of links via MEDIA_IOC_ENUM_ENTITIES at media_device.c
> + */
> u16 num_links; /* Number of existing links, both
> * enabled and disabled */
> u16 num_backlinks; /* Number of backlinks */
> @@ -171,6 +187,12 @@ struct media_entity_graph {
> #define gobj_to_entity(gobj) \
> container_of(gobj, struct media_entity, graph_obj)
>
> +#define gobj_to_link(gobj) \
> + container_of(gobj, struct media_link, graph_obj)
> +
> +#define gobj_to_pad(gobj) \
> + container_of(gobj, struct media_pad, graph_obj)
> +
I saw a lot of type checks (if (link->sink.type != MEDIA_GRAPH_PAD))
that I think would look cleaner if there was a simple static inline
helper:
static inline bool is_pad(const struct media_graph_obj *obj)
{
return obj->type == MEDIA_GRAPH_PAD;
}
media_is_pad() will work as well, but I think brevity is more useful
in this case. Personal opinion, though.
> void graph_obj_init(struct media_device *mdev,
> enum media_graph_type type,
> struct media_graph_obj *gobj);
>
Regards,
Hans
WARNING: multiple messages have this Message-ID (diff)
From: hansverk@cisco.com (Hans Verkuil)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RFC v2 09/16] media: use media_graph_obj for link endpoints
Date: Tue, 11 Aug 2015 14:25:18 +0200 [thread overview]
Message-ID: <55C9E9AE.5020602@cisco.com> (raw)
In-Reply-To: <6d02794028ea4f7ad33e3ba0e07e0c690e2feee2.1439292977.git.mchehab@osg.samsung.com>
Hi Mauro,
Thanks for posting the missing patches.
On 08/11/15 14:09, Mauro Carvalho Chehab wrote:
> As we'll need to create links between entities and interfaces,
> we need to identify the link endpoints by the media_graph_obj.
>
> Most of the changes here was done by this small script:
>
> for i in `find drivers/media -type f` `find drivers/staging/media -type f`; do
> perl -ne 's,([\w]+)\-\>(source|sink)\-\>entity,gobj_to_pad($1->$2)->entity,; print $_;' <$i >a && mv a $i
> done
>
> Please note that, while we're now using graph_obj to reference
> the link endpoints, we're still assuming that all endpoints are
> pads. This is true for all existing links, so no problems
> are expected so far.
>
> Yet, as we introduce links between entities and interfaces,
> we may need to change some existing code to work with links
> that aren't pad to pad.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
>
<snip>
> diff --git a/include/media/media-entity.h b/include/media/media-entity.h
> index 403019035424..f6e2136480f1 100644
> --- a/include/media/media-entity.h
> +++ b/include/media/media-entity.h
> @@ -43,6 +43,17 @@ enum media_graph_type {
> MEDIA_GRAPH_LINK,
> };
>
> +/**
> + * enum media_graph_link_dir - direction of a link
> + *
> + * @MEDIA_LINK_DIR_BIDIRECTIONAL Link is bidirectional
> + * @MEDIA_LINK_DIR_PAD_0_TO_1 Link is unidirectional,
> + * from port 0 (source) to port 1 (sink)
> + */
> +enum media_graph_link_dir {
> + MEDIA_LINK_DIR_BIDIRECTIONAL,
> + MEDIA_LINK_DIR_PORT0_TO_PORT1,
> +};
1) the comment and the actual enum are out-of-sync
2) why not just make a 'BIRECTIONAL' link flag instead of inventing
a new enum? Adding yet another field seems overkill to me. Have a
'BIDIRECTIONAL' flag seems perfectly OK to me (and useful for the
application as well).
>
> /* Structs to represent the objects that belong to a media graph */
>
> @@ -72,9 +83,9 @@ struct media_pipeline {
>
> struct media_link {
> struct list_head list;
> - struct media_graph_obj graph_obj;
> - struct media_pad *source; /* Source pad */
> - struct media_pad *sink; /* Sink pad */
> + struct media_graph_obj graph_obj;
> + enum media_graph_link_dir dir;
> + struct media_graph_obj *source, *sink;
I'm not too keen about all the gobj_to_foo(obj) macros that this requires. It
is rather ugly code.
What about this:
union {
struct media_graph_obj *source;
struct media_pad *source_pad;
struct media_interface *source_intf;
};
union {
struct media_graph_obj *sink;
struct media_pad *sink_pad;
struct media_entity *sink_ent;
};
Now the code can just use ->source_pad etc.
> struct media_link *reverse; /* Link in the reverse direction */
> unsigned long flags; /* Link flags (MEDIA_LNK_FL_*) */
> };
> @@ -115,6 +126,11 @@ struct media_entity {
> u32 group_id; /* Entity group ID */
>
> u16 num_pads; /* Number of sink and source pads */
> +
> + /*
> + * Both num_links and num_backlinks are used only to report
> + * the number of links via MEDIA_IOC_ENUM_ENTITIES at media_device.c
> + */
> u16 num_links; /* Number of existing links, both
> * enabled and disabled */
> u16 num_backlinks; /* Number of backlinks */
> @@ -171,6 +187,12 @@ struct media_entity_graph {
> #define gobj_to_entity(gobj) \
> container_of(gobj, struct media_entity, graph_obj)
>
> +#define gobj_to_link(gobj) \
> + container_of(gobj, struct media_link, graph_obj)
> +
> +#define gobj_to_pad(gobj) \
> + container_of(gobj, struct media_pad, graph_obj)
> +
I saw a lot of type checks (if (link->sink.type != MEDIA_GRAPH_PAD))
that I think would look cleaner if there was a simple static inline
helper:
static inline bool is_pad(const struct media_graph_obj *obj)
{
return obj->type == MEDIA_GRAPH_PAD;
}
media_is_pad() will work as well, but I think brevity is more useful
in this case. Personal opinion, though.
> void graph_obj_init(struct media_device *mdev,
> enum media_graph_type type,
> struct media_graph_obj *gobj);
>
Regards,
Hans
next prev parent reply other threads:[~2015-08-11 12:25 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-07 14:19 [PATCH RFC v2 00/16] Changes on MC core due to MC workshop discussion Mauro Carvalho Chehab
2015-08-07 14:19 ` [PATCH RFC v2 01/16] media: Add some fields to store graph objects Mauro Carvalho Chehab
2015-08-07 23:14 ` Sakari Ailus
2015-08-07 23:55 ` Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 02/16] media: Add a common embeed struct for all media " Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 03/16] media: add functions to inialize media_graph_obj Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 04/16] media: ensure that entities will have an object ID Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 05/16] media: initialize PAD objects Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 06/16] media: initialize the graph object inside the media links Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 07/16] media: get rid of unused "extra_links" param on media_entity_init() Mauro Carvalho Chehab
2015-08-07 14:20 ` Mauro Carvalho Chehab
2015-08-07 14:20 ` Mauro Carvalho Chehab
2015-08-07 14:20 ` Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 08/16] media: convert links from array to list Mauro Carvalho Chehab
2015-08-11 10:49 ` Hans Verkuil
2015-08-11 11:12 ` Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 11/16] FIXUP: source link removal on failure Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 12/16] media: move __media_entity_remove_link to avoid prototype Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 13/16] media: make the internal function to create links more generic Mauro Carvalho Chehab
2015-08-11 10:57 ` Hans Verkuil
2015-08-11 11:16 ` Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 14/16] media: add a generic function to remove a link Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 15/16] media: rename media_entity_remove_foo functions Mauro Carvalho Chehab
2015-08-07 14:20 ` [PATCH RFC v2 16/16] media: add functions to allow creating interfaces Mauro Carvalho Chehab
2015-08-11 11:14 ` Hans Verkuil
2015-08-11 12:24 ` Mauro Carvalho Chehab
2015-08-11 12:26 ` Hans Verkuil
2015-08-07 15:23 ` [PATCH RFC v2 00/16] Changes on MC core due to MC workshop discussion Mauro Carvalho Chehab
[not found] ` <cover.1439292977.git.mchehab@osg.samsung.com>
2015-08-11 12:09 ` [PATCH RFC v2 09/16] media: use media_graph_obj for link endpoints Mauro Carvalho Chehab
2015-08-11 12:09 ` Mauro Carvalho Chehab
2015-08-11 12:09 ` Mauro Carvalho Chehab
[not found] ` <cover.1439294756.git.mchehab@osg.samsung.com>
2015-08-11 12:09 ` [PATCH RFC v2 10/16] media: rename the function that create pad links Mauro Carvalho Chehab
2015-08-11 12:09 ` Mauro Carvalho Chehab
2015-08-11 12:09 ` Mauro Carvalho Chehab
2015-08-11 12:09 ` Mauro Carvalho Chehab
2015-08-11 12:25 ` Hans Verkuil [this message]
2015-08-11 12:25 ` [PATCH RFC v2 09/16] media: use media_graph_obj for link endpoints Hans Verkuil
2015-08-11 13:22 ` Mauro Carvalho Chehab
2015-08-11 13:22 ` Mauro Carvalho Chehab
2015-08-11 13:22 ` Mauro Carvalho Chehab
2015-08-11 13:32 ` Hans Verkuil
2015-08-11 13:32 ` Hans Verkuil
2015-08-11 13:32 ` Hans Verkuil
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=55C9E9AE.5020602@cisco.com \
--to=hansverk@cisco.com \
--cc=arnd@arndb.de \
--cc=boris.brezillon@free-electrons.com \
--cc=crope@iki.fi \
--cc=dan.carpenter@oracle.com \
--cc=devel@driverdev.osuosl.org \
--cc=elfring@users.sourceforge.net \
--cc=gregkh@linuxfoundation.org \
--cc=hans.verkuil@cisco.com \
--cc=k.kozlowski@samsung.com \
--cc=kgene@kernel.org \
--cc=kyungmin.park@samsung.com \
--cc=lars@metafoo.de \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=mchehab@infradead.org \
--cc=mchehab@osg.samsung.com \
--cc=prabhakar.csengg@gmail.com \
--cc=ruchandani.tina@gmail.com \
--cc=s.nawrocki@samsung.com \
--cc=sakari.ailus@linux.intel.com \
--cc=tskd08@gmail.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.