diff mbox

gst1-imx: add menuconfig to select each plugin individually

Message ID 20160916131038.23240-1-gary.bisson@boundarydevices.com
State Changes Requested
Headers show

Commit Message

Gary Bisson Sept. 16, 2016, 1:10 p.m. UTC
Also making each plugin dependencies clearer with comments.

Signed-off-by: Gary Bisson <gary.bisson@boundarydevices.com>
---
 package/gstreamer1/gst1-imx/Config.in   | 89 ++++++++++++++++++++++++++++-----
 package/gstreamer1/gst1-imx/gst1-imx.mk | 32 ++++++++++++
 2 files changed, 108 insertions(+), 13 deletions(-)

Comments

Thomas Petazzoni Sept. 20, 2016, 7:04 p.m. UTC | #1
Hello Gary,

On Fri, 16 Sep 2016 15:10:38 +0200, Gary Bisson wrote:
> Also making each plugin dependencies clearer with comments.
> 
> Signed-off-by: Gary Bisson <gary.bisson@boundarydevices.com>
> ---
>  package/gstreamer1/gst1-imx/Config.in   | 89 ++++++++++++++++++++++++++++-----
>  package/gstreamer1/gst1-imx/gst1-imx.mk | 32 ++++++++++++
>  2 files changed, 108 insertions(+), 13 deletions(-)

Thanks for the patch. I have a few questions/comments, see below.


> +config BR2_PACKAGE_GST1_IMX_EGLVISINK
> +	bool "imxeglvivsink"
> +	depends on BR2_PACKAGE_IMX_GPU_VIV
> +	help
> +	  Elements leveraging the 3D GPU

Instead of doing "depends on" everywhere, can we use "select" in the
cases where the dependencies of the package to select are not too
crazy ?

> +ifneq ($(BR2_PACKAGE_GST1_IMX_EGLVISINK),y)
> +GST1_IMX_CONF_OPTS += --disable-eglvivsink
> +endif

For all those options, please use the standard Buildroot way of
expressing dependencies:

ifeq ($(BR2_PACKAGE_FOO),y)
BAZ_CONF_OPTS += --enable-foo
BAZ_DEPENDENCIES += foo
else
BAZ_CONF_OPTS += --disable-foo
endif

i.e:

 1/ Add an explicit --enable-<foo> for each option

 2/ Group the --enable/--disable passing with the addition of the
    dependency

Thanks,

Thomas
Gary Bisson Sept. 20, 2016, 10:43 p.m. UTC | #2
Hi Thomas, all,

On Tue, Sep 20, 2016 at 09:04:25PM +0200, Thomas Petazzoni wrote:
> Hello Gary,
> 
> On Fri, 16 Sep 2016 15:10:38 +0200, Gary Bisson wrote:
> > Also making each plugin dependencies clearer with comments.
> > 
> > Signed-off-by: Gary Bisson <gary.bisson@boundarydevices.com>
> > ---
> >  package/gstreamer1/gst1-imx/Config.in   | 89 ++++++++++++++++++++++++++++-----
> >  package/gstreamer1/gst1-imx/gst1-imx.mk | 32 ++++++++++++
> >  2 files changed, 108 insertions(+), 13 deletions(-)
> 
> Thanks for the patch. I have a few questions/comments, see below.
> 
> 
> > +config BR2_PACKAGE_GST1_IMX_EGLVISINK
> > +	bool "imxeglvivsink"
> > +	depends on BR2_PACKAGE_IMX_GPU_VIV
> > +	help
> > +	  Elements leveraging the 3D GPU
> 
> Instead of doing "depends on" everywhere, can we use "select" in the
> cases where the dependencies of the package to select are not too
> crazy ?

Well in most cases it isn't possible, here are some details:
- BR2_PACKAGE_IMX_GPU_VIV and BR2_PACKAGE_IMX_GPU_VIV_G2D depends on
  BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q which isn't selectable.
- We can't select BR2_LINUX_KERNEL since it needs to be a i.MX kernel.
- BR2_PACKAGE_LIBIMXVPUAPI depends on the i.MX SoC being used which
  cannot be selectable (MX5 or MX6)

I guess I can select IMX_CODEC though, I'll add that to the V2.

