Add is_pad_linkable

This commit is contained in:
László Károlyi 2022-01-24 20:05:01 +01:00
parent 17c7fd4eaf
commit c93486e011
Signed by: karolyi
GPG Key ID: 2DCAF25E55735BFE
1 changed files with 26 additions and 15 deletions

View File

@ -93,29 +93,40 @@ public:
StreamerInternals(Config::_config &config)
: config(config), playlist_handler(config.playlist) {}
bool is_pad_linkable(GstPad &pad) const {
GstCaps *caps = gst_pad_get_current_caps(&pad);
if (caps == nullptr)
return false;
for (int idx_caps = 0; idx_caps < gst_caps_get_size(caps); idx_caps++) {
GstStructure *gst_struct = gst_caps_get_structure(caps, idx_caps);
const std::string name = std::move(gst_structure_get_name(gst_struct));
if (name.find("audio/") == 0) {
gst_caps_unref(caps);
return true;
}
// GstCaps *caps = gst_pad_query_caps(&pad, nullptr);
// std::cout << "cb_decodebin_pad_added->structure(" << idx_caps
// << "): " << gst_structure_get_name(gst_struct) << std::endl;
// GstCapsFeatures *features = gst_caps_get_features(caps, idx_caps);
// std::cout << "| size: " << gst_caps_features_get_size(features)
// << std::endl;
// std::cout << "| features: " << gst_caps_features_to_string(features)
// << std::endl;
}
gst_caps_unref(caps);
return false;
}
static void cb_decodebin_pad_added(
const GstElement &object, GstPad *pad,
const StreamerInternals &instance) {
std::cout << "cb_decodebin_pad_added: " << GST_OBJECT_NAME(pad)
<< std::endl;
if (!gst_pad_is_linked(pad)) {
if (!gst_pad_is_linked(pad) && instance.is_pad_linkable(*pad)) {
const GstPadLinkReturn pad_return = gst_pad_link(
pad, gst_element_get_static_pad(instance.convert, "sink"));
std::cout << "cb_decodebin_pad_added->link: " << pad_return << std::endl;
}
GstCaps *caps = gst_pad_query_caps(pad, nullptr);
// GstCaps &caps = *gst_pad_get_current_caps(pad);
for (int idx_caps = 0; idx_caps < gst_caps_get_size(caps); idx_caps++) {
GstStructure *gst_struct = gst_caps_get_structure(caps, idx_caps);
std::cout << "cb_decodebin_pad_added->structure(" << idx_caps
<< "): " << gst_structure_get_name(gst_struct) << std::endl;
GstCapsFeatures *features = gst_caps_get_features(caps, idx_caps);
std::cout << "| size: " << gst_caps_features_get_size(features)
<< std::endl;
std::cout << "| features: " << gst_caps_features_to_string(features)
<< std::endl;
}
gst_caps_unref(caps);
}
static void cb_decodebin_pad_removed(
@ -136,7 +147,7 @@ public:
}
static void cb_decodebin_no_more_pads(
const GstElement &object, StreamerInternals &instance) {
const GstElement &object, const StreamerInternals &instance) {
std::cout << "cb_decodebin_no_more_pads: " << GST_OBJECT_NAME(&object)
<< std::endl;
}