2021-11-09 18:22:04

by Ming Qian

[permalink] [raw]
Subject: [PATCH v12 00/13] amphion video decoder/encoder driver

Hi all,

This patch series adds support for
the amphion video encoder and decoder
via the VPU block present in imx8q platforms.
Currently, support for IMX8QXP and IMX8QM is included.

It features decoding for the following formats:
- H.264
- HEVC
- MPEG4
- MPEG2
- VC1
- VP8

It features encoding for the following formats:
- H.264

The driver creates a separate device node for the encoder and decoder.

This driver is dependent on vpu firmwares.
The firmwares have been submitted to linux-firmware.
The firmware patch is since commit
b563148fd28623f6b6ce68bb06c3dd3bd138b058:
linux-firmware: Update firmware file for Intel Bluetooth 9462
(Fri Oct 8 16:30:14 2021 +0530)

and it's available in the git repository at:
https://github.com/mingqian-0/linux-firmware.git

for you to fetch changes up to bb3eee4f99589d4910dee4c053a3a685546b5dbb:
amphion: add VPU firmwares for NXP i.MX8Q SoCs
(Tue Oct 12 15:09:57 2021 +0800)

encoder is tested with gstreamer
decoder is tested with gstreamer, but the following patches are required:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1252
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1098
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1099


Changelog:

v12
- support reset decoder when starting a new stream
- don't append an empty last buffer, set last_buffer_dequeued
- improve the resolution change flow
- return all buffers if start_streaming fail
- fill encoder capture buffer's filed to none
- fix a bug in calculating bytesperline

v11
- fix dt_binding_check error after upgrade dtschema
- remove "default y"
- add media device

v10
- refine vpu log, remove custom logging infrastructure
- support non contiguous planes format nv12m instead of nv12
- rename V4L2_PIX_FMT_NV12_8L128 to V4L2_PIX_FMT_NV12MT_8L128
- rename V4L2_PIX_FMT_NV12_10BE_8L128 to V4L2_PIX_FMT_NV12MT_10BE_8L128
- merge two module into one
- fix kernel panic in rmmod

v9
- drop V4L2_BUF_FLAG_CODECCONFIG
- drop V4L2_EVENT_CODEC_ERROR
- drop V4L2_EVENT_SKIP - use the v4l2_buffer.sequence counter
- fix some build warnings with W=1 reported by kernel test robot

v8
- move driver from driver/media/platform/imx/vpu-8q to
driver/media/platform/amphion
- rename driver name to amphion
- remove imx_vpu.h
- move the definition of V4L2_EVENT_CODEC_ERROR to videodev2.h
- move the definition of V4L2_EVENT_SKIP to videodev2.h

v7
- fix build warnings with W=1 reported by kernel test robot

v6:
- rename V4L2_PIX_FMT_NT8 to V4L2_PIX_FMT_NV12_8L128
- rename V4L2_PIX_FMT_NT10 to V4L2_PIX_FMT_NV12_10BE_8L128

v5:
- move some definition from imx_vph.h to videodev2.h
- remove some unnecessary content
- add some documentation descriptions
- pass the lateset v4l2-compliance test

v4:
- redefine the memory-region in devicetree bindings documentation
- use v4l2's mechanism to implement synchronize queuing ioctl
- remove the unnecessary mutex ioctl_sync
- don't notify source change event if the parameters are same as previously established
- add flag V4L2_FMT_FLAG_DYN_RESOLUTION to decoder's capture format

v3:
- don't make vpu device node a simple-bus
- trigger probing vpu core in the driver
- remove unnecessary vpu core index property

v2:
- fix dt bindings build error
- split driver patch into several parts to avoid exceeding bytes limit

Compliance
==========
# v4l2-compliance -d /dev/video0
v4l2-compliance 1.21.0-4859, 64 bits, 64-bit time_t
v4l2-compliance SHA: 493af03f3c57 2021-10-08 17:23:11

Compliance test for amphion-vpu device /dev/video0:

Driver Info:
Driver name : amphion-vpu
Card type : amphion vpu decoder
Bus info : platform: amphion-vpu
Driver version : 5.15.0
Capabilities : 0x84204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Detected Stateful Decoder
Media Driver Info:
Driver name : amphion-vpu
Model : amphion-vpu
Serial :
Bus info : platform: amphion-vpu
Media version : 5.15.0
Hardware revision: 0x00000000 (0)
Driver version : 5.15.0
Interface Info:
ID : 0x0300000c
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : amphion-vpu-decoder-source
Function : V4L2 I/O
Pad 0x01000002 : 0: Source
Link 0x02000008: to remote pad 0x1000004 of entity 'amphion-vpu-decoder-proc' (Video Decoder): Data, Enabled, Immutable

Required ioctls:
test MC information (see 'Media Driver Info' above): OK
test VIDIOC_QUERYCAP: OK
test invalid ioctls: OK

Allow for multiple opens:
test second /dev/video0 open: OK
test VIDIOC_QUERYCAP: OK
test VIDIOC_G/S_PRIORITY: OK
test for unlimited opens: OK

Debug ioctls:
test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
test VIDIOC_LOG_STATUS: OK (Not Supported)

Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 0 Audio Inputs: 0 Tuners: 0

Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0

Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)

Control ioctls:
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
test VIDIOC_QUERYCTRL: OK
test VIDIOC_G/S_CTRL: OK
test VIDIOC_G/S/TRY_EXT_CTRLS: OK
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 3 Private Controls: 0

Format ioctls:
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
test VIDIOC_G/S_PARM: OK (Not Supported)
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK
test VIDIOC_TRY_FMT: OK
test VIDIOC_S_FMT: OK
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK (Not Supported)
test Composing: OK
test Scaling: OK (Not Supported)

Codec ioctls:
test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK

Buffer ioctls:
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test VIDIOC_EXPBUF: OK
test Requests: OK (Not Supported)

Total for amphion-vpu device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0

# v4l2-compliance -d /dev/video1
v4l2-compliance 1.21.0-4859, 64 bits, 64-bit time_t
v4l2-compliance SHA: 493af03f3c57 2021-10-08 17:23:11

Compliance test for amphion-vpu device /dev/video1:

Driver Info:
Driver name : amphion-vpu
Card type : amphion vpu encoder
Bus info : platform: amphion-vpu
Driver version : 5.15.0
Capabilities : 0x84204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Detected Stateful Encoder
Media Driver Info:
Driver name : amphion-vpu
Model : amphion-vpu
Serial :
Bus info : platform: amphion-vpu
Media version : 5.15.0
Hardware revision: 0x00000000 (0)
Driver version : 5.15.0
Interface Info:
ID : 0x0300001a
Type : V4L Video
Entity Info:
ID : 0x0000000f (15)
Name : amphion-vpu-encoder-source
Function : V4L2 I/O
Pad 0x01000010 : 0: Source
Link 0x02000016: to remote pad 0x1000012 of entity 'amphion-vpu-encoder-proc' (Video Encoder): Data, Enabled, Immutable

Required ioctls:
test MC information (see 'Media Driver Info' above): OK
test VIDIOC_QUERYCAP: OK
test invalid ioctls: OK

Allow for multiple opens:
test second /dev/video1 open: OK
test VIDIOC_QUERYCAP: OK
test VIDIOC_G/S_PRIORITY: OK
test for unlimited opens: OK

Debug ioctls:
test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
test VIDIOC_LOG_STATUS: OK (Not Supported)

Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 0 Audio Inputs: 0 Tuners: 0

Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0

Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)

Control ioctls:
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
test VIDIOC_QUERYCTRL: OK
test VIDIOC_G/S_CTRL: OK
test VIDIOC_G/S/TRY_EXT_CTRLS: OK
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 20 Private Controls: 0

Format ioctls:
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
test VIDIOC_G/S_PARM: OK
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK
test VIDIOC_TRY_FMT: OK
test VIDIOC_S_FMT: OK
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK
test Composing: OK (Not Supported)
test Scaling: OK (Not Supported)

Codec ioctls:
test VIDIOC_(TRY_)ENCODER_CMD: OK
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)

Buffer ioctls:
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test VIDIOC_EXPBUF: OK
test Requests: OK (Not Supported)

Total for amphion-vpu device /dev/video1: 46, Succeeded: 46, Failed: 0, Warnings: 0

# v4l2-compliance -d /dev/media0
v4l2-compliance 1.21.0-4859, 64 bits, 64-bit time_t
v4l2-compliance SHA: 493af03f3c57 2021-10-08 17:23:11

Compliance test for amphion-vpu device /dev/media0:

Media Driver Info:
Driver name : amphion-vpu
Model : amphion-vpu
Serial :
Bus info : platform: amphion-vpu
Media version : 5.15.0
Hardware revision: 0x00000000 (0)
Driver version : 5.15.0

Required ioctls:
test MEDIA_IOC_DEVICE_INFO: OK
test invalid ioctls: OK

Allow for multiple opens:
test second /dev/media0 open: OK
test MEDIA_IOC_DEVICE_INFO: OK
test for unlimited opens: OK

Media Controller ioctls:
test MEDIA_IOC_G_TOPOLOGY: OK
Entities: 6 Interfaces: 2 Pads: 8 Links: 8
test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
test MEDIA_IOC_SETUP_LINK: OK

Total for amphion-vpu device /dev/media0: 8, Succeeded: 8, Failed: 0, Warnings: 0

Ming Qian (13):
dt-bindings: media: amphion: add amphion video codec bindings
media:Add nv12mt_8l128 and nv12mt_10be_8l128 video format.
media: amphion: add amphion vpu device driver
media: amphion: add vpu core driver
media: amphion: implement vpu core communication based on mailbox
media: amphion: add vpu v4l2 m2m support
media: amphion: add v4l2 m2m vpu encoder stateful driver
media: amphion: add v4l2 m2m vpu decoder stateful driver
media: amphion: implement windsor encoder rpc interface
media: amphion: implement malone decoder rpc interface
ARM64: dts: freescale: imx8q: add imx vpu codec entries
firmware: imx: scu-pd: imx8q: add vpu mu resources
MAINTAINERS: add AMPHION VPU CODEC V4L2 driver entry

.../bindings/media/amphion,vpu.yaml | 180 ++
.../media/v4l/pixfmt-yuv-planar.rst | 15 +
MAINTAINERS | 9 +
.../arm64/boot/dts/freescale/imx8-ss-vpu.dtsi | 72 +
arch/arm64/boot/dts/freescale/imx8qxp-mek.dts | 17 +
arch/arm64/boot/dts/freescale/imx8qxp.dtsi | 24 +
arch/arm64/configs/defconfig | 1 +
drivers/firmware/imx/scu-pd.c | 4 +
drivers/media/platform/Kconfig | 19 +
drivers/media/platform/Makefile | 2 +
drivers/media/platform/amphion/Makefile | 20 +
drivers/media/platform/amphion/vdec.c | 1680 +++++++++++++++++
drivers/media/platform/amphion/venc.c | 1351 +++++++++++++
drivers/media/platform/amphion/vpu.h | 357 ++++
drivers/media/platform/amphion/vpu_cmds.c | 431 +++++
drivers/media/platform/amphion/vpu_cmds.h | 25 +
drivers/media/platform/amphion/vpu_codec.h | 67 +
drivers/media/platform/amphion/vpu_color.c | 190 ++
drivers/media/platform/amphion/vpu_core.c | 906 +++++++++
drivers/media/platform/amphion/vpu_core.h | 15 +
drivers/media/platform/amphion/vpu_dbg.c | 495 +++++
drivers/media/platform/amphion/vpu_defs.h | 186 ++
drivers/media/platform/amphion/vpu_drv.c | 265 +++
drivers/media/platform/amphion/vpu_helpers.c | 436 +++++
drivers/media/platform/amphion/vpu_helpers.h | 71 +
drivers/media/platform/amphion/vpu_imx8q.c | 271 +++
drivers/media/platform/amphion/vpu_imx8q.h | 116 ++
drivers/media/platform/amphion/vpu_malone.c | 1679 ++++++++++++++++
drivers/media/platform/amphion/vpu_malone.h | 42 +
drivers/media/platform/amphion/vpu_mbox.c | 124 ++
drivers/media/platform/amphion/vpu_mbox.h | 16 +
drivers/media/platform/amphion/vpu_msgs.c | 413 ++++
drivers/media/platform/amphion/vpu_msgs.h | 14 +
drivers/media/platform/amphion/vpu_rpc.c | 279 +++
drivers/media/platform/amphion/vpu_rpc.h | 464 +++++
drivers/media/platform/amphion/vpu_v4l2.c | 702 +++++++
drivers/media/platform/amphion/vpu_v4l2.h | 54 +
drivers/media/platform/amphion/vpu_windsor.c | 1222 ++++++++++++
drivers/media/platform/amphion/vpu_windsor.h | 39 +
drivers/media/v4l2-core/v4l2-ioctl.c | 2 +
include/uapi/linux/videodev2.h | 2 +
41 files changed, 12277 insertions(+)
create mode 100644 Documentation/devicetree/bindings/media/amphion,vpu.yaml
create mode 100644 arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi
create mode 100644 drivers/media/platform/amphion/Makefile
create mode 100644 drivers/media/platform/amphion/vdec.c
create mode 100644 drivers/media/platform/amphion/venc.c
create mode 100644 drivers/media/platform/amphion/vpu.h
create mode 100644 drivers/media/platform/amphion/vpu_cmds.c
create mode 100644 drivers/media/platform/amphion/vpu_cmds.h
create mode 100644 drivers/media/platform/amphion/vpu_codec.h
create mode 100644 drivers/media/platform/amphion/vpu_color.c
create mode 100644 drivers/media/platform/amphion/vpu_core.c
create mode 100644 drivers/media/platform/amphion/vpu_core.h
create mode 100644 drivers/media/platform/amphion/vpu_dbg.c
create mode 100644 drivers/media/platform/amphion/vpu_defs.h
create mode 100644 drivers/media/platform/amphion/vpu_drv.c
create mode 100644 drivers/media/platform/amphion/vpu_helpers.c
create mode 100644 drivers/media/platform/amphion/vpu_helpers.h
create mode 100644 drivers/media/platform/amphion/vpu_imx8q.c
create mode 100644 drivers/media/platform/amphion/vpu_imx8q.h
create mode 100644 drivers/media/platform/amphion/vpu_malone.c
create mode 100644 drivers/media/platform/amphion/vpu_malone.h
create mode 100644 drivers/media/platform/amphion/vpu_mbox.c
create mode 100644 drivers/media/platform/amphion/vpu_mbox.h
create mode 100644 drivers/media/platform/amphion/vpu_msgs.c
create mode 100644 drivers/media/platform/amphion/vpu_msgs.h
create mode 100644 drivers/media/platform/amphion/vpu_rpc.c
create mode 100644 drivers/media/platform/amphion/vpu_rpc.h
create mode 100644 drivers/media/platform/amphion/vpu_v4l2.c
create mode 100644 drivers/media/platform/amphion/vpu_v4l2.h
create mode 100644 drivers/media/platform/amphion/vpu_windsor.c
create mode 100644 drivers/media/platform/amphion/vpu_windsor.h


base-commit: 57c3b9f55ba875a6f6295fa59f0bdc0a01c544f8
--
2.33.0


2021-11-09 18:22:36

by Ming Qian

[permalink] [raw]
Subject: [PATCH v12 06/13] media: amphion: add vpu v4l2 m2m support

vpu_v4l2.c implements the v4l2 m2m driver methods.
vpu_helpers.c implements the common helper functions
vpu_color.c converts the v4l2 colorspace with iso

Signed-off-by: Ming Qian <[email protected]>
Signed-off-by: Shijie Qin <[email protected]>
Signed-off-by: Zhou Peng <[email protected]>
Reported-by: kernel test robot <[email protected]>
---
drivers/media/platform/amphion/vpu_color.c | 190 +++++
drivers/media/platform/amphion/vpu_helpers.c | 436 ++++++++++++
drivers/media/platform/amphion/vpu_helpers.h | 71 ++
drivers/media/platform/amphion/vpu_v4l2.c | 702 +++++++++++++++++++
drivers/media/platform/amphion/vpu_v4l2.h | 54 ++
5 files changed, 1453 insertions(+)
create mode 100644 drivers/media/platform/amphion/vpu_color.c
create mode 100644 drivers/media/platform/amphion/vpu_helpers.c
create mode 100644 drivers/media/platform/amphion/vpu_helpers.h
create mode 100644 drivers/media/platform/amphion/vpu_v4l2.c
create mode 100644 drivers/media/platform/amphion/vpu_v4l2.h

