Message ID | 20200116133025.1903-1-narmstrong@baylibre.com (mailing list archive) |
---|---|
Headers | show |
Series | media: meson: vdec: Add compliant H264 support | expand |
Le jeudi 16 janvier 2020 à 14:30 +0100, Neil Armstrong a écrit : > Hello, > > This patch series aims to bring H.264 support as well as compliance update > to the amlogic stateful video decoder driver. > > The issue in the V1 patchset at [1] is solved by patch #1 following comments > and requirements from hans. It moves the full draining & stopped state tracking > and handling from vicodec to core v4l2-mem2mem. > > The vicodec changes still passes the v4l2-utils "media-test" tests, log at [5]: > [...] > vicodec media controller compliance tests > > Thu Jan 16 13:00:56 UTC 2020 > v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits > [...] > Summary: I've minimally tested this serie with GStreamer master. Play pause and seek seems to work reliably now. It's a little bit spamy with bbb_sunflower_1080p_30fps_normal.mp4: [ 725.304663] meson-vdec c8820000.video-codec: VIFIFO usage (16777763) > VIFIFO size (16777216) But there is no visual artifact or performance degradation. Tested-by: Nicolas Dufresne <nicolas@ndufresne.ca> > > Total for vicodec device /dev/media3: 7, Succeeded: 7, Failed: 0, Warnings: 0 > Total for vicodec device /dev/video13: 51, Succeeded: 51, Failed: 0, Warnings: 0 > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > Final Summary: 364, Succeeded: 364, Failed: 0, Warnings: 0 > Thu Jan 16 13:02:59 UTC 2020 > > With this, it also passes vdec v4l2-compliance with H264 streaming on Amlogic G12A > and Amlogic SM1 SoCs successfully. > > The compliance log is: > # v4l2-compliance --stream-from-hdr test-25fps.h264.hdr -s > v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits > > Compliance test for meson-vdec device /dev/video0: > > Driver Info: > Driver name : meson-vdec > Card type : Amlogic Video Decoder > Bus info : platform:meson-vdec > Driver version : 5.5.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 > > Required ioctls: > test VIDIOC_QUERYCAP: OK > > Allow for multiple opens: > test second /dev/video19 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: 2 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 (Not Supported) > 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) > > Test input 0: > > Streaming ioctls: > test read/write: OK (Not Supported) > test blocking wait: OK > Video Capture Multiplanar: Captured 60 buffers > test MMAP (select): OK > Video Capture Multiplanar: Captured 60 buffers > test MMAP (epoll): OK > test USERPTR (select): OK (Not Supported) > test DMABUF: Cannot test, specify --expbuf-device > > Total for meson-vdec device /dev/video0: 49, Succeeded: 49, Failed: 0, Warnings: 0 > > > Changes since v3 at [3]: > - Fixed vicodec compliance > - Fixed vdec compliance with v4l2 state management > - fixed doc errors for v4l2-mem2mem.h > > Changes since v2 at [2]: > - Move full draining & stopped state tracking into core v4l2-mem2mem > - Adapt vicodec to use the core v4l2-mem2mem draining & stopped state tracking > > Changes since v1 at [1]: > - fixed output_size is never used reported by hans > - rebased on G12A and SM1 patches > - added handling of qbuf after STREAMON and STOP before enought buffer queued > > [1] https://lore.kernel.org/linux-media/20191007145909.29979-1-mjourdan@baylibre.com > [2] https://lore.kernel.org/linux-media/20191126093733.32404-1-narmstrong@baylibre.com > [3] https://lore.kernel.org/linux-media/20191209122028.13714-1-narmstrong@baylibre.com > [4] https://people.freedesktop.org/~narmstrong/vicodec-compliance-7ead0e1856b89f2e19369af452bb03fd0cd16793-20200116.log > > Maxime Jourdan (2): > media: meson: vdec: bring up to compliance > media: meson: vdec: add H.264 decoding support > > Neil Armstrong (2): > media: v4l2-mem2mem: handle draining, stopped and next-buf-is-last > states > media: vicodec: use v4l2-mem2mem draining, stopped and > next-buf-is-last states handling > > drivers/media/platform/vicodec/vicodec-core.c | 162 ++---- > drivers/media/v4l2-core/v4l2-mem2mem.c | 172 ++++++- > drivers/staging/media/meson/vdec/Makefile | 2 +- > drivers/staging/media/meson/vdec/codec_h264.c | 482 ++++++++++++++++++ > drivers/staging/media/meson/vdec/codec_h264.h | 14 + > drivers/staging/media/meson/vdec/esparser.c | 58 +-- > drivers/staging/media/meson/vdec/vdec.c | 89 ++-- > drivers/staging/media/meson/vdec/vdec.h | 14 +- > .../staging/media/meson/vdec/vdec_helpers.c | 85 ++- > .../staging/media/meson/vdec/vdec_helpers.h | 6 +- > .../staging/media/meson/vdec/vdec_platform.c | 71 +++ > include/media/v4l2-mem2mem.h | 95 ++++ > 12 files changed, 1021 insertions(+), 229 deletions(-) > create mode 100644 drivers/staging/media/meson/vdec/codec_h264.c > create mode 100644 drivers/staging/media/meson/vdec/codec_h264.h >
Le samedi 01 février 2020 à 10:34 -0500, Nicolas Dufresne a écrit : > Le jeudi 16 janvier 2020 à 14:30 +0100, Neil Armstrong a écrit : > > Hello, > > > > This patch series aims to bring H.264 support as well as compliance update > > to the amlogic stateful video decoder driver. > > > > The issue in the V1 patchset at [1] is solved by patch #1 following comments > > and requirements from hans. It moves the full draining & stopped state tracking > > and handling from vicodec to core v4l2-mem2mem. > > > > The vicodec changes still passes the v4l2-utils "media-test" tests, log at [5]: > > [...] > > vicodec media controller compliance tests > > > > Thu Jan 16 13:00:56 UTC 2020 > > v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits > > [...] > > Summary: > > I've minimally tested this serie with GStreamer master. Play pause and > seek seems to work reliably now. It's a little bit spamy with > bbb_sunflower_1080p_30fps_normal.mp4: > > [ 725.304663] meson-vdec c8820000.video-codec: VIFIFO usage (16777763) > VIFIFO size (16777216) > > But there is no visual artifact or performance degradation. > > Tested-by: Nicolas Dufresne <nicolas@ndufresne.ca> Sorry, I just notice that with kmssink, seek is broken. The kernel reports a series of: [ 1065.046970] meson-vdec c8820000.video-codec: Buffer 0 done but it doesn't exist in m2m_ctx > > > Total for vicodec device /dev/media3: 7, Succeeded: 7, Failed: 0, Warnings: 0 > > Total for vicodec device /dev/video13: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > Final Summary: 364, Succeeded: 364, Failed: 0, Warnings: 0 > > Thu Jan 16 13:02:59 UTC 2020 > > > > With this, it also passes vdec v4l2-compliance with H264 streaming on Amlogic G12A > > and Amlogic SM1 SoCs successfully. > > > > The compliance log is: > > # v4l2-compliance --stream-from-hdr test-25fps.h264.hdr -s > > v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits > > > > Compliance test for meson-vdec device /dev/video0: > > > > Driver Info: > > Driver name : meson-vdec > > Card type : Amlogic Video Decoder > > Bus info : platform:meson-vdec > > Driver version : 5.5.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 > > > > Required ioctls: > > test VIDIOC_QUERYCAP: OK > > > > Allow for multiple opens: > > test second /dev/video19 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: 2 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 (Not Supported) > > 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) > > > > Test input 0: > > > > Streaming ioctls: > > test read/write: OK (Not Supported) > > test blocking wait: OK > > Video Capture Multiplanar: Captured 60 buffers > > test MMAP (select): OK > > Video Capture Multiplanar: Captured 60 buffers > > test MMAP (epoll): OK > > test USERPTR (select): OK (Not Supported) > > test DMABUF: Cannot test, specify --expbuf-device > > > > Total for meson-vdec device /dev/video0: 49, Succeeded: 49, Failed: 0, Warnings: 0 > > > > > > Changes since v3 at [3]: > > - Fixed vicodec compliance > > - Fixed vdec compliance with v4l2 state management > > - fixed doc errors for v4l2-mem2mem.h > > > > Changes since v2 at [2]: > > - Move full draining & stopped state tracking into core v4l2-mem2mem > > - Adapt vicodec to use the core v4l2-mem2mem draining & stopped state tracking > > > > Changes since v1 at [1]: > > - fixed output_size is never used reported by hans > > - rebased on G12A and SM1 patches > > - added handling of qbuf after STREAMON and STOP before enought buffer queued > > > > [1] https://lore.kernel.org/linux-media/20191007145909.29979-1-mjourdan@baylibre.com > > [2] https://lore.kernel.org/linux-media/20191126093733.32404-1-narmstrong@baylibre.com > > [3] https://lore.kernel.org/linux-media/20191209122028.13714-1-narmstrong@baylibre.com > > [4] https://people.freedesktop.org/~narmstrong/vicodec-compliance-7ead0e1856b89f2e19369af452bb03fd0cd16793-20200116.log > > > > Maxime Jourdan (2): > > media: meson: vdec: bring up to compliance > > media: meson: vdec: add H.264 decoding support > > > > Neil Armstrong (2): > > media: v4l2-mem2mem: handle draining, stopped and next-buf-is-last > > states > > media: vicodec: use v4l2-mem2mem draining, stopped and > > next-buf-is-last states handling > > > > drivers/media/platform/vicodec/vicodec-core.c | 162 ++---- > > drivers/media/v4l2-core/v4l2-mem2mem.c | 172 ++++++- > > drivers/staging/media/meson/vdec/Makefile | 2 +- > > drivers/staging/media/meson/vdec/codec_h264.c | 482 ++++++++++++++++++ > > drivers/staging/media/meson/vdec/codec_h264.h | 14 + > > drivers/staging/media/meson/vdec/esparser.c | 58 +-- > > drivers/staging/media/meson/vdec/vdec.c | 89 ++-- > > drivers/staging/media/meson/vdec/vdec.h | 14 +- > > .../staging/media/meson/vdec/vdec_helpers.c | 85 ++- > > .../staging/media/meson/vdec/vdec_helpers.h | 6 +- > > .../staging/media/meson/vdec/vdec_platform.c | 71 +++ > > include/media/v4l2-mem2mem.h | 95 ++++ > > 12 files changed, 1021 insertions(+), 229 deletions(-) > > create mode 100644 drivers/staging/media/meson/vdec/codec_h264.c > > create mode 100644 drivers/staging/media/meson/vdec/codec_h264.h > >
Hi Nico, On 01/02/2020 16:38, Nicolas Dufresne wrote: > Le samedi 01 février 2020 à 10:34 -0500, Nicolas Dufresne a écrit : >> Le jeudi 16 janvier 2020 à 14:30 +0100, Neil Armstrong a écrit : >>> Hello, >>> >>> This patch series aims to bring H.264 support as well as compliance update >>> to the amlogic stateful video decoder driver. >>> >>> The issue in the V1 patchset at [1] is solved by patch #1 following comments >>> and requirements from hans. It moves the full draining & stopped state tracking >>> and handling from vicodec to core v4l2-mem2mem. >>> >>> The vicodec changes still passes the v4l2-utils "media-test" tests, log at [5]: >>> [...] >>> vicodec media controller compliance tests >>> >>> Thu Jan 16 13:00:56 UTC 2020 >>> v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits >>> [...] >>> Summary: >> >> I've minimally tested this serie with GStreamer master. Play pause and >> seek seems to work reliably now. It's a little bit spamy with >> bbb_sunflower_1080p_30fps_normal.mp4: >> >> [ 725.304663] meson-vdec c8820000.video-codec: VIFIFO usage (16777763) > VIFIFO size (16777216) >> >> But there is no visual artifact or performance degradation. >> >> Tested-by: Nicolas Dufresne <nicolas@ndufresne.ca> > > Sorry, I just notice that with kmssink, seek is broken. The kernel > reports a series of: > > [ 1065.046970] meson-vdec c8820000.video-codec: Buffer 0 done but it doesn't exist in m2m_ctx Thanks a lot for testing, can you share your setup (gst version, gst pipeline, stream...), thanks ! Neil > >> >>> Total for vicodec device /dev/media3: 7, Succeeded: 7, Failed: 0, Warnings: 0 >>> Total for vicodec device /dev/video13: 51, Succeeded: 51, Failed: 0, Warnings: 0 >>> Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 >>> Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 >>> Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 >>> Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 >>> Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 >>> Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 >>> >>> Final Summary: 364, Succeeded: 364, Failed: 0, Warnings: 0 >>> Thu Jan 16 13:02:59 UTC 2020 >>> >>> With this, it also passes vdec v4l2-compliance with H264 streaming on Amlogic G12A >>> and Amlogic SM1 SoCs successfully. >>> >>> The compliance log is: >>> # v4l2-compliance --stream-from-hdr test-25fps.h264.hdr -s >>> v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits >>> >>> Compliance test for meson-vdec device /dev/video0: >>> >>> Driver Info: >>> Driver name : meson-vdec >>> Card type : Amlogic Video Decoder >>> Bus info : platform:meson-vdec >>> Driver version : 5.5.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 >>> >>> Required ioctls: >>> test VIDIOC_QUERYCAP: OK >>> >>> Allow for multiple opens: >>> test second /dev/video19 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: 2 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 (Not Supported) >>> 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) >>> >>> Test input 0: >>> >>> Streaming ioctls: >>> test read/write: OK (Not Supported) >>> test blocking wait: OK >>> Video Capture Multiplanar: Captured 60 buffers >>> test MMAP (select): OK >>> Video Capture Multiplanar: Captured 60 buffers >>> test MMAP (epoll): OK >>> test USERPTR (select): OK (Not Supported) >>> test DMABUF: Cannot test, specify --expbuf-device >>> >>> Total for meson-vdec device /dev/video0: 49, Succeeded: 49, Failed: 0, Warnings: 0 >>> >>> >>> Changes since v3 at [3]: >>> - Fixed vicodec compliance >>> - Fixed vdec compliance with v4l2 state management >>> - fixed doc errors for v4l2-mem2mem.h >>> >>> Changes since v2 at [2]: >>> - Move full draining & stopped state tracking into core v4l2-mem2mem >>> - Adapt vicodec to use the core v4l2-mem2mem draining & stopped state tracking >>> >>> Changes since v1 at [1]: >>> - fixed output_size is never used reported by hans >>> - rebased on G12A and SM1 patches >>> - added handling of qbuf after STREAMON and STOP before enought buffer queued >>> >>> [1] https://lore.kernel.org/linux-media/20191007145909.29979-1-mjourdan@baylibre.com >>> [2] https://lore.kernel.org/linux-media/20191126093733.32404-1-narmstrong@baylibre.com >>> [3] https://lore.kernel.org/linux-media/20191209122028.13714-1-narmstrong@baylibre.com >>> [4] https://people.freedesktop.org/~narmstrong/vicodec-compliance-7ead0e1856b89f2e19369af452bb03fd0cd16793-20200116.log >>> >>> Maxime Jourdan (2): >>> media: meson: vdec: bring up to compliance >>> media: meson: vdec: add H.264 decoding support >>> >>> Neil Armstrong (2): >>> media: v4l2-mem2mem: handle draining, stopped and next-buf-is-last >>> states >>> media: vicodec: use v4l2-mem2mem draining, stopped and >>> next-buf-is-last states handling >>> >>> drivers/media/platform/vicodec/vicodec-core.c | 162 ++---- >>> drivers/media/v4l2-core/v4l2-mem2mem.c | 172 ++++++- >>> drivers/staging/media/meson/vdec/Makefile | 2 +- >>> drivers/staging/media/meson/vdec/codec_h264.c | 482 ++++++++++++++++++ >>> drivers/staging/media/meson/vdec/codec_h264.h | 14 + >>> drivers/staging/media/meson/vdec/esparser.c | 58 +-- >>> drivers/staging/media/meson/vdec/vdec.c | 89 ++-- >>> drivers/staging/media/meson/vdec/vdec.h | 14 +- >>> .../staging/media/meson/vdec/vdec_helpers.c | 85 ++- >>> .../staging/media/meson/vdec/vdec_helpers.h | 6 +- >>> .../staging/media/meson/vdec/vdec_platform.c | 71 +++ >>> include/media/v4l2-mem2mem.h | 95 ++++ >>> 12 files changed, 1021 insertions(+), 229 deletions(-) >>> create mode 100644 drivers/staging/media/meson/vdec/codec_h264.c >>> create mode 100644 drivers/staging/media/meson/vdec/codec_h264.h >>> >
Le jeudi 06 février 2020 à 08:57 +0100, Neil Armstrong a écrit : > Hi Nico, > > On 01/02/2020 16:38, Nicolas Dufresne wrote: > > Le samedi 01 février 2020 à 10:34 -0500, Nicolas Dufresne a écrit : > > > Le jeudi 16 janvier 2020 à 14:30 +0100, Neil Armstrong a écrit : > > > > Hello, > > > > > > > > This patch series aims to bring H.264 support as well as compliance update > > > > to the amlogic stateful video decoder driver. > > > > > > > > The issue in the V1 patchset at [1] is solved by patch #1 following comments > > > > and requirements from hans. It moves the full draining & stopped state tracking > > > > and handling from vicodec to core v4l2-mem2mem. > > > > > > > > The vicodec changes still passes the v4l2-utils "media-test" tests, log at [5]: > > > > [...] > > > > vicodec media controller compliance tests > > > > > > > > Thu Jan 16 13:00:56 UTC 2020 > > > > v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits > > > > [...] > > > > Summary: > > > > > > I've minimally tested this serie with GStreamer master. Play pause and > > > seek seems to work reliably now. It's a little bit spamy with > > > bbb_sunflower_1080p_30fps_normal.mp4: > > > > > > [ 725.304663] meson-vdec c8820000.video-codec: VIFIFO usage (16777763) > VIFIFO size (16777216) > > > > > > But there is no visual artifact or performance degradation. > > > > > > Tested-by: Nicolas Dufresne <nicolas@ndufresne.ca> > > > > Sorry, I just notice that with kmssink, seek is broken. The kernel > > reports a series of: > > > > [ 1065.046970] meson-vdec c8820000.video-codec: Buffer 0 done but it doesn't exist in m2m_ctx > > Thanks a lot for testing, can you share your setup (gst version, gst pipeline, stream...), thanks ! I'm currently running Fedora 31 (Debian unstable should provide the same), with the stock GStreamer 1.16.1. And doing playback with: gst-play-1.0 Videos/bbb_sunflower_1080p_30fps_normal.mp4 --videosink="kmssink" --flags=video With this player, you can seek with the arrows (left/right), or go back to the start using 0 key. When you seek, the streaming stalls. If you switch the --videosink to fakevideosink as an example, seeking works perfectly, and kernel does not complain anymore. Same if you don't use a zero-copy path, like fbdevsink. > > Neil > > > > > Total for vicodec device /dev/media3: 7, Succeeded: 7, Failed: 0, Warnings: 0 > > > > Total for vicodec device /dev/video13: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > Total for vicodec device /dev/video14: 51, Succeeded: 51, Failed: 0, Warnings: 0 > > > > > > > > Final Summary: 364, Succeeded: 364, Failed: 0, Warnings: 0 > > > > Thu Jan 16 13:02:59 UTC 2020 > > > > > > > > With this, it also passes vdec v4l2-compliance with H264 streaming on Amlogic G12A > > > > and Amlogic SM1 SoCs successfully. > > > > > > > > The compliance log is: > > > > # v4l2-compliance --stream-from-hdr test-25fps.h264.hdr -s > > > > v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits > > > > > > > > Compliance test for meson-vdec device /dev/video0: > > > > > > > > Driver Info: > > > > Driver name : meson-vdec > > > > Card type : Amlogic Video Decoder > > > > Bus info : platform:meson-vdec > > > > Driver version : 5.5.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 > > > > > > > > Required ioctls: > > > > test VIDIOC_QUERYCAP: OK > > > > > > > > Allow for multiple opens: > > > > test second /dev/video19 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: 2 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 (Not Supported) > > > > 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) > > > > > > > > Test input 0: > > > > > > > > Streaming ioctls: > > > > test read/write: OK (Not Supported) > > > > test blocking wait: OK > > > > Video Capture Multiplanar: Captured 60 buffers > > > > test MMAP (select): OK > > > > Video Capture Multiplanar: Captured 60 buffers > > > > test MMAP (epoll): OK > > > > test USERPTR (select): OK (Not Supported) > > > > test DMABUF: Cannot test, specify --expbuf-device > > > > > > > > Total for meson-vdec device /dev/video0: 49, Succeeded: 49, Failed: 0, Warnings: 0 > > > > > > > > > > > > Changes since v3 at [3]: > > > > - Fixed vicodec compliance > > > > - Fixed vdec compliance with v4l2 state management > > > > - fixed doc errors for v4l2-mem2mem.h > > > > > > > > Changes since v2 at [2]: > > > > - Move full draining & stopped state tracking into core v4l2-mem2mem > > > > - Adapt vicodec to use the core v4l2-mem2mem draining & stopped state tracking > > > > > > > > Changes since v1 at [1]: > > > > - fixed output_size is never used reported by hans > > > > - rebased on G12A and SM1 patches > > > > - added handling of qbuf after STREAMON and STOP before enought buffer queued > > > > > > > > [1] https://lore.kernel.org/linux-media/20191007145909.29979-1-mjourdan@baylibre.com > > > > [2] https://lore.kernel.org/linux-media/20191126093733.32404-1-narmstrong@baylibre.com > > > > [3] https://lore.kernel.org/linux-media/20191209122028.13714-1-narmstrong@baylibre.com > > > > [4] https://people.freedesktop.org/~narmstrong/vicodec-compliance-7ead0e1856b89f2e19369af452bb03fd0cd16793-20200116.log > > > > > > > > Maxime Jourdan (2): > > > > media: meson: vdec: bring up to compliance > > > > media: meson: vdec: add H.264 decoding support > > > > > > > > Neil Armstrong (2): > > > > media: v4l2-mem2mem: handle draining, stopped and next-buf-is-last > > > > states > > > > media: vicodec: use v4l2-mem2mem draining, stopped and > > > > next-buf-is-last states handling > > > > > > > > drivers/media/platform/vicodec/vicodec-core.c | 162 ++---- > > > > drivers/media/v4l2-core/v4l2-mem2mem.c | 172 ++++++- > > > > drivers/staging/media/meson/vdec/Makefile | 2 +- > > > > drivers/staging/media/meson/vdec/codec_h264.c | 482 ++++++++++++++++++ > > > > drivers/staging/media/meson/vdec/codec_h264.h | 14 + > > > > drivers/staging/media/meson/vdec/esparser.c | 58 +-- > > > > drivers/staging/media/meson/vdec/vdec.c | 89 ++-- > > > > drivers/staging/media/meson/vdec/vdec.h | 14 +- > > > > .../staging/media/meson/vdec/vdec_helpers.c | 85 ++- > > > > .../staging/media/meson/vdec/vdec_helpers.h | 6 +- > > > > .../staging/media/meson/vdec/vdec_platform.c | 71 +++ > > > > include/media/v4l2-mem2mem.h | 95 ++++ > > > > 12 files changed, 1021 insertions(+), 229 deletions(-) > > > > create mode 100644 drivers/staging/media/meson/vdec/codec_h264.c > > > > create mode 100644 drivers/staging/media/meson/vdec/codec_h264.h > > > >
> Wiadomość napisana przez Nicolas Dufresne <nicolas@ndufresne.ca> w dniu 08.02.2020, o godz. 22:08: > > I'm currently running Fedora 31 (Debian unstable should provide the > same), with the stock GStreamer 1.16.1. And doing playback with: > > gst-play-1.0 Videos/bbb_sunflower_1080p_30fps_normal.mp4 --videosink="kmssink" --flags=video > > With this player, you can seek with the arrows (left/right), or go back > to the start using 0 key. When you seek, the streaming stalls. If you > switch the --videosink to fakevideosink as an example, seeking works > perfectly, and kernel does not complain anymore. Same if you don't use > a zero-copy path, like fbdevsink. > Nicolas, Are You using streamer compiled with internal gst FFmpeg? If so - then IIRC 1.16 gst build-in ffmpeg is at 4.2.1 level and it has missing some ffmpeg master v4l2 commits which are improving amlogic vdec<->ffmpeg cooperation. Also I personally found adding https://github.com/tmm1/FFmpeg/commit/196bab90a29323722050111e936532ac9ac9bfda makes mythtv on s912/panfrost with DRM_PRIME EGL_LINUX_DMA_BUF_EXPORT working well - at least with H264 bluray content (progressive; probability of stream errors=low). Playback of TV interlaced content however still has issues on current vdec (5.5.2+Neil's v5 ML patch series): video playback sometimes becomes jumpy. At this moment I suspect it is because bitstream errors (TV recordings recorded from SAT so stream errors are highly probable) are confusing vdec and vdec hw + ffmpeg v4l2 are not able to deal/recover with this…. (this more demanding error handling is IMHO general attribute of stateful decoders when compared to state-less) Generally I think vdec error recovery in vdec<->ffmpeg needs be inspected and maybe there is place to improvement…..