Passthrough mit softhddevice*

  • 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

    Meine VDRs

    (SatIP Server) --- Kathrein Exip 418 ---

    (Server) --- HW: RPI5 --- SW: RPiOs, VDR 2.7.2 mit streamdev, satip/vtuner-ng, vdrmanager, live, epgsearch, markad ---

    (Client 1+2) --- HW: Radxa Rock 4 Plus - RK3399 --- SW: VDR*ELEC mit softhddevice-drm-gles ---

    (WIP) --- Tanix TX6, RPi5, RPi4, Odroid N2+, WetekPlay2 --- SW: VDR*ELEC mit softhddevice-drm-gles --

  • Hallo rell,

    ich bin zwar auch kein alsa Spezialist aber soweit ich das sehe ist dein Ansatz richtig. Bei SPDIF wird ja nur ein Bitstream ausgegeben und der wird im SPDIF Header definiert. Dazu muss das Audio nicht decodiert werden. Mein Treiber kann aber beides. Bei Passthrough den Bitstream ausgeben oder ohne Passthrough die decodierten 6 oder 2 Kanäle ausgeben. Die Tatsache das auch decodiert wird wenn Passthrough aktiv ist, ist eine altlast und das könnte ich mal umstellen. Gebraucht wird der decodierte Stream bei Passthrough nicht.

    Bei Passthrough setze ich im Alsa immer 2 HwChannels. Das funktioniert, aber ob das letztlich so richtig ist kann ich nicht sagen.

  • Passthrough wird m.E. undecodiert nach Synchronisierung mit dem Video weiter geleitet. Header davor damit der AV-Verstärker erkennt was da kommt. Der Rockchip HDMI Treiber konnte als ich mir das das letzte Mal angesehen habe aber nur mit PCM umgehen. Wie der Stand heute ist weiß ich nicht.

  • Oh. Dann muss ich mich da erst mal schlau machen vorerst mit dem rpi weitermachen.

    Meine VDRs

    (SatIP Server) --- Kathrein Exip 418 ---

    (Server) --- HW: RPI5 --- SW: RPiOs, VDR 2.7.2 mit streamdev, satip/vtuner-ng, vdrmanager, live, epgsearch, markad ---

    (Client 1+2) --- HW: Radxa Rock 4 Plus - RK3399 --- SW: VDR*ELEC mit softhddevice-drm-gles ---

    (WIP) --- Tanix TX6, RPi5, RPi4, Odroid N2+, WetekPlay2 --- SW: VDR*ELEC mit softhddevice-drm-gles --

  • Passthrough wird m.E. undecodiert nach Synchronisierung mit dem Video weiter geleitet

    Ja, der AV-Sync ist genauso. Ansonsten habe ich mich damit nur oberflächlich beschäftigt.

  • Wie der Stand heute ist weiß ich nicht.

    Nicht drin. Lt. Entwickler müsste https://github.com/jernejsk/Libre…efb7fc1d430927f aber nach wie vor nach einem rebase funktionieren. AW und Rockchip nutzen auch dieselbe IP. Ich versuche mich da mal am kernel und alsa...

    Meine VDRs

    (SatIP Server) --- Kathrein Exip 418 ---

    (Server) --- HW: RPI5 --- SW: RPiOs, VDR 2.7.2 mit streamdev, satip/vtuner-ng, vdrmanager, live, epgsearch, markad ---

    (Client 1+2) --- HW: Radxa Rock 4 Plus - RK3399 --- SW: VDR*ELEC mit softhddevice-drm-gles ---

    (WIP) --- Tanix TX6, RPi5, RPi4, Odroid N2+, WetekPlay2 --- SW: VDR*ELEC mit softhddevice-drm-gles --

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!