diff --git a/drivers/media/platform/amphion/vpu_color.c b/drivers/media/platform/amphion/vpu_color.c
new file mode 100644
index 000000000000..c3f45dd9ee30
--- /dev/null
+++ b/drivers/media/platform/amphion/vpu_color.c
@@ -0,0 +1,190 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020-2021 NXP
+ */
+
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/ioctl.h>
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/delay.h>
+#include <linux/types.h>
+#include <media/v4l2-device.h>
+#include "vpu.h"
+#include "vpu_helpers.h"
+
+static const u8 colorprimaries[] = {
+ 0,
+ V4L2_COLORSPACE_REC709, /*Rec. ITU-R BT.709-6*/
+ 0,
+ 0,
+ V4L2_COLORSPACE_470_SYSTEM_M, /*Rec. ITU-R BT.470-6 System M*/
+ V4L2_COLORSPACE_470_SYSTEM_BG,/*Rec. ITU-R BT.470-6 System B, G*/
+ V4L2_COLORSPACE_SMPTE170M, /*SMPTE170M*/
+ V4L2_COLORSPACE_SMPTE240M, /*SMPTE240M*/
+ 0, /*Generic film*/
+ V4L2_COLORSPACE_BT2020, /*Rec. ITU-R BT.2020-2*/
+ 0, /*SMPTE ST 428-1*/
+};
+
+static const u8 colortransfers[] = {
+ 0,
+ V4L2_XFER_FUNC_709, /*Rec. ITU-R BT.709-6*/
+ 0,
+ 0,
+ 0, /*Rec. ITU-R BT.470-6 System M*/
+ 0, /*Rec. ITU-R BT.470-6 System B, G*/
+ V4L2_XFER_FUNC_709, /*SMPTE170M*/
+ V4L2_XFER_FUNC_SMPTE240M,/*SMPTE240M*/
+ V4L2_XFER_FUNC_NONE, /*Linear transfer characteristics*/
+ 0,
+ 0,
+ 0, /*IEC 61966-2-4*/
+ 0, /*Rec. ITU-R BT.1361-0 extended colour gamut*/
+ V4L2_XFER_FUNC_SRGB, /*IEC 61966-2-1 sRGB or sYCC*/
+ V4L2_XFER_FUNC_709, /*Rec. ITU-R BT.2020-2 (10 bit system)*/
+ V4L2_XFER_FUNC_709, /*Rec. ITU-R BT.2020-2 (12 bit system)*/
+ V4L2_XFER_FUNC_SMPTE2084,/*SMPTE ST 2084*/
+ 0, /*SMPTE ST 428-1*/
+ 0 /*Rec. ITU-R BT.2100-0 hybrid log-gamma (HLG)*/
+};
+
+static const u8 colormatrixcoefs[] = {
+ 0,
+ V4L2_YCBCR_ENC_709, /*Rec. ITU-R BT.709-6*/
+ 0,
+ 0,
+ 0, /*Title 47 Code of Federal Regulations*/
+ V4L2_YCBCR_ENC_601, /*Rec. ITU-R BT.601-7 625*/
+ V4L2_YCBCR_ENC_601, /*Rec. ITU-R BT.601-7 525*/
+ V4L2_YCBCR_ENC_SMPTE240M, /*SMPTE240M*/
+ 0,
+ V4L2_YCBCR_ENC_BT2020, /*Rec. ITU-R BT.2020-2*/
+ V4L2_YCBCR_ENC_BT2020_CONST_LUM /*Rec. ITU-R BT.2020-2 constant*/
+};
+
+u32 vpu_color_cvrt_primaries_v2i(u32 primaries)
+{
+ return VPU_ARRAY_FIND(colorprimaries, primaries);
+}
+
+u32 vpu_color_cvrt_primaries_i2v(u32 primaries)
+{
+ return VPU_ARRAY_AT(colorprimaries, primaries);
+}
+
+u32 vpu_color_cvrt_transfers_v2i(u32 transfers)
+{
+ return VPU_ARRAY_FIND(colortransfers, transfers);
+}
+
+u32 vpu_color_cvrt_transfers_i2v(u32 transfers)
+{
+ return VPU_ARRAY_AT(colortransfers, transfers);
+}
+
+u32 vpu_color_cvrt_matrix_v2i(u32 matrix)
+{
+ return VPU_ARRAY_FIND(colormatrixcoefs, matrix);
+}
+
+u32 vpu_color_cvrt_matrix_i2v(u32 matrix)
+{
+ return VPU_ARRAY_AT(colormatrixcoefs, matrix);
+}
+
+u32 vpu_color_cvrt_full_range_v2i(u32 full_range)
+{
+ return (full_range == V4L2_QUANTIZATION_FULL_RANGE);
+}
+
+u32 vpu_color_cvrt_full_range_i2v(u32 full_range)
+{
+ if (full_range)
+ return V4L2_QUANTIZATION_FULL_RANGE;
+
+ return V4L2_QUANTIZATION_LIM_RANGE;
+}
+
+int vpu_color_check_primaries(u32 primaries)
+{
+ return vpu_color_cvrt_primaries_v2i(primaries) ? 0 : -EINVAL;
+}
+
+int vpu_color_check_transfers(u32 transfers)
+{
+ return vpu_color_cvrt_transfers_v2i(transfers) ? 0 : -EINVAL;
+}
+
+int vpu_color_check_matrix(u32 matrix)
+{
+ return vpu_color_cvrt_matrix_v2i(matrix) ? 0 : -EINVAL;
+}
+
+int vpu_color_check_full_range(u32 full_range)
+{
+ int ret = -EINVAL;
+
+ switch (full_range) {
+ case V4L2_QUANTIZATION_FULL_RANGE:
+ case V4L2_QUANTIZATION_LIM_RANGE:
+ ret = 0;
+ break;
+ default:
+ break;
+
+ }
+
+ return ret;
+}
+
+int vpu_color_get_default(u32 primaries,
+ u32 *ptransfers, u32 *pmatrix, u32 *pfull_range)
+{
+ u32 transfers;
+ u32 matrix;
+ u32 full_range;
+
+ switch (primaries) {
+ case V4L2_COLORSPACE_REC709:
+ transfers = V4L2_XFER_FUNC_709;
+ matrix = V4L2_YCBCR_ENC_709;
+ full_range = V4L2_QUANTIZATION_LIM_RANGE;
+ break;
+ case V4L2_COLORSPACE_470_SYSTEM_M:
+ case V4L2_COLORSPACE_470_SYSTEM_BG:
+ case V4L2_COLORSPACE_SMPTE170M:
+ transfers = V4L2_XFER_FUNC_709;
+ matrix = V4L2_YCBCR_ENC_601;
+ full_range = V4L2_QUANTIZATION_LIM_RANGE;
+ break;
+ case V4L2_COLORSPACE_SMPTE240M:
+ transfers = V4L2_XFER_FUNC_SMPTE240M;
+ matrix = V4L2_YCBCR_ENC_SMPTE240M;
+ full_range = V4L2_QUANTIZATION_LIM_RANGE;
+ break;
+ case V4L2_COLORSPACE_BT2020:
+ transfers = V4L2_XFER_FUNC_709;
+ matrix = V4L2_YCBCR_ENC_BT2020;
+ full_range = V4L2_QUANTIZATION_LIM_RANGE;
+ break;
+ default:
+ transfers = V4L2_XFER_FUNC_709;
+ matrix = V4L2_YCBCR_ENC_709;
+ full_range = V4L2_QUANTIZATION_LIM_RANGE;
+ break;
+ }
+
+ if (ptransfers)
+ *ptransfers = transfers;
+ if (pmatrix)
+ *pmatrix = matrix;
+ if (pfull_range)
+ *pfull_range = full_range;
+
+
+ return 0;
+}
diff --git a/drivers/media/platform/amphion/vpu_helpers.c b/drivers/media/platform/amphion/vpu_helpers.c
new file mode 100644
index 000000000000..4b9fb82f24fd
--- /dev/null
+++ b/drivers/media/platform/amphion/vpu_helpers.c
@@ -0,0 +1,436 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020-2021 NXP
+ */
+
+#include <linux/init.h>
+#include <linux/interconnect.h>
+#include <linux/ioctl.h>
+#include <linux/list.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include "vpu.h"
+#include "vpu_core.h"
+#include "vpu_rpc.h"
+#include "vpu_helpers.h"
+
+int vpu_helper_find_in_array_u8(const u8 *array, u32 size, u32 x)
+{
+ int i;
+
+ for (i = 0; i < size; i++) {
+ if (array[i] == x)
+ return i;
+ }
+
+ return 0;
+}
+
+bool vpu_helper_check_type(struct vpu_inst *inst, u32 type)
+{
+ const struct vpu_format *pfmt;
+
+ for (pfmt = inst->formats; pfmt->pixfmt; pfmt++) {
+ if (!vpu_iface_check_format(inst, pfmt->pixfmt))
+ continue;
+ if (pfmt->type == type)
+ return true;
+ }
+
+ return false;
+}
+
+const struct vpu_format *vpu_helper_find_format(struct vpu_inst *inst, u32 type, u32 pixelfmt)
+{
+ const struct vpu_format *pfmt;
+
+ if (!inst || !inst->formats)
+ return NULL;
+
+ if (!vpu_iface_check_format(inst, pixelfmt))
+ return NULL;
+
+ for (pfmt = inst->formats; pfmt->pixfmt; pfmt++) {
+ if (pfmt->pixfmt == pixelfmt && (!type || type == pfmt->type))
+ return pfmt;
+ }
+
+ return NULL;
+}
+
+const struct vpu_format *vpu_helper_enum_format(struct vpu_inst *inst, u32 type, int index)
+{
+ const struct vpu_format *pfmt;
+ int i = 0;
+
+ if (!inst || !inst->formats)
+ return NULL;
+
+ for (pfmt = inst->formats; pfmt->pixfmt; pfmt++) {
+ if (!vpu_iface_check_format(inst, pfmt->pixfmt))
+ continue;
+
+ if (pfmt->type == type) {
+ if (index == i)
+ return pfmt;
+ i++;
+ }
+ }
+
+ return NULL;
+}
+
+u32 vpu_helper_valid_frame_width(struct vpu_inst *inst, u32 width)
+{
+ const struct vpu_core_resources *res;
+
+ if (!inst)
+ return width;
+
+ res = vpu_get_resource(inst);
+ if (!res)
+ return width;
+ if (res->max_width)
+ width = clamp(width, res->min_width, res->max_width);
+ if (res->step_width)
+ width = ALIGN(width, res->step_width);
+
+ return width;
+}
+
+u32 vpu_helper_valid_frame_height(struct vpu_inst *inst, u32 height)
+{
+ const struct vpu_core_resources *res;
+
+ if (!inst)
+ return height;
+
+ res = vpu_get_resource(inst);
+ if (!res)
+ return height;
+ if (res->max_height)
+ height = clamp(height, res->min_height, res->max_height);
+ if (res->step_height)
+ height = ALIGN(height, res->step_height);
+
+ return height;
+}
+
+static u32 get_nv12_plane_size(u32 width, u32 height, int plane_no,
+ u32 stride, u32 interlaced, u32 *pbl)
+{
+ u32 bytesperline;
+ u32 size = 0;
+
+ bytesperline = ALIGN(width, stride);
+ if (pbl)
+ bytesperline = max(bytesperline, *pbl);
+ height = ALIGN(height, 2);
+ if (plane_no == 0)
+ size = bytesperline * height;
+ else if (plane_no == 1)
+ size = bytesperline * height >> 1;
+ if (pbl)
+ *pbl = bytesperline;
+
+ return size;
+}
+
+static u32 get_tiled_8l128_plane_size(u32 fmt, u32 width, u32 height, int plane_no,
+ u32 stride, u32 interlaced, u32 *pbl)
+{
+ u32 ws = 3;
+ u32 hs = 7;
+ u32 bitdepth = 8;
+ u32 bytesperline;
+ u32 size = 0;
+
+ if (interlaced)
+ hs++;
+ if (fmt == V4L2_PIX_FMT_NV12MT_10BE_8L128)
+ bitdepth = 10;
+ bytesperline = DIV_ROUND_UP(width * bitdepth, BITS_PER_BYTE);
+ bytesperline = ALIGN(bytesperline, 1 << ws);
+ bytesperline = ALIGN(bytesperline, stride);
+ if (pbl)
+ bytesperline = max(bytesperline, *pbl);
+ height = ALIGN(height, 1 << hs);
+ if (plane_no == 0)
+ size = bytesperline * height;
+ else if (plane_no == 1)
+ size = (bytesperline * ALIGN(height, 1 << (hs + 1))) >> 1;
+ if (pbl)
+ *pbl = bytesperline;
+
+ return size;
+}
+
+static u32 get_default_plane_size(u32 width, u32 height, int plane_no,
+ u32 stride, u32 interlaced, u32 *pbl)
+{
+ u32 bytesperline;
+ u32 size = 0;
+
+ bytesperline = ALIGN(width, stride);
+ if (pbl)
+ bytesperline = max(bytesperline, *pbl);
+ if (plane_no == 0)
+ size = bytesperline * height;
+ if (pbl)
+ *pbl = bytesperline;
+
+ return size;
+}
+
+u32 vpu_helper_get_plane_size(u32 fmt, u32 w, u32 h, int plane_no,
+ u32 stride, u32 interlaced, u32 *pbl)
+{
+ switch (fmt) {
+ case V4L2_PIX_FMT_NV12M:
+ return get_nv12_plane_size(w, h, plane_no, stride, interlaced, pbl);
+ case V4L2_PIX_FMT_NV12MT_8L128:
+ case V4L2_PIX_FMT_NV12MT_10BE_8L128:
+ return get_tiled_8l128_plane_size(fmt, w, h, plane_no, stride, interlaced, pbl);
+ default:
+ return get_default_plane_size(w, h, plane_no, stride, interlaced, pbl);
+ }
+}
+
+u32 vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer,
+ u32 *rptr, u32 size, void *dst)
+{
+ u32 offset;
+ u32 start;
+ u32 end;
+ void *virt;
+
+ if (!stream_buffer || !rptr || !dst)
+ return -EINVAL;
+
+ if (!size)
+ return 0;
+
+ offset = *rptr;
+ start = stream_buffer->phys;
+ end = start + stream_buffer->length;
+ virt = stream_buffer->virt;
+
+ if (offset < start || offset > end)
+ return -EINVAL;
+
+ if (offset + size <= end) {
+ memcpy(dst, virt + (offset - start), size);
+ } else {
+ memcpy(dst, virt + (offset - start), end - offset);
+ memcpy(dst + end - offset, virt, size + offset - end);
+ }
+
+ *rptr = vpu_helper_step_walk(stream_buffer, offset, size);
+ return size;
+}
+
+u32 vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer,
+ u32 *wptr, u32 size, void *src)
+{
+ u32 offset;
+ u32 start;
+ u32 end;
+ void *virt;
+
+ if (!stream_buffer || !wptr || !src)
+ return -EINVAL;
+
+ if (!size)
+ return 0;
+
+ offset = *wptr;
+ start = stream_buffer->phys;
+ end = start + stream_buffer->length;
+ virt = stream_buffer->virt;
+ if (offset < start || offset > end)
+ return -EINVAL;
+
+ if (offset + size <= end) {
+ memcpy(virt + (offset - start), src, size);
+ } else {
+ memcpy(virt + (offset - start), src, end - offset);
+ memcpy(virt, src + end - offset, size + offset - end);
+ }
+
+ *wptr = vpu_helper_step_walk(stream_buffer, offset, size);
+
+ return size;
+}
+
+u32 vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer,
+ u32 *wptr, u8 val, u32 size)
+{
+ u32 offset;
+ u32 start;
+ u32 end;
+ void *virt;
+
+ if (!stream_buffer || !wptr)
+ return -EINVAL;
+
+ if (!size)
+ return 0;
+
+ offset = *wptr;
+ start = stream_buffer->phys;
+ end = start + stream_buffer->length;
+ virt = stream_buffer->virt;
+ if (offset < start || offset > end)
+ return -EINVAL;
+
+ if (offset + size <= end) {
+ memset(virt + (offset - start), val, size);
+ } else {
+ memset(virt + (offset - start), val, end - offset);
+ memset(virt, val, size + offset - end);
+ }
+
+ offset += size;
+ if (offset >= end)
+ offset -= stream_buffer->length;
+
+ *wptr = offset;
+
+ return size;
+}
+
+u32 vpu_helper_get_free_space(struct vpu_inst *inst)
+{
+ struct vpu_rpc_buffer_desc desc;
+
+ if (vpu_iface_get_stream_buffer_desc(inst, &desc))
+ return 0;
+
+ if (desc.rptr > desc.wptr)
+ return desc.rptr - desc.wptr;
+ else if (desc.rptr < desc.wptr)
+ return (desc.end - desc.start + desc.rptr - desc.wptr);
+ else
+ return desc.end - desc.start;
+}
+
+u32 vpu_helper_get_used_space(struct vpu_inst *inst)
+{
+ struct vpu_rpc_buffer_desc desc;
+
+ if (vpu_iface_get_stream_buffer_desc(inst, &desc))
+ return 0;
+
+ if (desc.wptr > desc.rptr)
+ return desc.wptr - desc.rptr;
+ else if (desc.wptr < desc.rptr)
+ return (desc.end - desc.start + desc.wptr - desc.rptr);
+ else
+ return 0;
+}
+
+int vpu_helper_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
+{
+ struct vpu_inst *inst = ctrl_to_inst(ctrl);
+
+ switch (ctrl->id) {
+ case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
+ ctrl->val = inst->min_buffer_cap;
+ break;
+ case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
+ ctrl->val = inst->min_buffer_out;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+u32 vpu_helper_calc_coprime(u32 *a, u32 *b)
+{
+ int m = *a;
+ int n = *b;
+
+ if (m == 0)
+ return n;
+ if (n == 0)
+ return m;
+
+ while (n != 0) {
+ int tmp = m % n;
+
+ m = n;
+ n = tmp;
+ }
+ *a = (*a) / m;
+ *b = (*b) / m;
+
+ return m;
+}
+
+#define READ_BYTE(buffer, pos) (*(u8 *)((buffer)->virt + ((pos) % buffer->length)))
+int vpu_helper_find_startcode(struct vpu_buffer *stream_buffer,
+ u32 pixelformat, u32 offset, u32 bytesused)
+{
+ u32 start_code;
+ int start_code_size;
+ u32 val = 0;
+ int i;
+ int ret = -EINVAL;
+
+ if (!stream_buffer || !stream_buffer->virt)
+ return -EINVAL;
+
+ switch (pixelformat) {
+ case V4L2_PIX_FMT_H264:
+ start_code_size = 4;
+ start_code = 0x00000001;
+ break;
+ default:
+ return 0;
+ }
+
+ for (i = 0; i < bytesused; i++) {
+ val = (val << 8) | READ_BYTE(stream_buffer, offset + i);
+ if (i < start_code_size - 1)
+ continue;
+ if (val == start_code) {
+ ret = i + 1 - start_code_size;
+ break;
+ }
+ }
+
+ return ret;
+}
+
+int vpu_find_dst_by_src(struct vpu_pair *pairs, u32 cnt, u32 src)
+{
+ u32 i;
+
+ if (!pairs || !cnt)
+ return -EINVAL;
+
+ for (i = 0; i < cnt; i++) {
+ if (pairs[i].src == src)
+ return pairs[i].dst;
+ }
+
+ return -EINVAL;
+}
+
+int vpu_find_src_by_dst(struct vpu_pair *pairs, u32 cnt, u32 dst)
+{
+ u32 i;
+
+ if (!pairs || !cnt)
+ return -EINVAL;
+
+ for (i = 0; i < cnt; i++) {
+ if (pairs[i].dst == dst)
+ return pairs[i].src;
+ }
+
+ return -EINVAL;
+}
diff --git a/drivers/media/platform/amphion/vpu_helpers.h b/drivers/media/platform/amphion/vpu_helpers.h
new file mode 100644
index 000000000000..65d4451ad8a1
--- /dev/null
+++ b/drivers/media/platform/amphion/vpu_helpers.h
@@ -0,0 +1,71 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2020-2021 NXP
+ */
+
+#ifndef _AMPHION_VPU_HELPERS_H
+#define _AMPHION_VPU_HELPERS_H
+
+struct vpu_pair {
+ u32 src;
+ u32 dst;
+};
+
+#define MAKE_TIMESTAMP(s, ns) (((s32)(s) * NSEC_PER_SEC) + (ns))
+#define VPU_INVALID_TIMESTAMP MAKE_TIMESTAMP(-1, 0)
+#define VPU_ARRAY_AT(array, i) (((i) < ARRAY_SIZE(array)) ? array[i] : 0)
+#define VPU_ARRAY_FIND(array, x) vpu_helper_find_in_array_u8(array, ARRAY_SIZE(array), x)
+
+int vpu_helper_find_in_array_u8(const u8 *array, u32 size, u32 x);
+bool vpu_helper_check_type(struct vpu_inst *inst, u32 type);
+const struct vpu_format *vpu_helper_find_format(struct vpu_inst *inst, u32 type, u32 pixelfmt);
+const struct vpu_format *vpu_helper_enum_format(struct vpu_inst *inst, u32 type, int index);
+u32 vpu_helper_valid_frame_width(struct vpu_inst *inst, u32 width);
+u32 vpu_helper_valid_frame_height(struct vpu_inst *inst, u32 height);
+u32 vpu_helper_get_plane_size(u32 fmt, u32 width, u32 height, int plane_no,
+ u32 stride, u32 interlaced, u32 *pbl);
+u32 vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer,
+ u32 *rptr, u32 size, void *dst);
+u32 vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer,
+ u32 *wptr, u32 size, void *src);
+u32 vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer,
+ u32 *wptr, u8 val, u32 size);
+u32 vpu_helper_get_free_space(struct vpu_inst *inst);
+u32 vpu_helper_get_used_space(struct vpu_inst *inst);
+int vpu_helper_g_volatile_ctrl(struct v4l2_ctrl *ctrl);
+u32 vpu_helper_calc_coprime(u32 *a, u32 *b);
+void vpu_helper_get_kmp_next(const u8 *pattern, int *next, int size);
+int vpu_helper_kmp_search(u8 *s, int s_len, const u8 *p, int p_len, int *next);
+int vpu_helper_kmp_search_in_stream_buffer(struct vpu_buffer *stream_buffer,
+ u32 offset, int bytesused,
+ const u8 *p, int p_len, int *next);
+int vpu_helper_find_startcode(struct vpu_buffer *stream_buffer,
+ u32 pixelformat, u32 offset, u32 bytesused);
+
+static inline u32 vpu_helper_step_walk(struct vpu_buffer *stream_buffer, u32 pos, u32 step)
+{
+ pos += step;
+ if (pos > stream_buffer->phys + stream_buffer->length)
+ pos -= stream_buffer->length;
+
+ return pos;
+}
+
+int vpu_color_check_primaries(u32 primaries);
+int vpu_color_check_transfers(u32 transfers);
+int vpu_color_check_matrix(u32 matrix);
+int vpu_color_check_full_range(u32 full_range);
+u32 vpu_color_cvrt_primaries_v2i(u32 primaries);
+u32 vpu_color_cvrt_primaries_i2v(u32 primaries);
+u32 vpu_color_cvrt_transfers_v2i(u32 transfers);
+u32 vpu_color_cvrt_transfers_i2v(u32 transfers);
+u32 vpu_color_cvrt_matrix_v2i(u32 matrix);
+u32 vpu_color_cvrt_matrix_i2v(u32 matrix);
+u32 vpu_color_cvrt_full_range_v2i(u32 full_range);
+u32 vpu_color_cvrt_full_range_i2v(u32 full_range);
+int vpu_color_get_default(u32 primaries,
+ u32 *ptransfers, u32 *pmatrix, u32 *pfull_range);
+
+int vpu_find_dst_by_src(struct vpu_pair *pairs, u32 cnt, u32 src);
+int vpu_find_src_by_dst(struct vpu_pair *pairs, u32 cnt, u32 dst);
+#endif
diff --git a/drivers/media/platform/amphion/vpu_v4l2.c b/drivers/media/platform/amphion/vpu_v4l2.c
new file mode 100644
index 000000000000..49477dd76c14
--- /dev/null
+++ b/drivers/media/platform/amphion/vpu_v4l2.c
@@ -0,0 +1,702 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020-2021 NXP
+ */
+
+#include <linux/init.h>
+#include <linux/interconnect.h>
+#include <linux/ioctl.h>
+#include <linux/list.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/pm_runtime.h>
+#include <linux/videodev2.h>
+#include <media/v4l2-device.h>
+#include <media/v4l2-event.h>
+#include <media/v4l2-mem2mem.h>
+#include <media/v4l2-ioctl.h>
+#include <media/videobuf2-v4l2.h>
+#include <media/videobuf2-dma-contig.h>
+#include <media/videobuf2-vmalloc.h>
+#include "vpu.h"
+#include "vpu_core.h"
+#include "vpu_v4l2.h"
+#include "vpu_msgs.h"
+#include "vpu_helpers.h"
+
+void vpu_inst_lock(struct vpu_inst *inst)
+{
+ mutex_lock(&inst->lock);
+}
+
+void vpu_inst_unlock(struct vpu_inst *inst)
+{
+ mutex_unlock(&inst->lock);
+}
+
+dma_addr_t vpu_get_vb_phy_addr(struct vb2_buffer *vb, u32 plane_no)
+{
+ if (plane_no >= vb->num_planes)
+ return 0;
+ return vb2_dma_contig_plane_dma_addr(vb, plane_no) +
+ vb->planes[plane_no].data_offset;
+}
+
+unsigned int vpu_get_vb_length(struct vb2_buffer *vb, u32 plane_no)
+{
+ if (plane_no >= vb->num_planes)
+ return 0;
+ return vb2_plane_size(vb, plane_no) - vb->planes[plane_no].data_offset;
+}
+
+void vpu_v4l2_set_error(struct vpu_inst *inst)
+{
+ struct vb2_queue *src_q = v4l2_m2m_get_src_vq(inst->fh.m2m_ctx);
+ struct vb2_queue *dst_q = v4l2_m2m_get_dst_vq(inst->fh.m2m_ctx);
+
+ if (src_q)
+ src_q->error = 1;
+ if (dst_q)
+ dst_q->error = 1;
+}
+
+int vpu_notify_eos(struct vpu_inst *inst)
+{
+ const struct v4l2_event ev = {
+ .id = 0,
+ .type = V4L2_EVENT_EOS
+ };
+
+ vpu_trace(inst->dev, "[%d]\n", inst->id);
+ v4l2_event_queue_fh(&inst->fh, &ev);
+
+ return 0;
+}
+
+int vpu_notify_source_change(struct vpu_inst *inst)
+{
+ const struct v4l2_event ev = {
+ .id = 0,
+ .type = V4L2_EVENT_SOURCE_CHANGE,
+ .u.src_change.changes = V4L2_EVENT_SRC_CH_RESOLUTION
+ };
+
+ vpu_trace(inst->dev, "[%d]\n", inst->id);
+ v4l2_event_queue_fh(&inst->fh, &ev);
+ return 0;
+}
+
+int vpu_set_last_buffer_dequeued(struct vpu_inst *inst)
+{
+ struct vb2_queue *q;
+
+ if (!inst || !inst->fh.m2m_ctx)
+ return -EINVAL;
+
+ q = v4l2_m2m_get_dst_vq(inst->fh.m2m_ctx);
+ if (!list_empty(&q->done_list))
+ return -EINVAL;
+
+ vpu_trace(inst->dev, "last buffer dequeued\n");
+ q->last_buffer_dequeued = true;
+ wake_up(&q->done_wq);
+ vpu_notify_eos(inst);
+ return 0;
+}
+
+const struct vpu_format *vpu_try_fmt_common(struct vpu_inst *inst,
+ struct v4l2_format *f)
+{
+ struct v4l2_pix_format_mplane *pixmp = &f->fmt.pix_mp;
+ u32 type = f->type;
+ u32 stride = 1;
+ u32 bytesperline;
+ u32 sizeimage;
+ const struct vpu_format *fmt;
+ const struct vpu_core_resources *res;
+ int i;
+
+ fmt = vpu_helper_find_format(inst, type, pixmp->pixelformat);
+ if (!fmt) {
+ fmt = vpu_helper_enum_format(inst, type, 0);
+ if (!fmt)
+ return NULL;
+ pixmp->pixelformat = fmt->pixfmt;
+ }
+
+ res = vpu_get_resource(inst);
+ if (res)
+ stride = res->stride;
+ if (pixmp->width)
+ pixmp->width = vpu_helper_valid_frame_width(inst, pixmp->width);
+ if (pixmp->height)
+ pixmp->height = vpu_helper_valid_frame_height(inst, pixmp->height);
+ pixmp->flags = fmt->flags;
+ pixmp->num_planes = fmt->num_planes;
+ if (pixmp->field == V4L2_FIELD_ANY)
+ pixmp->field = V4L2_FIELD_NONE;
+ for (i = 0; i < pixmp->num_planes; i++) {
+ bytesperline = max_t(s32, pixmp->plane_fmt[i].bytesperline, 0);
+ sizeimage = vpu_helper_get_plane_size(pixmp->pixelformat,
+ pixmp->width, pixmp->height, i, stride,
+ pixmp->field == V4L2_FIELD_INTERLACED ? 1 : 0,
+ &bytesperline);
+ sizeimage = max_t(s32, pixmp->plane_fmt[i].sizeimage, sizeimage);
+ pixmp->plane_fmt[i].bytesperline = bytesperline;
+ pixmp->plane_fmt[i].sizeimage = sizeimage;
+ }
+
+ return fmt;
+}
+
+static bool vpu_check_ready(struct vpu_inst *inst, u32 type)
+{
+ if (!inst)
+ return false;
+ if (inst->state == VPU_CODEC_STATE_DEINIT || inst->id < 0)
+ return false;
+ if (!inst->ops->check_ready)
+ return true;
+ return call_vop(inst, check_ready, type);
+}
+
+int vpu_process_output_buffer(struct vpu_inst *inst)
+{
+ struct v4l2_m2m_buffer *buf = NULL;
+ struct vpu_vb2_buffer *vpu_buf = NULL;
+
+ if (!inst)
+ return -EINVAL;
+
+ if (!vpu_check_ready(inst, inst->out_format.type))
+ return -EINVAL;
+
+ v4l2_m2m_for_each_src_buf(inst->fh.m2m_ctx, buf) {
+ vpu_buf = container_of(buf, struct vpu_vb2_buffer, m2m_buf);
+ if (vpu_buf->state == VPU_BUF_STATE_IDLE)
+ break;
+ vpu_buf = NULL;
+ }
+
+ if (!vpu_buf)
+ return -EINVAL;
+
+ dev_dbg(inst->dev, "[%d]frame id = %d / %d\n",
+ inst->id, vpu_buf->m2m_buf.vb.sequence, inst->sequence);
+ return call_vop(inst, process_output, &vpu_buf->m2m_buf.vb.vb2_buf);
+}
+
+int vpu_process_capture_buffer(struct vpu_inst *inst)
+{
+ struct v4l2_m2m_buffer *buf = NULL;
+ struct vpu_vb2_buffer *vpu_buf = NULL;
+
+ if (!inst)
+ return -EINVAL;
+
+ if (!vpu_check_ready(inst, inst->cap_format.type))
+ return -EINVAL;
+
+ v4l2_m2m_for_each_dst_buf(inst->fh.m2m_ctx, buf) {
+ vpu_buf = container_of(buf, struct vpu_vb2_buffer, m2m_buf);
+ if (vpu_buf->state == VPU_BUF_STATE_IDLE)
+ break;
+ vpu_buf = NULL;
+ }
+ if (!vpu_buf)
+ return -EINVAL;
+
+ return call_vop(inst, process_capture, &vpu_buf->m2m_buf.vb.vb2_buf);
+}
+
+struct vb2_v4l2_buffer *vpu_find_buf_by_sequence(struct vpu_inst *inst,
+ u32 type, u32 sequence)
+{
+ struct v4l2_m2m_buffer *buf = NULL;
+ struct vb2_v4l2_buffer *vbuf = NULL;
+
+ if (V4L2_TYPE_IS_OUTPUT(type)) {
+ v4l2_m2m_for_each_src_buf(inst->fh.m2m_ctx, buf) {
+ vbuf = &buf->vb;
+ if (vbuf->sequence == sequence)
+ break;
+ vbuf = NULL;
+ }
+ } else {
+ v4l2_m2m_for_each_dst_buf(inst->fh.m2m_ctx, buf) {
+ vbuf = &buf->vb;
+ if (vbuf->sequence == sequence)
+ break;
+ vbuf = NULL;
+ }
+ }
+
+ return vbuf;
+}
+
+struct vb2_v4l2_buffer *vpu_find_buf_by_idx(struct vpu_inst *inst,
+ u32 type, u32 idx)
+{
+ struct v4l2_m2m_buffer *buf = NULL;
+ struct vb2_v4l2_buffer *vbuf = NULL;
+
+ if (V4L2_TYPE_IS_OUTPUT(type)) {
+ v4l2_m2m_for_each_src_buf(inst->fh.m2m_ctx, buf) {
+ vbuf = &buf->vb;
+ if (vbuf->vb2_buf.index == idx)
+ break;
+ vbuf = NULL;
+ }
+ } else {
+ v4l2_m2m_for_each_dst_buf(inst->fh.m2m_ctx, buf) {
+ vbuf = &buf->vb;
+ if (vbuf->vb2_buf.index == idx)
+ break;
+ vbuf = NULL;
+ }
+ }
+
+ return vbuf;
+}
+
+int vpu_get_num_buffers(struct vpu_inst *inst, u32 type)
+{
+ struct vb2_queue *q;
+
+ if (!inst || !inst->fh.m2m_ctx)
+ return -EINVAL;
+ if (V4L2_TYPE_IS_OUTPUT(type))
+ q = v4l2_m2m_get_src_vq(inst->fh.m2m_ctx);
+ else
+ q = v4l2_m2m_get_dst_vq(inst->fh.m2m_ctx);
+
+ return q->num_buffers;
+}
+
+static void vpu_m2m_device_run(void *priv)
+{
+}
+
+static void vpu_m2m_job_abort(void *priv)
+{
+ struct vpu_inst *inst = priv;
+ struct v4l2_m2m_ctx *m2m_ctx = inst->fh.m2m_ctx;
+
+ v4l2_m2m_job_finish(m2m_ctx->m2m_dev, m2m_ctx);
+}
+
+static const struct v4l2_m2m_ops vpu_m2m_ops = {
+ .device_run = vpu_m2m_device_run,
+ .job_abort = vpu_m2m_job_abort
+};
+
+static int vpu_vb2_queue_setup(struct vb2_queue *vq,
+ unsigned int *buf_count,
+ unsigned int *plane_count,
+ unsigned int psize[],
+ struct device *allocators[])
+{
+ struct vpu_inst *inst = vb2_get_drv_priv(vq);
+ struct vpu_format *cur_fmt;
+ int i;
+
+ cur_fmt = vpu_get_format(inst, vq->type);
+
+ if (*plane_count) {
+ if (inst->state == VPU_CODEC_STATE_DYAMIC_RESOLUTION_CHANGE) {
+ for (i = 0; i < *plane_count; i++) {
+ if (!psize[i])
+ psize[i] = cur_fmt->sizeimage[i];
+ }
+ return 0;
+ }
+ if (*plane_count != cur_fmt->num_planes)
+ return -EINVAL;
+ for (i = 0; i < cur_fmt->num_planes; i++) {
+ if (psize[i] < cur_fmt->sizeimage[i])
+ return -EINVAL;
+ }
+ return 0;
+ }
+
+ *plane_count = cur_fmt->num_planes;
+ for (i = 0; i < cur_fmt->num_planes; i++)
+ psize[i] = cur_fmt->sizeimage[i];
+
+ return 0;
+}
+
+static int vpu_vb2_buf_init(struct vb2_buffer *vb)
+{
+ struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+ struct vpu_vb2_buffer *vpu_buf = to_vpu_vb2_buffer(vbuf);
+
+ vpu_buf->state = VPU_BUF_STATE_IDLE;
+
+ return 0;
+}
+
+static void vpu_vb2_buf_cleanup(struct vb2_buffer *vb)
+{
+}
+
+static int vpu_vb2_buf_prepare(struct vb2_buffer *vb)
+{
+ struct vpu_inst *inst = vb2_get_drv_priv(vb->vb2_queue);
+ struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+ struct vpu_vb2_buffer *vpu_buf = to_vpu_vb2_buffer(vbuf);
+ struct vpu_format *cur_fmt;
+ u32 i;
+
+ cur_fmt = vpu_get_format(inst, vb->type);
+ if (vb->num_planes != cur_fmt->num_planes)
+ return -EINVAL;
+ for (i = 0; i < cur_fmt->num_planes; i++) {
+ if (vpu_get_vb_length(vb, i) < cur_fmt->sizeimage[i]) {
+ dev_err(inst->dev, "[%d] %s buf[%d] is invalid\n",
+ inst->id,
+ vpu_type_name(vb->type),
+ vb->index);
+ vpu_buf->state = VPU_BUF_STATE_ERROR;
+ }
+ }
+
+ return 0;
+}
+
+static void vpu_vb2_buf_finish(struct vb2_buffer *vb)
+{
+ struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+ struct vpu_inst *inst = vb2_get_drv_priv(vb->vb2_queue);
+ struct vb2_queue *q = vb->vb2_queue;
+
+ if (vbuf->flags & V4L2_BUF_FLAG_LAST)
+ vpu_notify_eos(inst);
+
+ if (list_empty(&q->done_list))
+ call_vop(inst, on_queue_empty, q->type);
+}
+
+void vpu_vb2_buffers_return(struct vpu_inst *inst,
+ unsigned int type, enum vb2_buffer_state state)
+{
+ struct vb2_v4l2_buffer *buf;
+
+ if (!inst || !inst->fh.m2m_ctx)
+ return;
+
+ if (V4L2_TYPE_IS_OUTPUT(type)) {
+ while ((buf = v4l2_m2m_src_buf_remove(inst->fh.m2m_ctx)))
+ v4l2_m2m_buf_done(buf, state);
+ } else {
+ while ((buf = v4l2_m2m_dst_buf_remove(inst->fh.m2m_ctx)))
+ v4l2_m2m_buf_done(buf, state);
+ }
+}
+
+static int vpu_vb2_start_streaming(struct vb2_queue *q, unsigned int count)
+{
+ struct vpu_inst *inst = vb2_get_drv_priv(q);
+ struct vpu_format *fmt = vpu_get_format(inst, q->type);
+ int ret;
+
+ vpu_inst_unlock(inst);
+ ret = vpu_inst_register(inst);
+ vpu_inst_lock(inst);
+ if (ret) {
+ vpu_vb2_buffers_return(inst, q->type, VB2_BUF_STATE_QUEUED);
+ return ret;
+ }
+
+ vpu_trace(inst->dev, "[%d] %s %c%c%c%c %dx%d %u(%u) %u(%u) %u(%u) %d\n",
+ inst->id, vpu_type_name(q->type),
+ fmt->pixfmt,
+ fmt->pixfmt >> 8,
+ fmt->pixfmt >> 16,
+ fmt->pixfmt >> 24,
+ fmt->width, fmt->height,
+ fmt->sizeimage[0], fmt->bytesperline[0],
+ fmt->sizeimage[1], fmt->bytesperline[1],
+ fmt->sizeimage[2], fmt->bytesperline[2],
+ q->num_buffers);
+ call_vop(inst, start, q->type);
+ vb2_clear_last_buffer_dequeued(q);
+
+ return 0;
+}
+
+static void vpu_vb2_stop_streaming(struct vb2_queue *q)
+{
+ struct vpu_inst *inst = vb2_get_drv_priv(q);
+
+ vpu_trace(inst->dev, "[%d] %s\n", inst->id, vpu_type_name(q->type));
+
+ call_vop(inst, stop, q->type);
+ vpu_vb2_buffers_return(inst, q->type, VB2_BUF_STATE_ERROR);
+ if (V4L2_TYPE_IS_OUTPUT(q->type))
+ inst->sequence = 0;
+}
+
+static void vpu_vb2_buf_queue(struct vb2_buffer *vb)
+{
+ struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+ struct vpu_inst *inst = vb2_get_drv_priv(vb->vb2_queue);
+
+ if (V4L2_TYPE_IS_OUTPUT(vb->type)) {
+ vbuf->sequence = inst->sequence++;
+ if ((s64)vb->timestamp < 0)
+ vb->timestamp = VPU_INVALID_TIMESTAMP;
+ }
+
+ v4l2_m2m_buf_queue(inst->fh.m2m_ctx, vbuf);
+ vpu_process_output_buffer(inst);
+ vpu_process_capture_buffer(inst);
+}
+
+static struct vb2_ops vpu_vb2_ops = {
+ .queue_setup = vpu_vb2_queue_setup,
+ .buf_init = vpu_vb2_buf_init,
+ .buf_cleanup = vpu_vb2_buf_cleanup,
+ .buf_prepare = vpu_vb2_buf_prepare,
+ .buf_finish = vpu_vb2_buf_finish,
+ .start_streaming = vpu_vb2_start_streaming,
+ .stop_streaming = vpu_vb2_stop_streaming,
+ .buf_queue = vpu_vb2_buf_queue,
+ .wait_prepare = vb2_ops_wait_prepare,
+ .wait_finish = vb2_ops_wait_finish,
+};
+
+static int vpu_m2m_queue_init(void *priv, struct vb2_queue *src_vq,
+ struct vb2_queue *dst_vq)
+{
+ struct vpu_inst *inst = priv;
+ int ret;
+
+ inst->out_format.type = src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+ src_vq->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
+ src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
+ src_vq->ops = &vpu_vb2_ops;
+ src_vq->mem_ops = &vb2_dma_contig_memops;
+ if (inst->type == VPU_CORE_TYPE_DEC && inst->use_stream_buffer)
+ src_vq->mem_ops = &vb2_vmalloc_memops;
+ src_vq->drv_priv = inst;
+ src_vq->buf_struct_size = sizeof(struct vpu_vb2_buffer);
+ src_vq->allow_zero_bytesused = 1;
+ src_vq->min_buffers_needed = 1;
+ src_vq->dev = inst->vpu->dev;
+ src_vq->lock = &inst->lock;
+ ret = vb2_queue_init(src_vq);
+ if (ret)
+ return ret;
+
+ inst->cap_format.type = dst_vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ dst_vq->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
+ dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
+ dst_vq->ops = &vpu_vb2_ops;
+ dst_vq->mem_ops = &vb2_dma_contig_memops;
+ if (inst->type == VPU_CORE_TYPE_ENC && inst->use_stream_buffer)
+ dst_vq->mem_ops = &vb2_vmalloc_memops;
+ dst_vq->drv_priv = inst;
+ dst_vq->buf_struct_size = sizeof(struct vpu_vb2_buffer);
+ dst_vq->allow_zero_bytesused = 1;
+ dst_vq->min_buffers_needed = 1;
+ dst_vq->dev = inst->vpu->dev;
+ dst_vq->lock = &inst->lock;
+ ret = vb2_queue_init(dst_vq);
+ if (ret) {
+ vb2_queue_release(src_vq);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int vpu_v4l2_release(struct vpu_inst *inst)
+{
+ vpu_trace(inst->vpu->dev, "%p\n", inst);
+
+ vpu_release_core(inst->core);
+ put_device(inst->dev);
+
+ if (inst->workqueue) {
+ cancel_work_sync(&inst->msg_work);
+ destroy_workqueue(inst->workqueue);
+ inst->workqueue = NULL;
+ }
+ if (inst->fh.m2m_ctx) {
+ v4l2_m2m_ctx_release(inst->fh.m2m_ctx);
+ inst->fh.m2m_ctx = NULL;
+ }
+
+ v4l2_ctrl_handler_free(&inst->ctrl_handler);
+ mutex_destroy(&inst->lock);
+ v4l2_fh_del(&inst->fh);
+ v4l2_fh_exit(&inst->fh);
+
+ call_vop(inst, cleanup);
+
+ return 0;
+}
+
+int vpu_v4l2_open(struct file *file, struct vpu_inst *inst)
+{
+ struct vpu_dev *vpu = video_drvdata(file);
+ struct vpu_func *func;
+ int ret = 0;
+
+ WARN_ON(!file || !inst || !inst->ops);
+
+ if (inst->type == VPU_CORE_TYPE_ENC)
+ func = &vpu->encoder;
+ else
+ func = &vpu->decoder;
+
+ atomic_set(&inst->ref_count, 0);
+ vpu_inst_get(inst);
+ inst->vpu = vpu;
+ inst->core = vpu_request_core(vpu, inst->type);
+ if (inst->core)
+ inst->dev = get_device(inst->core->dev);
+ mutex_init(&inst->lock);
+ INIT_LIST_HEAD(&inst->cmd_q);
+ inst->id = VPU_INST_NULL_ID;
+ inst->release = vpu_v4l2_release;
+ inst->pid = current->pid;
+ inst->tgid = current->tgid;
+ inst->min_buffer_cap = 2;
+ inst->min_buffer_out = 2;
+ v4l2_fh_init(&inst->fh, func->vfd);
+ v4l2_fh_add(&inst->fh);
+
+ ret = call_vop(inst, ctrl_init);
+ if (ret)
+ goto error;
+
+ inst->fh.m2m_ctx = v4l2_m2m_ctx_init(func->m2m_dev,
+ inst, vpu_m2m_queue_init);
+ if (IS_ERR(inst->fh.m2m_ctx)) {
+ dev_err(vpu->dev, "v4l2_m2m_ctx_init fail\n");
+ ret = PTR_ERR(func->m2m_dev);
+ goto error;
+ }
+
+ inst->fh.ctrl_handler = &inst->ctrl_handler;
+ file->private_data = &inst->fh;
+ inst->state = VPU_CODEC_STATE_DEINIT;
+ inst->workqueue = alloc_workqueue("vpu_inst", WQ_UNBOUND | WQ_MEM_RECLAIM, 1);
+ if (inst->workqueue) {
+ INIT_WORK(&inst->msg_work, vpu_inst_run_work);
+ ret = kfifo_init(&inst->msg_fifo,
+ inst->msg_buffer,
+ roundup_pow_of_two(sizeof(inst->msg_buffer)));
+ if (ret) {
+ destroy_workqueue(inst->workqueue);
+ inst->workqueue = NULL;
+ }
+ }
+ vpu_trace(vpu->dev, "tgid = %d, pid = %d, type = %s, inst = %p\n",
+ inst->tgid, inst->pid, vpu_core_type_desc(inst->type), inst);
+
+ return 0;
+error:
+ vpu_inst_put(inst);
+ return ret;
+}
+
+int vpu_v4l2_close(struct file *file)
+{
+ struct vpu_dev *vpu = video_drvdata(file);
+ struct vpu_inst *inst = to_inst(file);
+ struct vb2_queue *src_q;
+ struct vb2_queue *dst_q;
+
+ vpu_trace(vpu->dev, "tgid = %d, pid = %d, inst = %p\n",
+ inst->tgid, inst->pid, inst);
+ src_q = v4l2_m2m_get_src_vq(inst->fh.m2m_ctx);
+ dst_q = v4l2_m2m_get_dst_vq(inst->fh.m2m_ctx);
+ vpu_inst_lock(inst);
+ if (vb2_is_streaming(src_q))
+ v4l2_m2m_streamoff(file, inst->fh.m2m_ctx, src_q->type);
+ if (vb2_is_streaming(dst_q))
+ v4l2_m2m_streamoff(file, inst->fh.m2m_ctx, dst_q->type);
+ vpu_inst_unlock(inst);
+
+ call_vop(inst, release);
+ vpu_inst_unregister(inst);
+ vpu_inst_put(inst);
+
+ return 0;
+}
+
+int vpu_add_func(struct vpu_dev *vpu, struct vpu_func *func)
+{
+ struct video_device *vfd;
+ int ret;
+
+ if (!vpu || !func)
+ return -EINVAL;
+
+ if (func->vfd)
+ return 0;
+
+ vfd = video_device_alloc();
+ if (!vfd) {
+ dev_err(vpu->dev, "alloc vpu decoder video device fail\n");
+ return -ENOMEM;
+ }
+ vfd->release = video_device_release;
+ vfd->vfl_dir = VFL_DIR_M2M;
+ vfd->v4l2_dev = &vpu->v4l2_dev;
+ vfd->device_caps = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_STREAMING;
+ if (func->type == VPU_CORE_TYPE_ENC) {
+ strscpy(vfd->name, "amphion-vpu-encoder", sizeof(vfd->name));
+ vfd->fops = venc_get_fops();
+ vfd->ioctl_ops = venc_get_ioctl_ops();
+ } else {
+ strscpy(vfd->name, "amphion-vpu-decoder", sizeof(vfd->name));
+ vfd->fops = vdec_get_fops();
+ vfd->ioctl_ops = vdec_get_ioctl_ops();
+ }
+
+ ret = video_register_device(vfd, VFL_TYPE_VIDEO, -1);
+ if (ret) {
+ video_device_release(vfd);
+ return ret;
+ }
+ video_set_drvdata(vfd, vpu);
+ func->vfd = vfd;
+ func->m2m_dev = v4l2_m2m_init(&vpu_m2m_ops);
+ if (IS_ERR(func->m2m_dev)) {
+ dev_err(vpu->dev, "v4l2_m2m_init fail\n");
+ video_unregister_device(func->vfd);
+ func->vfd = NULL;
+ return PTR_ERR(func->m2m_dev);
+ }
+
+ ret = v4l2_m2m_register_media_controller(func->m2m_dev, func->vfd, func->function);
+ if (ret) {
+ v4l2_m2m_release(func->m2m_dev);
+ func->m2m_dev = NULL;
+ video_unregister_device(func->vfd);
+ func->vfd = NULL;
+ return ret;
+ }
+
+ return 0;
+}
+
+void vpu_remove_func(struct vpu_func *func)
+{
+ if (!func)
+ return;
+
+ if (func->m2m_dev) {
+ v4l2_m2m_unregister_media_controller(func->m2m_dev);
+ v4l2_m2m_release(func->m2m_dev);
+ func->m2m_dev = NULL;
+ }
+ if (func->vfd) {
+ video_unregister_device(func->vfd);
+ func->vfd = NULL;
+ }
+}
diff --git a/drivers/media/platform/amphion/vpu_v4l2.h b/drivers/media/platform/amphion/vpu_v4l2.h
new file mode 100644
index 000000000000..c9ed7aec637a
--- /dev/null
+++ b/drivers/media/platform/amphion/vpu_v4l2.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2020-2021 NXP
+ */
+
+#ifndef _AMPHION_VPU_V4L2_H
+#define _AMPHION_VPU_V4L2_H
+
+#include <linux/videodev2.h>
+
+void vpu_inst_lock(struct vpu_inst *inst);
+void vpu_inst_unlock(struct vpu_inst *inst);
+
+int vpu_v4l2_open(struct file *file, struct vpu_inst *inst);
+int vpu_v4l2_close(struct file *file);
+
+const struct vpu_format *vpu_try_fmt_common(struct vpu_inst *inst, struct v4l2_format *f);
+int vpu_process_output_buffer(struct vpu_inst *inst);
+int vpu_process_capture_buffer(struct vpu_inst *inst);
+struct vb2_v4l2_buffer *vpu_find_buf_by_sequence(struct vpu_inst *inst, u32 type, u32 sequence);
+struct vb2_v4l2_buffer *vpu_find_buf_by_idx(struct vpu_inst *inst, u32 type, u32 idx);
+void vpu_v4l2_set_error(struct vpu_inst *inst);
+int vpu_notify_eos(struct vpu_inst *inst);
+int vpu_notify_source_change(struct vpu_inst *inst);
+int vpu_set_last_buffer_dequeued(struct vpu_inst *inst);
+void vpu_vb2_buffers_return(struct vpu_inst *inst,
+ unsigned int type, enum vb2_buffer_state state);
+int vpu_get_num_buffers(struct vpu_inst *inst, u32 type);
+
+dma_addr_t vpu_get_vb_phy_addr(struct vb2_buffer *vb, u32 plane_no);
+unsigned int vpu_get_vb_length(struct vb2_buffer *vb, u32 plane_no);
+static inline struct vpu_format *vpu_get_format(struct vpu_inst *inst, u32 type)
+{
+ if (V4L2_TYPE_IS_OUTPUT(type))
+ return &inst->out_format;
+ else
+ return &inst->cap_format;
+}
+
+static inline char *vpu_type_name(u32 type)
+{
+ return V4L2_TYPE_IS_OUTPUT(type) ? "output" : "capture";
+}
+
+static inline int vpu_vb_is_codecconfig(struct vb2_v4l2_buffer *vbuf)
+{
+#ifdef V4L2_BUF_FLAG_CODECCONFIG
+ return (vbuf->flags & V4L2_BUF_FLAG_CODECCONFIG) ? 1 : 0;
+#else
+ return 0;
+#endif
+}
+
+#endif
--
2.33.0

2021-11-09 18:22:57

by Ming Qian

[permalink] [raw]
Subject: [PATCH v12 11/13] ARM64: dts: freescale: imx8q: add imx vpu codec entries

Add the Video Processing Unit node for IMX8Q SoC.

Signed-off-by: Ming Qian <[email protected]>
Signed-off-by: Shijie Qin <[email protected]>
Signed-off-by: Zhou Peng <[email protected]>
---
.../arm64/boot/dts/freescale/imx8-ss-vpu.dtsi | 72 +++++++++++++++++++
arch/arm64/boot/dts/freescale/imx8qxp-mek.dts | 17 +++++
arch/arm64/boot/dts/freescale/imx8qxp.dtsi | 24 +++++++
3 files changed, 113 insertions(+)
create mode 100644 arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi

diff --git a/arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi b/arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi
new file mode 100644
index 000000000000..f2dde6d14ca3
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2021 NXP
+ * Dong Aisheng <[email protected]>
+ */
+
+vpu: vpu@2c000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x2c000000 0x0 0x2c000000 0x2000000>;
+ reg = <0 0x2c000000 0 0x1000000>;
+ power-domains = <&pd IMX_SC_R_VPU>;
+ status = "disabled";
+
+ mu_m0: mailbox@2d000000 {
+ compatible = "fsl,imx6sx-mu";
+ reg = <0x2d000000 0x20000>;
+ interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>;
+ #mbox-cells = <2>;
+ power-domains = <&pd IMX_SC_R_VPU_MU_0>;
+ status = "okay";
+ };
+
+ mu1_m0: mailbox@2d020000 {
+ compatible = "fsl,imx6sx-mu";
+ reg = <0x2d020000 0x20000>;
+ interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>;
+ #mbox-cells = <2>;
+ power-domains = <&pd IMX_SC_R_VPU_MU_1>;
+ status = "okay";
+ };
+
+ mu2_m0: mailbox@2d040000 {
+ compatible = "fsl,imx6sx-mu";
+ reg = <0x2d040000 0x20000>;
+ interrupts = <GIC_SPI 474 IRQ_TYPE_LEVEL_HIGH>;
+ #mbox-cells = <2>;
+ power-domains = <&pd IMX_SC_R_VPU_MU_2>;
+ status = "disabled";
+ };
+
+ vpu_core0: vpu_core@2d080000 {
+ reg = <0x2d080000 0x10000>;
+ compatible = "nxp,imx8q-vpu-decoder";
+ power-domains = <&pd IMX_SC_R_VPU_DEC_0>;
+ mbox-names = "tx0", "tx1", "rx";
+ mboxes = <&mu_m0 0 0>,
+ <&mu_m0 0 1>,
+ <&mu_m0 1 0>;
+ status = "disabled";
+ };
+ vpu_core1: vpu_core@2d090000 {
+ reg = <0x2d090000 0x10000>;
+ compatible = "nxp,imx8q-vpu-encoder";
+ power-domains = <&pd IMX_SC_R_VPU_ENC_0>;
+ mbox-names = "tx0", "tx1", "rx";
+ mboxes = <&mu1_m0 0 0>,
+ <&mu1_m0 0 1>,
+ <&mu1_m0 1 0>;
+ status = "disabled";
+ };
+ vpu_core2: vpu_core@2d0a0000 {
+ reg = <0x2d0a0000 0x10000>;
+ compatible = "nxp,imx8q-vpu-encoder";
+ power-domains = <&pd IMX_SC_R_VPU_ENC_1>;
+ mbox-names = "tx0", "tx1", "rx";
+ mboxes = <&mu2_m0 0 0>,
+ <&mu2_m0 0 1>,
+ <&mu2_m0 1 0>;
+ status = "disabled";
+ };
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts b/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts
index 863232a47004..05495b60beb8 100644
--- a/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts
+++ b/arch/arm64/boot/dts/freescale/imx8qxp-mek.dts
@@ -196,6 +196,23 @@ &usdhc2 {
status = "okay";
};

+&vpu {
+ compatible = "nxp,imx8qxp-vpu";
+ status = "okay";
+};
+
+&vpu_core0 {
+ reg = <0x2d040000 0x10000>;
+ memory-region = <&decoder_boot>, <&decoder_rpc>;
+ status = "okay";
+};
+
+&vpu_core1 {
+ reg = <0x2d050000 0x10000>;
+ memory-region = <&encoder_boot>, <&encoder_rpc>;
+ status = "okay";
+};
+
&iomuxc {
pinctrl_fec1: fec1grp {
fsl,pins = <
diff --git a/arch/arm64/boot/dts/freescale/imx8qxp.dtsi b/arch/arm64/boot/dts/freescale/imx8qxp.dtsi
index 617618edf77e..6b6d3c71632b 100644
--- a/arch/arm64/boot/dts/freescale/imx8qxp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8qxp.dtsi
@@ -46,6 +46,9 @@ aliases {
serial1 = &lpuart1;
serial2 = &lpuart2;
serial3 = &lpuart3;
+ vpu_core0 = &vpu_core0;
+ vpu_core1 = &vpu_core1;
+ vpu_core2 = &vpu_core2;
};

cpus {
@@ -134,10 +137,30 @@ reserved-memory {
#size-cells = <2>;
ranges;

+ decoder_boot: decoder-boot@84000000 {
+ reg = <0 0x84000000 0 0x2000000>;
+ no-map;
+ };
+
+ encoder_boot: encoder-boot@86000000 {
+ reg = <0 0x86000000 0 0x200000>;
+ no-map;
+ };
+
+ decoder_rpc: decoder-rpc@0x92000000 {
+ reg = <0 0x92000000 0 0x100000>;
+ no-map;
+ };
+
dsp_reserved: dsp@92400000 {
reg = <0 0x92400000 0 0x2000000>;
no-map;
};
+
+ encoder_rpc: encoder-rpc@0x94400000 {
+ reg = <0 0x94400000 0 0x700000>;
+ no-map;
+ };
};

pmu {
@@ -259,6 +282,7 @@ map0 {

/* sorted in register address */
#include "imx8-ss-img.dtsi"
+ #include "imx8-ss-vpu.dtsi"
#include "imx8-ss-adma.dtsi"
#include "imx8-ss-conn.dtsi"
#include "imx8-ss-ddr.dtsi"
--
2.33.0

2021-11-10 00:02:55

by Nicolas Dufresne

[permalink] [raw]
Subject: Re: [PATCH v12 00/13] amphion video decoder/encoder driver

Le mardi 09 novembre 2021 à 17:08 +0800, Ming Qian a écrit :
> Hi all,
>
> This patch series adds support for
> the amphion video encoder and decoder
> via the VPU block present in imx8q platforms.
> Currently, support for IMX8QXP and IMX8QM is included.
>
> It features decoding for the following formats:
> - H.264
> - HEVC
> - MPEG4
> - MPEG2
> - VC1
> - VP8
>
> It features encoding for the following formats:
> - H.264
>
> The driver creates a separate device node for the encoder and decoder.
>
> This driver is dependent on vpu firmwares.
> The firmwares have been submitted to linux-firmware.
> The firmware patch is since commit
> b563148fd28623f6b6ce68bb06c3dd3bd138b058:
> linux-firmware: Update firmware file for Intel Bluetooth 9462
> (Fri Oct 8 16:30:14 2021 +0530)
>
> and it's available in the git repository at:
> https://github.com/mingqian-0/linux-firmware.git
>
> for you to fetch changes up to bb3eee4f99589d4910dee4c053a3a685546b5dbb:
> amphion: add VPU firmwares for NXP i.MX8Q SoCs
> (Tue Oct 12 15:09:57 2021 +0800)
>
> encoder is tested with gstreamer
> decoder is tested with gstreamer, but the following patches are required:
> https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1252
> https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1098
> https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1099

Just wanted to acknowledge that all these changes are valid and will make their
way upstream when the development window re-open.

p.s. still hope to give this another round of testing soon, sorry for the delays
lately.

>
>
> Changelog:
>
> v12
> - support reset decoder when starting a new stream
> - don't append an empty last buffer, set last_buffer_dequeued
> - improve the resolution change flow
> - return all buffers if start_streaming fail
> - fill encoder capture buffer's filed to none
> - fix a bug in calculating bytesperline
>
> v11
> - fix dt_binding_check error after upgrade dtschema
> - remove "default y"
> - add media device
>
> v10
> - refine vpu log, remove custom logging infrastructure
> - support non contiguous planes format nv12m instead of nv12
> - rename V4L2_PIX_FMT_NV12_8L128 to V4L2_PIX_FMT_NV12MT_8L128
> - rename V4L2_PIX_FMT_NV12_10BE_8L128 to V4L2_PIX_FMT_NV12MT_10BE_8L128
> - merge two module into one
> - fix kernel panic in rmmod
>
> v9
> - drop V4L2_BUF_FLAG_CODECCONFIG
> - drop V4L2_EVENT_CODEC_ERROR
> - drop V4L2_EVENT_SKIP - use the v4l2_buffer.sequence counter
> - fix some build warnings with W=1 reported by kernel test robot
>
> v8
> - move driver from driver/media/platform/imx/vpu-8q to
> driver/media/platform/amphion
> - rename driver name to amphion
> - remove imx_vpu.h
> - move the definition of V4L2_EVENT_CODEC_ERROR to videodev2.h
> - move the definition of V4L2_EVENT_SKIP to videodev2.h
>
> v7
> - fix build warnings with W=1 reported by kernel test robot
>
> v6:
> - rename V4L2_PIX_FMT_NT8 to V4L2_PIX_FMT_NV12_8L128
> - rename V4L2_PIX_FMT_NT10 to V4L2_PIX_FMT_NV12_10BE_8L128
>
> v5:
> - move some definition from imx_vph.h to videodev2.h
> - remove some unnecessary content
> - add some documentation descriptions
> - pass the lateset v4l2-compliance test
>
> v4:
> - redefine the memory-region in devicetree bindings documentation
> - use v4l2's mechanism to implement synchronize queuing ioctl
> - remove the unnecessary mutex ioctl_sync
> - don't notify source change event if the parameters are same as previously established
> - add flag V4L2_FMT_FLAG_DYN_RESOLUTION to decoder's capture format
>
> v3:
> - don't make vpu device node a simple-bus
> - trigger probing vpu core in the driver
> - remove unnecessary vpu core index property
>
> v2:
> - fix dt bindings build error
> - split driver patch into several parts to avoid exceeding bytes limit
>
> Compliance
> ==========
> # v4l2-compliance -d /dev/video0
> v4l2-compliance 1.21.0-4859, 64 bits, 64-bit time_t
> v4l2-compliance SHA: 493af03f3c57 2021-10-08 17:23:11
>
> Compliance test for amphion-vpu device /dev/video0:
>
> Driver Info:
> Driver name : amphion-vpu
> Card type : amphion vpu decoder
> Bus info : platform: amphion-vpu
> Driver version : 5.15.0
> Capabilities : 0x84204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Detected Stateful Decoder
> Media Driver Info:
> Driver name : amphion-vpu
> Model : amphion-vpu
> Serial :
> Bus info : platform: amphion-vpu
> Media version : 5.15.0
> Hardware revision: 0x00000000 (0)
> Driver version : 5.15.0
> Interface Info:
> ID : 0x0300000c
> Type : V4L Video
> Entity Info:
> ID : 0x00000001 (1)
> Name : amphion-vpu-decoder-source
> Function : V4L2 I/O
> Pad 0x01000002 : 0: Source
> Link 0x02000008: to remote pad 0x1000004 of entity 'amphion-vpu-decoder-proc' (Video Decoder): Data, Enabled, Immutable
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video0 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> test VIDIOC_QUERYCTRL: OK
> test VIDIOC_G/S_CTRL: OK
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 3 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for amphion-vpu device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0
>
> # v4l2-compliance -d /dev/video1
> v4l2-compliance 1.21.0-4859, 64 bits, 64-bit time_t
> v4l2-compliance SHA: 493af03f3c57 2021-10-08 17:23:11
>
> Compliance test for amphion-vpu device /dev/video1:
>
> Driver Info:
> Driver name : amphion-vpu
> Card type : amphion vpu encoder
> Bus info : platform: amphion-vpu
> Driver version : 5.15.0
> Capabilities : 0x84204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Detected Stateful Encoder
> Media Driver Info:
> Driver name : amphion-vpu
> Model : amphion-vpu
> Serial :
> Bus info : platform: amphion-vpu
> Media version : 5.15.0
> Hardware revision: 0x00000000 (0)
> Driver version : 5.15.0
> Interface Info:
> ID : 0x0300001a
> Type : V4L Video
> Entity Info:
> ID : 0x0000000f (15)
> Name : amphion-vpu-encoder-source
> Function : V4L2 I/O
> Pad 0x01000010 : 0: Source
> Link 0x02000016: to remote pad 0x1000012 of entity 'amphion-vpu-encoder-proc' (Video Encoder): Data, Enabled, Immutable
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video1 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> test VIDIOC_QUERYCTRL: OK
> test VIDIOC_G/S_CTRL: OK
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 20 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK
> test Composing: OK (Not Supported)
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for amphion-vpu device /dev/video1: 46, Succeeded: 46, Failed: 0, Warnings: 0
>
> # v4l2-compliance -d /dev/media0
> v4l2-compliance 1.21.0-4859, 64 bits, 64-bit time_t
> v4l2-compliance SHA: 493af03f3c57 2021-10-08 17:23:11
>
> Compliance test for amphion-vpu device /dev/media0:
>
> Media Driver Info:
> Driver name : amphion-vpu
> Model : amphion-vpu
> Serial :
> Bus info : platform: amphion-vpu
> Media version : 5.15.0
> Hardware revision: 0x00000000 (0)
> Driver version : 5.15.0
>
> Required ioctls:
> test MEDIA_IOC_DEVICE_INFO: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/media0 open: OK
> test MEDIA_IOC_DEVICE_INFO: OK
> test for unlimited opens: OK
>
> Media Controller ioctls:
> test MEDIA_IOC_G_TOPOLOGY: OK
> Entities: 6 Interfaces: 2 Pads: 8 Links: 8
> test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK
> test MEDIA_IOC_SETUP_LINK: OK
>
> Total for amphion-vpu device /dev/media0: 8, Succeeded: 8, Failed: 0, Warnings: 0
>
> Ming Qian (13):
> dt-bindings: media: amphion: add amphion video codec bindings
> media:Add nv12mt_8l128 and nv12mt_10be_8l128 video format.
> media: amphion: add amphion vpu device driver
> media: amphion: add vpu core driver
> media: amphion: implement vpu core communication based on mailbox
> media: amphion: add vpu v4l2 m2m support
> media: amphion: add v4l2 m2m vpu encoder stateful driver
> media: amphion: add v4l2 m2m vpu decoder stateful driver
> media: amphion: implement windsor encoder rpc interface
> media: amphion: implement malone decoder rpc interface
> ARM64: dts: freescale: imx8q: add imx vpu codec entries
> firmware: imx: scu-pd: imx8q: add vpu mu resources
> MAINTAINERS: add AMPHION VPU CODEC V4L2 driver entry
>
> .../bindings/media/amphion,vpu.yaml | 180 ++
> .../media/v4l/pixfmt-yuv-planar.rst | 15 +
> MAINTAINERS | 9 +
> .../arm64/boot/dts/freescale/imx8-ss-vpu.dtsi | 72 +
> arch/arm64/boot/dts/freescale/imx8qxp-mek.dts | 17 +
> arch/arm64/boot/dts/freescale/imx8qxp.dtsi | 24 +
> arch/arm64/configs/defconfig | 1 +
> drivers/firmware/imx/scu-pd.c | 4 +
> drivers/media/platform/Kconfig | 19 +
> drivers/media/platform/Makefile | 2 +
> drivers/media/platform/amphion/Makefile | 20 +
> drivers/media/platform/amphion/vdec.c | 1680 +++++++++++++++++
> drivers/media/platform/amphion/venc.c | 1351 +++++++++++++
> drivers/media/platform/amphion/vpu.h | 357 ++++
> drivers/media/platform/amphion/vpu_cmds.c | 431 +++++
> drivers/media/platform/amphion/vpu_cmds.h | 25 +
> drivers/media/platform/amphion/vpu_codec.h | 67 +
> drivers/media/platform/amphion/vpu_color.c | 190 ++
> drivers/media/platform/amphion/vpu_core.c | 906 +++++++++
> drivers/media/platform/amphion/vpu_core.h | 15 +
> drivers/media/platform/amphion/vpu_dbg.c | 495 +++++
> drivers/media/platform/amphion/vpu_defs.h | 186 ++
> drivers/media/platform/amphion/vpu_drv.c | 265 +++
> drivers/media/platform/amphion/vpu_helpers.c | 436 +++++
> drivers/media/platform/amphion/vpu_helpers.h | 71 +
> drivers/media/platform/amphion/vpu_imx8q.c | 271 +++
> drivers/media/platform/amphion/vpu_imx8q.h | 116 ++
> drivers/media/platform/amphion/vpu_malone.c | 1679 ++++++++++++++++
> drivers/media/platform/amphion/vpu_malone.h | 42 +
> drivers/media/platform/amphion/vpu_mbox.c | 124 ++
> drivers/media/platform/amphion/vpu_mbox.h | 16 +
> drivers/media/platform/amphion/vpu_msgs.c | 413 ++++
> drivers/media/platform/amphion/vpu_msgs.h | 14 +
> drivers/media/platform/amphion/vpu_rpc.c | 279 +++
> drivers/media/platform/amphion/vpu_rpc.h | 464 +++++
> drivers/media/platform/amphion/vpu_v4l2.c | 702 +++++++
> drivers/media/platform/amphion/vpu_v4l2.h | 54 +
> drivers/media/platform/amphion/vpu_windsor.c | 1222 ++++++++++++
> drivers/media/platform/amphion/vpu_windsor.h | 39 +
> drivers/media/v4l2-core/v4l2-ioctl.c | 2 +
> include/uapi/linux/videodev2.h | 2 +
> 41 files changed, 12277 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/media/amphion,vpu.yaml
> create mode 100644 arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi
> create mode 100644 drivers/media/platform/amphion/Makefile
> create mode 100644 drivers/media/platform/amphion/vdec.c
> create mode 100644 drivers/media/platform/amphion/venc.c
> create mode 100644 drivers/media/platform/amphion/vpu.h
> create mode 100644 drivers/media/platform/amphion/vpu_cmds.c
> create mode 100644 drivers/media/platform/amphion/vpu_cmds.h
> create mode 100644 drivers/media/platform/amphion/vpu_codec.h
> create mode 100644 drivers/media/platform/amphion/vpu_color.c
> create mode 100644 drivers/media/platform/amphion/vpu_core.c
> create mode 100644 drivers/media/platform/amphion/vpu_core.h
> create mode 100644 drivers/media/platform/amphion/vpu_dbg.c
> create mode 100644 drivers/media/platform/amphion/vpu_defs.h
> create mode 100644 drivers/media/platform/amphion/vpu_drv.c
> create mode 100644 drivers/media/platform/amphion/vpu_helpers.c
> create mode 100644 drivers/media/platform/amphion/vpu_helpers.h
> create mode 100644 drivers/media/platform/amphion/vpu_imx8q.c
> create mode 100644 drivers/media/platform/amphion/vpu_imx8q.h
> create mode 100644 drivers/media/platform/amphion/vpu_malone.c
> create mode 100644 drivers/media/platform/amphion/vpu_malone.h
> create mode 100644 drivers/media/platform/amphion/vpu_mbox.c
> create mode 100644 drivers/media/platform/amphion/vpu_mbox.h
> create mode 100644 drivers/media/platform/amphion/vpu_msgs.c
> create mode 100644 drivers/media/platform/amphion/vpu_msgs.h
> create mode 100644 drivers/media/platform/amphion/vpu_rpc.c
> create mode 100644 drivers/media/platform/amphion/vpu_rpc.h
> create mode 100644 drivers/media/platform/amphion/vpu_v4l2.c
> create mode 100644 drivers/media/platform/amphion/vpu_v4l2.h
> create mode 100644 drivers/media/platform/amphion/vpu_windsor.c
> create mode 100644 drivers/media/platform/amphion/vpu_windsor.h
>
>
> base-commit: 57c3b9f55ba875a6f6295fa59f0bdc0a01c544f8

2021-11-23 19:23:03

by Nicolas Dufresne

[permalink] [raw]
Subject: Re: [PATCH v12 00/13] amphion video decoder/encoder driver

Hi Ming,

For the patchset:

Tested-By: Nicolas Dufresne <[email protected]>

I've validated encoding manually with GStreamer:

gst-launch-1.0 videotestsrc num-buffers=100 ! v4l2h264enc ! video/x-h264,profile=main,level=\(string\)2 ! h264parse ! qtmux ! filesink location=test.mov

I've also verify the that the number of frames was exactly 100, this is common
issue with V4L2 encoders. Then I have validated VP8, H.264 and H.265 decoders
using fluster [0] with this PR [1] applied. You can find full summary at the end
of this email. Markdown report didn't get generated, I will have to check with
upstream fluster if there is a regression.

$> ./fluster.py run -s -so amphion-imx8qxp-conformance.md -d GStreamer-VP8-V4L2-Gst1.0 GStreamer-H.264-V4L2-Gst1.0 GStreamer-H.265-V4L2-Gst1.0

VP8: Ran 59/61 tests successfully in 131.788 secs
H.264: Ran 75/135 tests successfully in 501.206 secs
H.265: Ran 126/147 tests successfully in 1131.933 secs

Note that in mainline, only 1 core get fired and is kept at its lowest possible
frequency, so perhaps it may cause some of the timeout seen. The driver is
overall functional, and I would like to thank you for this extra work. Also,
note that this very first time I run Fluster over the stateful CODEC wrappers. I
will need to run this on more platforms to locate the GStreamer specific fail.

VP8 note, conformance vector vp80-03-segmentation-1425 cause a hang but it then
recover:

[ 8264.851841] amphion-vpu-core 2d040000.vpu_core: [0] sync session timeout
[ 8264.858634] amphion-vpu-core 2d040000.vpu_core: [0] send cmd(0x2) fail
[ 8264.867992] amphion-vpu-core 2d040000.vpu_core: [0] start fail
[ 8264.905173] amphion-vpu-core 2d040000.vpu_core: reset hang core


See comments about your GStreamer MR below...

[0] https://github.com/fluendo/fluster
[1] https://github.com/fluendo/fluster/pull/98


[...]
> encoder is tested with gstreamer
> decoder is tested with gstreamer, but the following patches are required:

GStreamer is now a single repo (and using main branch instead of master), I have
migrated your 3 MRs into 2 MRs.

> https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1252
> https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1098

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1379

> https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1099

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1381


regards,
Nicolas

[...]

****************************************************************************************************
Running test suite JVT-AVC_V1 with decoder GStreamer-H.264-V4L2-Gst1.0
Using 1 parallel job(s)
****************************************************************************************************

[TEST SUITE] (DECODER ) TEST VECTOR ... RESULT
----------------------------------------------------------------------
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) AUD_MW_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BA1_FT_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BA1_Sony_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BA2_Sony_F ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BA3_SVA_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BA_MW_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BAMQ1_JVC_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BAMQ2_JVC_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BANM_MW_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) BASQP1_Sony_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABA1_Sony_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABA1_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABA2_Sony_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABA2_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABA3_Sony_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABA3_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABA3_TOSHIBA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cabac_mot_fld0_full ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cabac_mot_frm0_full ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cabac_mot_mbaff0_full ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cabac_mot_picaff0_full ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABACI3_Sony_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABAST3_Sony_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABASTBR3_Sony_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CABREF3_Sand_D ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CACQP3_Sony_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAFI1_SVA_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMA1_Sony_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMA1_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cama1_vtc_c ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cama2_vtc_b ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMA3_Sand_E ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cama3_vtc_b ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMACI3_Sony_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMANL1_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMANL2_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMANL3_Sand_E ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMASL3_Sony_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMP_MOT_MBAFF_L30 ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAMP_MOT_MBAFF_L31 ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL1_Sony_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL1_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL1_TOSHIBA_G ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL2_Sony_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL2_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL3_Sony_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL3_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANL4_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANLMA2_Sony_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CANLMA3_Sony_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAPA1_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAPAMA3_Sand_F ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAPCM1_Sand_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAPCMNL1_Sand_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAPM3_Sony_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAQP1_Sony_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cavlc_mot_fld0_full_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cavlc_mot_frm0_full_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cavlc_mot_mbaff0_full_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) cavlc_mot_picaff0_full_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAWP1_TOSHIBA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CAWP5_TOSHIBA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CI1_FT_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CI_MW_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVBS3_Sony_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVCANLMA2_Sony_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVFC1_Sony_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVFI1_Sony_D ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVFI1_SVA_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVFI2_Sony_H ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVFI2_SVA_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMA1_Sony_D ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMA1_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMANL1_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMANL2_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMAPAQP3_Sony_E ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMAQP2_Sony_G ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMAQP3_Sony_D ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMP_MOT_FLD_L30_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVMP_MOT_FRM_L31_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVNLFI1_Sony_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVNLFI2_Sony_H ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVPA1_TOSHIBA_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVPCMNL1_SVA_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVPCMNL2_SVA_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVSE2_Sony_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVSE3_Sony_H ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVSEFDFT3_Sony_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVWP1_TOSHIBA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVWP2_TOSHIBA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVWP3_TOSHIBA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) CVWP5_TOSHIBA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) FI1_Sony_E ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) FM1_BT_B ... Timeout
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) FM1_FT_E ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) FM2_SVA_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) HCBP1_HHI_A ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) HCBP2_HHI_A ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) HCMP1_HHI_A ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) LS_SVA_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MIDR_MW_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MPS_MW_A ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR1_BT_A ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR1_MW_A ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR2_MW_A ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR2_TANDBERG_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR3_TANDBERG_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR4_TANDBERG_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR5_TANDBERG_C ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR6_BT_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR7_BT_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR8_BT_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MR9_BT_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) MV1_BRCM_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) NL1_Sony_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) NL2_Sony_H ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) NL3_SVA_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) NLMQ1_JVC_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) NLMQ2_JVC_C ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) NRF_MW_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) Sharp_MP_Field_1_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) Sharp_MP_Field_2_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) Sharp_MP_Field_3_B ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) Sharp_MP_PAFF_1r2 ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) Sharp_MP_PAFF_2r ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SL1_SVA_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SP1_BT_A ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) sp2_bt_b ... Fail
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SVA_BA1_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SVA_BA2_D ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SVA_Base_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SVA_CL1_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SVA_FM1_E ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SVA_NL1_B ... Success
[JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) SVA_NL2_E ... Success


