[PATCH 00/18] coda988 video codec support

From: Sergey Khimich
Date: Fri Mar 14 2025 - 11:30:01 EST


Hello!

This is the implementation of the Chips&Media "CODA988" video codec support
within v4l2 driver for coda. Support for the following codecs
was implemented:
* h264: decoder & encoder
* h263: decoder & encoder
* mpeg4: decoder & encoder
* vp8dec: decoder

Support for the following formates was implemented:
* yuv420p(I420)
* yvu420p(YV12)
* NV12
* NV21

Also the following features and fixes were implemented for coda988:
* special config for mem_ctrl
* special config for encoder header (sps and pps)
* special set profile_idc
* special set RC config
* special set QP
* special set slice mode
* special set Motion Extimation (ME)
* v4l2_ctrl for h264 profile
* v4l2_ctrl for h264 level
* v4l2_ctrl for h.264 RC mode
* v4l2_ctrl for h.264 skipFrame
* v4l2_ctrl for h.264 i-frame min/max qp
* v4l2_ctrl for h.264 p-frame min/max qp
* v4l2_ctrl for h.264 entropy mode
* v4l2_ctrl for h.264 8x8transform
* v4l2_ctrl for h.264 i-frame period
* v4l2_ctrl for h.264 Access Unit Delimiter(AUD)
* v4l2_ctrl for h.264 me x/y search range
* v4l2_ctrl for h.264 intra refresh period
* v4l2_ctrl for h.263 intra/inter qp
* v4l2_ctrl for h.263 min/max qp
* v4l2_ctrl for mpeg4 min/max qp

During adding support for "CODA988" we also did some extra work
related to refactoring and improvement of generic part of C&M coda
driver:
* Improve error checking for probe, irq-handle and etc.
* Update work with resets
* Replace hard_irq by threaded_irq
* Remove double setting of stop flag
* Improve some prints
* Fix loglevel to avoid performance failure
* Fix support of MPEG4 levels
* Fix setting gamma for h264enc
* Update default velues of QP for mpeg4 I/P
* Other minor fixes

Sergey Khimich (18):
media: coda: Add print if irq isn't present
media: coda: Use get_array to work use multiple reset
dt-bindings: media: coda: Fix resets count
media: coda: Add check result after reset
media: coda: using threaded_irq for 0 (bit) interrupt
media: coda: Add reset device before getting interrupt
media: coda: Add fake IRQ check
media: coda: Add log to finish_encode if buffer is too small
media: coda: Fix max h.264 level for CODA_DX6
media: coda: Remove double setting of stop flag
media: coda: Print size of encoded buff in other place
media: coda: Fix loglevel for seq mismatch print
media: coda: Fix support for all mpeg4 levels
media: coda: Fix handling wrong format in coda_try_fmt
media: coda: Use v4l2_ctrl to set gamma for h264enc
media: coda: Update default velues of QP for mpeg4 I/P
media: coda: Use preferred usleep_range than udelay
media: coda: add support coda988 enc and dec

.../devicetree/bindings/media/coda.yaml | 2 +-
.../platform/chips-media/coda/coda-bit.c | 1114 ++++++++++++++---
.../platform/chips-media/coda/coda-common.c | 430 ++++++-
.../platform/chips-media/coda/coda-gdi.c | 149 +++
.../platform/chips-media/coda/coda-h264.c | 10 +
.../media/platform/chips-media/coda/coda.h | 41 +-
.../platform/chips-media/coda/coda_regs.h | 157 +++
.../media/platform/chips-media/coda/trace.h | 16 +
8 files changed, 1703 insertions(+), 216 deletions(-)

--
2.30.2