Ich habe eine einfache C++ - Anwendung, die FFmpeg 3.2 verwendet, um einen H264 RTP-Stream zu empfangen. Um CPU zu sparen, mache ich den Dekodierungsteil mit dem Codec h264_cuvid. Mein FFmpeg 3.2 ist mit aktivierter hw-Beschleunigung kompiliert. wenn ich den Befehl in der Tat zu tun:Wie kann ich ein FFmpeg AVFrame mit Pixel-Format AV_PIX_FMT_CUDA in ein neues AVFrame mit Pixel-Format konvertieren AV_PIX_FMT_RGB
ffmpeg -hwaccels
ich
cuvid
Das bedeutet, dass mein FFmpeg Setup alles OK zu "sprechen" mit meiner NVIDIA-Karte hat. Die Frames, die mir die Funktion avcodec_decode_video2
liefert, haben das Pixelformat AV_PIX_FMT_CUDA
. Ich muss diese Rahmen zu neuen mit AV_PIX_FMT_RGB
konvertieren. Leider kann ich die Konvertierung nicht mit den wohlbekannten Funktionen sws_getContext
und sws_scale
durchführen, da das Pixelformat AV_PIX_FMT_CUDA
nicht unterstützt wird. Wenn ich mit swscale versuchen bekomme ich den Fehler:
„CUDA nicht als Eingangspixelformat unterstützt wird“
Wissen Sie, wie ein FFmpeg AVFrame
von AV_PIX_FMT_CUDA
zu AV_PIX_FMT_RGB
konvertieren? (Teile des Codes würden sehr geschätzt werden)
Wenn alles, was Sie brauchen, mit Cuvid zu dekodieren, ich denke, es gibt keine Notwendigkeit, mit AV_PIX_FMT_CUDA umzugehen. Obwohl es dafür kein Beispiel gibt, könnte das offizielle Beispiel 'qsvdec.c' und' hw_decode.c' eine gute Referenz sein. Und der Decoder sollte hier das nv12-Format zum Host-Speicher zurückgeben. – halfelf