So... ich wollte nicht locker lassen und hab mir gedacht "morgen ist Sonntag, da musste ja nicht früh aufstehen". Und was soll ich sagen, ich hab den Bug gefunden
Im Code der Funktion VaapiRenderFrame() ist ein Bug, der generell für eine Auflösung mit 720 Pixeln Höhe den Decoder auf "nicht interlaced", aber für alle anderen Höhen (also auch 1080) auf "interlaced" setzt. Das ist natürlich sehr schlecht, denn DVB-T2 ist 1080p - also progressiv und nicht interlaced.
Interessanterweise ist derselbe Code in der VdpauRenderFrame() per "#if 0" auskommentiert. Wird schon seinen Grund haben... Ich schlage daher vor, dasselbe auch für Vaapi zu machen.
Folgender Patch macht dies: Achtung, habe den Patch um 1:51 Uhr nochmal verbessert. Die erste Version war Quatsch.
*** video.c.orig 2017-06-25 01:21:46.582943101 +0200
--- video.c 2017-06-25 01:51:39.578936261 +0200
***************
*** 5948,5953 ****
--- 5948,5954 ----
// FIXME: some tv-stations toggle interlace on/off
// frame->interlaced_frame isn't always correct set
interlaced = frame->interlaced_frame;
+ #if 0
if (video_ctx->height == 720) {
if (interlaced && !decoder->WrongInterlacedWarned) {
Debug(3, "video/vaapi: wrong interlace flag fixed\n");
***************
*** 5961,5966 ****
--- 5962,5968 ----
}
interlaced = 1;
}
+ #endif
// FIXME: should be done by init video_ctx->field_order
if (decoder->Interlaced != interlaced
Alles anzeigen
Damit tut es bei mir. Bild läuft mit der erwarteten Geschwindigkeit, Bild und Ton sind synchron, absolut nichts ruckelt. Und die vorherigen Änderungen aus Beitrag 17 sind natürlich unnötig bzw. kontraproduktiv (also bitte meinen alten Patch aus Beitrag 17 wieder rückgängig machen, wer den schon angewendet hat).
P.S. Short English text:
Please see the patch above (which replaces my earlier patch from post#17). It fixes the fact that for Vaapi the interlaced flag was always set for resolutions with a height!=720 (and progressive always for height==720). This fixes the issue that video was played back too slow for German DVB-T2 which is in 1080p (which means here the assumption that height!=720 means interlaced was purely wrong!). Applying this change, VaapiRenderFrame will behave the same as VdpauRenderFrame() already did before in this respect (probably for good reason).