From ef90015cac20f9fa97dbcd18769f0036a90bc882 Mon Sep 17 00:00:00 2001 From: Joo Aun Saw Date: Mon, 19 Aug 2019 16:58:52 +1000 Subject: [PATCH] ffmpeg: add handling for nv21 and yuv420p --- ...rs-add-handling-for-NV21-and-YUV420P.patch | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 package/ffmpeg/1007-v4l2-buffers-add-handling-for-NV21-and-YUV420P.patch diff --git a/package/ffmpeg/1007-v4l2-buffers-add-handling-for-NV21-and-YUV420P.patch b/package/ffmpeg/1007-v4l2-buffers-add-handling-for-NV21-and-YUV420P.patch new file mode 100644 index 0000000000..c669ebf6f9 --- /dev/null +++ b/package/ffmpeg/1007-v4l2-buffers-add-handling-for-NV21-and-YUV420P.patch @@ -0,0 +1,41 @@ +commit 0550486542f4c4628abf9e5cf1090c8f328f215f +Author: Dave Stevenson +Date: Thu Mar 22 16:01:35 2018 +0000 + + v4l2_buffers: Add handling for NV21 and YUV420P + +diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c +index aef911f..0f4dbb2 100644 +--- a/libavcodec/v4l2_buffers.c ++++ b/libavcodec/v4l2_buffers.c +@@ -321,11 +321,21 @@ int ff_v4l2_buffer_buf_to_avframe(AVFrame *frame, V4L2Buffer *avbuf) + /* 1.1 fixup special cases */ + switch (avbuf->context->av_pix_fmt) { + case AV_PIX_FMT_NV12: ++ case AV_PIX_FMT_NV21: + if (avbuf->num_planes > 1) + break; + frame->linesize[1] = avbuf->plane_info[0].bytesperline; + frame->data[1] = frame->buf[0]->data + avbuf->plane_info[0].bytesperline * avbuf->context->format.fmt.pix_mp.height; + break; ++ case AV_PIX_FMT_YUV420P: ++ /* No YV12? support? */ ++ if (avbuf->num_planes > 1) ++ break; ++ frame->linesize[1] = avbuf->plane_info[0].bytesperline >> 1; ++ frame->linesize[2] = avbuf->plane_info[0].bytesperline >> 1; ++ frame->data[1] = frame->buf[0]->data + avbuf->plane_info[0].bytesperline * avbuf->context->format.fmt.pix_mp.height; ++ frame->data[2] = frame->data[1] + ((avbuf->plane_info[0].bytesperline * avbuf->context->format.fmt.pix_mp.height) >> 2); ++ break; + default: + break; + } +@@ -468,6 +478,7 @@ int ff_v4l2_buffer_enqueue(V4L2Buffer* avbuf) + + avbuf->buf.flags = avbuf->flags; + ++ av_log(NULL, AV_LOG_ERROR, "ff_v4l2_buffer_enqueue: VIDIOC_QBUF : fd %d, index %u type %u\n", buf_to_m2mctx(avbuf)->fd, avbuf->buf.index, avbuf->buf.type); + ret = ioctl(buf_to_m2mctx(avbuf)->fd, VIDIOC_QBUF, &avbuf->buf); + if (ret < 0) + return AVERROR(errno); +