> > +ifneq ($(BR2_PACKAGE_GST1_IMX_EGLVISINK),y)
> > +GST1_IMX_CONF_OPTS += --disable-eglvivsink
> > +endif
> 
> For all those options, please use the standard Buildroot way of
> expressing dependencies:
> 
> ifeq ($(BR2_PACKAGE_FOO),y)
> BAZ_CONF_OPTS += --enable-foo
> BAZ_DEPENDENCIES += foo
> else
> BAZ_CONF_OPTS += --disable-foo
> endif
> 
> i.e:
> 
>  1/ Add an explicit --enable-<foo> for each option

This was on purpose since the package only look for --disable-foo
options. All the plugins are enabled by default, see patch in package:
https://github.com/Freescale/gstreamer-imx/commit/989ab048

I can still do:
ifeq ($(BR2_PACKAGE_FOO),y)
else
BAZ_CONF_OPTS += --disable-foo
endif

But my opinion is that --enable-foo is misleading.

>  2/ Group the --enable/--disable passing with the addition of the
>     dependency

Ok.

Thanks for your feedback.

Regards,
Gary
Thomas Petazzoni Sept. 21, 2016, 4:02 a.m. UTC | #3
Hello,

On Wed, 21 Sep 2016 00:43:55 +0200, Gary Bisson wrote:

> Well in most cases it isn't possible, here are some details:
> - BR2_PACKAGE_IMX_GPU_VIV and BR2_PACKAGE_IMX_GPU_VIV_G2D depends on
>   BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q which isn't selectable.
> - We can't select BR2_LINUX_KERNEL since it needs to be a i.MX kernel.
> - BR2_PACKAGE_LIBIMXVPUAPI depends on the i.MX SoC being used which
>   cannot be selectable (MX5 or MX6)

OK, indeed many of the sub-options cannot "select" their dependencies.

> I guess I can select IMX_CODEC though, I'll add that to the V2.

OK. Another possibility is to say that all sub-options should use
"depends on", for consistency. I don't have a strong feeling about this
either way.


> >  1/ Add an explicit --enable-<foo> for each option  
> 
> This was on purpose since the package only look for --disable-foo
> options. All the plugins are enabled by default, see patch in package:
> https://github.com/Freescale/gstreamer-imx/commit/989ab048
> 
> I can still do:
> ifeq ($(BR2_PACKAGE_FOO),y)

Here add the dependency addition.

> else
> BAZ_CONF_OPTS += --disable-foo
> endif
> 
> But my opinion is that --enable-foo is misleading.

Why? There are two options here:

 1/ --enable-<foo> doesn't exist and would cause a failure if passed.
    In this case indeed, don't pass it. And add a quick comment above,
    like "# There's no --enable-<foo> option".

 2/ --enable-<foo> exists. In this case, you should pass it even if the
    default is to have the feature enabled. We indeed want to be
    explicit in Buildroot when enabling/disabling features.

Thanks,

Thomas
Gary Bisson Sept. 21, 2016, 8:32 a.m. UTC | #4
Hi Thomas, all,

On Wed, Sep 21, 2016 at 06:02:13AM +0200, Thomas Petazzoni wrote:
> Hello,
> 
> On Wed, 21 Sep 2016 00:43:55 +0200, Gary Bisson wrote:
> 
> > Well in most cases it isn't possible, here are some details:
> > - BR2_PACKAGE_IMX_GPU_VIV and BR2_PACKAGE_IMX_GPU_VIV_G2D depends on
> >   BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q which isn't selectable.
> > - We can't select BR2_LINUX_KERNEL since it needs to be a i.MX kernel.
> > - BR2_PACKAGE_LIBIMXVPUAPI depends on the i.MX SoC being used which
> >   cannot be selectable (MX5 or MX6)
> 
> OK, indeed many of the sub-options cannot "select" their dependencies.
> 
> > I guess I can select IMX_CODEC though, I'll add that to the V2.
> 
> OK. Another possibility is to say that all sub-options should use
> "depends on", for consistency. I don't have a strong feeling about this
> either way.

I'm ok with a few select, it sounds more user-friendly than depends-only
but I don't have a strong opinion on it either.

> > >  1/ Add an explicit --enable-<foo> for each option  
> > 
> > This was on purpose since the package only look for --disable-foo
> > options. All the plugins are enabled by default, see patch in package:
> > https://github.com/Freescale/gstreamer-imx/commit/989ab048
> > 
> > I can still do:
> > ifeq ($(BR2_PACKAGE_FOO),y)
> 
> Here add the dependency addition.
> 
> > else
> > BAZ_CONF_OPTS += --disable-foo
> > endif
> > 
> > But my opinion is that --enable-foo is misleading.
> 
> Why? There are two options here:
> 
>  1/ --enable-<foo> doesn't exist and would cause a failure if passed.
>     In this case indeed, don't pass it. And add a quick comment above,
>     like "# There's no --enable-<foo> option".

