mbox

[RFC,0/5] Add enum_fmt flag for coded formats with dynamic resolution switching

Message ID 20190609143820.4662-1-mjourdan@baylibre.com (mailing list archive)
Headers

Message

Maxime Jourdan June 9, 2019, 2:38 p.m. UTC
  Hello,

This RFC proposes a new format flag - V4L2_FMT_FLAG_DYN_RESOLUTION - used
to tag coded formats for which the device supports dynamic resolution
switching, via V4L2_EVENT_SOURCE_CHANGE.
This includes the initial "source change" where the device is able to
tell userspace about the coded resolution and the DPB size (which
sometimes translates to V4L2_CID_MIN_BUFFERS_FOR_CAPTURE).
This flag is mainly aimed at stateful decoder drivers.

This RFC is motivated by my development on the amlogic video decoder
driver, which does not support dynamic resolution switching for older
coded formats (MPEG 1/2, MPEG 4 part II, H263). It does however support
it for the newer formats (H264, HEVC, VP9).

The specification regarding stateful video decoders should be amended
to include that, in the absence of this flag for a certain format,
userspace is expected to extract the coded resolution and allocate
a sufficient amount of capture buffers on its own.
I understand that this point may be tricky, since older kernels with
close-to-spec drivers would not have this flag available, yet would
fully support dynamic resolution switching.
However, with the spec not merged in yet, I wanted to have your opinion
on this late addition.

The RFC patches also adds support for this flag for the 4 following
stateful decoder drivers:
 - venus
 - s5p-mfc
 - mtk-vcodec
 - vicodec

Maxime Jourdan (5):
  media: videodev2: add V4L2_FMT_FLAG_DYN_RESOLUTION
  media: venus: vdec: flag OUTPUT formats with
    V4L2_FMT_FLAG_DYN_RESOLUTION
  media: s5p_mfc_dec: flag OUTPUT formats with
    V4L2_FMT_FLAG_DYN_RESOLUTION
  media: mtk-vcodec: flag OUTPUT formats with
    V4L2_FMT_FLAG_DYN_RESOLUTION
  media: vicodec: flag vdec/stateful OUTPUT formats with
    V4L2_FMT_FLAG_DYN_RESOLUTION

 Documentation/media/uapi/v4l/vidioc-enum-fmt.rst   |  7 +++++++
 drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c |  4 ++++
 drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h |  1 +
 drivers/media/platform/qcom/venus/core.h           |  1 +
 drivers/media/platform/qcom/venus/vdec.c           | 11 +++++++++++
 drivers/media/platform/s5p-mfc/s5p_mfc_common.h    |  1 +
 drivers/media/platform/s5p-mfc/s5p_mfc_dec.c       | 13 +++++++++++++
 drivers/media/platform/vicodec/vicodec-core.c      |  2 ++
 include/uapi/linux/videodev2.h                     |  5 +++--
 9 files changed, 43 insertions(+), 2 deletions(-)