=======================================================================
FAIL: cabac_mot_fld0_full (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '46a58bb66c0c4b1bc94a2561e7f5cc47' != '345185949255b2d66b3979dd5d263b87'
- 46a58bb66c0c4b1bc94a2561e7f5cc47
+ 345185949255b2d66b3979dd5d263b87
: cabac_mot_fld0_full

=======================================================================
FAIL: cabac_mot_mbaff0_full (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '3fe977ce8ce2f1a4c29867d9034f8408' != 'dc354a0e404c97ca70154981ca66b308'
- 3fe977ce8ce2f1a4c29867d9034f8408
+ dc354a0e404c97ca70154981ca66b308
: cabac_mot_mbaff0_full

=======================================================================
FAIL: cabac_mot_picaff0_full (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '2b6fbe1cf21e3034bf59fb9c1a96b1a4' != '7d7a9f7b5ebee7afabbf7101170279ca'
- 2b6fbe1cf21e3034bf59fb9c1a96b1a4
+ 7d7a9f7b5ebee7afabbf7101170279ca
: cabac_mot_picaff0_full

=======================================================================
FAIL: CABREF3_Sand_D (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'afad28e67263aab63678c4759e9f689a' != 'dfb4d2ce0b8d177ea8f0bda09e4d7336'
- afad28e67263aab63678c4759e9f689a
+ dfb4d2ce0b8d177ea8f0bda09e4d7336
: CABREF3_Sand_D

=======================================================================
FAIL: CAFI1_SVA_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '8f249706ddaeda94c4899c1f3954476e' != 'cf1abca903299b24fc47bec5c4ac1081'
- 8f249706ddaeda94c4899c1f3954476e
+ cf1abca903299b24fc47bec5c4ac1081
: CAFI1_SVA_C

=======================================================================
FAIL: CAMA1_Sony_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'c234cc1b862b5b2ef958622fce77b7f5' != 'b32eb6b9f9e022d0199b03a631a3c7df'
- c234cc1b862b5b2ef958622fce77b7f5
+ b32eb6b9f9e022d0199b03a631a3c7df
: CAMA1_Sony_C

=======================================================================
FAIL: CAMA1_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '583824378a02646355fe52318ffeb58c' != '0673aa91b6baa1f6248e1e225fa57880'
- 583824378a02646355fe52318ffeb58c
+ 0673aa91b6baa1f6248e1e225fa57880
: CAMA1_TOSHIBA_B

=======================================================================
FAIL: cama1_vtc_c (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '9e3e565497977759d97d169cd13b842a' != '690a44ca8ec75796235a8065a8b6bccf'
- 9e3e565497977759d97d169cd13b842a
+ 690a44ca8ec75796235a8065a8b6bccf
: cama1_vtc_c

=======================================================================
FAIL: cama2_vtc_b (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'ec33975ec4d2fccc55485da3f37a755b' != '50385efda29615bf46d8c66beef2c555'
- ec33975ec4d2fccc55485da3f37a755b
+ 50385efda29615bf46d8c66beef2c555
: cama2_vtc_b

=======================================================================
FAIL: CAMA3_Sand_E (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '44ed473e4749ef88e040573cbb236381' != '8a3e28fd4ecae00b18f4a0f632e63455'
- 44ed473e4749ef88e040573cbb236381
+ 8a3e28fd4ecae00b18f4a0f632e63455
: CAMA3_Sand_E

=======================================================================
FAIL: cama3_vtc_b (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '2c38362c0c84e7084527a7f1ef8c900d' != 'ff77884b05cbf9760eb17df8ba9ea73a'
- 2c38362c0c84e7084527a7f1ef8c900d
+ ff77884b05cbf9760eb17df8ba9ea73a
: cama3_vtc_b

=======================================================================
FAIL: CAMACI3_Sony_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '0f3edb4f003b8fb4838f6a35c572fe70' != '21933a6cf51b29248803c907286ce998'
- 0f3edb4f003b8fb4838f6a35c572fe70
+ 21933a6cf51b29248803c907286ce998
: CAMACI3_Sony_C

=======================================================================
FAIL: CAMANL1_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'ead6f461d3dfcb968386ac0a2443b35a' != '83e0a1a58b8b49d3d7f09ef6aded9c95'
- ead6f461d3dfcb968386ac0a2443b35a
+ 83e0a1a58b8b49d3d7f09ef6aded9c95
: CAMANL1_TOSHIBA_B

=======================================================================
FAIL: CAMANL2_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '720f536ecad1dc22125e90c0f79ed165' != '40743e700e82eddbd2036e01150b1096'
- 720f536ecad1dc22125e90c0f79ed165
+ 40743e700e82eddbd2036e01150b1096
: CAMANL2_TOSHIBA_B

=======================================================================
FAIL: CAMANL3_Sand_E (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'b28485ca9c269690e785fe0914dd51d9' != '3f18da9627e90cc93f1fde030654aebf'
- b28485ca9c269690e785fe0914dd51d9
+ 3f18da9627e90cc93f1fde030654aebf
: CAMANL3_Sand_E

=======================================================================
FAIL: CAMASL3_Sony_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'd95dc479f23791df4f166145e5c011a4' != '119344efaea6d9333cfffe629a3a38b1'
- d95dc479f23791df4f166145e5c011a4
+ 119344efaea6d9333cfffe629a3a38b1
: CAMASL3_Sony_B

=======================================================================
FAIL: CAMP_MOT_MBAFF_L30 (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'b360d7c05677d545fea9f35862aca50c' != 'ad1371d9d0e7a0a9428201e4ec8ae4cb'
- b360d7c05677d545fea9f35862aca50c
+ ad1371d9d0e7a0a9428201e4ec8ae4cb
: CAMP_MOT_MBAFF_L30

=======================================================================
FAIL: CAMP_MOT_MBAFF_L31 (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '249f8b52b757de13d53d13cbbe017a41' != '4b91fd48ee2fa6b6c3065213b8fda289'
- 249f8b52b757de13d53d13cbbe017a41
+ 4b91fd48ee2fa6b6c3065213b8fda289
: CAMP_MOT_MBAFF_L31

=======================================================================
FAIL: CANLMA2_Sony_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '90fb51566be306a77895e11cd275fcac' != '7e058e3c0d609f1daf9ce18fadd1618e'
- 90fb51566be306a77895e11cd275fcac
+ 7e058e3c0d609f1daf9ce18fadd1618e
: CANLMA2_Sony_C

=======================================================================
FAIL: CANLMA3_Sony_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '2575cc432e6df0e4abb28aeb337c8527' != 'a938833c124510501886e00b183e65e7'
- 2575cc432e6df0e4abb28aeb337c8527
+ a938833c124510501886e00b183e65e7
: CANLMA3_Sony_C

=======================================================================
FAIL: CAPA1_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '7dbd6d91d6768a238450890a9013f65a' != '82ddb2a84684d4666c209f6025d36a21'
- 7dbd6d91d6768a238450890a9013f65a
+ 82ddb2a84684d4666c209f6025d36a21
: CAPA1_TOSHIBA_B

=======================================================================
FAIL: CAPAMA3_Sand_F (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '44d78296fb12c2e523cf02886e3ee4ad' != 'e257200d00d0e9dccfecbc65b8445f32'
- 44d78296fb12c2e523cf02886e3ee4ad
+ e257200d00d0e9dccfecbc65b8445f32
: CAPAMA3_Sand_F

=======================================================================
FAIL: cavlc_mot_fld0_full_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '12fe884fd61346d2f10be36d15513eb6' != 'd7fa667393494e43705e345083521d5d'
- 12fe884fd61346d2f10be36d15513eb6
+ d7fa667393494e43705e345083521d5d
: cavlc_mot_fld0_full_B

=======================================================================
FAIL: cavlc_mot_mbaff0_full_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '094404fcc9683ba6c1b33f352f19a229' != '939a1067c18b23928606c3cb0a309b49'
- 094404fcc9683ba6c1b33f352f19a229
+ 939a1067c18b23928606c3cb0a309b49
: cavlc_mot_mbaff0_full_B

=======================================================================
FAIL: cavlc_mot_picaff0_full_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'bc470e9c5cd1f0e31719d1078f0678bc' != 'bbef681219e116350983f78d879aa701'
- bc470e9c5cd1f0e31719d1078f0678bc
+ bbef681219e116350983f78d879aa701
: cavlc_mot_picaff0_full_B

=======================================================================
FAIL: CVCANLMA2_Sony_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '90fb51566be306a77895e11cd275fcac' != '7e058e3c0d609f1daf9ce18fadd1618e'
- 90fb51566be306a77895e11cd275fcac
+ 7e058e3c0d609f1daf9ce18fadd1618e
: CVCANLMA2_Sony_C

=======================================================================
FAIL: CVFC1_Sony_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '9fdb17e17d332b5d9752362c9c7ff9b0' != 'd2aeaea0b9da3509442377a849cc2ff1'
- 9fdb17e17d332b5d9752362c9c7ff9b0
+ d2aeaea0b9da3509442377a849cc2ff1
: CVFC1_Sony_C

=======================================================================
FAIL: CVFI1_Sony_D (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '4d9f97dca797af1e1d8f2660cef97f04' != 'bea5158644293087167fdc74b2980ae5'
- 4d9f97dca797af1e1d8f2660cef97f04
+ bea5158644293087167fdc74b2980ae5
: CVFI1_Sony_D

=======================================================================
FAIL: CVFI1_SVA_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'af3086f97e7316670af7a4bdf3d53fea' != 'd72d5ca3017874bee9a0e9362eb2a524'
- af3086f97e7316670af7a4bdf3d53fea
+ d72d5ca3017874bee9a0e9362eb2a524
: CVFI1_SVA_C

=======================================================================
FAIL: CVFI2_Sony_H (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'ae30d20c4c56cd64921eafcee959fbdb' != '8d4496f23489df677fa8e57c156bfc12'
- ae30d20c4c56cd64921eafcee959fbdb
+ 8d4496f23489df677fa8e57c156bfc12
: CVFI2_Sony_H

=======================================================================
FAIL: CVFI2_SVA_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'c8a88bb26229196ee85ffc3b019c7554' != '98a76e47d1658382758d86de5369ddfd'
- c8a88bb26229196ee85ffc3b019c7554
+ 98a76e47d1658382758d86de5369ddfd
: CVFI2_SVA_C

=======================================================================
FAIL: CVMA1_Sony_D (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'c234cc1b862b5b2ef958622fce77b7f5' != 'b32eb6b9f9e022d0199b03a631a3c7df'
- c234cc1b862b5b2ef958622fce77b7f5
+ b32eb6b9f9e022d0199b03a631a3c7df
: CVMA1_Sony_D

=======================================================================
FAIL: CVMA1_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '583824378a02646355fe52318ffeb58c' != '0673aa91b6baa1f6248e1e225fa57880'
- 583824378a02646355fe52318ffeb58c
+ 0673aa91b6baa1f6248e1e225fa57880
: CVMA1_TOSHIBA_B

=======================================================================
FAIL: CVMANL1_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'ead6f461d3dfcb968386ac0a2443b35a' != '83e0a1a58b8b49d3d7f09ef6aded9c95'
- ead6f461d3dfcb968386ac0a2443b35a
+ 83e0a1a58b8b49d3d7f09ef6aded9c95
: CVMANL1_TOSHIBA_B

=======================================================================
FAIL: CVMANL2_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '720f536ecad1dc22125e90c0f79ed165' != '40743e700e82eddbd2036e01150b1096'
- 720f536ecad1dc22125e90c0f79ed165
+ 40743e700e82eddbd2036e01150b1096
: CVMANL2_TOSHIBA_B

=======================================================================
FAIL: CVMAPAQP3_Sony_E (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '1c5c11c8b920acbd8ba3d72b5079d959' != 'fc872826ae0f96d5f55a7a25ed9ed24c'
- 1c5c11c8b920acbd8ba3d72b5079d959
+ fc872826ae0f96d5f55a7a25ed9ed24c
: CVMAPAQP3_Sony_E

=======================================================================
FAIL: CVMAQP2_Sony_G (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'b1523085074c91e17c4a1db47c318929' != '5448ad09bb1b275694f7ae9b79535216'
- b1523085074c91e17c4a1db47c318929
+ 5448ad09bb1b275694f7ae9b79535216
: CVMAQP2_Sony_G

=======================================================================
FAIL: CVMAQP3_Sony_D (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'fa8cf12561c04bbf68f93769ae2d1443' != '31cb5efb379c9b53b25f28636eeb28ea'
- fa8cf12561c04bbf68f93769ae2d1443
+ 31cb5efb379c9b53b25f28636eeb28ea
: CVMAQP3_Sony_D

=======================================================================
FAIL: CVMP_MOT_FLD_L30_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '7a2ff88bf2a85190b690db602323124f' != '51612b72e8fdb199ddabb11f8b2a221f'
- 7a2ff88bf2a85190b690db602323124f
+ 51612b72e8fdb199ddabb11f8b2a221f
: CVMP_MOT_FLD_L30_B

=======================================================================
FAIL: CVMP_MOT_FRM_L31_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'e55e41c7ed89a78ab338faabdd1abff1' != '5a851ac3cbe95f17f6abdc00fa340b8f'
- e55e41c7ed89a78ab338faabdd1abff1
+ 5a851ac3cbe95f17f6abdc00fa340b8f
: CVMP_MOT_FRM_L31_B

=======================================================================
FAIL: CVNLFI1_Sony_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'f76dfe9a73a69f25106b940b21c436ce' != '4b1cec47e8c9ca6ef0f5c4d2fafec758'
- f76dfe9a73a69f25106b940b21c436ce
+ 4b1cec47e8c9ca6ef0f5c4d2fafec758
: CVNLFI1_Sony_C

=======================================================================
FAIL: CVNLFI2_Sony_H (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'c9d048ee4281ad2f7e41be1da0f9c210' != '218ed2ab114b34676fb1d524c83ab5cc'
- c9d048ee4281ad2f7e41be1da0f9c210
+ 218ed2ab114b34676fb1d524c83ab5cc
: CVNLFI2_Sony_H

=======================================================================
FAIL: CVPA1_TOSHIBA_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '6c1d64160a6a4d81a3c8176e7ba304c4' != '2d2b37aaab718ffef994029f6d1ad219'
- 6c1d64160a6a4d81a3c8176e7ba304c4
+ 2d2b37aaab718ffef994029f6d1ad219
: CVPA1_TOSHIBA_B

=======================================================================
FAIL: FI1_Sony_E (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'e56dee215cec5912300406975ffdc56c' != 'a0daa562cd266e6bb893c07be516ce56'
- e56dee215cec5912300406975ffdc56c
+ a0daa562cd266e6bb893c07be516ce56
: FI1_Sony_E

=======================================================================
FAIL: FM1_BT_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JVT-AVC_V1/FM1_BT_B/FM1_BT_B.h264 ! h264parse ! v4l2h264dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JVT-AVC_V1/FM1_BT_B.out' timed out after 29.999805622000167 seconds

=======================================================================
FAIL: FM1_FT_E (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'bf2d60e2a0140368e087580a8565fc99' != '9ec7fab73663a9c2b51472c7a109ac5a'
- bf2d60e2a0140368e087580a8565fc99
+ 9ec7fab73663a9c2b51472c7a109ac5a
: FM1_FT_E

=======================================================================
FAIL: FM2_SVA_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '2ca2331ff02689d0cc036935a7f0d4bf' != 'd41d8cd98f00b204e9800998ecf8427e'
- 2ca2331ff02689d0cc036935a7f0d4bf
+ d41d8cd98f00b204e9800998ecf8427e
: FM2_SVA_C

=======================================================================
FAIL: MR4_TANDBERG_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '5f5f14beca549172487bb74c4d3ba8f9' != 'a27dd395b0cb190ba2d40201197ba436'
- 5f5f14beca549172487bb74c4d3ba8f9
+ a27dd395b0cb190ba2d40201197ba436
: MR4_TANDBERG_C

=======================================================================
FAIL: MR5_TANDBERG_C (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '5f5f14beca549172487bb74c4d3ba8f9' != 'a27dd395b0cb190ba2d40201197ba436'
- 5f5f14beca549172487bb74c4d3ba8f9
+ a27dd395b0cb190ba2d40201197ba436
: MR5_TANDBERG_C

=======================================================================
FAIL: MR6_BT_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'd2ef83e72a57df1cc5266a0be646463f' != '3f08e88cb0cb8d66eb00c0c7cfa4c010'
- d2ef83e72a57df1cc5266a0be646463f
+ 3f08e88cb0cb8d66eb00c0c7cfa4c010
: MR6_BT_B

=======================================================================
FAIL: MR7_BT_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '3ee7ae943bf21f309a6fe438f832d1b8' != '9327e048ef581c58116f085f2741691c'
- 3ee7ae943bf21f309a6fe438f832d1b8
+ 9327e048ef581c58116f085f2741691c
: MR7_BT_B

=======================================================================
FAIL: MR8_BT_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '1ed4829bf27262147b12ee16cd6ce5db' != '725adc04ca305870d8873ae34ce5417c'
- 1ed4829bf27262147b12ee16cd6ce5db
+ 725adc04ca305870d8873ae34ce5417c
: MR8_BT_B

=======================================================================
FAIL: MR9_BT_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'c1ae4e809894d01cc4f5e6b0bb8df99e' != '686ff125262b0128624196acecb1bab6'
- c1ae4e809894d01cc4f5e6b0bb8df99e
+ 686ff125262b0128624196acecb1bab6
: MR9_BT_B

=======================================================================
FAIL: Sharp_MP_Field_1_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '069ca95648563a3d0d78121588b506ee' != '87bcc33216268c7f0bc129324683dea3'
- 069ca95648563a3d0d78121588b506ee
+ 87bcc33216268c7f0bc129324683dea3
: Sharp_MP_Field_1_B

=======================================================================
FAIL: Sharp_MP_Field_2_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '6025cbdf791a3881c371774d3674b471' != 'a95c09f0584edb344cfa2915b75079ad'
- 6025cbdf791a3881c371774d3674b471
+ a95c09f0584edb344cfa2915b75079ad
: Sharp_MP_Field_2_B

=======================================================================
FAIL: Sharp_MP_Field_3_B (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '01c63ee764a75a5100e3f720954f65f5' != 'a010a3a6f9e35e895a48fabe45103929'
- 01c63ee764a75a5100e3f720954f65f5
+ a010a3a6f9e35e895a48fabe45103929
: Sharp_MP_Field_3_B

=======================================================================
FAIL: Sharp_MP_PAFF_1r2 (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'e31b7df5a2e5dde2b5c8ede9d3aec16d' != '38edc0f0830ebfd7d72a7f68ed9635a7'
- e31b7df5a2e5dde2b5c8ede9d3aec16d
+ 38edc0f0830ebfd7d72a7f68ed9635a7
: Sharp_MP_PAFF_1r2

=======================================================================
FAIL: Sharp_MP_PAFF_2r (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '8edf56f61f81162c1f7a795029aca26f' != 'f57ccac4277106c6f5f7b7db47c97f33'
- 8edf56f61f81162c1f7a795029aca26f
+ f57ccac4277106c6f5f7b7db47c97f33
: Sharp_MP_PAFF_2r

=======================================================================
FAIL: SP1_BT_A (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'ca0b3580f448cc1e07f81a4756273b59' != 'b5427c3d710735d7f408e679cfa82bad'
- ca0b3580f448cc1e07f81a4756273b59
+ b5427c3d710735d7f408e679cfa82bad
: SP1_BT_A

=======================================================================
FAIL: sp2_bt_b (GStreamer-H.264-V4L2-Gst1.0.JVT-AVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '77fef826070d3d17174529b16765bb24' != 'ee5e5a79b130665148b999669a11c56e'
- 77fef826070d3d17174529b16765bb24
+ ee5e5a79b130665148b999669a11c56e
: sp2_bt_b

Ran 75/135 tests successfully in 501.206 secs
Generating summary for test suite JVT-AVC_V1 and decoders GStreamer-H.264-V4L2-Gst1.0:

****************************************************************************************************
Running test suite JCT-VC-HEVC_V1 with decoder GStreamer-H.265-V4L2-Gst1.0
Using 1 parallel job(s)
****************************************************************************************************

[TEST SUITE ] (DECODER ) TEST VECTOR ... RESULT
----------------------------------------------------------------------
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMP_A_Samsung_7 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMP_B_Samsung_7 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMP_D_Hisilicon_3 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMP_E_Hisilicon_3 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMP_F_Hisilicon_3 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMVP_A_MTK_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMVP_B_MTK_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) AMVP_C_Samsung_7 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) BUMPING_A_ericsson_1 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_A_SHARP_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_B_SHARP_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_C_SHARP_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_D_SHARP_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_E_SHARP_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_F_SHARP_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_G_SHARP_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CAINIT_H_SHARP_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CIP_A_Panasonic_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) cip_B_NEC_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CIP_C_Panasonic_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) CONFWIN_A_Sony_1 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_A_MAIN10_VIXS_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_A_SONY_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_B_SONY_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_C_SONY_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_D_VIXS_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_E_VIXS_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_F_VIXS_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DBLK_G_VIXS_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DELTAQP_A_BRCM_4 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DELTAQP_B_SONY_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DELTAQP_C_SONY_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DSLICE_A_HHI_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DSLICE_B_HHI_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) DSLICE_C_HHI_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ENTP_A_QUALCOMM_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ENTP_B_Qualcomm_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ENTP_C_Qualcomm_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) EXT_A_ericsson_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) FILLER_A_Sony_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) HRD_A_Fujitsu_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) INITQP_A_Sony_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) INITQP_B_Main10_Sony_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ipcm_A_NEC_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ipcm_B_NEC_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ipcm_C_NEC_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ipcm_D_NEC_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) ipcm_E_NEC_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) IPRED_A_docomo_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) IPRED_B_Nokia_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) IPRED_C_Mitsubishi_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) LS_A_Orange_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) LS_B_Orange_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) LTRPSPS_A_Qualcomm_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MAXBINS_A_TI_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MAXBINS_B_TI_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MAXBINS_C_TI_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MERGE_A_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MERGE_B_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MERGE_C_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MERGE_D_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MERGE_E_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MERGE_F_MTK_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MERGE_G_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MVCLIP_A_qualcomm_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MVDL1ZERO_A_docomo_4 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) MVEDGE_A_qualcomm_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) NoOutPrior_A_Qualcomm_1 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) NoOutPrior_B_Qualcomm_1 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) NUT_A_ericsson_5 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) OPFLAG_A_Qualcomm_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) OPFLAG_B_Qualcomm_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) OPFLAG_C_Qualcomm_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PICSIZE_A_Bossen_1 ... Error
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PICSIZE_B_Bossen_1 ... Error
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PICSIZE_C_Bossen_1 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PICSIZE_D_Bossen_1 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PMERGE_A_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PMERGE_B_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PMERGE_C_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PMERGE_D_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PMERGE_E_TI_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) POC_A_Bossen_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PPS_A_qualcomm_7 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) PS_B_VIDYO_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RAP_A_docomo_6 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RAP_B_Bossen_2 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPLM_A_qualcomm_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPLM_B_qualcomm_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPS_A_docomo_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPS_B_qualcomm_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPS_C_ericsson_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPS_D_ericsson_6 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPS_E_qualcomm_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RPS_F_docomo_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RQT_A_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RQT_B_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RQT_C_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RQT_D_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RQT_E_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RQT_F_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) RQT_G_HHI_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_A_MediaTek_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_B_MediaTek_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_C_Samsung_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_D_Samsung_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_E_Canon_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_F_Canon_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_G_Canon_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAO_H_Parabola_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAODBLK_A_MainConcept_4 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SAODBLK_B_MainConcept_4 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SDH_A_Orange_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SLICES_A_Rovi_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SLIST_A_Sony_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SLIST_B_Sony_9 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SLIST_C_Sony_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SLIST_D_Sony_9 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) SLPPLP_A_VIDYO_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) STRUCT_A_Samsung_7 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) STRUCT_B_Samsung_7 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TILES_A_Cisco_2 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TILES_B_Cisco_1 ... Timeout
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TMVP_A_MS_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TSCL_A_VIDYO_5 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TSCL_B_VIDYO_4 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TSKIP_A_MS_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TSUNEQBD_A_MAIN10_Technicolor_2 ... Fail
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) TUSIZE_A_Samsung_1 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) VPSID_A_VIDYO_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) VPSSPSPPS_A_MainConcept_1 ... Error
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WP_A_MAIN10_Toshiba_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WP_A_Toshiba_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WP_B_Toshiba_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WP_MAIN10_B_Toshiba_3 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_A_ericsson_MAIN10_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_A_ericsson_MAIN_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_B_ericsson_MAIN10_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_B_ericsson_MAIN_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_C_ericsson_MAIN10_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_C_ericsson_MAIN_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_D_ericsson_MAIN10_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_D_ericsson_MAIN_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_E_ericsson_MAIN10_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_E_ericsson_MAIN_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_F_ericsson_MAIN10_2 ... Success
[JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) WPP_F_ericsson_MAIN_2 ... Success