No, as pointed above in the package repo, the --enable-foo doesn't exist
and is discarded. It doesn't introduce any error, but it is just that we
are passing arguments that we know are discarded, is it really
necessary? I might go with the comment although there's no failure if
the option is passed, what do you think?

Regards,
Gary
Thomas Petazzoni Sept. 21, 2016, 9:03 a.m. UTC | #5
Hello,

On Wed, 21 Sep 2016 10:32:58 +0200, Gary Bisson wrote:

> No, as pointed above in the package repo, the --enable-foo doesn't exist
> and is discarded. It doesn't introduce any error, but it is just that we
> are passing arguments that we know are discarded, is it really
> necessary? I might go with the comment although there's no failure if
> the option is passed, what do you think?

OK, in this case, not passing --enable and having a comment sounds good.

Thanks!

Thomas
Arnout Vandecappelle Sept. 22, 2016, 9:51 p.m. UTC | #6
On 21-09-16 00:43, Gary Bisson wrote:
> Hi Thomas, all,
> 
> On Tue, Sep 20, 2016 at 09:04:25PM +0200, Thomas Petazzoni wrote:
>> > Hello Gary,
>> > 
>> > On Fri, 16 Sep 2016 15:10:38 +0200, Gary Bisson wrote:
>>> > > Also making each plugin dependencies clearer with comments.
>>> > > 
>>> > > Signed-off-by: Gary Bisson <gary.bisson@boundarydevices.com>
>>> > > ---
>>> > >  package/gstreamer1/gst1-imx/Config.in   | 89 ++++++++++++++++++++++++++++-----
>>> > >  package/gstreamer1/gst1-imx/gst1-imx.mk | 32 ++++++++++++
>>> > >  2 files changed, 108 insertions(+), 13 deletions(-)
>> > 
>> > Thanks for the patch. I have a few questions/comments, see below.
>> > 
>> > 
>>> > > +config BR2_PACKAGE_GST1_IMX_EGLVISINK
>>> > > +	bool "imxeglvivsink"
>>> > > +	depends on BR2_PACKAGE_IMX_GPU_VIV
>>> > > +	help
>>> > > +	  Elements leveraging the 3D GPU
>> > 
>> > Instead of doing "depends on" everywhere, can we use "select" in the
>> > cases where the dependencies of the package to select are not too
>> > crazy ?
> Well in most cases it isn't possible, here are some details:
> - BR2_PACKAGE_IMX_GPU_VIV and BR2_PACKAGE_IMX_GPU_VIV_G2D depends on
>   BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q which isn't selectable.
> - We can't select BR2_LINUX_KERNEL since it needs to be a i.MX kernel.
> - BR2_PACKAGE_LIBIMXVPUAPI depends on the i.MX SoC being used which
>   cannot be selectable (MX5 or MX6)

 The logical thing to do would be to select BR2_PACKAGE_IMX_GPU_VIV and depend
on BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q. The kernel you obviously can't
select. And for libimxvpuapi you can depend on
BR2_PACKAGE_FREESCALE_IMX_HAS_VPU. That way, the dependencies are all gathered
in the freescale-imx menu. And looking at it that way, you will see that they
are actually architecture dependencies, so no need for comments.

 And actually, looking at it that way: it might make sense to let the whole
package depend on BR2_PACKAGE_FREESCALE_IMX (with appropriate comment), so you
can add "architecture" dependencies, e.g. mx25 doesn't have an IPU. Though maybe
that's going a bit too far.

> 
> I guess I can select IMX_CODEC though, I'll add that to the V2.

 IMX_CODEC also depends on BR2_PACKAGE_FREESCALE_IMX, which you can't select
(because otherwise the platform choice would get some random incorrect value).

 Regards,
 Arnout
Gary Bisson Sept. 23, 2016, 12:58 p.m. UTC | #7
Hi Arnout, All,

