Jul 4, 2020, 14:17 by hanish...@gmail.com: > If user doesnt specify a format_modifier explicitly, then use GetFB2 > to identify the format_modifier of the framebuffer being grabbed. > --- > Changelog | 1 + > libavdevice/kmsgrab.c | 22 +++++++++++++++++++++- > 2 files changed, 22 insertions(+), 1 deletion(-) > > diff --git a/Changelog b/Changelog > index a60e7d2eb8..3881587caa 100644 > --- a/Changelog > +++ b/Changelog > @@ -2,6 +2,7 @@ Entries are sorted chronologically from oldest to youngest > within each release, > releases are sorted from youngest to oldest. > > version <next>: > +- kmsgrab GetFB2 format_modifier, if user doesnt specify > - AudioToolbox output device > - MacCaption demuxer > > diff --git a/libavdevice/kmsgrab.c b/libavdevice/kmsgrab.c > index d0de774871..10ed707e60 100644 > --- a/libavdevice/kmsgrab.c > +++ b/libavdevice/kmsgrab.c > @@ -239,6 +239,7 @@ static av_cold int kmsgrab_read_header(AVFormatContext > *avctx) > drmModePlaneRes *plane_res = NULL; > drmModePlane *plane = NULL; > drmModeFB *fb = NULL; > + drmModeFB2 *fb2 = NULL; > AVStream *stream; > int err, i; > > @@ -364,6 +365,23 @@ static av_cold int kmsgrab_read_header(AVFormatContext > *avctx) > goto fail; > } > > + fb2 = drmModeGetFB2(ctx->hwctx->fd, plane->fb_id); > + if (!fb2) { > + err = errno; > + av_log(avctx, AV_LOG_ERROR, "Failed to get " > + "framebuffer2 %"PRIu32": %s.\n", > + plane->fb_id, strerror(err)); > + err = AVERROR(err); > + goto fail; > + } > + > + av_log(avctx, AV_LOG_INFO, "Template framebuffer2 is %"PRIu32": " > + "%"PRIu32"x%"PRIu32", pixel_format: 0x%"PRIx32", format_modifier: > 0x%"PRIx64".\n", > + fb2->fb_id, fb2->width, fb2->height, fb2->pixel_format, > fb2->modifier); > + > + if (ctx->drm_format_modifier == DRM_FORMAT_MOD_INVALID) > + ctx->drm_format_modifier = fb2->modifier; > + > stream = avformat_new_stream(avctx, NULL); > if (!stream) { > err = AVERROR(ENOMEM); > @@ -408,6 +426,8 @@ fail: > drmModeFreePlane(plane); > if (fb) > drmModeFreeFB(fb); > + if (fb2) > + drmModeFreeFB2(fb2); > > return err; > } > @@ -433,7 +453,7 @@ static const AVOption options[] = { > { .i64 = AV_PIX_FMT_BGR0 }, 0, UINT32_MAX, FLAGS }, > { "format_modifier", "DRM format modifier for framebuffer", > OFFSET(drm_format_modifier), AV_OPT_TYPE_INT64, > - { .i64 = DRM_FORMAT_MOD_NONE }, 0, INT64_MAX, FLAGS }, > + { .i64 = DRM_FORMAT_MOD_INVALID}, 0, INT64_MAX, FLAGS }, > { "crtc_id", "CRTC ID to define capture source", > OFFSET(source_crtc), AV_OPT_TYPE_INT64, > { .i64 = 0 }, 0, UINT32_MAX, FLAGS }, > -- > 2.25.1 > > _______________________________________________ > 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". >
This one looks fine to me, but Mark Thompson should check this one too. _______________________________________________ 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".