Make gstreamer pipeline detect filetype

This commit is contained in:
Jonas Kvinge
2019-09-09 22:11:13 +02:00
parent 4496760340
commit c66c1e17d3
3 changed files with 68 additions and 20 deletions

View File

@@ -1182,21 +1182,31 @@ void GstEnginePipeline::StreamDiscovered(GstDiscoverer *discoverer, GstDiscovere
bundle.bitdepth = gst_discoverer_audio_info_get_depth(GST_DISCOVERER_AUDIO_INFO(stream_info));
bundle.bitrate = gst_discoverer_audio_info_get_bitrate(GST_DISCOVERER_AUDIO_INFO(stream_info));
GstCaps *stream_caps = gst_discoverer_stream_info_get_caps(stream_info);
gchar *decoder_description = gst_pb_utils_get_codec_description(stream_caps);
QString filetype_description = (decoder_description ? QString(decoder_description) : QString("Unknown"));
GstCaps *caps = gst_discoverer_stream_info_get_caps(stream_info);
gchar *codec_description = gst_pb_utils_get_codec_description(caps);
QString filetype_description = (codec_description ? QString(codec_description) : QString("Unknown"));
g_free(codec_description);
gst_caps_unref(stream_caps);
g_free(decoder_description);
gchar *caps_gchar = gst_caps_to_string(caps);
QString caps_str(caps_gchar);
g_free (caps_gchar);
gst_caps_unref(caps);
gst_discoverer_stream_info_list_free(audio_streams);
qLog(Info) << QString("Got stream info for %1: %2").arg(discovered_url).arg(filetype_description);
int i = caps_str.indexOf(',');
QString mimetype = (i > 1 ? caps_str.left(i) : caps_str);
bundle.filetype = Song::FiletypeByMimetype(mimetype);
if (bundle.filetype == Song::FileType_Unknown) {
bundle.filetype = Song::FiletypeByDescription(filetype_description);
}
qLog(Info) << "Got stream info for" << discovered_url + ":" << mimetype << filetype_description;
emit instance->MetadataFound(instance->id(), bundle);
}
else {
qLog(Error) << QString("Could not detect an audio stream in %1").arg(discovered_url);
qLog(Error) << "Could not detect an audio stream in" << discovered_url;
}
}
@@ -1208,17 +1218,12 @@ void GstEnginePipeline::StreamDiscoveryFinished(GstDiscoverer *discoverer, gpoin
QString GstEnginePipeline::GSTdiscovererErrorMessage(GstDiscovererResult result) {
switch (result) {
case (GST_DISCOVERER_URI_INVALID):
return tr("Invalid URL");
case (GST_DISCOVERER_TIMEOUT):
return tr("Connection timed out");
case (GST_DISCOVERER_BUSY):
return tr("The discoverer is busy");
case (GST_DISCOVERER_MISSING_PLUGINS):
return tr("Missing plugins");
case (GST_DISCOVERER_ERROR):
default:
return tr("Could not get details");
case GST_DISCOVERER_URI_INVALID: return "The URI is invalid";
case GST_DISCOVERER_TIMEOUT: return "The discovery timed-out";
case GST_DISCOVERER_BUSY: return "The discoverer was already discovering a file";
case GST_DISCOVERER_MISSING_PLUGINS: return "Some plugins are missing for full discovery";
case GST_DISCOVERER_ERROR:
default: return "An error happened and the GError is set";
}
}