On Thu, Sep 22, 2016 at 11:51:00PM +0200, Arnout Vandecappelle wrote:
> <snip>
> >> > Instead of doing "depends on" everywhere, can we use "select" in
> >> > the
> >> > cases where the dependencies of the package to select are not
> >> > too
> >> > crazy ?
> > Well in most cases it isn't possible, here are some details:
> > - BR2_PACKAGE_IMX_GPU_VIV and BR2_PACKAGE_IMX_GPU_VIV_G2D depends
> > on
> >   BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q which isn't selectable.
> > - We can't select BR2_LINUX_KERNEL since it needs to be a i.MX
> > kernel.
> > - BR2_PACKAGE_LIBIMXVPUAPI depends on the i.MX SoC being used which
> >   cannot be selectable (MX5 or MX6)
> 
> The logical thing to do would be to select BR2_PACKAGE_IMX_GPU_VIV
> and depend
> on BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q. The kernel you obviously
> can't
> select. And for libimxvpuapi you can depend on
> BR2_PACKAGE_FREESCALE_IMX_HAS_VPU. That way, the dependencies are all
> gathered
> in the freescale-imx menu. And looking at it that way, you will see
> that they
> are actually architecture dependencies, so no need for comments.

I think we can't, here is what I've tried for the EGL/G2D plugins:

config BR2_PACKAGE_GST1_IMX_EGLVISINK
	bool "imxeglvivsink"
	depends on BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q
	select BR2_PACKAGE_IMX_GPU_VIV
	help
	  Elements leveraging the 3D GPU

comment "imxeglvivsink only works with i.MX6 3D GPU"
	depends on !BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q

config BR2_PACKAGE_GST1_IMX_G2D
	bool "imxg2d"
	depends on BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q
	select BR2_PACKAGE_IMX_GPU_VIV
	select BR2_PACKAGE_IMX_GPU_VIV_G2D
	help
	  Elements leveraging the 2D GPU

comment "imxg2d only works with i.MX6 2D GPU"
	depends on !BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX6Q

The above gives:
package/mesa3d/Config.in:173:error: recursive dependency detected!
package/mesa3d/Config.in:173:	symbol BR2_PACKAGE_MESA3D_OPENGL_EGL is
selected by BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL
package/mesa3d/Config.in:92:	symbol
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL depends on BR2_PACKAGE_MESA3D
package/mesa3d/Config.in:1:	symbol BR2_PACKAGE_MESA3D is selected by
BR2_PACKAGE_XDRIVER_XF86_VIDEO_IMX_VIV
package/x11r7/xdriver_xf86-video-imx-viv/Config.in:1:	symbol
BR2_PACKAGE_XDRIVER_XF86_VIDEO_IMX_VIV depends on
BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_X11
package/freescale-imx/imx-gpu-viv/Config.in:34:	symbol
BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_X11 is part of choice <choice>
package/freescale-imx/imx-gpu-viv/Config.in:27:	choice <choice> contains
symbol <choice>
package/freescale-imx/imx-gpu-viv/Config.in:27:	choice <choice> contains
symbol BR2_PACKAGE_IMX_GPU_VIV
package/freescale-imx/imx-gpu-viv/Config.in:5:	symbol
BR2_PACKAGE_IMX_GPU_VIV is selected by BR2_PACKAGE_GST1_IMX_EGLVISINK
package/gstreamer1/gst1-imx/Config.in:18:	symbol
BR2_PACKAGE_GST1_IMX_EGLVISINK depends on BR2_PACKAGE_GSTREAMER1
package/gstreamer1/gstreamer1/Config.in:5:	symbol
BR2_PACKAGE_GSTREAMER1 is selected by BR2_PACKAGE_WEBKITGTK_MULTIMEDIA
package/webkitgtk/Config.in:57:	symbol BR2_PACKAGE_WEBKITGTK_MULTIMEDIA
depends on BR2_PACKAGE_WEBKITGTK
package/webkitgtk/Config.in:20:	symbol BR2_PACKAGE_WEBKITGTK is selected
by BR2_PACKAGE_MIDORI
package/midori/Config.in:6:	symbol BR2_PACKAGE_MIDORI depends on
BR2_PACKAGE_LIBGTK3
package/libgtk3/Config.in:13:	symbol BR2_PACKAGE_LIBGTK3 depends on
BR2_PACKAGE_HAS_LIBEGL_WAYLAND
package/opengl/libegl/Config.in:4:	symbol
BR2_PACKAGE_HAS_LIBEGL_WAYLAND is selected by
BR2_PACKAGE_MESA3D_OPENGL_EGL

