From b0fb95b95696029bb63dd7a7640a86046a3ea7b1 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Wed, 2 Aug 2017 09:36:08 -0400 Subject: [PATCH] v4l2videoenc: Turn gst_v4l2_is_video_enc into a helper This reduces the amount of code needed in each codec class. --- sys/v4l2/gstv4l2.c | 2 +- sys/v4l2/gstv4l2h263enc.c | 14 ++------------ sys/v4l2/gstv4l2h264enc.c | 14 ++------------ sys/v4l2/gstv4l2mpeg4enc.c | 14 ++------------ sys/v4l2/gstv4l2videoenc.c | 13 +++++++++++-- sys/v4l2/gstv4l2videoenc.h | 3 ++- sys/v4l2/gstv4l2vp8enc.c | 14 ++------------ sys/v4l2/gstv4l2vp9enc.c | 14 ++------------ 8 files changed, 24 insertions(+), 64 deletions(-) diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c index bf456e8232..07a2873b58 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 95f35c9699..3b63af5d2a 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 dc318e3c3a..81969b2882 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 b03bf68de7..45b4956a09 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 08039b1603..9b14963901 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 d1c029b1ad..daf1892cd1 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 420ae5e13f..75f3586164 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 fe9714d3ea..139525abf6 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