GNOME Bugzilla – Bug 759720
[HEVC][Decode]Allegro and BBC cases have different MD5 value from the reference data
Last modified: 2016-03-16 17:18:46 UTC
1. Testing Steps: ======================================================================== gst-launch-1.0 -q filesrc location=/media/HEVC/BBC10.0/i_main/BasketballDrill_832x480_50_qp27.bin '!' vaapiparse_h265 '!' vaapidecode '!' checksumsink2 frame-checksum=FALSE file-checksum=TRUE 2.Log: ======================================================================== output: libva info: VA-API version 0.38.1 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_38 libva info: va_openDriver() returns 0 81205ede86fb8abe40cd25ae388588d8 Ref-MD5 is 304835f1a3321f0c70eef3c04227dff7 Run ./mv_decoder_adv --md5 --info --reorder --hevc --i420 --long --limit 25 -o out_i420_b.yuv -i /media/HEVC/BBC10.0/i_main/BasketballDrill_832x480_50_qp27.bin libva info: VA-API version 0.38.1 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_38 libva info: va_openDriver() returns 0 libva major ver: 0 minor ver: 38 GFX device [vaapi] is ready Video bistream parser [hevc] is ready Decode accelerator [vaapi:hevc] is ready codec: hevc accel: vaapi slice: long format width: 832 height: 512 surfaces: 20 Video renderer is ready fourcc: i420 limit: 25 [0] - CVS:1, POC:0, frame:832x480, crop:832x480, show:true [1] - CVS:1, POC:1, frame:832x480, crop:832x480, show:true [2] - CVS:1, POC:2, frame:832x480, crop:832x480, show:true [3] - CVS:1, POC:3, frame:832x480, crop:832x480, show:true [4] - CVS:1, POC:4, frame:832x480, crop:832x480, show:true [5] - CVS:1, POC:5, frame:832x480, crop:832x480, show:true [6] - CVS:1, POC:6, frame:832x480, crop:832x480, show:true [7] - CVS:1, POC:7, frame:832x480, crop:832x480, show:true [8] - CVS:1, POC:8, frame:832x480, crop:832x480, show:true [9] - CVS:1, POC:9, frame:832x480, crop:832x480, show:true [10] - CVS:1, POC:10, frame:832x480, crop:832x480, show:true [11] - CVS:1, POC:11, frame:832x480, crop:832x480, show:true [12] - CVS:1, POC:12, frame:832x480, crop:832x480, show:true [13] - CVS:1, POC:13, frame:832x480, crop:832x480, show:true [14] - CVS:1, POC:14, frame:832x480, crop:832x480, show:true [15] - CVS:1, POC:15, frame:832x480, crop:832x480, show:true [16] - CVS:1, POC:16, frame:832x480, crop:832x480, show:true [17] - CVS:1, POC:17, frame:832x480, crop:832x480, show:true [18] - CVS:1, POC:18, frame:832x480, crop:832x480, show:true [19] - CVS:1, POC:19, frame:832x480, crop:832x480, show:true [20] - CVS:1, POC:20, frame:832x480, crop:832x480, show:true [21] - CVS:1, POC:21, frame:832x480, crop:832x480, show:true [22] - CVS:1, POC:22, frame:832x480, crop:832x480, show:true [23] - CVS:1, POC:23, frame:832x480, crop:832x480, show:true [24] - CVS:1, POC:24, frame:832x480, crop:832x480, show:true Reach decode frames limits:25 Total 25 frames are presented in 2327332 us, 10.7419 fps. MD5 digest: 304835f1a3321f0c70eef3c04227dff7 Run all Allegro and BBC cases, they got different MD5 value from the reference data. 3. Testing Env: ======================================================================== gst_plugins_vaapi10: (master)1a84348e766220831aa26bfa50b8aeefec0ebdd4 Gstreamer: 1.6 libva: (master)6ef997f03eba8fcabfe3a2ac1546bbaf924e519f Libva_intel_driver: (master)a7803c0642a8f2923ce3c51a0a717688fe2c5459 4. Frequency of Occurence: ======================================================================== 100%
JVT10.0/DELTAQP_A_BRCM_4.bin also has this issue. run: gst-launch-1.0 -q filesrc location=HEVC/JVT10.0/DELTAQP_A_BRCM_4.bin '!' vaapiparse_h265 '!' vaapidecode '!' checksumsink2 frame-checksum=FALSE file-checksum=TRUE libva info: VA-API version 0.38.1 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_38 libva info: va_openDriver() returns 0 5ab0f91a47fd3d41e76bc1117ee55b6c ref-MD5: 1ceef83183197fd1f21472c17b53cbff
It looks like the problem with the 832x480 video is strides. The driver chooses a 128-aligned width where video-info calculates a 4-aligned width by default on I420 or NV12. I believe the fix is to update gstreamer-vaapi to send a GstVideoMeta along with the buffer that indicates the proper strides. I will begin working on that patch now.
Oops, looks like it was just my test checksumming code that wasn't adding the VIDEO_META in the allocation query. With that modification to my test code, gstreamer-vaapi sends me the video meta and then using that I am seeing frame checksums that match the reference decoder. @Lu Hua, make sure your test code gets and uses the GstVideoMeta for strides. Apart from that I am not seeing the issue reported in this bug with the tip of libva, libva-intel-driver, and GStreamer repos.
Think this got fixed with my H.265 parsing patches: https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=cf0d45c100d884e9717ab9b6b94dcdd3771f9ea3 https://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/commit/?id=ffd5028a38da45ed7e67c377590078534aca3078 So closing.