Any thoughts? I think the issue comes with the graphics backend
selection (X11 or FB). Since I'm no Kconfig expert, I'd rather stick to
the depends option.

> > I guess I can select IMX_CODEC though, I'll add that to the V2.
> 
> IMX_CODEC also depends on BR2_PACKAGE_FREESCALE_IMX, which you can't
> select
> (because otherwise the platform choice would get some random incorrect
> value).

Same, we actually can't select BR2_PACKAGE_FREESCALE_IMX, we get the
same recursive dependency issue.

What about we stick with the depends for now?

My V2 will take care of the dependencies inside the 'ifeq' statements in
gst1-imx.mk. BTW, doing it as suggested kind of makes the code redundant
since several plugins might have the same dependency, like:

ifeq ($(BR2_PACKAGE_GST1_IMX_MP3ENCODER),y)
# There's no --enable-mp3encoder option
GST1_IMX_DEPENDENCIES += imx-codec
else
GST1_IMX_CONF_OPTS += --disable-mp3encoder
endif

ifeq ($(BR2_PACKAGE_GST1_IMX_UNIAUDIODEC),y)
# There's no --enable-uniaudiodec option
GST1_IMX_DEPENDENCIES += imx-codec
else
GST1_IMX_CONF_OPTS += --disable-uniaudiodec
endif

Is that ok? I know it doesn't bring any issue, just look a little
redundant.

Regards,
Gary
Thomas Petazzoni Sept. 23, 2016, 1:13 p.m. UTC | #8
Hello,

On Fri, 23 Sep 2016 14:58:35 +0200, Gary Bisson wrote:

> What about we stick with the depends for now?

It's fine for me.

> My V2 will take care of the dependencies inside the 'ifeq' statements in
> gst1-imx.mk. BTW, doing it as suggested kind of makes the code redundant
> since several plugins might have the same dependency, like:
> 
> ifeq ($(BR2_PACKAGE_GST1_IMX_MP3ENCODER),y)
> # There's no --enable-mp3encoder option
> GST1_IMX_DEPENDENCIES += imx-codec
> else
> GST1_IMX_CONF_OPTS += --disable-mp3encoder
> endif
> 
> ifeq ($(BR2_PACKAGE_GST1_IMX_UNIAUDIODEC),y)
> # There's no --enable-uniaudiodec option
> GST1_IMX_DEPENDENCIES += imx-codec
> else
> GST1_IMX_CONF_OPTS += --disable-uniaudiodec
> endif
> 
> Is that ok? I know it doesn't bring any issue, just look a little
> redundant.

If only a single dependency is needed for those codecs, is it really
necessary to have different options to enable/disable them? How much
space do they take each?

Thomas
Gary Bisson Sept. 23, 2016, 1:40 p.m. UTC | #9
Hi Thomas,

On Fri, Sep 23, 2016 at 03:13:06PM +0200, Thomas Petazzoni wrote:
> Hello,
> 
> On Fri, 23 Sep 2016 14:58:35 +0200, Gary Bisson wrote:
> 
> > What about we stick with the depends for now?
> 
> It's fine for me.
> 
> > My V2 will take care of the dependencies inside the 'ifeq' statements in
> > gst1-imx.mk. BTW, doing it as suggested kind of makes the code redundant
> > since several plugins might have the same dependency, like:
> > 
> > ifeq ($(BR2_PACKAGE_GST1_IMX_MP3ENCODER),y)
> > # There's no --enable-mp3encoder option
> > GST1_IMX_DEPENDENCIES += imx-codec
> > else
> > GST1_IMX_CONF_OPTS += --disable-mp3encoder
> > endif
> > 
> > ifeq ($(BR2_PACKAGE_GST1_IMX_UNIAUDIODEC),y)
> > # There's no --enable-uniaudiodec option
> > GST1_IMX_DEPENDENCIES += imx-codec
> > else
> > GST1_IMX_CONF_OPTS += --disable-uniaudiodec
> > endif
> > 
> > Is that ok? I know it doesn't bring any issue, just look a little
> > redundant.
> 
> If only a single dependency is needed for those codecs, is it really
> necessary to have different options to enable/disable them? How much
> space do they take each?

They actually end up in the same libgstimxaudio.so file. But the problem
of redundancy remains for the other plugins as well:
- Both eglvivsink and g2d depend on imx-gpu-viv
- Both PXP and IPU depend on the kernel headers

