Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UHD channels not working since api change #79

Open
9000h opened this issue Mar 7, 2018 · 33 comments
Open

UHD channels not working since api change #79

9000h opened this issue Mar 7, 2018 · 33 comments

Comments

@9000h
Copy link
Contributor

9000h commented Mar 7, 2018

UHD channels have only still image and blinking green screen here (8bit hevc channels in 1080p are fine)
issue did start here 192789d if remember right
screenshot from 2018-03-07 21-53-42

could not get a better screenshot showing the green flashing

@pesintta
Copy link
Owner

pesintta commented Mar 7, 2018

Some more info is needed:

  • What CPU model is being used (haswell, skylake, cherrytrail etc.) or output of vainfo command?
  • I suspect the issue is with hw accelerated 10bit color depth. Does the issue occur with 8-bit UHD samples?
  • Any other info, log messages etc. you can provide that would help?

@9000h
Copy link
Contributor Author

9000h commented Mar 7, 2018

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
Copy link
Contributor Author

9000h commented Mar 7, 2018

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

@9000h
Copy link
Contributor Author

9000h commented Mar 9, 2018

could commit 19e1101 do any harm here?

@pesintta
Copy link
Owner

pesintta commented Mar 9, 2018

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

@9000h
Copy link
Contributor Author

9000h commented Mar 9, 2018

you are right

@pesintta
Copy link
Owner

pesintta commented Mar 9, 2018

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

@9000h
Copy link
Contributor Author

9000h commented Mar 9, 2018

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
Copy link
Contributor Author

9000h commented Mar 9, 2018

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

@pesintta
Copy link
Owner

pesintta commented Mar 9, 2018

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
Copy link
Contributor Author

9000h commented Mar 9, 2018

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
Copy link
Contributor Author

9000h commented Mar 9, 2018

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

@pesintta
Copy link
Owner

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

@9000h
Copy link
Contributor Author

9000h commented Mar 10, 2018

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
Copy link
Contributor

rofafor commented Mar 10, 2018

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
Copy link
Contributor Author

9000h commented Mar 10, 2018

@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
Copy link
Contributor Author

9000h commented Mar 11, 2018

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 added a commit that referenced this issue Mar 12, 2018
This commit refactors the surface handling before committing into postprocessing.

The idea here is to query the driver about the number of needed reference surfaces beforehand and skip deinterlacing if
there are not enough of them. Reference surfaces are also checked for correctness and readiness and deinterlacer is skipped
if any of the checks fail.

This new logic avoids feeding invalid surfaces to driver as references so this commit fixes #99
This may also have a positive effect on #79
@pesintta
Copy link
Owner

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
Copy link
Contributor Author

9000h commented Mar 12, 2018

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
Copy link
Contributor Author

9000h commented Mar 12, 2018

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
Copy link
Owner

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

@9000h
Copy link
Contributor Author

9000h commented Mar 13, 2018

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
Copy link
Owner

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 #79 (comment). 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
Copy link

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

pesintta added a commit that referenced this issue Mar 13, 2018
Accessing deinterlace buffer contents after vaUnmapBuffer() is undefined and probably a bad idea(TM).
Instead of looking at the buffer contents we can look at the deinterlace table data for the same effect.

Also set the buffer pointer to NULL just to be sure that no further undefined accesses happen.

This will hopefully affect #79
@pesintta
Copy link
Owner

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

@9000h
Copy link
Contributor Author

9000h commented Mar 13, 2018

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
Copy link
Contributor Author

9000h commented Mar 13, 2018

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
Copy link
Owner

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 #79 (comment) is somehow mistaken and the issue is somewhere else.

@9000h
Copy link
Contributor Author

9000h commented Mar 14, 2018

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
Copy link
Owner

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
Copy link
Contributor Author

9000h commented Mar 14, 2018

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

@9000h
Copy link
Contributor Author

9000h commented Mar 18, 2018

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

@9000h
Copy link
Contributor Author

9000h commented Mar 20, 2018

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants