diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2014-05-09 20:55:03 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> | 2014-09-18 13:38:00 -0400 |
commit | 4e4d73f86c19d2615992445b89b2622fb45ac7e9 (patch) | |
tree | b6211e91e214954b7a8f63a18da917c464d9b076 /gst | |
parent | 04a706724d818f450f68b453492aae9e8cb08af5 (diff) | |
download | farstream-4e4d73f86c19d2615992445b89b2622fb45ac7e9.tar.gz |
rtpdiscocodec: Also discover formats with no encoder
This makes L16, L24 and Video/RAW available to Farstream without profiles.
Diffstat (limited to 'gst')
-rw-r--r-- | gst/fsrtpconference/fs-rtp-discover-codecs.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/gst/fsrtpconference/fs-rtp-discover-codecs.c b/gst/fsrtpconference/fs-rtp-discover-codecs.c index cc195444..88d5f2d9 100644 --- a/gst/fsrtpconference/fs-rtp-discover-codecs.c +++ b/gst/fsrtpconference/fs-rtp-discover-codecs.c @@ -73,7 +73,8 @@ static GList *remove_duplicates (GList *list); static void parse_codec_cap_list (GList *list, FsMediaType media_type); static GList *detect_send_codecs (GstCaps *caps); static GList *detect_recv_codecs (GstCaps *caps); -static GList *codec_cap_list_intersect (GList *list1, GList *list2); +static GList *codec_cap_list_intersect (GList *list1, GList *list2, + gboolean one_is_enough); static GList *get_plugins_filtered_from_caps (FilterFunc filter, GstCaps *caps, GstPadDirection direction); static gboolean extract_field_data (GQuark field_id, @@ -308,7 +309,7 @@ create_codec_lists (FsMediaType media_type, /* TODO we should support non duplex as well, as in have some caps that are * only sendable or only receivable */ - duplex_list = codec_cap_list_intersect (recv_list, send_list); + duplex_list = codec_cap_list_intersect (recv_list, send_list, FALSE); if (!duplex_list) { GST_WARNING ("There are no send/recv codecs"); @@ -811,7 +812,7 @@ detect_send_codecs (GstCaps *caps) /* create intersection list of codecs common * to encoders and payloaders lists */ - send_list = codec_cap_list_intersect (payloaders, encoders); + send_list = codec_cap_list_intersect (payloaders, encoders, TRUE); if (!send_list) { @@ -868,7 +869,7 @@ detect_recv_codecs (GstCaps *caps) /* create intersection list of codecs common * to decoders and depayloaders lists */ - recv_list = codec_cap_list_intersect (depayloaders, decoders); + recv_list = codec_cap_list_intersect (depayloaders, decoders, TRUE); if (!recv_list) { @@ -887,7 +888,7 @@ detect_recv_codecs (GstCaps *caps) /* returns the intersection of two lists */ static GList * -codec_cap_list_intersect (GList *list1, GList *list2) +codec_cap_list_intersect (GList *list1, GList *list2, gboolean one_is_enough) { GList *walk1, *walk2; CodecCap *codec_cap1, *codec_cap2; @@ -979,6 +980,16 @@ codec_cap_list_intersect (GList *list1, GList *list2) gst_caps_unref (intersection); } } + + if (!item && one_is_enough) { + item = g_slice_new0 (CodecCap); + item->caps = gst_caps_ref (codec_cap1->caps); + item->rtp_caps = gst_caps_ref (codec_cap1->rtp_caps); + item->element_list1 = copy_element_list (codec_cap1->element_list1); + item->element_list2 = copy_element_list (codec_cap1->element_list2); + + intersection_list = g_list_append (intersection_list, item); + } } return intersection_list; |