From: Hans Verkuil <hverkuil@xs4all.nl>
To: Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
Linux Media Mailing List <linux-media@vger.kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Subject: Re: [PATCH RFC v5 2/8] [media] media: add a common struct to be embed on media graph objects
Date: Wed, 19 Aug 2015 10:17:46 +0200 [thread overview]
Message-ID: <55D43BAA.2080101@xs4all.nl> (raw)
In-Reply-To: <9c2b29164f11d96c5c437165fb3f013aec8715fe.1439927113.git.mchehab@osg.samsung.com>
On 08/18/2015 10:04 PM, Mauro Carvalho Chehab wrote:
> Due to the MC API proposed changes, we'll need to have an unique
> object ID for all graph objects, and have some shared fields
> that will be common on all media graph objects.
>
> Right now, the only common object is the object ID, but other
> fields will be added later on.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
>
> diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
> index cb0ac4e0dfa5..4834172bf6f8 100644
> --- a/drivers/media/media-entity.c
> +++ b/drivers/media/media-entity.c
> @@ -27,6 +27,38 @@
> #include <media/media-device.h>
>
> /**
> + * media_gobj_init - Initialize a graph object
> + *
> + * @mdev: Pointer to the media_device that contains the object
> + * @type: Type of the object
> + * @gobj: Pointer to the object
> + *
> + * This routine initializes the embedded struct media_gobj inside a
> + * media graph object. It is called automatically if media_*_create()
> + * calls are used. However, if the object (entity, link, pad, interface)
> + * is embedded on some other object, this function should be called before
> + * registering the object at the media controller.
> + */
> +void media_gobj_init(struct media_device *mdev,
> + enum media_gobj_type type,
> + struct media_gobj *gobj)
> +{
> + /* For now, nothing to do */
> +}
> +
> +/**
> + * media_gobj_remove - Stop using a graph object on a media device
> + *
> + * @graph_obj: Pointer to the object
> + *
> + * This should be called at media_device_unregister_*() routines
> + */
> +void media_gobj_remove(struct media_gobj *gobj)
> +{
> + /* For now, nothing to do */
> +}
> +
> +/**
> * media_entity_init - Initialize a media entity
> *
> * @num_pads: Total number of sink and source pads.
> diff --git a/include/media/media-entity.h b/include/media/media-entity.h
> index 0a66fc225559..762593c7424f 100644
> --- a/include/media/media-entity.h
> +++ b/include/media/media-entity.h
> @@ -28,6 +28,37 @@
> #include <linux/list.h>
> #include <linux/media.h>
>
> +/* Enums used internally at the media controller to represent graphs */
> +
> +/**
> + * enum media_gobj_type - type of a graph element
> + *
> + */
> +enum media_gobj_type {
> + /* FIXME: add the types here, as we embed media_gobj */
> + MEDIA_GRAPH_NONE
> +};
> +
> +#define BITS_PER_TYPE 8
> +#define BITS_PER_LOCAL_ID (32 - BITS_PER_TYPE)
I think that these two defines should be prefixed with MEDIA_.
They are a bit too generic for a header that's going to be used in lots
of drivers.
I also think that the local ID mask should be a define as well:
#define MEDIA_LOCAL_ID_MASK GENMASK(BITS_PER_LOCAL_ID - 1, 0)
That will make the code where this mask is used a bit more readable.
> +
> +/* Structs to represent the objects that belong to a media graph */
> +
> +/**
> + * struct media_gobj - Define a graph object.
> + *
> + * @id: Non-zero object ID identifier. The ID should be unique
> + * inside a media_device, as it is composed by
> + * BITS_PER_TYPE to store the type plus BITS_PER_LOCAL_ID
> + * to store a per-type ID (called as "local ID").
> + *
> + * All elements on the media graph should have this struct embedded
> + */
> +struct media_gobj {
> + u32 id;
> +};
> +
> +
> struct media_pipeline {
> };
>
> @@ -118,6 +149,26 @@ static inline u32 media_entity_id(struct media_entity *entity)
> return entity->id;
> }
>
> +static inline enum media_gobj_type media_type(struct media_gobj *gobj)
> +{
> + return gobj->id >> BITS_PER_LOCAL_ID;
> +}
> +
> +static inline u32 media_localid(struct media_gobj *gobj)
> +{
> + return gobj->id & GENMASK(BITS_PER_LOCAL_ID - 1, 0);
> +}
> +
> +static inline u32 media_gobj_gen_id(enum media_gobj_type type, u32 local_id)
> +{
> + u32 id;
> +
> + id = type << BITS_PER_LOCAL_ID;
> + id |= GENMASK(BITS_PER_LOCAL_ID - 1, 0) & local_id;
I'd swap this: id |= local_id & MEDIA_LOCAL_ID_MASK;
It feels more natural that way and it is consistent with media_localid() above.
Regards,
Hans
> +
> + return id;
> +}
> +
> #define MEDIA_ENTITY_ENUM_MAX_DEPTH 16
> #define MEDIA_ENTITY_ENUM_MAX_ID 64
>
> @@ -131,6 +182,14 @@ struct media_entity_graph {
> int top;
> };
>
> +#define gobj_to_entity(gobj) \
> + container_of(gobj, struct media_entity, graph_obj)
> +
> +void media_gobj_init(struct media_device *mdev,
> + enum media_gobj_type type,
> + struct media_gobj *gobj);
> +void media_gobj_remove(struct media_gobj *gobj);
> +
> int media_entity_init(struct media_entity *entity, u16 num_pads,
> struct media_pad *pads);
> void media_entity_cleanup(struct media_entity *entity);
>
next prev parent reply other threads:[~2015-08-19 8:18 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-18 20:04 [PATCH RFC v5 0/8] MC preparation patches Mauro Carvalho Chehab
2015-08-18 20:04 ` [PATCH RFC v5 1/8] [media] media: create a macro to get entity ID Mauro Carvalho Chehab
2015-08-18 20:04 ` [PATCH RFC v5 2/8] [media] media: add a common struct to be embed on media graph objects Mauro Carvalho Chehab
2015-08-19 8:17 ` Hans Verkuil [this message]
2015-08-19 9:19 ` Mauro Carvalho Chehab
2015-08-18 20:04 ` [PATCH RFC v5 3/8] [media] media: use media_gobj inside entities Mauro Carvalho Chehab
2015-08-18 20:04 ` [PATCH RFC v5 4/8] [media] media: use media_gobj inside pads Mauro Carvalho Chehab
2015-08-18 20:04 ` [PATCH RFC v5 5/8] [media] media: use media_gobj inside links Mauro Carvalho Chehab
2015-08-19 8:18 ` Hans Verkuil
2015-08-18 20:04 ` [PATCH RFC v5 6/8] [media] media: add messages when media device gets (un)registered Mauro Carvalho Chehab
2015-08-18 20:04 ` [PATCH RFC v5 7/8] [media] media: add a debug message to warn about gobj creation/removal Mauro Carvalho Chehab
2015-08-19 8:36 ` Hans Verkuil
2015-08-19 9:50 ` Mauro Carvalho Chehab
2015-08-19 11:01 ` Hans Verkuil
2015-08-18 20:04 ` [PATCH RFC v5 8/8] [media] media: rename the function that create pad links Mauro Carvalho Chehab
2015-08-19 8:38 ` Hans Verkuil
2015-08-18 20:08 ` [PATCH RFC v5 0/8] MC preparation patches Mauro Carvalho Chehab
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=55D43BAA.2080101@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@infradead.org \
--cc=mchehab@osg.samsung.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox