pesintta / vdr-plugin-vaapidevice

VDR VAAPIDevice Plug-in
9 stars 12 forks source link

UHD channels not working since api change #79

Open 9000h opened 6 years ago

9000h commented 6 years ago

UHD channels have only still image and blinking green screen here (8bit hevc channels in 1080p are fine) issue did start here https://github.com/pesintta/vdr-plugin-vaapidevice/commit/192789d24fe853429c60f763b3835c2e05336a22 if remember right screenshot from 2018-03-07 21-53-42

could not get a better screenshot showing the green flashing

pesintta commented 6 years ago

Some more info is needed:

9000h commented 6 years ago
System:    Host: acer533 Kernel: 4.15.7-041507-generic x86_64 bits: 64 Console: tty 1
           Distro: Ubuntu Bionic Beaver (development branch)
Machine:   Device: laptop System: Acer product: Aspire ES1-533 v: V1.12 serial: NXGFTEG046708XXXXX
           Mobo: Acer model: Stego_AP v: V1.12 serial: XXXXXXXXXXXXXXXXXX
           UEFI: Insyde v: V1.12 date: 10/18/2017
Battery    BAT1: charge: 37.2 Wh 100.0% condition: 37.2/37.3 Wh (100%)
CPU:       Quad core Intel Pentium N4200 (-MCP-) speed/max: 895/2500 MHz
Graphics:  Card: Intel Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller
           Display Server: X.Org 1.19.6 driver: i915 Resolution: 1920x1080@60.01hz
           OpenGL: renderer: Mesa DRI Intel HD Graphics 505 (Broxton) version: 4.5 Mesa 18.0.0-rc4
Network:   Card-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller driver: r8169
           Card-2: Intel Device 24fb driver: iwlwifi
Drives:    HDD Total Size: 256.1GB (11.2% used)
Info:      Processes: 254 Uptime: 1 day Memory: 2452.9/7800.8MB Client: Shell (bash) inxi: 2.3.56

DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu Bionic Beaver (development branch)"

ffmpeg-3.5~git20180113

