avcodec/v4l2: fix single plane decoding

This commit is contained in:
Jorge Ramirez-Ortiz 2017-10-06 09:51:43 +02:00 committed by Mark Thompson
parent 7d141e2cac
commit 2a31ad7d60
1 changed files with 12 additions and 2 deletions

View File

@ -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) 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) if (plane >= out->num_planes)
return AVERROR(EINVAL); 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)); 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); if (V4L2_TYPE_IS_MULTIPLANAR(out->buf.type)) {
out->planes[plane].length = out->plane_info[plane].length; out->planes[plane].bytesused = bytesused;
out->planes[plane].length = length;
} else {
out->buf.bytesused = bytesused;
out->buf.length = length;
}
return 0; return 0;
} }