summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2017-08-02 09:36:08 -0400
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2017-08-02 09:36:08 -0400
commitb0fb95b95696029bb63dd7a7640a86046a3ea7b1 (patch)
tree2f0876d2ab46b56514bf46113a8cef467700e596 /sys
parent040e25218ac4d7cf50bcfd4651300b4bdfa629cb (diff)
v4l2videoenc: Turn gst_v4l2_is_video_enc into a helper
This reduces the amount of code needed in each codec class.
Diffstat (limited to 'sys')
-rw-r--r--sys/v4l2/gstv4l2.c2
-rw-r--r--sys/v4l2/gstv4l2h263enc.c14
-rw-r--r--sys/v4l2/gstv4l2h264enc.c14
-rw-r--r--sys/v4l2/gstv4l2mpeg4enc.c14
-rw-r--r--sys/v4l2/gstv4l2videoenc.c13
-rw-r--r--sys/v4l2/gstv4l2videoenc.h3
-rw-r--r--sys/v4l2/gstv4l2vp8enc.c14
-rw-r--r--sys/v4l2/gstv4l2vp9enc.c14
8 files changed, 24 insertions, 64 deletions
diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c
index bf456e823..07a2873b5 100644
--- a/sys/v4l2/gstv4l2.c
+++ b/sys/v4l2/gstv4l2.c
@@ -189,7 +189,7 @@ gst_v4l2_probe_and_register (GstPlugin * plugin)
if (gst_v4l2_is_video_dec (sink_caps, src_caps)) {
gst_v4l2_video_dec_register (plugin, basename, it->device_path,
sink_caps, src_caps);
- } else if (gst_v4l2_is_video_enc (sink_caps, src_caps)) {
+ } else if (gst_v4l2_is_video_enc (sink_caps, src_caps, NULL)) {
if (gst_v4l2_is_h264_enc (sink_caps, src_caps))
gst_v4l2_h264_enc_register (plugin, basename, it->device_path,
sink_caps, src_caps);
diff --git a/sys/v4l2/gstv4l2h263enc.c b/sys/v4l2/gstv4l2h263enc.c
index 95f35c969..3b63af5d2 100644
--- a/sys/v4l2/gstv4l2h263enc.c
+++ b/sys/v4l2/gstv4l2h263enc.c
@@ -102,18 +102,8 @@ gst_v4l2_h263_enc_class_init (GstV4l2H263EncClass * klass)
gboolean
gst_v4l2_is_h263_enc (GstCaps * sink_caps, GstCaps * src_caps)
{
- gboolean ret = FALSE;
- GstCaps *codec_caps;
-
- codec_caps = gst_static_caps_get (&src_template_caps);
-
- if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ())
- && gst_caps_can_intersect (src_caps, codec_caps))
- ret = TRUE;
-
- gst_caps_unref (codec_caps);
-
- return ret;
+ return gst_v4l2_is_video_enc (sink_caps, src_caps,
+ gst_static_caps_get (&src_template_caps));
}
void
diff --git a/sys/v4l2/gstv4l2h264enc.c b/sys/v4l2/gstv4l2h264enc.c
index dc318e3c3..81969b288 100644
--- a/sys/v4l2/gstv4l2h264enc.c
+++ b/sys/v4l2/gstv4l2h264enc.c
@@ -517,18 +517,8 @@ gst_v4l2_h264_enc_class_init (GstV4l2H264EncClass * klass)
gboolean
gst_v4l2_is_h264_enc (GstCaps * sink_caps, GstCaps * src_caps)
{
- gboolean ret = FALSE;
- GstCaps *codec_caps;
-
- codec_caps = gst_static_caps_get (&src_template_caps);
-
- if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ())
- && gst_caps_can_intersect (src_caps, codec_caps))
- ret = TRUE;
-
- gst_caps_unref (codec_caps);
-
- return ret;
+ return gst_v4l2_is_video_enc (sink_caps, src_caps,
+ gst_static_caps_get (&src_template_caps));
}
void
diff --git a/sys/v4l2/gstv4l2mpeg4enc.c b/sys/v4l2/gstv4l2mpeg4enc.c
index b03bf68de..45b4956a0 100644
--- a/sys/v4l2/gstv4l2mpeg4enc.c
+++ b/sys/v4l2/gstv4l2mpeg4enc.c
@@ -413,18 +413,8 @@ gst_v4l2_mpeg4_enc_class_init (GstV4l2Mpeg4EncClass * klass)
gboolean
gst_v4l2_is_mpeg4_enc (GstCaps * sink_caps, GstCaps * src_caps)
{
- gboolean ret = FALSE;
- GstCaps *codec_caps;
-
- codec_caps = gst_static_caps_get (&src_template_caps);
-
- if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ())
- && gst_caps_can_intersect (src_caps, codec_caps))
- ret = TRUE;
-
- gst_caps_unref (codec_caps);
-
- return ret;
+ return gst_v4l2_is_video_enc (sink_caps, src_caps,
+ gst_static_caps_get (&src_template_caps));
}
void
diff --git a/sys/v4l2/gstv4l2videoenc.c b/sys/v4l2/gstv4l2videoenc.c
index 08039b160..9b1496390 100644
--- a/sys/v4l2/gstv4l2videoenc.c
+++ b/sys/v4l2/gstv4l2videoenc.c
@@ -904,12 +904,21 @@ gst_v4l2_video_enc_subclass_init (gpointer g_class, gpointer data)
/* Probing functions */
gboolean
-gst_v4l2_is_video_enc (GstCaps * sink_caps, GstCaps * src_caps)
+gst_v4l2_is_video_enc (GstCaps * sink_caps, GstCaps * src_caps,
+ GstCaps * codec_caps)
{
gboolean ret = FALSE;
+ gboolean (*check_caps) (const GstCaps *, const GstCaps *);
+
+ if (codec_caps) {
+ check_caps = gst_caps_can_intersect;
+ } else {
+ codec_caps = gst_v4l2_object_get_codec_caps ();
+ check_caps = gst_caps_is_subset;
+ }
if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ())
- && gst_caps_is_subset (src_caps, gst_v4l2_object_get_codec_caps ()))
+ && check_caps (src_caps, gst_v4l2_object_get_codec_caps ()))
ret = TRUE;
return ret;
diff --git a/sys/v4l2/gstv4l2videoenc.h b/sys/v4l2/gstv4l2videoenc.h
index d1c029b1a..daf1892cd 100644
--- a/sys/v4l2/gstv4l2videoenc.h
+++ b/sys/v4l2/gstv4l2videoenc.h
@@ -79,7 +79,8 @@ struct _GstV4l2VideoEncClass
GType gst_v4l2_video_enc_get_type (void);
-gboolean gst_v4l2_is_video_enc (GstCaps * sink_caps, GstCaps * src_caps);
+gboolean gst_v4l2_is_video_enc (GstCaps * sink_caps, GstCaps * src_caps,
+ GstCaps * codec_caps);
void gst_v4l2_video_enc_register (GstPlugin * plugin, GType type,
const char *codec, const gchar * basename, const gchar * device_path,
diff --git a/sys/v4l2/gstv4l2vp8enc.c b/sys/v4l2/gstv4l2vp8enc.c
index 420ae5e13..75f358616 100644
--- a/sys/v4l2/gstv4l2vp8enc.c
+++ b/sys/v4l2/gstv4l2vp8enc.c
@@ -297,18 +297,8 @@ gst_v4l2_vp8_enc_class_init (GstV4l2Vp8EncClass * klass)
gboolean
gst_v4l2_is_vp8_enc (GstCaps * sink_caps, GstCaps * src_caps)
{
- gboolean ret = FALSE;
- GstCaps *codec_caps;
-
- codec_caps = gst_static_caps_get (&src_template_caps);
-
- if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ())
- && gst_caps_can_intersect (src_caps, codec_caps))
- ret = TRUE;
-
- gst_caps_unref (codec_caps);
-
- return ret;
+ return gst_v4l2_is_video_enc (sink_caps, src_caps,
+ gst_static_caps_get (&src_template_caps));
}
void
diff --git a/sys/v4l2/gstv4l2vp9enc.c b/sys/v4l2/gstv4l2vp9enc.c
index fe9714d3e..139525abf 100644
--- a/sys/v4l2/gstv4l2vp9enc.c
+++ b/sys/v4l2/gstv4l2vp9enc.c
@@ -297,18 +297,8 @@ gst_v4l2_vp9_enc_class_init (GstV4l2Vp9EncClass * klass)
gboolean
gst_v4l2_is_vp9_enc (GstCaps * sink_caps, GstCaps * src_caps)
{
- gboolean ret = FALSE;
- GstCaps *codec_caps;
-
- codec_caps = gst_static_caps_get (&src_template_caps);
-
- if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_raw_caps ())
- && gst_caps_can_intersect (src_caps, codec_caps))
- ret = TRUE;
-
- gst_caps_unref (codec_caps);
-
- return ret;
+ return gst_v4l2_is_video_enc (sink_caps, src_caps,
+ gst_static_caps_get (&src_template_caps));
}
void