Regards,
Gary
Thomas Petazzoni Sept. 23, 2016, 2:25 p.m. UTC | #10
Hello,

On Fri, 23 Sep 2016 15:40:47 +0200, Gary Bisson wrote:

> > If only a single dependency is needed for those codecs, is it really
> > necessary to have different options to enable/disable them? How much
> > space do they take each?  
> 
> They actually end up in the same libgstimxaudio.so file. But the problem
> of redundancy remains for the other plugins as well:
> - Both eglvivsink and g2d depend on imx-gpu-viv
> - Both PXP and IPU depend on the kernel headers

Right. OK, then maybe we need to keep your original proposal in the
end. Sorry for changing my mind so often :/

Thomas
Gary Bisson Sept. 23, 2016, 2:29 p.m. UTC | #11
Hi Thomas,

On Fri, Sep 23, 2016 at 04:25:42PM +0200, Thomas Petazzoni wrote:
> Hello,
> 
> On Fri, 23 Sep 2016 15:40:47 +0200, Gary Bisson wrote:
> 
> > > If only a single dependency is needed for those codecs, is it really
> > > necessary to have different options to enable/disable them? How much
> > > space do they take each?  
> > 
> > They actually end up in the same libgstimxaudio.so file. But the problem
> > of redundancy remains for the other plugins as well:
> > - Both eglvivsink and g2d depend on imx-gpu-viv
> > - Both PXP and IPU depend on the kernel headers
> 
> Right. OK, then maybe we need to keep your original proposal in the
> end. Sorry for changing my mind so often :/

No problem. So, just to be sure we are on the same page, I need to make
a V2 with 'ifeq' + --enable-foo comment.

I can add the gst1-plugins-bad dependency to the V4L2 plugin though,
that is the only dependency that is not shared.

Let me know if there's anything I should do.

Regards,
Gary
diff mbox

Patch

diff --git a/package/gstreamer1/gst1-imx/Config.in b/package/gstreamer1/gst1-imx/Config.in
index efd5086..9f792d1 100644
--- a/package/gstreamer1/gst1-imx/Config.in
+++ b/package/gstreamer1/gst1-imx/Config.in
@@ -1,4 +1,8 @@ 
-config BR2_PACKAGE_GST1_IMX
+comment "gst1-imx needs a toolchain w/ dynamic library"
+	depends on BR2_arm
+	depends on BR2_STATIC_LIBS
+
+menuconfig BR2_PACKAGE_GST1_IMX
 	bool "gst1-imx"
 	depends on BR2_arm # Only relevant for i.MX
 	depends on !BR2_STATIC_LIBS
@@ -7,18 +11,77 @@  config BR2_PACKAGE_GST1_IMX
 	  This is a set of GStreamer 1.0 plugins for plugins for Freescale's
 	  i.MX platforms, which make use of the i.MX multimedia capabilities.
 
-	  This software supports only the i.MX6 SoC family.
+	  https://github.com/Freescale/gstreamer-imx
 
-	  The IPU and PXP plugins are built when an imx-specific kernel is
-	  enabled.
-	  The V4L2 plugin is built when BR2_PACKAGE_GST1_PLUGINS_BAD is enabled.
-	  The VPU plugin is built when BR2_PACKAGE_LIBIMXVPUAPI is enabled.
-	  The EGL plugin is built when BR2_PACKAGE_IMX_GPU_VIV is enabled.
-	  The G2D plugin is built when BR2_PACKAGE_IMX_GPU_VIV_G2D is enabled.
-	  The MP3 plugin is built when BR2_PACKAGE_IMX_CODEC is enabled.
+if BR2_PACKAGE_GST1_IMX
 
-	  https://github.com/Freescale/gstreamer-imx
+config BR2_PACKAGE_GST1_IMX_EGLVISINK
+	bool "imxeglvivsink"
+	depends on BR2_PACKAGE_IMX_GPU_VIV
+	help
+	  Elements leveraging the 3D GPU
 
