[media] media: make media_link more generic to handle interace links
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Thu, 20 Aug 2015 12:10:07 +0000 (09:10 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 11 Jan 2016 14:18:47 +0000 (12:18 -0200)
By adding an union at media_link, we get for free a way to
represent interface->entity links.

No need to change anything at the code, just at the internal
header file.

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
include/media/media-entity.h

index 2e5646cf36e7bca57d90052a69f65e4b01d569ec..a7b21a7f4c640e03f727a607c7ad15747fe343ac 100644 (file)
@@ -75,14 +75,20 @@ struct media_pipeline {
 struct media_link {
        struct media_gobj graph_obj;
        struct list_head list;
-       struct media_pad *source;       /* Source pad */
-       struct media_pad *sink;         /* Sink pad  */
+       union {
+               struct media_gobj *gobj0;
+               struct media_pad *source;
+       };
+       union {
+               struct media_gobj *gobj1;
+               struct media_pad *sink;
+       };
        struct media_link *reverse;     /* Link in the reverse direction */
        unsigned long flags;            /* Link flags (MEDIA_LNK_FL_*) */
 };
 
 struct media_pad {
-       struct media_gobj graph_obj;
+       struct media_gobj graph_obj;    /* must be first field in struct */
        struct media_entity *entity;    /* Entity this pad belongs to */
        u16 index;                      /* Pad index in the entity pads array */
        unsigned long flags;            /* Pad flags (MEDIA_PAD_FL_*) */
@@ -105,7 +111,7 @@ struct media_entity_operations {
 };
 
 struct media_entity {
-       struct media_gobj graph_obj;
+       struct media_gobj graph_obj;    /* must be first field in struct */
        struct list_head list;
        const char *name;               /* Entity name */
        u32 type;                       /* Entity type (MEDIA_ENT_T_*) */
@@ -119,7 +125,7 @@ struct media_entity {
        u16 num_backlinks;              /* Number of backlinks */
 
        struct media_pad *pads;         /* Pads array (num_pads objects) */
-       struct list_head links;         /* Links list */
+       struct list_head links;         /* Pad-to-pad links list */
 
        const struct media_entity_operations *ops;      /* Entity operations */