mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-07-29 14:16:31 +00:00
ffmpeg: add handling for nv21 and yuv420p
This commit is contained in:
parent
79c4368009
commit
ef90015cac
@ -0,0 +1,41 @@
|
||||
commit 0550486542f4c4628abf9e5cf1090c8f328f215f
|
||||
Author: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user