libva info: VA-API version 1.1.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.1 (libva 2.1.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Broxton - 2.0.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointEncSliceLP
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      : VAEntrypointVLD
      VAProfileH264MultiviewHigh      : VAEntrypointEncSlice
      VAProfileH264StereoHigh         : VAEntrypointVLD
      VAProfileH264StereoHigh         : VAEntrypointEncSlice
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain10             : VAEntrypointVLD
9000h commented 6 years ago

the log of the UHD Demo Channel at 19.2 East http://paste.ubuntu.com/p/MpBPN3BPBj/

9000h commented 6 years ago

could commit 19e1101eb7c0f1f763e6f43a89db617584c18cc2 do any harm here?

pesintta commented 6 years ago

I don't think so but you may do git revert <commit-hash> and comile the plugin to verify.

9000h commented 6 years ago

you are right

pesintta commented 6 years ago

Is the bit-depth of the affected video 10bit or 8bit?

9000h commented 6 years ago
Input #0, mpegts, from '00001.ts':
  Duration: 00:02:10.79, start: 5865.806067, bitrate: 3715 kb/s
  Program 132 
    Stream #0:0[0x1ff]: Video: hevc (Main 10) ([36][0][0][0] / 0x0024), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 3840x2160 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x200](deu): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 177 kb/s

it's 10Bit, this one is from SES Astra Demo 19.2 East there is no 8bit channel on SAT anymore, some have HGL/HDR some not and some are 50Hz and others 60Hz

9000h commented 6 years ago

the only 8Bit HEVC Main Profile channels I know are the German DVB-T2, which are working with the current git

pesintta commented 6 years ago

Ok so the issue most likely is about hw-rendering 10bit video.

Could you test the following very experimental patch? It will probably break something else but unfortunately I don't have the hardware to test this change.

diff --git a/video.c b/video.c
index c2252fa..30ba6d9 100644
--- a/video.c
+++ b/video.c
@@ -973,7 +973,7 @@ static void VaapiDeassociate(VaapiDecoder * decoder)
 ///
 static void VaapiCreateSurfaces(VaapiDecoder * decoder, int width, int height)
 {
-    if (vaCreateSurfaces(decoder->VaDisplay, VA_RT_FORMAT_YUV420, width, height, decoder->PostProcSurfacesRb,
+    if (vaCreateSurfaces(decoder->VaDisplay, VA_RT_FORMAT_YUV420_10BPP, width, height, decoder->PostProcSurfacesRb,
            POSTPROC_SURFACES_MAX, NULL, 0) != VA_STATUS_SUCCESS) {
        Fatal("video/vaapi: can't create %d postproc surfaces", POSTPROC_SURFACES_MAX);
     }
@@ -1509,6 +1509,8 @@ static int VaapiFindImageFormat(VaapiDecoder * decoder, enum AVPixelFormat pix_f
            fourcc = VA_FOURCC_I420;    // aka. VA_FOURCC_IYUV
            break;
        case AV_PIX_FMT_VAAPI:
+           fourcc = VA_FOURCC_P010;
+           break;
        case AV_PIX_FMT_NV12:
            fourcc = VA_FOURCC_NV12;
            break;
@@ -1519,8 +1521,7 @@ static int VaapiFindImageFormat(VaapiDecoder * decoder, enum AVPixelFormat pix_f
            fourcc = VA_FOURCC_RGBX;
            break;
        case AV_PIX_FMT_YUV420P10LE:
-           //fourcc = VA_FOURCC_P010;
-           fourcc = VA_FOURCC_NV12;    // FIXME: Do P010 on supported hardware
+           fourcc = VA_FOURCC_P010;
            break;
        default:
            Fatal("video/vaapi: unsupported pixel format %d (%s)", pix_fmt, av_get_pix_fmt_name(pix_fmt));
@@ -2063,7 +2064,7 @@ static uint8_t *VaapiGrabOutputSurface(int *ret_size, int *ret_width, int *ret_h
     *ret_size = *ret_width * *ret_height * 4;

     status =
-       vaCreateSurfaces(decoder->VaDisplay, VA_RT_FORMAT_YUV420, *ret_width, *ret_height, scaled, ARRAY_ELEMS(scaled),
+       vaCreateSurfaces(decoder->VaDisplay, VA_RT_FORMAT_YUV420_10BPP, *ret_width, *ret_height, scaled, ARRAY_ELEMS(scaled),
        NULL, 0);
     if (status != VA_STATUS_SUCCESS) {
        Error("video/vaapi: can't create scaling surface for grab: %s", vaErrorStr(status));
@@ -3076,7 +3077,7 @@ static void VaapiBlackSurface(VaapiDecoder * decoder)
        unsigned u;

        status =
-           vaCreateSurfaces(decoder->VaDisplay, VA_RT_FORMAT_YUV420, VideoWindowWidth, VideoWindowHeight,
+           vaCreateSurfaces(decoder->VaDisplay, VA_RT_FORMAT_YUV420_10BPP, VideoWindowWidth, VideoWindowHeight,
            &decoder->BlackSurface, 1, NULL, 0);
        if (status != VA_STATUS_SUCCESS) {
            Error("video/vaapi: can't create a surface: %s", vaErrorStr(status));
9000h commented 6 years ago

did test it but it gives only a green screen on all channels SD,HD,UHD 8Bit/10Bit http://paste.ubuntu.com/p/4wZVXDbrkP/

9000h commented 6 years ago

how is the right profile selected HEVCMain or HEVCMain10 could some additional debug statements help

pesintta commented 6 years ago

Profile selection is handled by ffmpeg. See here: https://github.com/FFmpeg/FFmpeg/blob/release/3.4/libavcodec/vaapi_decode.c#L314-L333

9000h commented 6 years ago

can we enable the debug like in https://www.ffmpeg.org/doxygen/2.7/demuxing_decoding_8c-example.html to see whats going on

./demuxing-decoding /srv/vdr/video/\@Astra_Ultra_HD_Demo/2018-03-04.22.51.3-0.rec/00001.ts  1  2
[mpegts @ 0x5591331bd940] PES packet size mismatch
Input #0, mpegts, from '/srv/vdr/video/@Astra_Ultra_HD_Demo/2018-03-04.22.51.3-0.rec/00001.ts':
  Duration: 00:02:10.79, start: 5865.806067, bitrate: 3715 kb/s
  Program 132 
    Stream #0:0[0x1ff]: Video: hevc (Main 10) ([36][0][0][0] / 0x0024), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 3840x2160 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x200](deu): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 192 kb/s
Demuxing video from file '/srv/vdr/video/@Astra_Ultra_HD_Demo/2018-03-04.22.51.3-0.rec/00001.ts' into '1'
Demuxing audio from file '/srv/vdr/video/@Astra_Ultra_HD_Demo/2018-03-04.22.51.3-0.rec/00001.ts' into '2'
[aac @ 0x5591331c34c0] channel element 0.0 is not allocated
Error decoding audio frame (Invalid data found when processing input)
audio_frame n:0 nb_samples:1024 pts:10998.4
audio_frame n:1 nb_samples:1024 pts:10998.5
video_frame n:0 coded_n:0 pts:1.05601e+07
video_frame n:1 coded_n:0 pts:1.05602e+07
video_frame n:2 coded_n:0 pts:1.05602e+07
video_frame n:3 coded_n:0 pts:1.05603e+07
audio_frame n:2 nb_samples:1024 pts:10998.5
audio_frame n:3 nb_samples:1024 pts:10998.5
audio_frame n:4 nb_samples:1024 pts:10998.5
video_frame n:4 coded_n:0 pts:1.05603e+07
video_frame n:5 coded_n:0 pts:1.05603e+07
video_frame n:6 coded_n:0 pts:1.05604e+07
audio_frame n:5 nb_samples:1024 pts:10998.6
audio_frame n:6 nb_samples:1024 pts:10998.6
audio_frame n:7 nb_samples:1024 pts:10998.7
video_frame n:7 coded_n:0 pts:1.05604e+07
video_frame n:8 coded_n:0 pts:1.05604e+07
video_frame n:9 coded_n:0 pts:1.05605e+07
audio_frame n:8 nb_samples:1024 pts:10998.7
audio_frame n:9 nb_samples:1024 pts:10998.7
audio_frame n:10 nb_samples:1024 pts:10998.8
video_frame n:10 coded_n:0 pts:1.05605e+07
video_frame n:11 coded_n:0 pts:1.05605e+07
video_frame n:12 coded_n:0 pts:1.05606e+07
audio_frame n:11 nb_samples:1024 pts:10998.8
audio_frame n:12 nb_samples:1024 pts:10998.9
audio_frame n:13 nb_samples:1024 pts:10998.9
video_frame n:13 coded_n:0 pts:1.05606e+07
video_frame n:14 coded_n:0 pts:1.05606e+07
video_frame n:15 coded_n:0 pts:1.05607e+07
audio_frame n:14 nb_samples:1024 pts:10998.9
audio_frame n:15 nb_samples:1024 pts:10999
audio_frame n:16 nb_samples:1024 pts:1099
rofafor commented 6 years ago

You shoud be able to enable libva+ffmpeg output by issuing the following command: svdrpsend plug vaapidevice trac 0x1F00 Hint: take a look at the misc.h for other logging contexts.

9000h commented 6 years ago

@rofafor this was what I'm looking for, thank's @pesintta here are a detailed log on Astra UHD Demo, I hope the info is sufficient to identify the issue http://paste.ubuntu.com/p/QJK7xR6JqT/

9000h commented 6 years ago

this fix the general UHD issue here, but make the other filters unsuable

--- video.c.orig    2018-03-12 00:57:22.895635975 +0100
+++ video.c 2018-03-12 01:03:25.357921081 +0100
@@ -1777,12 +1777,10 @@
     for (unsigned int i = 0; i < decoder->filter_n; ++i) {

    /* Skip deinterlacer if disabled or source is not interlaced */
-   if (decoder->filters[i] == *decoder->vpp_deinterlace_buf) {
        if (!decoder->Interlaced)
        continue;
        if (deinterlace->algorithm == VAProcDeinterlacingNone)
        continue;
-   }

    /* Skip denoise if value is set to 0 ("off") */
    if (decoder->vpp_denoise_buf && decoder->filters[i] == *decoder->vpp_denoise_buf) {
pesintta commented 6 years ago

I pushed quite a big refactoring to master that may have an effect on this issue. Could you check/verify if this got resolved?

Also other testing is needed especially with various postprocessing filter combinations to make sure everything works as expected.

9000h commented 6 years ago

unfortunatly it's still the same issue, but switching channels HD,SD are fine

compiles with 2 new warnings

Wdeclaration-after-statement -Wno-unused-parameter -std=c99   -c -o video.o video.c
video.c: In function ‘VaapiApplyFilters’:
video.c:1784:5: warning: ‘memset’ used with length equal to number of elements without multiplication by element size [-Wmemset-elt-size]
     memset(filters_to_run, VA_INVALID_ID, ARRAY_ELEMS(filters_to_run));
     ^~~~~~
video.c:1811:5: warning: ‘memset’ used with length equal to number of elements without multiplication by element size [-Wmemset-elt-size]
     memset(filters_to_run, VA_INVALID_ID, ARRAY_ELEMS(filters_to_run));
     ^~~~~~
9000h commented 6 years ago

if I comment this line out UHD is working

--- video.c.orig    2018-03-12 22:36:15.936033486 +0100
+++ video.c 2018-03-12 22:36:28.928104982 +0100
@@ -2408,7 +2408,7 @@
            vaCreateBuffer(decoder->VaDisplay, decoder->vpp_ctx, VAProcFilterParameterBufferType,
            sizeof(deinterlace), 1, &deinterlace, &filter_buf_id);
        decoder->vpp_deinterlace_buf = &decoder->filters[decoder->filter_n];
-       decoder->filters[decoder->filter_n++] = filter_buf_id;
+//???      decoder->filters[decoder->filter_n++] = filter_buf_id;
        break;
        case VAProcFilterSharpening:
        Info("video/vaapi: sharpening supported");
pesintta commented 6 years ago

Can you post your setup.conf (lines starting with vaapidevice)?

9000h commented 6 years ago

still no success with the commits from today here are the settings

vaapidevice.1080i.CutTopBottom = 0
vaapidevice.1080i.Deinterlace = 0
vaapidevice.1080i.Denoise = 0
vaapidevice.1080i.Scaling = 0
vaapidevice.1080i.Sharpen = 0
vaapidevice.1080i_fake.CutLeftRight = 0
vaapidevice.1080i_fake.CutTopBottom = 0
vaapidevice.1080i_fake.Deinterlace = 0
vaapidevice.1080i_fake.Denoise = 0
vaapidevice.1080i_fake.Scaling = 0
vaapidevice.1080i_fake.Sharpen = 0
vaapidevice.576i.CutLeftRight = 0
vaapidevice.576i.CutTopBottom = 0
vaapidevice.576i.Deinterlace = 3
vaapidevice.576i.Denoise = 0
vaapidevice.576i.Scaling = 2
vaapidevice.576i.Sharpen = 0
vaapidevice.60HzMode = 1
vaapidevice.720p.CutLeftRight = 0
vaapidevice.720p.CutTopBottom = 0
vaapidevice.720p.Deinterlace = 0
vaapidevice.720p.Denoise = 0
vaapidevice.720p.Scaling = 2
vaapidevice.720p.Sharpen = 0
vaapidevice.AudioBufferTime = 0
vaapidevice.AudioCompression = 0
vaapidevice.AudioDelay = 70
vaapidevice.AudioDownmix = 1
vaapidevice.AudioDrift = 0
vaapidevice.AudioMaxCompression = 0
vaapidevice.AudioMaxNormalize = 0
vaapidevice.AudioNormalize = 0
vaapidevice.AudioPassthrough = 0
vaapidevice.AudioSoftvol = 0
vaapidevice.AudioStereoDescent = 0
vaapidevice.AutoCrop.Delay = 3
vaapidevice.AutoCrop.Interval = 3
vaapidevice.AutoCrop.Tolerance = 1
vaapidevice.Background = 0
vaapidevice.Brightness = 0
vaapidevice.ClearOnSwitch = 1
vaapidevice.Contrast = 1
vaapidevice.DetachFromMainMenu = 0
vaapidevice.HideMainMenuEntry = 0
vaapidevice.Hue = 0
vaapidevice.MakePrimary = 0
vaapidevice.Osd.Height = 0
vaapidevice.Osd.Width = 0
vaapidevice.Saturation = 1
vaapidevice.SkinToneEnhancement = 0
vaapidevice.SoftStartSync = 0
vaapidevice.StudioLevels = 0
vaapidevice.Suspend.Close = 0
vaapidevice.Suspend.X11 = 0
vaapidevice.UHD.CutLeftRight = 0
vaapidevice.UHD.CutTopBottom = 0
vaapidevice.UHD.Deinterlace = 0
vaapidevice.UHD.Denoise = 0
vaapidevice.UHD.Scaling = 0
vaapidevice.UHD.Sharpen = 0
vaapidevice.Video4to3DisplayFormat = 1
vaapidevice.VideoOtherDisplayFormat = 1

the strange thing is the old softhddevice is working with the same drivers,ffmpeg etc...

pesintta commented 6 years ago

This is strange. vaapidevice.UHD.Deinterlace = 0 which should map to VAProcDeinterlacingNone. Yet it seems that this check does not trigger: https://github.com/pesintta/vdr-plugin-vaapidevice/blob/master/video.c#L1818-L1819

The check is supposed to skip deinterlacing which should make the issue go away according to https://github.com/pesintta/vdr-plugin-vaapidevice/issues/79#issuecomment-372471321. The modification there only differs so that deinterlacer is not initialized and therefore not run.

I'm afraid you'll need to add some extra logging into the if conditions linked above and try to figure why deinterlacing is still enabled for you for UHD resolutions.

Space2Man commented 6 years ago

Could this be related to #96 ? Does the change from Rofafor help #100 ?

pesintta commented 6 years ago

@9000h found one likely cause for this bug which I fixed and pushed to master.

9000h commented 6 years ago

sorry still not working but should there not a log entry like "none deinterlace supported"

Mar 13 21:07:29 acer533 vdr: [5519] VAAPI-ERROR: video: display buffer empty, duping frame (45/0) 5
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: supports video processing
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: noise reduction supported
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: 0,00 - 1,00 ++ 0,03 = 0,50
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Enabling denoise filter (pos = 0)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: deinterlacing supported
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: bob deinterlace supported
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: motion adaptive deinterlace supported
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: motion compensated deinterlace supported
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Enabling Deint (pos = 1)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: sharpening supported
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: 0,00 - 1,00 ++ 0,03 = 0,50
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Enabling sharpening filter (pos = 0)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: enabling color balance filters
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: Supported color balance filter count: 4
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Hue (-180,00 - 180,00 ++ 1,00 = 0,00) (pos = 2)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Saturation (0,00 - 10,00 ++ 0,10 = 1,00) (pos = 2)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Brightness (-100,00 - 100,00 ++ 1,00 = 0,00) (pos = 2)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Contrast (0,00 - 10,00 ++ 0,10 = 1,00) (pos = 2)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: skin tone enhancement supported
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: video/vaapi: 0,00 - 4,00 ++ 1,00 = 0,00
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Enabling skin tone filter (pos = 3)
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Allocating 1 forward reference surfaces for postprocessing
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Allocating 0 backward reference surfaces for postprocessing
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI: Changing to 0 forward reference surfaces for postprocessing
Mar 13 21:07:30 acer533 vdr: [5519] VAAPI-ERROR: video/vaapi: black surface displayed
9000h commented 6 years ago

the old softddevice shows

Mar 13 21:19:20 acer533 vdr: Enabling denoise filter (pos = 0)
Mar 13 21:19:20 acer533 vdr: Selected deinterlacer for resolution 0 is not supported by HW
Mar 13 21:19:20 acer533 vdr: Selected deinterlacer for resolution 1 is not supported by HW
Mar 13 21:19:20 acer533 vdr: Selected deinterlacer for resolution 2 is not supported by HW
Mar 13 21:19:20 acer533 vdr: Selected deinterlacer for resolution 3 is not supported by HW
Mar 13 21:19:20 acer533 vdr: Selected deinterlacer for resolution 4 is not supported by HW
Mar 13 21:19:20 acer533 vdr: video/vaapi: deinterlacing supported
Mar 13 21:19:20 acer533 vdr: video/vaapi: bob deinterlace supported
Mar 13 21:19:20 acer533 vdr: video/vaapi: motion adaptive deinterlace supported
Mar 13 21:19:20 acer533 vdr: video/vaapi: motion compensated deinterlace supported
Mar 13 21:19:20 acer533 vdr: Enabling Deint (pos = 1)
pesintta commented 6 years ago

The intel-driver never reports support for "None" type of functionalities. none deinterlacer is "supported" by leaving it out from the filter chain (which is what the code attempts to do).

Here is a patch that skips all filters:

diff --git a/video.c b/video.c
index 40912b1..fcf9cf1 100644
--- a/video.c
+++ b/video.c
@@ -1798,6 +1798,15 @@ static VASurfaceID *VaapiApplyFilters(VaapiDecoder * decoder, int top_field)
     memset(filters_to_run, VA_INVALID_ID, sizeof(filters_to_run));
     for (unsigned int i = 0; i < decoder->filter_n; ++i) {

+       if (decoder->vpp_deinterlace_buf && decoder->filters[i] == *decoder->vpp_deinterlace_buf)
+           continue;
+       if (decoder->vpp_denoise_buf && decoder->filters[i] == *decoder->vpp_denoise_buf)
+           continue;
+       if (decoder->vpp_cbal_buf && decoder->filters[i] == *decoder->vpp_cbal_buf)
+           continue;
+       if (decoder->vpp_stde_buf && decoder->filters[i] == *decoder->vpp_stde_buf)
+           continue;
+
        /* Skip deinterlacer if disabled or source is not interlaced */
        if (decoder->filters[i] == *decoder->vpp_deinterlace_buf) {
            if (!decoder->Interlaced)

If applying this helps then remove each of the checks one by one until you've found the filter (or combination of filters) that need to be skipped.

If the patch above doesn't help then https://github.com/pesintta/vdr-plugin-vaapidevice/issues/79#issuecomment-372471321 is somehow mistaken and the issue is somewhere else.

9000h commented 6 years ago

ok looks like we get get it now, if vpp_cbal is skipped it did work

    for (unsigned int i = 0; i < decoder->filter_n; ++i) {

//       if (decoder->vpp_deinterlace_buf && decoder->filters[i] == *decoder->vpp_deinterlace_buf)
//           continue;
//       if (decoder->vpp_denoise_buf && decoder->filters[i] == *decoder->vpp_denoise_buf)
//           continue;
       if (decoder->vpp_cbal_buf && decoder->filters[i] == *decoder->vpp_cbal_buf)
           continue;
//       if (decoder->vpp_stde_buf && decoder->filters[i] == *decoder->vpp_stde_buf)
//           continue;
pesintta commented 6 years ago

This makes actually very much sense. Colorbalance filter is currently always enabled and you cannot disable it from settings or from setup.conf.

If you set denoise or skintone filter to some value from menu (as in "enable" the filter) does the picture still work or does it get broken?

9000h commented 6 years ago

set skin tone to 1 and the issue is back, all others did not harm

9000h commented 6 years ago

why not using vaSetDisplayAttributes to set the attributes https://01org.github.io/libva_staging_doxygen/group__api__core.html#ga722bab0d81fffc7db59265432167da93

9000h commented 6 years ago

today I got some other messages on the console WARNING: invalid surface provided for second field WARNING: !!!incorrect slice_param. The first_mb_in_slice of next_slice is less than or equal to that in current slice vdr: gen8_mfd.c:558: gen8_mfd_avc_directmode_state: Assertion `obj_surface->bo && obj_surface->private_data' failed.