]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/v4l2_buffers.c
avcodec/v4l2: fix single plane decoding
[ffmpeg] / libavcodec / v4l2_buffers.c
index ef7d0400322b9c991654695821d6e8ce422ab235..ba70c5d14bcc21ed8f976d122dd2c2f7b3c9633f 100644 (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)
 {
+    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;
 }