From patchwork Tue Jun 9 08:49:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Fu, Linjie" X-Patchwork-Id: 20240 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 CC06644AAF0 for ; Tue, 9 Jun 2020 11:54:06 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B4D4F68B2DB; Tue, 9 Jun 2020 11:54:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8AB2B687FAE for ; Tue, 9 Jun 2020 11:54:00 +0300 (EEST) IronPort-SDR: 0CFe9hXvxp6H3Lf391oRdNMfEDZZ5U2DAgpMsiwMdJhlfYKfI5Mmtn0SVdMqHCXwT/Ir8EliHt /LQ9A6DUb8AQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jun 2020 01:53:45 -0700 IronPort-SDR: TRTKUfrmritofWXm03IuZcjdQAP5GClh8a8kIE7ZWH0FZxMTO5oilDBulMSVvPJGlQkPqv7kpY JSN5XxAPHhuQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,491,1583222400"; d="scan'208";a="447057101" Received: from icl-dev.sh.intel.com ([10.239.158.73]) by orsmga005.jf.intel.com with ESMTP; 09 Jun 2020 01:53:44 -0700 From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Tue, 9 Jun 2020 16:49:28 +0800 Message-Id: <1591692568-19385-1-git-send-email-linjie.fu@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [FFmpeg-devel] [PATCH 5/5] lavc/encoder: declare caps for encoding with variable dimension 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: Linjie Fu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Linjie Fu --- This patch is for RFC: Did some tests on some of the encoders and find some encoders not suitable for now, hence didn't declare the caps for them: 1. libx264: seems have frame drop. 2. hardware encoders like vaapi: failed. Hence before we got all encoders supported, I'd prefer to declare caps for specific encoder and add the enhancement step by step. libavcodec/libopenh264enc.c | 4 +++- libavcodec/libvpxenc.c | 4 +++- libavcodec/libx265.c | 4 +++- libavcodec/rawenc.c | 3 ++- libavcodec/wrapped_avframe.c | 3 ++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index f63aa52..b86041b 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -438,7 +438,9 @@ AVCodec ff_libopenh264_encoder = { .init = svc_encode_init, .encode2 = svc_encode_frame, .close = svc_encode_close, - .capabilities = AV_CODEC_CAP_AUTO_THREADS, + .capabilities = AV_CODEC_CAP_AUTO_THREADS | + AV_CODEC_CAP_VARIABLE_DIMENSIONS | + AV_CODEC_CAP_ENCODER_FLUSH, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 8e0ea42..9faec48 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -1789,7 +1789,9 @@ AVCodec ff_libvpx_vp9_encoder = { .init = vp9_init, .encode2 = vpx_encode, .close = vpx_free, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS | + AV_CODEC_CAP_VARIABLE_DIMENSIONS | + AV_CODEC_CAP_ENCODER_FLUSH, .profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles), .priv_class = &class_vp9, .defaults = defaults, diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index f560d7f..2a9ec4e 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -701,6 +701,8 @@ AVCodec ff_libx265_encoder = { .priv_class = &class, .defaults = x265_defaults, .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS | - AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE | + AV_CODEC_CAP_VARIABLE_DIMENSIONS | + AV_CODEC_CAP_ENCODER_FLUSH, .wrapper_name = "libx265", }; diff --git a/libavcodec/rawenc.c b/libavcodec/rawenc.c index 486c0d7..85298dc 100644 --- a/libavcodec/rawenc.c +++ b/libavcodec/rawenc.c @@ -92,5 +92,6 @@ AVCodec ff_rawvideo_encoder = { .id = AV_CODEC_ID_RAWVIDEO, .init = raw_encode_init, .encode2 = raw_encode, - .capabilities = AV_CODEC_CAP_VARIABLE_DIMENSIONS, + .capabilities = AV_CODEC_CAP_VARIABLE_DIMENSIONS | + AV_CODEC_CAP_ENCODER_FLUSH, }; diff --git a/libavcodec/wrapped_avframe.c b/libavcodec/wrapped_avframe.c index ae29328..9af3193 100644 --- a/libavcodec/wrapped_avframe.c +++ b/libavcodec/wrapped_avframe.c @@ -116,7 +116,8 @@ AVCodec ff_wrapped_avframe_encoder = { .id = AV_CODEC_ID_WRAPPED_AVFRAME, .encode2 = wrapped_avframe_encode, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, - .capabilities = AV_CODEC_CAP_VARIABLE_DIMENSIONS, + .capabilities = AV_CODEC_CAP_VARIABLE_DIMENSIONS | + AV_CODEC_CAP_ENCODER_FLUSH, }; AVCodec ff_wrapped_avframe_decoder = {