Besides machine elements we use several utillity elements. We need to check if they are available somehow.
The problems are:
- that elements can be moved e.g. from -bad to -good, so we don't know for which packages we should check
- that some elements are optional (built only if requirements are met)
- some elements can be deleted later
- we can't require gst-plugins-xxx from configure (plugins have no pc file)
When starting we should check for mandatory elements (adder, volume, tee, audioconvert). This is what the core would need. Then we also need to check for optional elements.
- level: level meters in main-window
- spectrum: analysis window
- formats: in song rendering (core?, gnome-audio profiles)
We have a utillity function in core (bt_gst_check_elements()) that gets a list of element names and checks if they exist. It returns a list of those which do not (reusing the name-strings from the input list).
- runs the check for core elemnts, but only prints a warning in the log
- it should remmeber the check (and forget when registry changes)
- should run the core and app-specific check and display a message (bt-edit: gui message, bt-cmd: text message) and then exit if critical stuff is missing
- the apps would check for several groups (formats, level, spectrum)
If at least one of them fails it displays a proper error message with the reasons. Reason means it describes that without having GstSpectrum, the analyzer will have no spectrum graph. This dialog would need a don't show again box, in case only optional elements are missing. If core elements are missing the app will terminate anyway.
Along with the "don't show again" we need to store the timestamp/md5 checksum of the current gst-registry. When starting the app again, we can reset the "don't show again" if the gst-registry has changed. It would be more advanced to check only for a change in the elements that we care about. E.g. store md5 of the alphabetically sorted string of missing elements and compare.
We can borrow md5_get_digest() from EDS (evo data server).