[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180928142816.4311-1-mjourdan@baylibre.com>
Date: Fri, 28 Sep 2018 16:28:13 +0200
From: Maxime Jourdan <mjourdan@...libre.com>
To: Mauro Carvalho Chehab <mchehab@...nel.org>
Cc: Maxime Jourdan <mjourdan@...libre.com>,
Hans Verkuil <hans.verkuil@...co.com>,
Kevin Hilman <khilman@...libre.com>,
Jerome Brunet <jbrunet@...libre.com>,
Neil Armstrong <narmstrong@...libre.com>,
Martin Blumenstingl <martin.blumenstingl@...glemail.com>,
linux-media@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-amlogic@...ts.infradead.org
Subject: [PATCH v3 0/3] Add Amlogic video decoder driver
Hi everyone,
This patch series adds support for the Amlogic video decoder,
as well as the corresponding dt bindings for GXBB/GXL/GXM chips.
It features decoding for the following formats:
- MPEG 1
- MPEG 2
The following formats will be added in future patches:
- MJPEG
- MPEG 4 (incl. Xvid, H.263)
- H.264
- HEVC (incl. 10-bit)
The following formats' development has still not started, but they are
supported by the hardware:
- VC1
- VP9
The code was made in such a way to allow easy inclusion of those formats
in the future.
The decoder is single instance.
Files:
- vdec.c handles the V4L2 M2M logic
- esparser.c manages the hardware bitstream parser
- vdec_helpers.c provides helpers to DONE the dst buffers as well as
various common code used by the codecs
- vdec_1.c manages the VDEC_1 block of the vdec IP
- codec_mpeg12.c enables decoding for MPEG 1/2.
- vdec_platform.c links codec units with vdec units
(e.g vdec_1 with codec_mpeg12) and lists all the available
src/dst formats and requirements (max width/height, etc.),
per compatible chip.
Firmwares are necessary to run the vdec. They can currently be found at:
https://github.com/chewitt/meson-firmware
It was tested primarily with ffmpeg's v4l2-m2m implementation. For instance:
$ ffmpeg -c:v mpeg2_v4l2m2m -i sample_mpeg2.mkv -f null -
Note: This patch series depends on
"[PATCH v3 0/3] soc: amlogic: add meson-canvas"
https://patchwork.kernel.org/cover/10573763/
This canvas series is merged in Kevin Hilman's tree with a tag:
Repo: https://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic.git
Tag: amlogic-drivers-canvas
The v4l2-compliance results are available below the patch diff.
Changes since v2 [1]:
- Override capture queue's min_buffers_needed in queue_setup
The HW needs the full buffer list to be available when doing start_streaming
- Fix the draining sequence
The blob that we write to the ESPARSER to trigger drain is codec-dependent.
The one that was sent in v1 is specific to H.264 and isn't guaranteed to
trigger drain for MPEG2. For the latter, a simple MPEG2 EOS code
should be sent to the ESPARSER instead.
- Slight enhancements to the way we do vififo offset<=>timestamp matching
Changes since v1 [0]:
- use named interrupts in the bindings
- rewrite description in the bindings doc
- don't include the dts changes in the patch series
- fill the vb2 queues locks
- fill the video_device lock
- use helpers for wait_prepare and wait_finish vb2_ops
- remove unnecessary usleep in between esparser writes.
Extensive testing of every codec on GXBB/GXL didn't reveal
any fails without it, so just remove it.
- compile v4l2_compliance inside the git repo
- Check for plane number/plane size to pass the latest v4l2-compliance test
- Moved the single instance check (returning -EBUSY) to start/stop streaming
The check was previously in queue_setup but there was no great location to
clear it except for .close().
- Slight rework of the way CAPTURE frames are timestamped for better accuracy
- Implement PAR reporting via VIDIOC_CROPCAP
[0] https://patchwork.kernel.org/cover/10583391/
[1] https://patchwork.kernel.org/cover/10595803/
Maxime Jourdan (3):
dt-bindings: media: add Amlogic Video Decoder Bindings
media: meson: add v4l2 m2m video decoder driver
MAINTAINERS: Add meson video decoder
.../bindings/media/amlogic,vdec.txt | 71 ++
MAINTAINERS | 8 +
drivers/media/platform/Kconfig | 10 +
drivers/media/platform/meson/Makefile | 1 +
drivers/media/platform/meson/vdec/Makefile | 8 +
.../media/platform/meson/vdec/codec_mpeg12.c | 209 ++++
.../media/platform/meson/vdec/codec_mpeg12.h | 14 +
drivers/media/platform/meson/vdec/dos_regs.h | 98 ++
drivers/media/platform/meson/vdec/esparser.c | 322 ++++++
drivers/media/platform/meson/vdec/esparser.h | 32 +
drivers/media/platform/meson/vdec/vdec.c | 1024 +++++++++++++++++
drivers/media/platform/meson/vdec/vdec.h | 251 ++++
drivers/media/platform/meson/vdec/vdec_1.c | 231 ++++
drivers/media/platform/meson/vdec/vdec_1.h | 14 +
.../media/platform/meson/vdec/vdec_helpers.c | 412 +++++++
.../media/platform/meson/vdec/vdec_helpers.h | 48 +
.../media/platform/meson/vdec/vdec_platform.c | 101 ++
.../media/platform/meson/vdec/vdec_platform.h | 30 +
18 files changed, 2884 insertions(+)
create mode 100644 Documentation/devicetree/bindings/media/amlogic,vdec.txt
create mode 100644 drivers/media/platform/meson/vdec/Makefile
create mode 100644 drivers/media/platform/meson/vdec/codec_mpeg12.c
create mode 100644 drivers/media/platform/meson/vdec/codec_mpeg12.h
create mode 100644 drivers/media/platform/meson/vdec/dos_regs.h
create mode 100644 drivers/media/platform/meson/vdec/esparser.c
create mode 100644 drivers/media/platform/meson/vdec/esparser.h
create mode 100644 drivers/media/platform/meson/vdec/vdec.c
create mode 100644 drivers/media/platform/meson/vdec/vdec.h
create mode 100644 drivers/media/platform/meson/vdec/vdec_1.c
create mode 100644 drivers/media/platform/meson/vdec/vdec_1.h
create mode 100644 drivers/media/platform/meson/vdec/vdec_helpers.c
create mode 100644 drivers/media/platform/meson/vdec/vdec_helpers.h
create mode 100644 drivers/media/platform/meson/vdec/vdec_platform.c
create mode 100644 drivers/media/platform/meson/vdec/vdec_platform.h
root@...dkernel-odroidc2:~# v4l2-compliance -d /dev/video0
v4l2-compliance SHA: 7bde5ef172bd4a09b9544788ba9c5dbb1aa9994a, 64 bits
Compliance test for device /dev/video0:
Driver Info:
Driver name : meson-vdec
Card type : Amlogic Video Decoder
Bus info : platform:meson-vdec
Driver version : 4.19.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
Required ioctls:
test VIDIOC_QUERYCAP: 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 (Not Supported)
test VIDIOC_QUERYCTRL: OK (Not Supported)
test VIDIOC_G/S_CTRL: OK (Not Supported)
test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 0 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
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
Total: 43, Succeeded: 43, Failed: 0, Warnings: 0
--
2.19.0
Powered by blists - more mailing lists