Bug 81199 - [HSW/BDW]vaapipostproc: failed to deinterlace and scale H.264 videos
Summary: [HSW/BDW]vaapipostproc: failed to deinterlace and scale H.264 videos
Status: CLOSED FIXED
Alias: None
Product: libva
Classification: Unclassified
Component: intel (show other bugs)
Version: unspecified
Hardware: x86-64 (AMD64) Linux (All)
: medium normal
Assignee: Pengfei
QA Contact: Sean V Kelley
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-07-11 01:21 UTC by zhixinx.liu
Modified: 2015-01-12 07:51 UTC (History)
3 users (show)

See Also:
i915 platform:
i915 features:


Attachments

Description zhixinx.liu 2014-07-11 01:21:36 UTC
not regression issue. only find this issue on BDW/HSW. you can get background knowledge from Bug 731192(https://bugzilla.gnome.org/show_bug.cgi?id=731192)

log:
[root@x-hswmedia ~]# gst-launch-1.0 filesrc location=/root/media_tools/decoder/Base_Ext_Main_profile/Sharp_MP_Field_2_B.jvt '!' h264parse '!' vaapidecode '!'  vaapipostproc deinterlace-mode=interlaced deinterlace-method=4 width=400 height=300 '!' vaapisink sync=false
libva error: Open file /root/trace_test/tracelog.15188.007c85f0 failed (No such file or directory)
libva info: VA-API version 0.35.2
libva info: va_getDriverName() returns 0
libva info: Trying to open /opt/X11R7/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Got context from element 'vaapidecode0': gst.vaapi.Display=context, display=(GstVaapiDisplay)NULL;
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
WARNING: A forward temporal reference is needed for Motion adaptive/compensated deinterlacing !!!
gst-launch-1.0: gen75_vpp_vebox.c:63: vpp_surface_convert: Assertion `src_obj_surf->orig_width == dst_obj_surf->orig_width' failed.
Aborted (core dumped)
Comment 1 frhu 2014-07-17 10:20:23 UTC
Here are six pipes for easy testing this bug/issue.

The used h264 interlace file can be downloaded at 
http://www.avsforum.com/forum/26-home-theater-computers/1157287-hd-1080i-test-pattern-determine-vector-adaptive-deinterlacing-others-icl-ticker-2.html#post16900173

I use the file    "PAL interlaced (25 FPS):   H.264 - 1080i - 25 fps - (33 MB)"


The pipes # 1,2,3,4,5,6:
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts ! decodebin ! vaapisink

gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! vaapidecode ! vaapisink

gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  decodebin ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob ! vaapipostproc width=400 height=300 ! vaapisink

gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! vaapidecode ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob ! vaapipostproc width=400 height=300 ! vaapisink

gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  decodebin ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob width=400 height=300 ! vaapisink

gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! vaapidecode ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob width=400 height=300 ! vaapisink


Why six pipes?
Always two pipes for each test case, one with decodebin and one with vaapidecode.
Some pipes works with older test setups, the pipes with only "ONE vaapipostproc call" never worked.

=====================================================================================
My (old) test setup:
libva info: VA-API version 0.35.1
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.35 (libva 1.3.1)
vainfo: Driver version: Intel i965 driver - 1.3.1

Pipe # 1,2,3,4 works
pipe # 5,6 works NOT (the pipes with "ONE vaapipostproc call")
=====================================================================================
=====================================================================================
My (new) test setup:
libva info: VA-API version 0.35.2
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_35
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.35 (libva 1.3.2.pre1)
vainfo: Driver version: Intel i965 driver for Intel(R) Haswell Mobile - 1.3.3.pre1

Pipe # 1,3 works (decodebin used)
pipe # 2,4 works NOT (vaapidecode used)
pipe # 5,6 works NOT (the pipes with "ONE vaapipostproc call")
=====================================================================================

Hardware for all tests HSW i7.

Please let me know if you need more information.
Comment 2 Pengfei 2014-07-29 03:18:26 UTC
> Pipe # 1,3 works (decodebin used)
> pipe # 2,4 works NOT (vaapidecode used)
> pipe # 5,6 works NOT (the pipes with "ONE vaapipostproc call")

1.
change #2 gst version to gst-launch-0.10, it will work OK. so it is gstreamer issue. the #4 #6 should be the same issue. Do you have a bug to trace this? 
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! vaapidecode ! vaapisink

2.
#5 are the issue about two vaapipostproc and one vaapipostproc
Do you have a bug to trace this?
Comment 3 Pengfei 2014-07-29 03:22:37 UTC
Please keep this ticket to trace the assertion issue.
=====================
WARNING: A forward temporal reference is needed for Motion adaptive/compensated deinterlacing !!!
gst-launch-1.0: gen75_vpp_vebox.c:63: vpp_surface_convert: Assertion `src_obj_surf->orig_width == dst_obj_surf->orig_width' failed.
Aborted (core dumped)
============================
Comment 4 Pengfei 2014-08-08 09:19:27 UTC
with motion adaption deinterlance, we can see the assertion. bob mode work well.
Comment 5 frhu 2014-12-02 14:57:25 UTC
Retested pipes with last commit.

Setup info:

libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/va/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_36
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.36 (libva 1.4.1)
vainfo: Driver version: Intel i965 driver for Intel(R) Haswell Mobile - 1.4.1
vainfo: Supported profile and entrypoints

vaapi  Version 0.5.10.pre1
commit 8bf8f1104d5725536243f44c0330144c3ba1a428
Author: Sreerenj Balachandran <sreerenj.balachandran@intel.com>
Date:   Thu Nov 27 12:11:03 2014 +0200

gstreamer  version 1.4.4

Tested pipes:
The pipes # 1,2,3,3a,4,5,6:
// #1 OK
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts ! decodebin ! vaapisink

// #2 not OK, vaapidecode0: GStreamer error: negotiation problem.
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! vaapidecode ! vaapisink

// #3 OK, but two times vaapipostproc !! 
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  decodebin ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob ! vaapipostproc width=400 height=300 ! vaapisink
//#3a not OK, green only (same as #3, but one time vaapipostproc only)
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  decodebin ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob width=400 height=300 ! vaapisink

// #4 not OK, vaapidecode0: GStreamer error: negotiation problem.
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! vaapidecode ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob ! vaapipostproc width=400 height=300 ! vaapisink

// #5 not OK, green only 
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  decodebin ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob width=400 height=300 ! vaapisink

// #6 not OK, vaapidecode0: GStreamer error: negotiation problem. 
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! vaapidecode ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob width=400 height=300 ! vaapisink

Only #1 is working!
#3 is also working, but with two vaapipostproc calls, this is not good.
All other pipes are not working!
All pipes with vaapidecode doesn't work!

See also bug with mpeg2 sources, deinterlace and scaling:
https://bugzilla.gnome.org/show_bug.cgi?id=731460
Comment 6 frhu 2015-01-09 11:09:56 UTC
Test again and it works now.
Issue fixed with libva/intel-driver version 1.5.0 (also with 1.5.0.pre1)

For those who want to retest....
With vaapidecode now h264parse is necessary. 
Example:
gst-launch-1.0 filesrc location=/root/Slices_H.264_PAL_1080i-25.ts !  tsdemux ! h264parse ! vaapidecode ! vaapipostproc deinterlace-mode=interlaced deinterlace-method=bob width=400 height=300 ! vaapisink


Setup info:

libva info: VA-API version 0.37.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/va/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_37
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.37 (libva 1.5.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Haswell Mobile - 1.5.0

gstreamer  version 1.4.4
vaapi version  0.5.10.pre1


Thanks for support.
Comment 7 zhixinx.liu 2015-01-12 07:51:08 UTC
as frhu' commit, this issue has been fixed. so close it.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.