Hallo zusammen,
bin grad dabei, passthrough in softhddevice-drm-gles zu integrieren.
Bei Codelesen sind mir ein paar unklare Sachen aufgefallen, daher meine Fragen an euch Entwickler jojo61 lnj jrie zillerbaer usw. und alle, die sich mit alsa auskennen:
1) https://github.com/jojo61/vdr-plu…er/codec.c#L967 CodecAudioPassthroughHelper() z.B. baut einen spdif-Header vor das avpkt und damit wird es dann an AudioEnqueue() übergeben. Wenn ich den Code richtig lese, wird zwar mit avcodec_receive_frame() das avpkt in ein frame decodiert, die decodierten Daten im frame werden aber später in passthrough nicht mehr verwendet. Im resample Zweig (- Ich gehe davon aus, dass es den Resample Context gibt, da ansonsten gar nichts in AudioEnqueue landet?! -) wird dann frame->extended_data weiterverarbeitet. Brauchts für passthrough überhaupt das avcodec_send_packet/avcodec_receive_frame?
2) Braucht es CodecAudioPassthroughHelper() für passthrough immer oder können die Rohdaten von avpkt auch einfach so weitergeleitet werden? In softhddevice-drm-* wird (ohne passthrough) das frame mit einem avfilter bei Bedarf umgewandelt, d.h. den software resampling context gibt es hier nicht. Könnte das frame mit avfilter in das richtige passthrough-Format gebracht werden, oder ist das mit dem frame schon zu spät und man muss schon das avpkt für passthrough weiterverarbeiten?
3) Auf meinem rockchip gibt es 2 Audiodevices: Analog und HDMI. Wo stelle ich fest, was HDMI kann bzw. ob HDMI passthrough annehmen kann oder kann ich einfach davon ausgehen? Der rockchip hängt am TV, der über HDMI(ARC) das Signal an meinen AV-Receiver durchschleift. Mit der XBox funktioniert 5.1.
https://github.com/rellla/vdr-plu…s/audio.c#L1064 Mit snd_pcm_hw_params_set_channels_near() werden 6 HwChannels angefragt, es liefert aber 2 zurück, d.h. es geht in den Downmix. Wahrscheinlich stehe ich auf dem Schlauch, aber sollten hier nicht 6 HwChannels zurückkommen? Oder sind es bei HDMI generell nur 2? https://github.com/jojo61/vdr-plu…er/codec.c#L927 setzt bei passthrough ja auch zwei. Wahrscheinlich habe ich hier einen Denkfehler.
Ich vermute, dass ich es so machen muss:
- dem avpkt mit CodecAudioPassthroughHelper() einen spdif Header verpassen
- irgendwie die PTS in den Griff kriegen
- die neuen Daten ohne ein resampling an AudioEnqueue übergeben
Fragen reichen vorerst. Ich wäre euch dankbar, wenn ihr hier etwas Licht für mich reinbringen könnt. Der Audio-Teil ist noch recht neu für mich.
Gruß
Andreas