> -----Original Message----- > From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf Of > Ming Qian > Sent: Monday, November 15, 2021 10:49 AM > To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [EXT] Re: [PATCH v1 2/2] avcodec/v4l2_buffer: > export v4l2 buffer dma-buf > > Caution: EXT Email > > > -----Original Message----- > > From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf > > Of Lynne > > Sent: Friday, November 12, 2021 4:50 PM > > To: FFmpeg development discussions and patches > > <ffmpeg-devel@ffmpeg.org> > > Subject: [EXT] Re: [FFmpeg-devel] [PATCH v1 2/2] avcodec/v4l2_buffer: > > export > > v4l2 buffer dma-buf > > > > Caution: EXT Email > > > > 12 Nov 2021, 09:36 by ming.q...@nxp.com: > > > > > Signed-off-by: Ming Qian <ming.q...@nxp.com> > > > --- > > > libavcodec/v4l2_buffers.c | 14 ++++++++++++++ > > > libavcodec/v4l2_buffers.h | 1 + libavcodec/v4l2_context.c | 4 > > > ++++ > > > 3 files changed, 19 insertions(+) > > > > > > diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c > > > index 4b2679eb3814..efa42f4c58ea 100644 > > > --- a/libavcodec/v4l2_buffers.c > > > +++ b/libavcodec/v4l2_buffers.c > > > @@ -21,6 +21,9 @@ > > > * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > > > 02110-1301 USA */ > > > > > > +#ifndef _GNU_SOURCE > > > +#define _GNU_SOURCE > > > +#endif > > > #include <linux/videodev2.h> > > > #include <sys/ioctl.h> > > > #include <sys/mman.h> > > > @@ -267,6 +270,8 @@ static int v4l2_buf_to_bufref(V4L2Buffer *in, > > > int plane, AVBufferRef **buf) if (!*buf) return AVERROR(ENOMEM); > > > > > > + if (in->plane_info[plane].dmafd >= 0) > > > + av_buffer_set_dma_buf(*buf, in->plane_info[plane].dmafd); > > > ret = v4l2_buf_increase_ref(in); > > > if (ret) > > > av_buffer_unref(buf); > > > @@ -494,6 +499,7 @@ int ff_v4l2_buffer_avpkt_to_buf(const AVPacket > > > *pkt, V4L2Buffer *out) int ff_v4l2_buffer_initialize(V4L2Buffer* > > > avbuf, int index) { V4L2Context *ctx = avbuf->context; > > > + struct v4l2_exportbuffer exp; > > > int ret, i; > > > > > > avbuf->buf.memory = V4L2_MEMORY_MMAP; @@ -539,6 +545,14 @@ > > int > > > ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) > > > > > > if (avbuf->plane_info[i].mm_addr == MAP_FAILED) return > > > AVERROR(ENOMEM); > > > + > > > + exp.type = ctx->type; > > > + exp.index = avbuf->buf.index; > > > + exp.plane = i; > > > + exp.fd = -1; > > > + exp.flags = O_CLOEXEC | O_RDWR; > > > + ioctl(buf_to_m2mctx(avbuf)->fd, VIDIOC_EXPBUF, &exp); > > > + avbuf->plane_info[i].dmafd = exp.fd; > > > } > > > > > > avbuf->status = V4L2BUF_AVAILABLE; > > > diff --git a/libavcodec/v4l2_buffers.h b/libavcodec/v4l2_buffers.h > > > index 3d2ff1b9a5d7..74550544e0eb 100644 > > > --- a/libavcodec/v4l2_buffers.h > > > +++ b/libavcodec/v4l2_buffers.h > > > @@ -55,6 +55,7 @@ typedef struct V4L2Buffer { int bytesperline; > > > void > > > * mm_addr; size_t length; > > > + int dmafd; > > > } plane_info[VIDEO_MAX_PLANES]; > > > > > > int num_planes; > > > diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c > > > index b08f0015c2e5..f0406194293d 100644 > > > --- a/libavcodec/v4l2_context.c > > > +++ b/libavcodec/v4l2_context.c > > > @@ -453,6 +453,10 @@ static int v4l2_release_buffers(V4L2Context* > > > ctx) if (p->mm_addr && p->length) if (munmap(p->mm_addr, p->length) > > > < 0) av_log(logger(ctx), AV_LOG_ERROR, "%s unmap plane (%s))\n", > > > ctx->name, av_err2str(AVERROR(errno))); > > > + if (p->dmafd >= 0) { > > > + close(p->dmafd); > > > + p->dmafd = -1; > > > + } > > > } > > > } > > > > > > > We already have a standard structure for representing DRM frames, it's > > AV_PIX_FMT_DRM_PRIME, which encapsulates a AVDRMFrameDescriptor, > which > > contains DRM fds for every plane, and layer description. > > > > I think there may have been an old patch which did this, but I don't > remember. > > Thanks for your information, I'll check it >
Hi Lynne, Thank you again, I got the point, and then this patch can be dropped now. I'll try to export to AV_PIX_FMT_DRM_PRIME in v4l2 codec > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fffmpeg. > > > org%2Fmailman%2Flistinfo%2Fffmpeg-devel&data=04%7C01%7Cming.qi > > > an%40nxp.com%7Caf21432e4cff441f393f08d9a5b97e57%7C686ea1d3bc2b4 > > > c6fa92cd99c5c301635%7C0%7C1%7C637723038369699316%7CUnknown%7 > > > CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiL > > > CJXVCI6Mn0%3D%7C3000&sdata=%2ByZOR2mWn1oTwn5xwkWFkbpb3 > > bovbbEpXmH0T1D36%2FY%3D&reserved=0 > > > > To unsubscribe, visit link above, or email > > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fffmpeg. > org%2Fmailman%2Flistinfo%2Fffmpeg-devel&data=04%7C01%7Cming.qi > an%40nxp.com%7C10d87aef6ebe4038b01508d9a7e2890f%7C686ea1d3bc2b > 4c6fa92cd99c5c301635%7C0%7C1%7C637725413673582009%7CUnknown% > 7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwi > LCJXVCI6Mn0%3D%7C3000&sdata=pNwzW%2BVZnNNL8vNXzhvJhCrol2F > SbWHw7FdqSVFh88Q%3D&reserved=0 > > To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org > with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".