• Neil Armstrong's avatar
    media: v4l2-mem2mem: handle draining, stopped and next-buf-is-last states · 2b48e113
    Neil Armstrong authored
    Since the draining and stop phase of the HW decoder mem2mem bahaviour is
    now clearly defined, we can move handling of the following states to the
    common v4l2-mem2mem core code:
    - draining
    - stopped
    - next-buf-is-last
    
    By introducing the following v4l2-mem2mem APIs:
    - v4l2_m2m_encoder_cmd/v4l2_m2m_ioctl_encoder_cmd to handle start/stop command
    - v4l2_m2m_decoder_cmd/v4l2_m2m_ioctl_decoder_cmd to handle start/stop command
    - v4l2_m2m_update_start_streaming_state to update state on start of streaming
    of the de/encoder queue
    - v4l2_m2m_update_stop_streaming_state to update state on stop of streaming
    of the de/encoder queue
    - v4l2_m2m_last_buffer_done to make the current dest buffer as the last one
    
    And inline helpers:
    - v4l2_m2m_mark_stopped to mark the de/encoding process as stopped
    - v4l2_m2m_clear_state to clear the de/encoding state
    - v4l2_m2m_dst_buf_is_last to detect the current dequeued dst_buf is the last
    - v4l2_m2m_has_stopped to detect the de/encoding stopped state
    - v4l2_m2m_is_last_draining_src_buf to detect the current source buffer should
     be the last processing before stopping the de/encoding process
    
    The special next-buf-is-last when min_buffers != 1 case is also handled
    in v4l2_m2m_qbuf() by reusing the other introduced APIs.
    
    This state management has been stolen from the vicodec implementation,
    and is no-op for drivers not calling the v4l2_m2m_encoder_cmd or
    v4l2_m2m_decoder_cmd and v4l2_m2m_update_start/stop_streaming_state.
    
    The vicodec will be the first one to be converted as an example.
    Signed-off-by: default avatarNeil Armstrong <narmstrong@baylibre.com>
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    2b48e113
v4l2-mem2mem.h 27.7 KB