=======================================================================
FAIL: AMP_D_Hisilicon_3 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/AMP_D_Hisilicon_3/AMP_D_Hisilicon.bit ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/AMP_D_Hisilicon_3.out' timed out after 29.99980899699949 seconds

=======================================================================
FAIL: AMP_E_Hisilicon_3 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/AMP_E_Hisilicon_3/AMP_E_Hisilicon.bit ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/AMP_E_Hisilicon_3.out' timed out after 29.999798621999616 seconds

=======================================================================
FAIL: AMP_F_Hisilicon_3 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/AMP_F_Hisilicon_3/AMP_F_Hisilicon_3.bit ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/AMP_F_Hisilicon_3.out' timed out after 29.999801372000547 seconds

=======================================================================
FAIL: BUMPING_A_ericsson_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '64f213eb1cf45614f0eeb50fd1b725bf' != 'a85ebcd45f4bc1a05a5d66404b85a283'
- 64f213eb1cf45614f0eeb50fd1b725bf
+ a85ebcd45f4bc1a05a5d66404b85a283
: BUMPING_A_ericsson_1

=======================================================================
FAIL: CONFWIN_A_Sony_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'a3ce3f936ff69ff1ec2621a622dd37ac' != '1463f3ca27962804a2f7ba0f55978830'
- a3ce3f936ff69ff1ec2621a622dd37ac
+ 1463f3ca27962804a2f7ba0f55978830
: CONFWIN_A_Sony_1

