[FFmpeg-devel] [PATCH 1/2] avcodec/v4l2: fix single plane decoding

Mark Thompson sw at jkqxz.net
Fri Oct 6 22:47:11 EEST 2017


On 06/10/17 08:51, Jorge Ramirez-Ortiz wrote:
> ---
>  libavcodec/v4l2_buffers.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c
> index ef7d040..ba70c5d 100644
> --- a/libavcodec/v4l2_buffers.c
> +++ b/libavcodec/v4l2_buffers.c
> @@ -244,13 +244,23 @@ static int v4l2_buf_to_bufref(V4L2Buffer *in, int plane, AVBufferRef **buf)
>  
>  static int v4l2_bufref_to_buf(V4L2Buffer *out, int plane, const uint8_t* data, int size, AVBufferRef* bref)
>  {
> +    unsigned int bytesused, length;
> +
>      if (plane >= out->num_planes)
>          return AVERROR(EINVAL);
>  
> +    bytesused = FFMIN(size, out->plane_info[plane].length);
> +    length = out->plane_info[plane].length;
> +
>      memcpy(out->plane_info[plane].mm_addr, data, FFMIN(size, out->plane_info[plane].length));
>  
> -    out->planes[plane].bytesused = FFMIN(size, out->plane_info[plane].length);
> -    out->planes[plane].length = out->plane_info[plane].length;
> +    if (V4L2_TYPE_IS_MULTIPLANAR(out->buf.type)) {
> +        out->planes[plane].bytesused = bytesused;
> +        out->planes[plane].length = length;
> +    } else {
> +        out->buf.bytesused = bytesused;
> +        out->buf.length = length;
> +    }
>  
>      return 0;
>  }
> 

Can you clarify what devices are being fixed here?  I believe there are two modes (single-plane, multi-plane) - of the devices known to work, do we know which modes they use?

- Mark


More information about the ffmpeg-devel mailing list