From patchwork Tue Sep 3 01:02:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 14865 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 3FB56449F2B for ; Tue, 3 Sep 2019 04:03:26 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 25FD4687FD8; Tue, 3 Sep 2019 04:03:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f194.google.com (mail-oi1-f194.google.com [209.85.167.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 64800687FD9 for ; Tue, 3 Sep 2019 04:03:24 +0300 (EEST) Received: by mail-oi1-f194.google.com with SMTP id h4so8108808oih.8 for ; Mon, 02 Sep 2019 18:03:24 -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=RGvQ4m+s0+OipuJYT9GybkoXPMrjf75E7h/luX9UZcc=; b=onTRB0tF5UDAtclfMA0HtaIgA1IkejsPgUDd5L70ZGpDwnHW1Znu6+ofOoi5GnpDw3 Xq4XLp5HWMgPS1ll/YmUmwxvD0XEF786U9xfAop2XCQO3FfJ7TR1De6jlnXtjln1vls+ qU9sKBwhWpjdhiTIaWbdJ8WTlWmM0cX+K8AXOuPHoqaqJ2c8qJ5tTTYNJgsUlj7SXBTL 3KTQD+z1qYxoFFpkbHM++xuw1gxjvBJ1TKrP6Qk+UWVRe6GAzw4ae1NbNXJ4ycCiBT1p IaElfWVg6Wkk5GdO2ZdSkZE6C7C9HiZ4CzBUzYRks/P1S/hqeTw+/vGaKSumz+6JzEKD VPdw== 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=RGvQ4m+s0+OipuJYT9GybkoXPMrjf75E7h/luX9UZcc=; b=EfE2wmylIDas4t60xEXw9LmQL8egCzuRXfkvPWdG9WLs3fev0D2SfWfuPWvN9KZ01y 5ZkVrHTo+a7U8CKCvWC+oM9Zu2/w6PHkXLE2GxOuqRQsYJFh2VFyWkW+NQKpSd9SugrT Melf3gcrhBJBnDrBMMrFDGTtsfPz3KjHL0PNKE7f3H1i3gsYWgUv/4iyBgXN4ff75zU8 8oUGrR2/qivyJCQsuSixmjYhmTTSY/mPU4tcxSjdZVh6iVtCZPiDRj838EXfgGLMv4e9 B3qMIEiUhmB+HrPH9PTCp3pnKUODiw9lB6P9BUfPa8YGIt5UDkTPsWxnf395RRJjMaAo gs8w== X-Gm-Message-State: APjAAAWOypRbRcGm8z39FSbRiw5NIpJjQoI7ERBl8U7IOUS7gFSGPjde oT6QjmVkNQeqMXAddz0jqc67jiZUWOQ= X-Google-Smtp-Source: APXvYqxck+VSH33YLlvCRnY2ZcIg9oV8jOxvov+I2ddlKfF8vOQr3TfjGqbDGaX0lIA2Z06UCYrIcg== X-Received: by 2002:aca:1714:: with SMTP id j20mr19531951oii.135.1567472602151; Mon, 02 Sep 2019 18:03:22 -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.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 Sep 2019 18:03:21 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Mon, 2 Sep 2019 18:02:26 -0700 Message-Id: <20190903010230.96236-22-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 21/25] avcodec/v4l2m2m: clean up buffer options and pick sane defaults 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: Aman Gupta Previously the default values for output/capture buffers were quite high, causing a lot of memory usage on devices with limited resources. On a default RPI3 installation, it is easy to run out of kernel CMA memory without additional kernel boot flags. Similar patches are being used in the LibreELEC ffmpeg fork for AMLogic support. I also reduced the minimum value for the buffering options so that users can further reduce the number of buffers if required on their specific platform. Prior to this change, setting up a decode+scale+encode pipeline on the RPI would fail with ENOMEM due to a total of 76 buffers being pre-allocated. Signed-off-by: Aman Gupta --- libavcodec/v4l2_m2m.h | 6 ++++-- libavcodec/v4l2_m2m_dec.c | 4 +--- libavcodec/v4l2_m2m_enc.c | 4 +--- libavfilter/vf_scale_v4l2m2m.c | 6 +----- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/libavcodec/v4l2_m2m.h b/libavcodec/v4l2_m2m.h index b94d724a93..f60773d227 100644 --- a/libavcodec/v4l2_m2m.h +++ b/libavcodec/v4l2_m2m.h @@ -37,9 +37,11 @@ const __typeof__(((type *)0)->member ) *__mptr = (ptr); \ (type *)((char *)__mptr - offsetof(type,member) );}) -#define V4L_M2M_DEFAULT_OPTS \ +#define V4L_M2M_DEFAULT_OPTS(output_bufs, capture_bufs) \ { "num_output_buffers", "Number of buffers in the output context",\ - OFFSET(num_output_buffers), AV_OPT_TYPE_INT, { .i64 = 16 }, 6, INT_MAX, FLAGS } + OFFSET(num_output_buffers), AV_OPT_TYPE_INT, { .i64 = output_bufs }, 1, INT_MAX, FLAGS }, \ + { "num_capture_buffers", "Number of buffers in the capture context", \ + OFFSET(num_capture_buffers), AV_OPT_TYPE_INT, {.i64 = capture_bufs }, 1, INT_MAX, FLAGS } typedef struct V4L2m2mContext { char devname[PATH_MAX]; diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c index 71b2211594..36c2363eee 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -281,9 +281,7 @@ static void v4l2_flush(AVCodecContext *avctx) #define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { - V4L_M2M_DEFAULT_OPTS, - { "num_capture_buffers", "Number of buffers in the capture context", - OFFSET(num_capture_buffers), AV_OPT_TYPE_INT, {.i64 = 20}, 20, INT_MAX, FLAGS }, + V4L_M2M_DEFAULT_OPTS(8, 6), { NULL}, }; diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c index 4ccfe77322..ca433ac1ea 100644 --- a/libavcodec/v4l2_m2m_enc.c +++ b/libavcodec/v4l2_m2m_enc.c @@ -342,9 +342,7 @@ static av_cold int v4l2_encode_close(AVCodecContext *avctx) #define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { - V4L_M2M_DEFAULT_OPTS, - { "num_capture_buffers", "Number of buffers in the capture context", - OFFSET(num_capture_buffers), AV_OPT_TYPE_INT, {.i64 = 4 }, 4, INT_MAX, FLAGS }, + V4L_M2M_DEFAULT_OPTS(6, 8), { NULL }, }; diff --git a/libavfilter/vf_scale_v4l2m2m.c b/libavfilter/vf_scale_v4l2m2m.c index a5ffa9953e..03d9f6406c 100644 --- a/libavfilter/vf_scale_v4l2m2m.c +++ b/libavfilter/vf_scale_v4l2m2m.c @@ -301,11 +301,7 @@ static const AVOption scale_v4l2m2m_options[] = { #undef OFFSET #define OFFSET(x) offsetof(V4L2m2mPriv, x) - - V4L_M2M_DEFAULT_OPTS, - { "num_capture_buffers", "Number of buffers in the capture context", - OFFSET(num_capture_buffers), AV_OPT_TYPE_INT, {.i64 = 4 }, 4, INT_MAX, FLAGS }, - + V4L_M2M_DEFAULT_OPTS(6, 6), { NULL }, };