=======================================================================
FAIL: DELTAQP_A_BRCM_4 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/DELTAQP_A_BRCM_4/DELTAQP_A_BRCM_4/DELTAQP_A_BRCM_4.bit ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/DELTAQP_A_BRCM_4.out' timed out after 29.999807246999808 seconds

=======================================================================
FAIL: MVDL1ZERO_A_docomo_4 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/MVDL1ZERO_A_docomo_4/MVDL1ZERO_A_docomo_4.bit ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/MVDL1ZERO_A_docomo_4.out' timed out after 29.999810747000083 seconds

=======================================================================
FAIL: NoOutPrior_A_Qualcomm_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '1c5f20a08ab8dfa0f44d9a0ca23d174d' != '32ffa6b58b648b3e966f011fb063c14c'
- 1c5f20a08ab8dfa0f44d9a0ca23d174d
+ 32ffa6b58b648b3e966f011fb063c14c
: NoOutPrior_A_Qualcomm_1

=======================================================================
FAIL: NoOutPrior_B_Qualcomm_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '048bca0ec216a3f88cf9fbb4bb5a61ac' != '1f2e78cc91d3e50894d51b020b378fc7'
- 048bca0ec216a3f88cf9fbb4bb5a61ac
+ 1f2e78cc91d3e50894d51b020b378fc7
: NoOutPrior_B_Qualcomm_1