-comment "gst1-imx needs a toolchain w/ dynamic library"
-	depends on BR2_arm
-	depends on BR2_STATIC_LIBS
+comment "imxeglvivsink needs the Vivante 3D libraries"
+	depends on !BR2_PACKAGE_IMX_GPU_VIV
+
+config BR2_PACKAGE_GST1_IMX_G2D
+	bool "imxg2d"
+	depends on BR2_PACKAGE_IMX_GPU_VIV_G2D
+	help
+	  Elements leveraging the 2D GPU
+
+comment "imxg2d needs the Vivante 2D libraries"
+	depends on !BR2_PACKAGE_IMX_GPU_VIV_G2D
+
+config BR2_PACKAGE_GST1_IMX_IPU
+	bool "imxipu"
+	depends on BR2_LINUX_KERNEL
+	help
+	  Elements leveraging the IPU
+
+comment "imxipu needs an imx-specific Linux kernel to be built"
+	depends on !BR2_LINUX_KERNEL
+
+config BR2_PACKAGE_GST1_IMX_MP3ENCODER
+	bool "mp3encoder"
+	depends on BR2_PACKAGE_IMX_CODEC
+	help
+	  Elements for MP3 encoding
+
+comment "mp3encoder needs the i.MX codec binaries"
+	depends on !BR2_PACKAGE_IMX_CODEC
+
+config BR2_PACKAGE_GST1_IMX_PXP
+	bool "imxpxp"
+	depends on BR2_LINUX_KERNEL
+	help
+	  Elements leveraging the PXP
+
+comment "imxpxp needs an imx-specific Linux kernel to be built"
+	depends on !BR2_LINUX_KERNEL
+
+config BR2_PACKAGE_GST1_IMX_UNIAUDIODEC
+	bool "uniaudiodec"
+	depends on BR2_PACKAGE_IMX_CODEC
+	help
+	  Elements for audio decoding
+
+comment "uniaudiodec needs the i.MX codec binaries"
+	depends on !BR2_PACKAGE_IMX_CODEC
+
+config BR2_PACKAGE_GST1_IMX_VPU
+	bool "imxvpu"
+	depends on BR2_PACKAGE_LIBIMXVPUAPI
+	help
+	  Elements leveraging the VPU
+
+comment "imxvpu needs the VPU imxvpuapi library"
+	depends on !BR2_PACKAGE_LIBIMXVPUAPI
+
+config BR2_PACKAGE_GST1_IMX_V4L2VIDEOSRC
+	bool "imxv4l2videosrc"
+	select BR2_PACKAGE_GST1_PLUGINS_BAD
+	help
+	  Elements for V4L2 capture
+
+endif
diff --git a/package/gstreamer1/gst1-imx/gst1-imx.mk b/package/gstreamer1/gst1-imx/gst1-imx.mk
index 3c6b1b6..330ddc4 100644
--- a/package/gstreamer1/gst1-imx/gst1-imx.mk
+++ b/package/gstreamer1/gst1-imx/gst1-imx.mk
@@ -26,6 +26,38 @@  GST1_IMX_DEPENDENCIES += linux
 GST1_IMX_CONF_OPTS += --kernel-headers="$(LINUX_DIR)/include"
 endif
 
+ifneq ($(BR2_PACKAGE_GST1_IMX_EGLVISINK),y)
+GST1_IMX_CONF_OPTS += --disable-eglvivsink
+endif
+
+ifneq ($(BR2_PACKAGE_GST1_IMX_G2D),y)
+GST1_IMX_CONF_OPTS += --disable-g2d
+endif
+
+ifneq ($(BR2_PACKAGE_GST1_IMX_IPU),y)
+GST1_IMX_CONF_OPTS += --disable-ipu
+endif
+
+ifneq ($(BR2_PACKAGE_GST1_IMX_MP3ENCODER),y)
+GST1_IMX_CONF_OPTS += --disable-mp3encoder
+endif
+
+ifneq ($(BR2_PACKAGE_GST1_IMX_PXP),y)
+GST1_IMX_CONF_OPTS += --disable-pxp
+endif
+
+ifneq ($(BR2_PACKAGE_GST1_IMX_UNIAUDIODEC),y)
+GST1_IMX_CONF_OPTS += --disable-uniaudiodec
+endif
+
+ifneq ($(BR2_PACKAGE_GST1_IMX_VPU),y)
+GST1_IMX_CONF_OPTS += --disable-vpu
+endif
+
+ifneq ($(BR2_PACKAGE_GST1_IMX_V4L2VIDEOSRC),y)
+GST1_IMX_CONF_OPTS += --disable-v4l2src
+endif
+
 ifeq ($(BR2_PACKAGE_GST1_PLUGINS_BAD),y)
 GST1_IMX_DEPENDENCIES += gst1-plugins-bad
 endif