From patchwork Tue Sep 3 01:02:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 14866 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 320BF449F2B for ; Tue, 3 Sep 2019 04:03:28 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1FDD9687FDF; Tue, 3 Sep 2019 04:03:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f65.google.com (mail-ot1-f65.google.com [209.85.210.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 703DB687FD8 for ; Tue, 3 Sep 2019 04:03:25 +0300 (EEST) Received: by mail-ot1-f65.google.com with SMTP id p23so15093419oto.0 for ; Mon, 02 Sep 2019 18:03:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tmm1-net.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3t+nOM4wD21nnUR1u3xq3LfaLgbRSBcX5HpxfWb7luM=; b=HcytpxgYVmgwwmRaFVS6XQ9QwBGL6PD20wMjegesyn2zhtxYHaydkq6awRsWfYr27b k7RFU+1ZH/s6DMOAomoso+iEGnVq90DiKDyUo12ZouVsv27+khP/OmJWYTHbyShU5UXo a3chrfp5gor84Ac+PcE5qmqSphoSZucydNbRSJnwG+YwvxlOtGpxM4th3o5FihbNcUXv t00UZQp+GgPo8k+UMW+7VvI79jP2FMp/BYi5GbzqVQC+IYQjkQW1i8P9G25v3m3J3p48 bI3vIxmDQsSg8UcNqs5JoJI+dSbWheNJByBabNc8QIeyffE3QhNx0IA2dAby92YQ3lvn a0Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=3t+nOM4wD21nnUR1u3xq3LfaLgbRSBcX5HpxfWb7luM=; b=H6cmWyoOwjfIuTnmi98EvQ45GlemBpFY3YQeTDij4BWGD9PHKt4Mw8rC4ePLzikVA9 JSw9n3JpVfdLQtvjlERB3dMnxVkBleMacJiEEHs7ZvYiWmC2UDbNf9oDhsf7z2VIVzGF /6QOYnwJUQtGOajTssCp6Y/facsnSBk4aHMPIpfDpBqzl3Aq5fKk3oBTRHx+V6nAjCQG B0iwV6Opk5lL8cnoYBvIgb12pp4L3bRvZ15+MOrCMYbCu5LCTGW/vtLdYckuLbitF7Kk 0HJtq0kWMU+xQqrPfJadzTovJ4Hupj+QLEpHI7NBMh6PhhLhHUanDuBu/cMt+2VVo9H/ KhKw== X-Gm-Message-State: APjAAAUmanP50Vzxf+BudEZwgAdu0l3FvtB6ujBetoZ7idhmgYtyQXOx Jgz3iO3ojyudefRla4yXw/WfDFaOusE= X-Google-Smtp-Source: APXvYqz+ze4vburIZKl1GCDj5rC5PkO1m2bQi/5On3EsOhmfqsvng9LrwGyUnjm7Y47V7/hTRBH06w== X-Received: by 2002:a9d:6189:: with SMTP id g9mr1070894otk.348.1567472603813; Mon, 02 Sep 2019 18:03:23 -0700 (PDT) Received: from tmm1-imac.lan (ip184-189-221-177.sb.sd.cox.net. [184.189.221.177]) by smtp.gmail.com with ESMTPSA id a21sm4299633oie.9.2019.09.02.18.03.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 Sep 2019 18:03:23 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Mon, 2 Sep 2019 18:02:27 -0700 Message-Id: <20190903010230.96236-23-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190903010230.96236-1-ffmpeg@tmm1.net> References: <20190903010230.96236-1-ffmpeg@tmm1.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 22/25] avcodec/v4l2_context: set frame SAR using VIDIOC_CROPCAP X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: lorusak@gmail.com, Aman Gupta , jorge.ramirez.ortiz@gmail.com, Aman Gupta Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Maxime Jourdan Signed-off-by: Aman Gupta --- libavcodec/v4l2_buffers.c | 3 ++- libavcodec/v4l2_context.c | 20 ++++++++++++++++++++ libavcodec/v4l2_context.h | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c index 33439ddb64..389b5dea8d 100644 --- a/libavcodec/v4l2_buffers.c +++ b/libavcodec/v4l2_buffers.c @@ -585,9 +585,10 @@ int ff_v4l2_buffer_buf_to_avframe(AVFrame *frame, V4L2Buffer *avbuf) frame->pts = v4l2_get_pts(avbuf); frame->pkt_dts = AV_NOPTS_VALUE; - /* these two values are updated also during re-init in v4l2_process_driver_event */ + /* these values are updated also during re-init in v4l2_process_driver_event */ frame->height = avbuf->context->height; frame->width = avbuf->context->width; + frame->sample_aspect_ratio = avbuf->context->sample_aspect_ratio; /* 3. report errors upstream */ if (avbuf->buf.flags & V4L2_BUF_FLAG_ERROR) { diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c index 26e06273be..0461a9c7cf 100644 --- a/libavcodec/v4l2_context.c +++ b/libavcodec/v4l2_context.c @@ -64,6 +64,24 @@ static inline unsigned int v4l2_get_height(struct v4l2_format *fmt) return V4L2_TYPE_IS_MULTIPLANAR(fmt->type) ? fmt->fmt.pix_mp.height : fmt->fmt.pix.height; } +static AVRational v4l2_get_sar(V4L2Context *ctx) +{ + struct AVRational sar = { 1, 1 }; + struct v4l2_cropcap cropcap; + int ret; + + memset(&cropcap, 0, sizeof(cropcap)); + cropcap.type = ctx->type; + + ret = ioctl(ctx_to_m2mctx(ctx)->fd, VIDIOC_CROPCAP, &cropcap); + if (ret) + return sar; + + sar.num = cropcap.pixelaspect.numerator; + sar.den = cropcap.pixelaspect.denominator; + return sar; +} + static inline unsigned int v4l2_resolution_changed(V4L2Context *ctx, struct v4l2_format *fmt2) { struct v4l2_format *fmt1 = &ctx->format; @@ -177,12 +195,14 @@ static int v4l2_handle_event(V4L2Context *ctx) if (full_reinit) { s->output.height = v4l2_get_height(&out_fmt); s->output.width = v4l2_get_width(&out_fmt); + s->output.sample_aspect_ratio = v4l2_get_sar(&s->output); } reinit = v4l2_resolution_changed(&s->capture, &cap_fmt); if (reinit) { s->capture.height = v4l2_get_height(&cap_fmt); s->capture.width = v4l2_get_width(&cap_fmt); + s->capture.sample_aspect_ratio = v4l2_get_sar(&s->capture); } if (full_reinit || reinit) diff --git a/libavcodec/v4l2_context.h b/libavcodec/v4l2_context.h index 64c53d07b5..67ac36c8bf 100644 --- a/libavcodec/v4l2_context.h +++ b/libavcodec/v4l2_context.h @@ -70,6 +70,7 @@ typedef struct V4L2Context { * or accepts (in case of an output context, e.g. when encoding). */ int width, height; + AVRational sample_aspect_ratio; /** * Indexed array of V4L2Buffers