=======================================================================
FAIL: NUT_A_ericsson_5 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '9dbe33badd0cc6dfcd1b53e546968fbd' != 'a954a2af78fdc7cd7b4cc5ed67c28c44'
- 9dbe33badd0cc6dfcd1b53e546968fbd
+ a954a2af78fdc7cd7b4cc5ed67c28c44
: NUT_A_ericsson_5

=======================================================================
FAIL: PICSIZE_A_Bossen_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/PICSIZE_A_Bossen_1/PICSIZE_A_Bossen_1/PICSIZE_A_Bossen_1.bin ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/PICSIZE_A_Bossen_1.out' returned non-zero exit status 1.

=======================================================================
FAIL: PICSIZE_B_Bossen_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/PICSIZE_B_Bossen_1/PICSIZE_B_Bossen_1/PICSIZE_B_Bossen_1.bin ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/PICSIZE_B_Bossen_1.out' returned non-zero exit status 1.

=======================================================================
FAIL: PICSIZE_C_Bossen_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '674f9f11eb956257d86782949ec00399' != 'ec7466a6f046dbd4f94e793fc307068d'
- 674f9f11eb956257d86782949ec00399
+ ec7466a6f046dbd4f94e793fc307068d
: PICSIZE_C_Bossen_1

=======================================================================
FAIL: PICSIZE_D_Bossen_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '5b76e0591618f5affe8b15b03d9c0bef' != '5c6a3798b45257aeee5aabd94b86589d'
- 5b76e0591618f5affe8b15b03d9c0bef
+ 5c6a3798b45257aeee5aabd94b86589d
: PICSIZE_D_Bossen_1

=======================================================================
FAIL: RAP_B_Bossen_2 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'f38befcc280f2fd0d23f48f807f843c2' != '9a85001a2279df623eaa367d666501dd'
- f38befcc280f2fd0d23f48f807f843c2
+ 9a85001a2279df623eaa367d666501dd
: RAP_B_Bossen_2

=======================================================================
FAIL: SAODBLK_A_MainConcept_4 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/SAODBLK_A_MainConcept_4/SAODBLK_A_MainConcept_4/SAODBLK_A_MainConcept_4.bin ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/SAODBLK_A_MainConcept_4.out' timed out after 29.999805997000294 seconds

=======================================================================
FAIL: SAODBLK_B_MainConcept_4 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/SAODBLK_B_MainConcept_4/SAODBLK_B_MainConcept_4/SAODBLK_B_MainConcept_4.bin ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/SAODBLK_B_MainConcept_4.out' timed out after 29.99980249700002 seconds

=======================================================================
FAIL: TILES_A_Cisco_2 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/TILES_A_Cisco_2/TILES_A_Cisco_2/TILES_A_Cisco_2.bin ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/TILES_A_Cisco_2.out' timed out after 29.999810246999914 seconds

=======================================================================
FAIL: TILES_B_Cisco_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/TILES_B_Cisco_1/TILES_B_Cisco_1/TILES_B_Cisco_1.bin ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/TILES_B_Cisco_1.out' timed out after 29.999793870999383 seconds

=======================================================================
FAIL: TSUNEQBD_A_MAIN10_Technicolor_2 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: '1bed23df7253170eeb8efc3fd1b740a3' != '7de52908e284c5c137a02d31a4eb4884'
- 1bed23df7253170eeb8efc3fd1b740a3
+ 7de52908e284c5c137a02d31a4eb4884
: TSUNEQBD_A_MAIN10_Technicolor_2

