intel media sdk encoder mit crop-Filter

Started by el.patron, December 27, 2021, 11:53:01 AM

Previous topic - Next topic

el.patron

ich nutze avidemux unter ubuntu 20.04 zusammen mit intel media sdk für HW-Beschleunigtes Encoding.
das Media sdk hab ich installiert wie hier beschrieben:
https://docs.unified-streaming.com/documentation/capture/media-sdk.html
Als avidemux nutze ich das aktuellste app-image.

Ich hab leider eine Inkompatibilität: die Intel-Encoder H264 und HEVC funktionieren nicht zusammen mit dem "crop"-Filter, dann beendet avidemux unvermittelt den Dienst und das Fenster verabschiedet sich.
Was funktioniert ist mit dem Intel-AVC HW-Encoder-

Wäre toll, wenn das zur Bearbeitung der Weihnachts-Video-Sammlung klappen würde!  :)
Gibt es da eine Chance?

eumagga0x2a

#1
So schade, dass dieser Bugreport wenige Stunden nach der Freigabe des 2.8.0 Releases gekommen ist. Jetzt wird der Fix erst in künftigen Nightly Builds enthalten sein bzw. für die, die Avidemux aus der Source kompilieren.

diff --git a/avidemux_plugins/ADM_videoEncoder/ffVaH264/ADM_ffVAEncH264.cpp b/avidemux_plugins/ADM_videoEncoder/ffVaH264/ADM_ffVAEncH264.cpp
index 0987b0288..89974430d 100644
--- a/avidemux_plugins/ADM_videoEncoder/ffVaH264/ADM_ffVAEncH264.cpp
+++ b/avidemux_plugins/ADM_videoEncoder/ffVaH264/ADM_ffVAEncH264.cpp
@@ -211,7 +211,7 @@ bool             ADM_ffVAEncH264Encoder::preEncode(void)
     swFrame->height=source->getInfo()->height;
     swFrame->format=AV_PIX_FMT_NV12;
 
-    int err=av_frame_get_buffer(swFrame, 32);
+    int err=av_frame_get_buffer(swFrame, 64);
     if(err<0)
     {
         CLEARTEXT(err)
diff --git a/avidemux_plugins/ADM_videoEncoder/ffVaHEVC/ADM_ffVAEncHEVC.cpp b/avidemux_plugins/ADM_videoEncoder/ffVaHEVC/ADM_ffVAEncHEVC.cpp
index 843b14992..d196ac9da 100644
--- a/avidemux_plugins/ADM_videoEncoder/ffVaHEVC/ADM_ffVAEncHEVC.cpp
+++ b/avidemux_plugins/ADM_videoEncoder/ffVaHEVC/ADM_ffVAEncHEVC.cpp
@@ -204,7 +204,7 @@ bool ADM_ffVAEncHEVC::preEncode(void)
     swFrame->height=source->getInfo()->height;
     swFrame->format=AV_PIX_FMT_NV12;
 
-    int err=av_frame_get_buffer(swFrame, 32);
+    int err=av_frame_get_buffer(swFrame, 64);
     if(err<0)
     {
         CLEARTEXT(err)

Ohne diesen Patch sind die beiden FFmpeg-basierten VA-API-Encoder nur dann nutzbar, wenn sowohl die Breite als auch die Höhe ein Vielfaches von 64 ist. Sonst folgt wie im Report beschrieben ein harter Crash in av_frame_free().

Da ich die Korrektur nicht sofort einpflegen kann sondern auf einige Vorarbeiten in Build-Infrastruktur für MinGW-Builds warten muss, damit cross-kompilierte win64-Builds angeboten werden können, bitte diesen Patch selbst anwenden und Avidemux lokal aus dem Quelltext bauen.