[FFmpeg-devel] [PATCH v06 1/5] KMSGrab: getfb2 format_modifier if user doesnt specify
Lynne
dev at lynne.ee
Sat Jul 4 22:20:49 EEST 2020
Jul 4, 2020, 14:17 by hanishkvc at 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 at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org> with subject "unsubscribe".
>
This one looks fine to me, but Mark Thompson should check this one too.
More information about the ffmpeg-devel
mailing list