=======================================================================
FAIL: VPSSPSPPS_A_MainConcept_1 (GStreamer-H.265-V4L2-Gst1.0.JCT-VC-HEVC_V1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command 'gst-launch-1.0 filesrc location=resources/JCT-VC-HEVC_V1/VPSSPSPPS_A_MainConcept_1/VPSSPSPPS_A_MainConcept_1.bin ! h265parse ! v4l2h265dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/JCT-VC-HEVC_V1/VPSSPSPPS_A_MainConcept_1.out' returned non-zero exit status 1.

Ran 126/147 tests successfully in 1131.933 secs
Generating summary for test suite JCT-VC-HEVC_V1 and decoders GStreamer-H.265-V4L2-Gst1.0:

****************************************************************************************************
Running test suite VP8-TEST-VECTORS with decoder GStreamer-VP8-V4L2-Gst1.0
Using 1 parallel job(s)
****************************************************************************************************

[TEST SUITE ] (DECODER ) TEST VECTOR ... RESULT
----------------------------------------------------------------------
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-001 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-002 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-003 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-004 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-005 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-006 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-007 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-008 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-009 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-010 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-011 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-012 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-013 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-014 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-015 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-016 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-017 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-00-comprehensive-018 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-01-intra-1400 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-01-intra-1411 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-01-intra-1416 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-01-intra-1417 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-02-inter-1402 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-02-inter-1412 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-02-inter-1418 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-02-inter-1424 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-01 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-02 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-03 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-04 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1401 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1403 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1407 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1408 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1409 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1410 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1413 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1414 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1415 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1425 ... Timeout
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1426 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1427 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1432 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1435 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1436 ... Fail
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1437 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1441 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-03-segmentation-1442 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-04-partitions-1404 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-04-partitions-1405 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-04-partitions-1406 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1428 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1429 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1430 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1431 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1433 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1434 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1438 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1439 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1440 ... Success
[VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0) vp80-05-sharpness-1443 ... Success


=======================================================================
FAIL: vp80-03-segmentation-1425 (GStreamer-VP8-V4L2-Gst1.0.VP8-TEST-VECTORS)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 71, in _test
result = self.decoder.decode(
File "/home/nicolas/fluster/fluster/decoders/gstreamer.py", line 90, in decode
run_command(shlex.split(pipeline), timeout=timeout, verbose=verbose)
File "/home/nicolas/fluster/fluster/utils.py", line 70, in run_command
raise ex
File "/home/nicolas/fluster/fluster/utils.py", line 66, in run_command
subprocess.run(command, stdout=sout, stderr=serr, check=check, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 507, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1134, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "/usr/lib64/python3.9/subprocess.py", line 2005, in _communicate
self.wait(timeout=self._remaining_time(endtime))
File "/usr/lib64/python3.9/subprocess.py", line 1189, in wait
return self._wait(timeout=timeout)
File "/usr/lib64/python3.9/subprocess.py", line 1909, in _wait
raise TimeoutExpired(self.args, timeout)
subprocess.TimeoutExpired: Command 'gst-launch-1.0 filesrc location=resources/VP8-TEST-VECTORS/vp80-03-segmentation-1425/vp80-03-segmentation-1425.ivf ! ivfparse ! v4l2vp8dec ! video/x-raw ! videoconvert dither=none ! video/x-raw,format=I420 ! videocodectestsink location=results/VP8-TEST-VECTORS/vp80-03-segmentation-1425.out' timed out after 29.99979774699932 seconds

=======================================================================
FAIL: vp80-03-segmentation-1436 (GStreamer-VP8-V4L2-Gst1.0.VP8-TEST-VECTORS)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nicolas/fluster/fluster/test.py", line 104, in _test
self.assertEqual(
AssertionError: 'bfd17a557ee1ba347c755a18ce5a64a6' != '44ed1dfb57028e6cd6ce6a1caab507b8'
- bfd17a557ee1ba347c755a18ce5a64a6
+ 44ed1dfb57028e6cd6ce6a1caab507b8
: vp80-03-segmentation-1436

Ran 59/61 tests successfully in 131.788 secs


2021-11-24 09:00:20

by Ming Qian

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver

> -----Original Message-----
> From: Nicolas Dufresne [mailto:[email protected]]
> Sent: Wednesday, November 24, 2021 3:23 AM
> To: Ming Qian <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected]
> Cc: [email protected]; [email protected]; [email protected];
> dl-linux-imx <[email protected]>; Aisheng Dong <[email protected]>;
> [email protected]; [email protected];
> [email protected]; [email protected]
> Subject: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver
>
> Caution: EXT Email
>
> Hi Ming,
>
> For the patchset:
>
> Tested-By: Nicolas Dufresne <[email protected]>
>
> I've validated encoding manually with GStreamer:
>
> gst-launch-1.0 videotestsrc num-buffers=100 ! v4l2h264enc !
> video/x-h264,profile=main,level=\(string\)2 ! h264parse ! qtmux ! filesink
> location=test.mov
>
> I've also verify the that the number of frames was exactly 100, this is common
> issue with V4L2 encoders. Then I have validated VP8, H.264 and H.265
> decoders
> using fluster [0] with this PR [1] applied. You can find full summary at the end
> of this email. Markdown report didn't get generated, I will have to check with
> upstream fluster if there is a regression.
>
> $> ./fluster.py run -s -so amphion-imx8qxp-conformance.md -d
> GStreamer-VP8-V4L2-Gst1.0 GStreamer-H.264-V4L2-Gst1.0
> GStreamer-H.265-V4L2-Gst1.0
>
> VP8: Ran 59/61 tests successfully in 131.788 secs
> H.264: Ran 75/135 tests successfully in 501.206 secs
> H.265: Ran 126/147 tests successfully in 1131.933 secs
>
> Note that in mainline, only 1 core get fired and is kept at its lowest possible
> frequency, so perhaps it may cause some of the timeout seen. The driver is
> overall functional, and I would like to thank you for this extra work. Also,
> note that this very first time I run Fluster over the stateful CODEC wrappers. I
> will need to run this on more platforms to locate the GStreamer specific fail.
>
> VP8 note, conformance vector vp80-03-segmentation-1425 cause a hang but it
> then
> recover:
>
> [ 8264.851841] amphion-vpu-core 2d040000.vpu_core: [0] sync session
> timeout
> [ 8264.858634] amphion-vpu-core 2d040000.vpu_core: [0] send cmd(0x2) fail
> [ 8264.867992] amphion-vpu-core 2d040000.vpu_core: [0] start fail
> [ 8264.905173] amphion-vpu-core 2d040000.vpu_core: reset hang core
>

HI Nicolas

There is a bug in firmware that if send a command to firmware too close after stop cmd,
The firmware may enter wfi wrong, and led to hang issue you met in vp80-03-segmentation-1425.
I'll add a workaround in driver that add a delay after send stop cmd to firmware in next version.

Because the amphion's vpu doesn't support to output i420, so the test will convert nv12_8l128 to i420 by videoconvert, it leds to most of timeout failure.

The FM1_BT_B.h264 can't be decoded by amphion's vpu, the vpu is keeping parse sequence header, and it led to timeout failure.

I run the test and change the timeout to 300, then most of timeout failures are gone. Besides that, my result is almost as same as yours.

The failures of assertion error means that the vpu's output is different from the pattern, I think it should be the vpu's limitation.

>
> See comments about your GStreamer MR below...
>
> [0]
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.
> com%2Ffluendo%2Ffluster&amp;data=04%7C01%7Cming.qian%40nxp.com%7
> C45d33490bfe546aa8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c3
> 01635%7C0%7C0%7C637732921809373007%7CUnknown%7CTWFpbGZsb3d
> 8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3
> D%7C3000&amp;sdata=bBqADaZ9ZN00SbCPalQE5fN740hB2bMUxHDL4QEki
> mg%3D&amp;reserved=0
> [1]
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.
> com%2Ffluendo%2Ffluster%2Fpull%2F98&amp;data=04%7C01%7Cming.qian
> %40nxp.com%7C45d33490bfe546aa8e1408d9aeb6a822%7C686ea1d3bc2b4c
> 6fa92cd99c5c301635%7C0%7C0%7C637732921809382989%7CUnknown%7C
> TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLC
> JXVCI6Mn0%3D%7C3000&amp;sdata=90dUC%2FNzK%2BcFNSMwY7bgQ0iD8
> ctBwU%2FMhyrLoBBEf4g%3D&amp;reserved=0
>
>
> [...]
> > encoder is tested with gstreamer
> > decoder is tested with gstreamer, but the following patches are required:
>
> GStreamer is now a single repo (and using main branch instead of master), I
> have
> migrated your 3 MRs into 2 MRs.

Thank you very much.
>
> >
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> eedesktop.org%2Fgstreamer%2Fgst-plugins-base%2F-%2Fmerge_requests%2F
> 1252&amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa
> 8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> C637732921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw
> MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sda
> ta=G4PnqxRsnPjQtV%2FUcp4dkoz9fAGxkOv%2FzKR47RaHtu0%3D&amp;reser
> ved=0
> >
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> eedesktop.org%2Fgstreamer%2Fgst-plugins-good%2F-%2Fmerge_requests%2F
> 1098&amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa
> 8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> C637732921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw
> MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sda
> ta=h6nEISAaiG54NPz9Xw0MiSNDx2QxWsNWyG7FLSAaLgI%3D&amp;reserved
> =0
>
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> eedesktop.org%2Fgstreamer%2Fgstreamer%2F-%2Fmerge_requests%2F1379&
> amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa8e140
> 8d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6377
> 32921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiL
> CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=PFe
> Db4v%2BmiksgvJ08KgncRjZEt7GdMO7gV8hV0DD0uY%3D&amp;reserved=0
>
> >
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> eedesktop.org%2Fgstreamer%2Fgst-plugins-good%2F-%2Fmerge_requests%2F
> 1099&amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa
> 8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> C637732921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw
> MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sda
> ta=e6hSDpiP2scLN5C0f8Fb%2FoMbt8k4zC45qWPrQpG%2Fe5A%3D&amp;rese
> rved=0
>
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> eedesktop.org%2Fgstreamer%2Fgstreamer%2F-%2Fmerge_requests%2F1381&
> amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa8e140
> 8d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6377
> 32921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiL
> CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=xkX
> WjCsgVaLb0wZgfaXDMiBchtbJBNnwtZNhKe42k5o%3D&amp;reserved=0
>
>
> regards,
> Nicolas
>
> [JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) FM1_BT_B ...
> Timeout
The vpu can't decode this stream.

> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> AMP_D_Hisilicon_3 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> AMP_E_Hisilicon_3 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> AMP_F_Hisilicon_3 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> BUMPING_A_ericsson_1 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> CONFWIN_A_Sony_1 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> DELTAQP_A_BRCM_4 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> MVDL1ZERO_A_docomo_4 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> NoOutPrior_A_Qualcomm_1 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> NoOutPrior_B_Qualcomm_1 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> NUT_A_ericsson_5 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> PICSIZE_A_Bossen_1 ... Error
The size is 1056x8440, vpu doesn't support it
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> PICSIZE_B_Bossen_1 ... Error
The size is 8440x1056, vpu doesn't support it
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> PICSIZE_C_Bossen_1 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> PICSIZE_D_Bossen_1 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> RAP_B_Bossen_2 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> SAODBLK_A_MainConcept_4 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> SAODBLK_B_MainConcept_4 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> TILES_A_Cisco_2 ... Timeout
Performance issue of videoconvert
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> TILES_B_Cisco_1 ... Timeout
Performance issue of videoconvert, but assert fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> TSUNEQBD_A_MAIN10_Technicolor_2 ... Fail
> [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> VPSSPSPPS_A_MainConcept_1 ... Error
Gstream report error:
ERROR Error from element /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/v4l2h265dec:v4l2h265dec0: Could not read from resource.
Could not read from resource.
../sys/v4l2/gstv4l2bufferpool.c(1155): gst_v4l2_buffer_pool_poll (): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/v4l2h265dec:v4l2h265dec0:
poll error 1: Success (0) for /mnt/fluster/resources/JCT-VC-HEVC_V1/VPSSPSPPS_A_MainConcept_1/VPSSPSPPS_A_MainConcept_1.bin

> [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0)
> vp80-03-segmentation-1425 ... Timeout
Firmware bug, after apply driver workaround, assert fail
> [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0)
> vp80-03-segmentation-1436 ... Fail
>
>


2021-11-24 14:57:46

by Nicolas Dufresne

[permalink] [raw]
Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver

Le mercredi 24 novembre 2021 à 09:00 +0000, Ming Qian a écrit :
> > -----Original Message-----
> > From: Nicolas Dufresne [mailto:[email protected]]
> > Sent: Wednesday, November 24, 2021 3:23 AM
> > To: Ming Qian <[email protected]>; [email protected];
> > [email protected]; [email protected]; [email protected]
> > Cc: [email protected]; [email protected]; [email protected];
> > dl-linux-imx <[email protected]>; Aisheng Dong <[email protected]>;
> > [email protected]; [email protected];
> > [email protected]; [email protected]
> > Subject: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver
> >
> > Caution: EXT Email
> >
> > Hi Ming,
> >
> > For the patchset:
> >
> > Tested-By: Nicolas Dufresne <[email protected]>
> >
> > I've validated encoding manually with GStreamer:
> >
> >   gst-launch-1.0 videotestsrc num-buffers=100 ! v4l2h264enc !
> > video/x-h264,profile=main,level=\(string\)2 ! h264parse ! qtmux ! filesink
> > location=test.mov
> >
> > I've also verify the that the number of frames was exactly 100, this is
> > common
> > issue with V4L2 encoders. Then I have validated VP8, H.264 and H.265
> > decoders
> > using fluster [0] with this PR [1] applied. You can find full summary at the
> > end
> > of this email. Markdown report didn't get generated, I will have to check
> > with
> > upstream fluster if there is a regression.
> >
> > $> ./fluster.py run -s -so amphion-imx8qxp-conformance.md -d
> > GStreamer-VP8-V4L2-Gst1.0 GStreamer-H.264-V4L2-Gst1.0
> > GStreamer-H.265-V4L2-Gst1.0
> >
> > VP8: Ran 59/61 tests successfully in 131.788 secs
> > H.264: Ran 75/135 tests successfully in 501.206 secs
> > H.265: Ran 126/147 tests successfully in 1131.933 secs
> >
> > Note that in mainline, only 1 core get fired and is kept at its lowest
> > possible
> > frequency, so perhaps it may cause some of the timeout seen. The driver is
> > overall functional, and I would like to thank you for this extra work. Also,
> > note that this very first time I run Fluster over the stateful CODEC
> > wrappers. I
> > will need to run this on more platforms to locate the GStreamer specific
> > fail.
> >
> > VP8 note, conformance vector vp80-03-segmentation-1425 cause a hang but it
> > then
> > recover:
> >
> > [ 8264.851841] amphion-vpu-core 2d040000.vpu_core: [0] sync session
> > timeout
> > [ 8264.858634] amphion-vpu-core 2d040000.vpu_core: [0] send cmd(0x2) fail
> > [ 8264.867992] amphion-vpu-core 2d040000.vpu_core: [0] start fail
> > [ 8264.905173] amphion-vpu-core 2d040000.vpu_core: reset hang core
> >
>
> HI Nicolas
>
>     There is a bug in firmware that if send a command to firmware too close
> after stop cmd,
> The firmware may enter wfi wrong, and led to hang issue you met in vp80-03-
> segmentation-1425.
> I'll add a workaround in driver that add a delay after send stop cmd to
> firmware in next version.
>
>     Because the amphion's vpu doesn't support to output i420, so the test will
> convert nv12_8l128 to i420 by videoconvert, it leds to most of timeout
> failure.
>
>     The FM1_BT_B.h264 can't be decoded by amphion's vpu, the vpu is keeping
> parse sequence header, and it led to timeout failure.
>
>     I run the test and change the timeout to 300, then most of timeout
> failures are gone. Besides that, my result is almost as same as yours.

Oh my bad, I forgot about the short timeout, with a single core on top of all
this, that makes sense.

>
>     The failures of assertion error means that the vpu's output is different
> from the pattern, I think it should be the vpu's limitation.

Most likely, best way to know is to keep the results (--keep) and visually look
at the result. My expectation with this is that we get decent results and that
none of the issue render the VPU or the system unusable. Each company is then
responsible for their CODEC conformance, specially with stateful, there is very
little that userspace will be responsible with. Though if you do find issue that
is clearly caused by GStreaner, let me know, I'll be more then happy to fix.
Most VPU providers will also buy proprietary conformance suite (like Allegro),
which covers much more then basic conformance.

>
> >
> > See comments about your GStreamer MR below...
> >
> > [0]
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.
> > com%2Ffluendo%2Ffluster&amp;data=04%7C01%7Cming.qian%40nxp.com%7
> > C45d33490bfe546aa8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c3
> > 01635%7C0%7C0%7C637732921809373007%7CUnknown%7CTWFpbGZsb3d
> > 8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3
> > D%7C3000&amp;sdata=bBqADaZ9ZN00SbCPalQE5fN740hB2bMUxHDL4QEki
> > mg%3D&amp;reserved=0
> > [1]
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.
> > com%2Ffluendo%2Ffluster%2Fpull%2F98&amp;data=04%7C01%7Cming.qian
> > %40nxp.com%7C45d33490bfe546aa8e1408d9aeb6a822%7C686ea1d3bc2b4c
> > 6fa92cd99c5c301635%7C0%7C0%7C637732921809382989%7CUnknown%7C
> > TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLC
> > JXVCI6Mn0%3D%7C3000&amp;sdata=90dUC%2FNzK%2BcFNSMwY7bgQ0iD8
> > ctBwU%2FMhyrLoBBEf4g%3D&amp;reserved=0
> >
> >
> > [...]
> > > encoder is tested with gstreamer
> > > decoder is tested with gstreamer, but the following patches are required:
> >
> > GStreamer is now a single repo (and using main branch instead of master), I
> > have
> > migrated your 3 MRs into 2 MRs.
>
> Thank you very much.
> >
> > >
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> > eedesktop.org%2Fgstreamer%2Fgst-plugins-base%2F-%2Fmerge_requests%2F
> > 1252&amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa
> > 8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> > C637732921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw
> > MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sda
> > ta=G4PnqxRsnPjQtV%2FUcp4dkoz9fAGxkOv%2FzKR47RaHtu0%3D&amp;reser
> > ved=0
> > >
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> > eedesktop.org%2Fgstreamer%2Fgst-plugins-good%2F-%2Fmerge_requests%2F
> > 1098&amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa
> > 8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> > C637732921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw
> > MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sda
> > ta=h6nEISAaiG54NPz9Xw0MiSNDx2QxWsNWyG7FLSAaLgI%3D&amp;reserved
> > =0
> >
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> > eedesktop.org%2Fgstreamer%2Fgstreamer%2F-%2Fmerge_requests%2F1379&
> > amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa8e140
> > 8d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6377
> > 32921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiL
> > CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=PFe
> > Db4v%2BmiksgvJ08KgncRjZEt7GdMO7gV8hV0DD0uY%3D&amp;reserved=0
> >
> > >
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> > eedesktop.org%2Fgstreamer%2Fgst-plugins-good%2F-%2Fmerge_requests%2F
> > 1099&amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa
> > 8e1408d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> > C637732921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAw
> > MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sda
> > ta=e6hSDpiP2scLN5C0f8Fb%2FoMbt8k4zC45qWPrQpG%2Fe5A%3D&amp;rese
> > rved=0
> >
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.fr
> > eedesktop.org%2Fgstreamer%2Fgstreamer%2F-%2Fmerge_requests%2F1381&
> > amp;data=04%7C01%7Cming.qian%40nxp.com%7C45d33490bfe546aa8e140
> > 8d9aeb6a822%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6377
> > 32921809382989%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiL
> > CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=xkX
> > WjCsgVaLb0wZgfaXDMiBchtbJBNnwtZNhKe42k5o%3D&amp;reserved=0
> >
> >
> > regards,
> > Nicolas
> >
> > [JVT-AVC_V1] (GStreamer-H.264-V4L2-Gst1.0) FM1_BT_B ...
> > Timeout
> The vpu can't decode this stream.
>
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > AMP_D_Hisilicon_3 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > AMP_E_Hisilicon_3 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > AMP_F_Hisilicon_3 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > BUMPING_A_ericsson_1 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > CONFWIN_A_Sony_1 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > DELTAQP_A_BRCM_4 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > MVDL1ZERO_A_docomo_4 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > NoOutPrior_A_Qualcomm_1 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > NoOutPrior_B_Qualcomm_1 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > NUT_A_ericsson_5 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > PICSIZE_A_Bossen_1 ... Error
> The size is 1056x8440, vpu doesn't support it
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > PICSIZE_B_Bossen_1 ... Error
> The size is 8440x1056, vpu doesn't support it
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > PICSIZE_C_Bossen_1 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > PICSIZE_D_Bossen_1 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > RAP_B_Bossen_2 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > SAODBLK_A_MainConcept_4 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > SAODBLK_B_MainConcept_4 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > TILES_A_Cisco_2 ... Timeout
> Performance issue of videoconvert
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > TILES_B_Cisco_1 ... Timeout
> Performance issue of videoconvert, but assert fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > TSUNEQBD_A_MAIN10_Technicolor_2 ... Fail
> > [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > VPSSPSPPS_A_MainConcept_1 ... Error
> Gstream report error:
> ERROR Error from element
> /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/v4l2
> h265dec:v4l2h265dec0: Could not read from resource.
> Could not read from resource.
> ../sys/v4l2/gstv4l2bufferpool.c(1155): gst_v4l2_buffer_pool_poll ():
> /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/v4l2
> h265dec:v4l2h265dec0:
> poll error 1: Success (0) for /mnt/fluster/resources/JCT-VC-
> HEVC_V1/VPSSPSPPS_A_MainConcept_1/VPSSPSPPS_A_MainConcept_1.bin
>  
> > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0)
> > vp80-03-segmentation-1425 ... Timeout
> Firmware bug, after apply driver workaround, assert fail
> > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2-Gst1.0)
> > vp80-03-segmentation-1436 ... Fail
> >
> >
>


2021-11-25 05:27:46

by Ming Qian

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver

> -----Original Message-----
> From: Nicolas Dufresne [mailto:[email protected]]
> Sent: Wednesday, November 24, 2021 10:58 PM
> To: Ming Qian <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected]
> Cc: [email protected]; [email protected]; [email protected];
> dl-linux-imx <[email protected]>; Aisheng Dong <[email protected]>;
> [email protected]; [email protected];
> [email protected]; [email protected]
> Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder
> driver
>
> Caution: EXT Email
>
> Le mercredi 24 novembre 2021 ? 09:00 +0000, Ming Qian a ?crit :
> > > -----Original Message-----
> > > From: Nicolas Dufresne [mailto:[email protected]]
> > > Sent: Wednesday, November 24, 2021 3:23 AM
> > > To: Ming Qian <[email protected]>; [email protected];
> > > [email protected]; [email protected]; [email protected]
> > > Cc: [email protected]; [email protected];
> > > [email protected]; dl-linux-imx <[email protected]>; Aisheng Dong
> > > <[email protected]>; [email protected];
> > > [email protected]; [email protected];
> > > [email protected]
> > > Subject: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder
> > > driver
> > >
> > > Caution: EXT Email
> > >
> > > Hi Ming,
> > >
> > > For the patchset:
> > >
> > > Tested-By: Nicolas Dufresne <[email protected]>
> > >
> > > I've validated encoding manually with GStreamer:
> > >
> > > gst-launch-1.0 videotestsrc num-buffers=100 ! v4l2h264enc !
> > > video/x-h264,profile=main,level=\(string\)2 ! h264parse ! qtmux !
> > > filesink location=test.mov
> > >
> > > I've also verify the that the number of frames was exactly 100, this
> > > is common issue with V4L2 encoders. Then I have validated VP8, H.264
> > > and H.265 decoders using fluster [0] with this PR [1] applied. You
> > > can find full summary at the end of this email. Markdown report
> > > didn't get generated, I will have to check with upstream fluster if
> > > there is a regression.
> > >
> > > $> ./fluster.py run -s -so amphion-imx8qxp-conformance.md -d
> > > GStreamer-VP8-V4L2-Gst1.0 GStreamer-H.264-V4L2-Gst1.0
> > > GStreamer-H.265-V4L2-Gst1.0
> > >
> > > VP8: Ran 59/61 tests successfully in 131.788 secs
> > > H.264: Ran 75/135 tests successfully in 501.206 secs
> > > H.265: Ran 126/147 tests successfully in 1131.933 secs
> > >
> > > Note that in mainline, only 1 core get fired and is kept at its
> > > lowest possible frequency, so perhaps it may cause some of the
> > > timeout seen. The driver is overall functional, and I would like to
> > > thank you for this extra work. Also, note that this very first time
> > > I run Fluster over the stateful CODEC wrappers. I will need to run
> > > this on more platforms to locate the GStreamer specific fail.
> > >
> > > VP8 note, conformance vector vp80-03-segmentation-1425 cause a hang
> > > but it then
> > > recover:
> > >
> > > [ 8264.851841] amphion-vpu-core 2d040000.vpu_core: [0] sync session
> > > timeout [ 8264.858634] amphion-vpu-core 2d040000.vpu_core: [0] send
> > > cmd(0x2) fail [ 8264.867992] amphion-vpu-core 2d040000.vpu_core: [0]
> > > start fail [ 8264.905173] amphion-vpu-core 2d040000.vpu_core: reset
> > > hang core
> > >
> >
> > HI Nicolas
> >
> > There is a bug in firmware that if send a command to firmware too
> > close after stop cmd, The firmware may enter wfi wrong, and led to
> > hang issue you met in vp80-03- segmentation-1425.
> > I'll add a workaround in driver that add a delay after send stop cmd
> > to firmware in next version.
> >
> > Because the amphion's vpu doesn't support to output i420, so the
> > test will convert nv12_8l128 to i420 by videoconvert, it leds to most
> > of timeout failure.
> >
> > The FM1_BT_B.h264 can't be decoded by amphion's vpu, the vpu is
> > keeping parse sequence header, and it led to timeout failure.
> >
> > I run the test and change the timeout to 300, then most of timeout
> > failures are gone. Besides that, my result is almost as same as yours.
>
> Oh my bad, I forgot about the short timeout, with a single core on top of all
> this, that makes sense.
>
> >
> > The failures of assertion error means that the vpu's output is
> > different from the pattern, I think it should be the vpu's limitation.
>
> Most likely, best way to know is to keep the results (--keep) and visually look at
> the result. My expectation with this is that we get decent results and that none
> of the issue render the VPU or the system unusable. Each company is then
> responsible for their CODEC conformance, specially with stateful, there is very
> little that userspace will be responsible with. Though if you do find issue that is
> clearly caused by GStreaner, let me know, I'll be more then happy to fix.
> Most VPU providers will also buy proprietary conformance suite (like Allegro),
> which covers much more then basic conformance.
>

For test [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) VPSSPSPPS_A_MainConcept_1,
The vpu report an unsupported message to driver, so driver report pollerr to gstreamer.
But this stream can be decoded using the amphion vpu when I test it using our unit test,
I checked the difference, there are many vps, sps and pps at the beginning,
gstreamer will skip the first vpu and two pps, totally skip 56 bytes. It leds to vpu can't decode
And our unit test won't skip anthing, so the vpu can decode the stream.


2021-11-25 15:45:46

by Nicolas Dufresne

[permalink] [raw]
Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver

Le jeudi 25 novembre 2021 à 05:25 +0000, Ming Qian a écrit :
> For test [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0) VPSSPSPPS_A_MainConcept_1,
> The vpu report an unsupported message to driver, so driver report pollerr to gstreamer.
> But this stream can be decoded using the amphion vpu when I test it using our unit test,
> I checked the difference, there are many vps, sps and pps at the beginning,
> gstreamer will skip the first vpu and two pps, totally skip 56 bytes. It leds to vpu can't decode
> And our unit test won't skip anthing, so the vpu can decode the stream.

This specific test triggers a bug in GStreamer HEVC parser, I'm aware of this
one, and it is on my todo to fix (just not as trivial as it looks like, the VCL
nal detection code was implemented wrong and that ended up leaking into the rest
of the design). This specific test will of course be marked and skipped for CI
test that uses GStreamer.

regards,
Nicolas


2021-11-26 06:34:01

by Ming Qian

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver

> -----Original Message-----
> From: Nicolas Dufresne [mailto:[email protected]]
> Sent: Thursday, November 25, 2021 11:36 PM
> To: Ming Qian <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected]
> Cc: [email protected]; [email protected]; [email protected];
> dl-linux-imx <[email protected]>; Aisheng Dong <[email protected]>;
> [email protected]; [email protected];
> [email protected]; [email protected]
> Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder
> driver
>
> Caution: EXT Email
>
> Le jeudi 25 novembre 2021 à 05:25 +0000, Ming Qian a écrit :
> > For test [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > VPSSPSPPS_A_MainConcept_1, The vpu report an unsupported message to
> driver, so driver report pollerr to gstreamer.
> > But this stream can be decoded using the amphion vpu when I test it
> > using our unit test, I checked the difference, there are many vps, sps
> > and pps at the beginning, gstreamer will skip the first vpu and two
> > pps, totally skip 56 bytes. It leds to vpu can't decode And our unit test won't
> skip anthing, so the vpu can decode the stream.
>
> This specific test triggers a bug in GStreamer HEVC parser, I'm aware of this
> one, and it is on my todo to fix (just not as trivial as it looks like, the VCL nal
> detection code was implemented wrong and that ended up leaking into the
> rest of the design). This specific test will of course be marked and skipped for CI
> test that uses GStreamer.
>
> regards,
> Nicolas

Hi Nicolas,

For the h264 decoder test, If I test with our unit test tool, the result is 124/135 tests successfully,
But only 75/135 tests successfully when test using gstreamer.
There are 49 tests with different results, and all of the 49 test streams are interlaced stream.
The amphion vpu will output the interlaced frame directly, it won't merge the interlaced two parts into one progressive frame.
And the gstreamer tiled unpack function(unpack_NV12_TILED) won't handle the interlaced case, so the output frame is abnormal, and led to test fail.
I think it should be a hardware limitation of the amphion vpu. And maybe the gstreamer videoconvert can handle it.
The interlaced list is as below:
[JVT-AVC_V1] cabac_mot_fld0_full
[JVT-AVC_V1] cabac_mot_mbaff0_full
[JVT-AVC_V1] cabac_mot_picaff0_full
[JVT-AVC_V1] CABREF3_Sand_D
[JVT-AVC_V1] CAFI1_SVA_C
[JVT-AVC_V1] CAMA1_Sony_C
[JVT-AVC_V1] CAMA1_TOSHIBA_B
[JVT-AVC_V1] CAMA3_Sand_E
[JVT-AVC_V1] CAMACI3_Sony_C
[JVT-AVC_V1] CAMANL1_TOSHIBA_B
[JVT-AVC_V1] CAMANL2_TOSHIBA_B
[JVT-AVC_V1] CAMANL3_Sand_E
[JVT-AVC_V1] CAMASL3_Sony_B
[JVT-AVC_V1] CAMP_MOT_MBAFF_L30
[JVT-AVC_V1] CAMP_MOT_MBAFF_L31
[JVT-AVC_V1] CANLMA2_Sony_C
[JVT-AVC_V1] CANLMA3_Sony_C
[JVT-AVC_V1] CAPA1_TOSHIBA_B
[JVT-AVC_V1] CAPAMA3_Sand_F
[JVT-AVC_V1] cavlc_mot_fld0_full_B
[JVT-AVC_V1] cavlc_mot_mbaff0_full_B
[JVT-AVC_V1] cavlc_mot_picaff0_full_B
[JVT-AVC_V1] CVCANLMA2_Sony_C
[JVT-AVC_V1] CVFI1_Sony_D
[JVT-AVC_V1] CVFI1_SVA_C
[JVT-AVC_V1] CVFI2_Sony_H
[JVT-AVC_V1] CVFI2_SVA_C
[JVT-AVC_V1] CVMA1_Sony_D
[JVT-AVC_V1] CVMA1_TOSHIBA_B
[JVT-AVC_V1] CVMANL1_TOSHIBA_B
[JVT-AVC_V1] CVMANL2_TOSHIBA_B
[JVT-AVC_V1] CVMAPAQP3_Sony_E
[JVT-AVC_V1] CVMAQP2_Sony_G
[JVT-AVC_V1] CVMAQP3_Sony_D
[JVT-AVC_V1] CVMP_MOT_FLD_L30_B
[JVT-AVC_V1] CVMP_MOT_FRM_L31_B
[JVT-AVC_V1] CVNLFI1_Sony_C
[JVT-AVC_V1] CVNLFI2_Sony_H
[JVT-AVC_V1] CVPA1_TOSHIBA_B
[JVT-AVC_V1] FI1_Sony_E
[JVT-AVC_V1] MR6_BT_B
[JVT-AVC_V1] MR7_BT_B
[JVT-AVC_V1] MR8_BT_B
[JVT-AVC_V1] MR9_BT_B
[JVT-AVC_V1] Sharp_MP_Field_1_B
[JVT-AVC_V1] Sharp_MP_Field_2_B
[JVT-AVC_V1] Sharp_MP_Field_3_B
[JVT-AVC_V1] Sharp_MP_PAFF_1r2
[JVT-AVC_V1] Sharp_MP_PAFF_2r

2021-12-03 04:10:06

by Nicolas Dufresne

[permalink] [raw]
Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver

Le vendredi 26 novembre 2021 à 06:31 +0000, Ming Qian a écrit :
> > -----Original Message-----
> > From: Nicolas Dufresne [mailto:[email protected]]
> > Sent: Thursday, November 25, 2021 11:36 PM
> > To: Ming Qian <[email protected]>; [email protected];
> > [email protected]; [email protected]; [email protected]
> > Cc: [email protected]; [email protected]; [email protected];
> > dl-linux-imx <[email protected]>; Aisheng Dong <[email protected]>;
> > [email protected]; [email protected];
> > [email protected]; [email protected]
> > Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder
> > driver
> >
> > Caution: EXT Email
> >
> > Le jeudi 25 novembre 2021 à 05:25 +0000, Ming Qian a écrit :
> > > For test [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > > VPSSPSPPS_A_MainConcept_1, The vpu report an unsupported message to
> > driver, so driver report pollerr to gstreamer.
> > > But this stream can be decoded using the amphion vpu when I test it
> > > using our unit test, I checked the difference, there are many vps, sps
> > > and pps at the beginning, gstreamer will skip the first vpu and two
> > > pps, totally skip 56 bytes. It leds to vpu can't decode And our unit test
> > > won't
> > skip anthing, so the vpu can decode the stream.
> >
> > This specific test triggers a bug in GStreamer HEVC parser, I'm aware of
> > this
> > one, and it is on my todo to fix (just not as trivial as it looks like, the
> > VCL nal
> > detection code was implemented wrong and that ended up leaking into the
> > rest of the design). This specific test will of course be marked and skipped
> > for CI
> > test that uses GStreamer.
> >
> > regards,
> > Nicolas
>
> Hi Nicolas,
>
>     For the h264 decoder test, If I test with our unit test tool, the result
> is 124/135 tests successfully,
> But only 75/135 tests successfully when test using gstreamer.
>     There are 49 tests with different results, and all of the 49 test streams
> are interlaced stream.
> The amphion vpu will output the interlaced frame directly, it won't merge the
> interlaced two parts into one progressive frame.
>      And the gstreamer tiled unpack function(unpack_NV12_TILED) won't handle
> the interlaced case, so the output frame is abnormal, and led to test fail.
>      I think it should be a hardware limitation of the amphion vpu. And maybe

If this is the case, it needs to be signaled as ALTERNATE (if you have 1 v4l2
buffer per field) or SEQ if they are stored in the same v4l2_buffer but on top
of each other instead of interleaved.

Some bit about this might not we all wired properly, I have only tested
alternate field for capture devices (Xilinx ZinqMP). Please check the signalling
of interlace field in your driver, I'll check the state of GStreamer in this
regard.

> the gstreamer videoconvert can handle it.
> The interlaced list is as below:
> [JVT-AVC_V1] cabac_mot_fld0_full
> [JVT-AVC_V1] cabac_mot_mbaff0_full
> [JVT-AVC_V1] cabac_mot_picaff0_full
> [JVT-AVC_V1] CABREF3_Sand_D
> [JVT-AVC_V1] CAFI1_SVA_C
> [JVT-AVC_V1] CAMA1_Sony_C
> [JVT-AVC_V1] CAMA1_TOSHIBA_B
> [JVT-AVC_V1] CAMA3_Sand_E
> [JVT-AVC_V1] CAMACI3_Sony_C
> [JVT-AVC_V1] CAMANL1_TOSHIBA_B
> [JVT-AVC_V1] CAMANL2_TOSHIBA_B
> [JVT-AVC_V1] CAMANL3_Sand_E
> [JVT-AVC_V1] CAMASL3_Sony_B
> [JVT-AVC_V1] CAMP_MOT_MBAFF_L30
> [JVT-AVC_V1] CAMP_MOT_MBAFF_L31
> [JVT-AVC_V1] CANLMA2_Sony_C
> [JVT-AVC_V1] CANLMA3_Sony_C
> [JVT-AVC_V1] CAPA1_TOSHIBA_B
> [JVT-AVC_V1] CAPAMA3_Sand_F
> [JVT-AVC_V1] cavlc_mot_fld0_full_B
> [JVT-AVC_V1] cavlc_mot_mbaff0_full_B
> [JVT-AVC_V1] cavlc_mot_picaff0_full_B
> [JVT-AVC_V1] CVCANLMA2_Sony_C
> [JVT-AVC_V1] CVFI1_Sony_D
> [JVT-AVC_V1] CVFI1_SVA_C
> [JVT-AVC_V1] CVFI2_Sony_H
> [JVT-AVC_V1] CVFI2_SVA_C
> [JVT-AVC_V1] CVMA1_Sony_D
> [JVT-AVC_V1] CVMA1_TOSHIBA_B
> [JVT-AVC_V1] CVMANL1_TOSHIBA_B
> [JVT-AVC_V1] CVMANL2_TOSHIBA_B
> [JVT-AVC_V1] CVMAPAQP3_Sony_E
> [JVT-AVC_V1] CVMAQP2_Sony_G
> [JVT-AVC_V1] CVMAQP3_Sony_D
> [JVT-AVC_V1] CVMP_MOT_FLD_L30_B
> [JVT-AVC_V1] CVMP_MOT_FRM_L31_B
> [JVT-AVC_V1] CVNLFI1_Sony_C
> [JVT-AVC_V1] CVNLFI2_Sony_H
> [JVT-AVC_V1] CVPA1_TOSHIBA_B
> [JVT-AVC_V1] FI1_Sony_E
> [JVT-AVC_V1] MR6_BT_B
> [JVT-AVC_V1] MR7_BT_B
> [JVT-AVC_V1] MR8_BT_B
> [JVT-AVC_V1] MR9_BT_B
> [JVT-AVC_V1] Sharp_MP_Field_1_B
> [JVT-AVC_V1] Sharp_MP_Field_2_B
> [JVT-AVC_V1] Sharp_MP_Field_3_B
> [JVT-AVC_V1] Sharp_MP_PAFF_1r2
> [JVT-AVC_V1] Sharp_MP_PAFF_2r
>


2021-12-03 05:20:17

by Ming Qian

[permalink] [raw]
Subject: RE: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder driver

> -----Original Message-----
> From: Nicolas Dufresne [mailto:[email protected]]
> Sent: Friday, December 3, 2021 12:10 PM
> To: Ming Qian <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected]
> Cc: [email protected]; [email protected]; [email protected];
> dl-linux-imx <[email protected]>; Aisheng Dong <[email protected]>;
> [email protected]; [email protected];
> [email protected]; [email protected]
> Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video decoder/encoder
> driver
>
> Caution: EXT Email
>
> Le vendredi 26 novembre 2021 à 06:31 +0000, Ming Qian a écrit :
> > > -----Original Message-----
> > > From: Nicolas Dufresne [mailto:[email protected]]
> > > Sent: Thursday, November 25, 2021 11:36 PM
> > > To: Ming Qian <[email protected]>; [email protected];
> > > [email protected]; [email protected]; [email protected]
> > > Cc: [email protected]; [email protected];
> > > [email protected]; dl-linux-imx <[email protected]>; Aisheng Dong
> > > <[email protected]>; [email protected];
> > > [email protected]; [email protected];
> > > [email protected]
> > > Subject: Re: [EXT] Re: [PATCH v12 00/13] amphion video
> > > decoder/encoder driver
> > >
> > > Caution: EXT Email
> > >
> > > Le jeudi 25 novembre 2021 à 05:25 +0000, Ming Qian a écrit :
> > > > For test [JCT-VC-HEVC_V1] (GStreamer-H.265-V4L2-Gst1.0)
> > > > VPSSPSPPS_A_MainConcept_1, The vpu report an unsupported message
> > > > to
> > > driver, so driver report pollerr to gstreamer.
> > > > But this stream can be decoded using the amphion vpu when I test
> > > > it using our unit test, I checked the difference, there are many
> > > > vps, sps and pps at the beginning, gstreamer will skip the first
> > > > vpu and two pps, totally skip 56 bytes. It leds to vpu can't
> > > > decode And our unit test won't
> > > skip anthing, so the vpu can decode the stream.
> > >
> > > This specific test triggers a bug in GStreamer HEVC parser, I'm
> > > aware of this one, and it is on my todo to fix (just not as trivial
> > > as it looks like, the VCL nal detection code was implemented wrong
> > > and that ended up leaking into the rest of the design). This
> > > specific test will of course be marked and skipped for CI test that
> > > uses GStreamer.
> > >
> > > regards,
> > > Nicolas
> >
> > Hi Nicolas,
> >
> > For the h264 decoder test, If I test with our unit test tool, the
> > result is 124/135 tests successfully, But only 75/135 tests
> > successfully when test using gstreamer.
> > There are 49 tests with different results, and all of the 49 test
> > streams are interlaced stream.
> > The amphion vpu will output the interlaced frame directly, it won't
> > merge the interlaced two parts into one progressive frame.
> > And the gstreamer tiled unpack function(unpack_NV12_TILED) won't
> > handle the interlaced case, so the output frame is abnormal, and led to test
> fail.
> > I think it should be a hardware limitation of the amphion vpu.
> > And maybe
>
> If this is the case, it needs to be signaled as ALTERNATE (if you have 1 v4l2
> buffer per field) or SEQ if they are stored in the same v4l2_buffer but on top of
> each other instead of interleaved.
>
> Some bit about this might not we all wired properly, I have only tested
> alternate field for capture devices (Xilinx ZinqMP). Please check the signalling
> of interlace field in your driver, I'll check the state of GStreamer in this regard.


The two fields are stored in the same v4l2_buffer, I'll change the filed to V4L2_FIELD_SEQ_TB and test it again.

>
> > the gstreamer videoconvert can handle it.
> > The interlaced list is as below:
> > [JVT-AVC_V1] cabac_mot_fld0_full
> > [JVT-AVC_V1] cabac_mot_mbaff0_full
> > [JVT-AVC_V1] cabac_mot_picaff0_full
> > [JVT-AVC_V1] CABREF3_Sand_D
> > [JVT-AVC_V1] CAFI1_SVA_C
> > [JVT-AVC_V1] CAMA1_Sony_C
> > [JVT-AVC_V1] CAMA1_TOSHIBA_B
> > [JVT-AVC_V1] CAMA3_Sand_E
> > [JVT-AVC_V1] CAMACI3_Sony_C
> > [JVT-AVC_V1] CAMANL1_TOSHIBA_B
> > [JVT-AVC_V1] CAMANL2_TOSHIBA_B
> > [JVT-AVC_V1] CAMANL3_Sand_E
> > [JVT-AVC_V1] CAMASL3_Sony_B
> > [JVT-AVC_V1] CAMP_MOT_MBAFF_L30
> > [JVT-AVC_V1] CAMP_MOT_MBAFF_L31
> > [JVT-AVC_V1] CANLMA2_Sony_C
> > [JVT-AVC_V1] CANLMA3_Sony_C
> > [JVT-AVC_V1] CAPA1_TOSHIBA_B
> > [JVT-AVC_V1] CAPAMA3_Sand_F
> > [JVT-AVC_V1] cavlc_mot_fld0_full_B
> > [JVT-AVC_V1] cavlc_mot_mbaff0_full_B
> > [JVT-AVC_V1] cavlc_mot_picaff0_full_B
> > [JVT-AVC_V1] CVCANLMA2_Sony_C
> > [JVT-AVC_V1] CVFI1_Sony_D
> > [JVT-AVC_V1] CVFI1_SVA_C
> > [JVT-AVC_V1] CVFI2_Sony_H
> > [JVT-AVC_V1] CVFI2_SVA_C
> > [JVT-AVC_V1] CVMA1_Sony_D
> > [JVT-AVC_V1] CVMA1_TOSHIBA_B
> > [JVT-AVC_V1] CVMANL1_TOSHIBA_B
> > [JVT-AVC_V1] CVMANL2_TOSHIBA_B
> > [JVT-AVC_V1] CVMAPAQP3_Sony_E
> > [JVT-AVC_V1] CVMAQP2_Sony_G
> > [JVT-AVC_V1] CVMAQP3_Sony_D
> > [JVT-AVC_V1] CVMP_MOT_FLD_L30_B
> > [JVT-AVC_V1] CVMP_MOT_FRM_L31_B
> > [JVT-AVC_V1] CVNLFI1_Sony_C
> > [JVT-AVC_V1] CVNLFI2_Sony_H
> > [JVT-AVC_V1] CVPA1_TOSHIBA_B
> > [JVT-AVC_V1] FI1_Sony_E
> > [JVT-AVC_V1] MR6_BT_B
> > [JVT-AVC_V1] MR7_BT_B
> > [JVT-AVC_V1] MR8_BT_B
> > [JVT-AVC_V1] MR9_BT_B
> > [JVT-AVC_V1] Sharp_MP_Field_1_B
> > [JVT-AVC_V1] Sharp_MP_Field_2_B
> > [JVT-AVC_V1] Sharp_MP_Field_3_B
> > [JVT-AVC_V1] Sharp_MP_PAFF_1r2
> > [JVT-AVC_V1] Sharp_MP_PAFF_2r
> >