Add is_pad_linkable
This commit is contained in:
parent
17c7fd4eaf
commit
c93486e011
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue