Question about audio/x-dsf plugins

Hi,
I’m new to this forum hopping to have an answer to a problem I encounter with DSF (DSD) audio files playing.
I’ve tested the ability of GStreamer to plya native DSD audio files now and it appears it doesn’t work.
When I try to play some dsf file with this command line:
gst-play-1.0 --audiosink=“dsdconvert ! alsasink device=hw:0,0” /opt/test.dsf
I get the following error message:
Press ‘k’ to see a list of keyboard shortcuts.
Now playing /opt/test.dsf
ERROR Your GStreamer installation is missing a plug-in. for file:///opt/test.dsf
ERROR debug information: …/gstreamer/subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c(3309): mq_slot_check_reconfiguration (): /GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0:
No suitable plugins found
Reached end of play list.
If I type gst-inspect-1.0 audio/dsf-x plugin exists but it seems it has no extensions.
typefindfunctions: audio/x-dsf: no extensions
Is it normal?
In fact I’ve made a second test with gemediarender-resurrect and trying to play DSF track I get this:

gmediarender 0.1 started [ gmediarender 0.1_git2023-07-15_3a1234f (libupnp-17.1.10; glib-2.80.5; gstreamer-1.24.7) ].
Logging switched off. Enable with --logfile= (or --logfile=stdout for console)
Ready for rendering (‘gmediarender’; uuid=GMediaRender-1_0-000-000-002).
ERROR [2024-09-15 12:39:40.289179 | gstreamer] uridecodebin0: Error: Your GStreamer installation is missing a plug-in. (Debug: …/gstreamer/subprojects/gst-plugins-base/gst/playback/gsturidecodebin.c(1070): no_more_pads_full (): /GstPlayBin:play/GstURIDecodeBin:uridecodebin0:
no suitable plugins found:
…/gstreamer/subprojects/gst-plugins-base/gst/playback/gstdecodebin2.c(4736): gst_decode_bin_expose (): /GstPlayBin:play/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0:
no suitable plugins found:
Missing decoder: audio/x-dsf (audio/x-dsf)
)
ERROR [2024-09-15 12:39:40.289266 | gstreamer] source: Error: Internal data stream error. (Debug: …/gstreamer/subprojects/gstreamer/libs/gst/base/gstbasesrc.c(3177): gst_base_src_loop (): /GstPlayBin:play/GstURIDecodeBin:uridecodebin0/GstSoupHTTPSrc:source:
streaming stopped, reason not-linked (-1))
ERROR [2024-09-15 12:39:48.560431 | upnp] upnp_set_error: Pause failed (704)

According to this test, audio/x-dsf plugins is missing although it is present as indicated by gst-inspect-1.0.
Could this error be due to the fact that audio/x-dsf has no extension?

Thank you in advance to anyone who can give me an answer.

Do you have the avdemux_dsf element from gst-libav (ffmpeg wrapper)? (gst-inspect-1.0 avdemux_dsf)

Thanks a lot for your reply tmp,
You’re right avdemux_dsf is not present.
Is there a way to get it?

Finaly I’ve found by myself how to install missing plugins. gst-libav wasn’t installed on my system. I’ve installed it.
I can play dsf files now, but they are converted to PCM.

Hi,
I’ve made more tests and i confirm that DSD files are played but thez are converted to PCM.
My Holo Audio Sprng3 Level 2 DAC displays 352.8 kHz for DSD64, 705,6 kHz for DSD128 and 1411,2 kHz for DSD 256.
I get this when I send:
gst-play-1.0 --verbose --gapless --audiosink=“alsasink device=hw:0,0” /opt/test.dsf
Press ‘k’ to see a list of keyboard shortcuts.
Now playing /opt/test.dsf
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3: instant-uri = false
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0: caps = video/x-raw(ANY); audio/x-raw(ANY); text/x-raw(ANY); subpicture/x-dvd; subpicture/x-dvb; subpicture/x-xsub; subpicture/x-pgs; closedcaption/x-cea-608; closedcaption/x-cea-708; application/x-onvif-metadata; application/x-subtitle; application/x-subtitle-sami; application/x-subtitle-tmplayer; application/x-subtitle-mpl2; application/x-subtitle-dks; application/x-subtitle-qttext; application/x-subtitle-lrc; application/x-subtitle-vtt; application/x-ssa; application/x-ass; application/x-subtitle-avi; application/x-ogm-text
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3: uri = file:///opt/test.dsf
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0: source = “(GstFileSrc)\ filesrc0”
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3: current-uri = file:///opt/test.dsf
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3: current-suburi = (null)
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0/GstTypeFindElement:typefindelement0.GstPad:src: caps = audio/x-dsf
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0/GstTypeFindElement:typefindelement0.GstPad:src: caps = NULL
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:src: caps = audio/x-dsf
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:src: caps = NULL
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0/GstMultiQueue:multiqueue1.GstMultiQueuePad:src_0: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0/GstMultiQueue:multiqueue1.GstMultiQueuePad:sink_0: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0.GstGhostPad:sink: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstURISourceBin:urisourcebin0.GstGhostPad:src_0.GstProxyPad:proxypad5: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0/GstIdentity:identity0.GstPad:src: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0/GstIdentity:identity0.GstPad:sink: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0/GstMultiQueue:multiqueue0.GstMultiQueuePad:sink_0: group-id = 2
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0/GstMultiQueue:multiqueue0.GstMultiQueuePad:sink_0: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstPlaySink:playsink: volume = 1
/GstPlayBin3:playbin/GstPlaySink:playsink: mute = false
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0/GstMultiQueue:multiqueue0.GstMultiQueuePad:src_0: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0/avdec_dsd_lsbf_planar:avdec_dsd_lsbf_planar0.GstPad:sink: caps = audio/x-dsd, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, format=(string)DSDU8, reversed-bytes=(boolean)true, layout=(string)non-interleaved
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0/avdec_dsd_lsbf_planar:avdec_dsd_lsbf_planar0.GstPad:src: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3/GstDecodebin3:decodebin3-0.GstGhostPad:audio_0: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstURIDecodeBin3:uridecodebin3.GstGhostPad:audio_0: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink.GstGhostPad:audio_sink.GstProxyPad:proxypad6: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstTee:audiotee.GstTeePad:src_0: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstStreamSynchronizer:streamsynchronizer0.GstStreamSyncPad:src_0: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin.GstGhostPad:sink.GstProxyPad:proxypad11: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstQueue:aqueue.GstPad:sink: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin.GstGhostPad:sink: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstStreamSynchronizer:streamsynchronizer0.GstStreamSyncPad:sink_0: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstQueue:aqueue.GstPad:src: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstQueue:aqueue.GstPad:src: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstQueue:aqueue.GstPad:src: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv.GstGhostPad:sink.GstProxyPad:proxypad9: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv/GstAudioConvert:conv.GstPad:src: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv/GstAudioResample:resample.GstPad:src: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv/GstVolume:volume.GstPad:src: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv.GstGhostPad:src: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstBin:bin0.GstGhostPad:sink.GstProxyPad:proxypad1: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
Redistribute latency…
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstBin:bin0/GstAlsaSink:alsasink0.GstPad:sink: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstBin:bin0.GstGhostPad:sink: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv.GstGhostPad:src.GstProxyPad:proxypad10: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv/GstVolume:volume.GstPad:sink: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv/GstAudioResample:resample.GstPad:sink: caps = audio/x-raw, rate=(int)352800, format=(string)S32LE, channels=(int)2, layout=(string)interleaved, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv/GstAudioConvert:conv.GstPad:sink: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPlayBin3:playbin/GstPlaySink:playsink/GstBin:abin/GstPlaySinkAudioConvert:aconv.GstGhostPad:sink: caps = audio/x-raw, format=(string)F32LE, layout=(string)non-interleaved, rate=(int)352800, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
Redistribute latency…
0:01:23.7 / 0:03:50.6

Does anyone have any idea what’s wrong?