From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id A225C4A4A8 for ; Thu, 28 Mar 2024 15:04:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8003668D5BD; Thu, 28 Mar 2024 17:04:22 +0200 (EET) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2091.outbound.protection.outlook.com [40.92.59.91]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2E32868D473 for ; Thu, 28 Mar 2024 17:04:16 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GvKYQ5m/09KsdNc08f8TcKh/g+SCnT4hKfMdPGCXzDAVJZsvz5l6ZaurVN+fqt7Dti8OLsEAvHTAQBuCsqac48NKVw++fEY8hqVOyYIApwLfr/N2brT5njp9a8yuNa9IgeAH0c0x/kYHAfdL8CZSb5o2n05w9wgMIjeF/u1WOeu0uAv/5LNrk0Iyq/QlPmkTb7QWS8Ain806nLn3j7fgtVUbfJt9KNGE5P1ec5PrhWJ+vXBc0vuEAEuqtfJQokjxoKWO8NL5InXuA6hjSfYEl8pk06LuuNiNP7P+VRwr2tAOZHj1eLwLccaB39I8ymCn+iwhVB6R2qFHVA8pKauRkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZXXI513BTsmZtN+lWNba5LnWmysAoOihhmsTClhcNRs=; b=DN9hNsEw+uBqPQHHlUDvLB2Fx7uliM41yNxKY8Dwa5m4GVhiH2aKxyUgRZycZvFu7z7kBV6AgOO0g5buIRuM6VF69/eNcVlPi+DEIc0F/3BCdV/L4dgmK3K/vl+QN+sgt8KOujCigNIphRgzB8Iv7Pqv+9vWFWApiAdn5XL3SRQW/ed9vBSDKjy4TQ25ErCj6HPDTmymrckqlxXUoDVJzO9FAtlp8TFhgZolMS3kBuwrmWVMK2HeN8hcuDjUwBm9k9cZ6zJdXqnmJxICR4tK25Y4izonDwVR4MZ8ZVLEw1WER5m3BZnR2p2DpcENSXGSBMqMsUB/crog5Eoo/iugcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZXXI513BTsmZtN+lWNba5LnWmysAoOihhmsTClhcNRs=; b=lh3c9Wj1kkMRatZhQ7WuoBd779TPCTdrSOkB4sfNCk378HNxX6R6fQsiSVqaM/7XzGKumgiQZr41bgHDInh/Lfzar91+nS7+4EV56zfm1GHteQ0kIFvvGxlyXODKOUdlnXlwZChrX1XdCjmT53XDTGcWHetReJw37EdQ9gO2wWuykSCtkoqeMXsr5l7kpxZQHYrAX1aWQHI+s9bHTGiAwk0xQUbUWMsw6JkA2gmlobrot/t8qjiKLM3C5vxZTA97sHIl7WszW9fZGcaiD9VeR9SFcxIsCjtCLVDPUdzFdhtPs5jlzy3GYxet2t6XD4x4seZyufUwJ2In2iZOoRmZYg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PR3P250MB0306.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.33; Thu, 28 Mar 2024 15:04:14 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.028; Thu, 28 Mar 2024 15:04:14 +0000 Message-ID: Date: Thu, 28 Mar 2024 16:04:11 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20240328111132.34419-1-gnattuoc@me.com> From: Andreas Rheinhardt In-Reply-To: <20240328111132.34419-1-gnattuoc@me.com> X-TMN: [4CUWG+NGbDN/a+1BNdwnvz2fr6NxgsyuDP90dA8vUOA=] X-ClientProxiedBy: ZR0P278CA0106.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:23::21) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <08f3e486-f16c-4d22-86c7-c080e364c635@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PR3P250MB0306:EE_ X-MS-Office365-Filtering-Correlation-Id: 0b6ccb06-dc6e-4fc5-8113-08dc4f3854f4 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NaMVZ5/D8Mrua4naBi/2ip1DH0GCtzi/qc1Bw3iNBH2/Eg/9SqhFtbkc0/vkrrXReBLByNnRBIhnLwGyLUs3hYMzQHUZNz8WgJe6TgU8JBvuqTKNTjNucyHb5uffmirCIvEwDEmyBo465f7y6PJaG+UyQg5IlsheYIrw7OqIywHfyib2MrpgYQL0eDkVEJnZHoJaKBYzoTNf4D/aEbMRCB0j/8OJBa9pW4D6zzHY3yhsKsATb6xILGeo1cTB0EKK1zbDHhI11fCzNm6BqwzkgoeeFweL665VYKZTXChy4eTH5/zekicmzbrwgfDcFjg83Tmnrt1ukM1pOfpHbjS+qY1edNHGE3JKx7HKPAbS2BKtFFl1absL4iMoiyUzPsE+3vYLnpXfq7iEKd29+N6vC+GBbtX+/X1PMFgCaCVU2Loj4xcgr1GcPCMVuExnmaZSgl/2KZJTblRUIWSo0pWQUUzdm+bPAN9b+IjGx7d5X8JFR+/lRsPIxplc9siEWJxz/1VIk2IinE692dM5C3H33X7gyYhwTwLNjaexngUha0Idj/2FSNo1nmCHPqIQ9LHU X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?My9tV2NOdDZlVXNQeGpwVjJaV2VIeWFKZklHZGFQWGE1UEV1bURTdUtvb1Rl?= =?utf-8?B?dW1aQ3NPR1NFUlh2SThWN0lBYWJoRzE4NmdaODhmUGk3ek4yQi9DOWh6Q1pn?= =?utf-8?B?cnJ5RlU1dFhhUGgxdzJQRDg1VFh3eWdEM1NicENjZlhMc0VQaEJYVndJajVt?= =?utf-8?B?d2dabGZHdGlKaDhSQVRUUEpxVDFzb3NHV1E0T1Z1dWQrdFVIWnJjZzNMVEJo?= =?utf-8?B?MkNScEhJNFBQdTVMWFBPRC9YMWhEb24xdHVGUFYxRlp4UnhpdnBXZVg5T2tN?= =?utf-8?B?eG9jZk5PVW1QUGlacGdWYllSTTUvWGU2dWQvYWZSUUhTMkpaTmxkeDE1YWhP?= =?utf-8?B?bVFKNTluOVhvMHFSMUdoZTlSRWFielVsK1dGVHJMMkhoYm1Zek95a3lRNklP?= =?utf-8?B?cE5tckRKaUNsbzl6Q1RaM0Ruak9taVlJcmtrWURUbythTGQzN0NseThacFZS?= =?utf-8?B?bFlXUjl1R2d2dVF0dTdKcER1dnlrcS8zWnZJcmYreExyYzVYa0kwRkUzR2Ev?= =?utf-8?B?c3daUWVWWDRlQmp6R2NWSVpJczRoMHk3M1pTVlVDdS81Y3piRGZtVW1wdHhZ?= =?utf-8?B?TlVrMlAwRnJmQ0MrK2pNVmhhZ1gzVEhPSUl6MDVQdEVDOTNDRUJSbVNEcGRF?= =?utf-8?B?UWpZQ3NVMnYzQVJmOStpTGYwNmZNWFpIbm1Yems5d3ZKK3liV3hXbDFUb2Ux?= =?utf-8?B?cUhaYnhFNEtKa2RPeFpuSjZ3dDg4S2c5T3lGdDMxbXdieU9sOVg1NUFkS3pl?= =?utf-8?B?TEJ3WDNlTXBkOUhXY2o2RFphSW41L3R1VzJkUWpMc0dtd3VNOExSdUM1b0Rx?= =?utf-8?B?bXhXMlpDSzZWc1BqUVYxVjBqWVNPSTJVVXlMSmVHOUlaMGhQbWpUWDhCK1JU?= =?utf-8?B?Y1NJcTVyL0MrZFpucEpCait1a3M5MThYanVEUk5zQjQ5anh4WWxSVjhZRk5D?= =?utf-8?B?SU94YkhLRHNaM2lRcytVUGkra0R0VmNmekgwbDYybnpCdTNSSTBHYTJ2NEVs?= =?utf-8?B?YnZtUWh5TTRIczZJb3JKbnpaYVJRNUs3a21aYjVpSEhJNFY2WVpKMWNCM3Bv?= =?utf-8?B?N0czUEZ2OTFQMG1VZGg3WWdWeUxGbDNHL2cyK0VEU0UrWEFJRWZiMmxFUlc5?= =?utf-8?B?Wm1GS0xaNE1KTEp0dFROSDZpRkR5K0JaeUNPd1pGT2M5Ny9qODRYSzAzakk1?= =?utf-8?B?QVpFaENvSFUrV2ZGOW5nMjZnYkNJejlzUzlheVFyWDAxQlBBeVNDSHkzSytO?= =?utf-8?B?QWx4WTRXcFJkLzF2V2YwMU9xcStmZTkrbGJMT1hMQW9nRmgrM2lybDlqMmx6?= =?utf-8?B?UC9yWklyamZzTDRERjBTbXVFd0pWaXRLVitnRTZXR3ROM2t0RHo4N0Q3Umc1?= =?utf-8?B?REdIQlpjV0NJaFU1VWRtYndRUUcycmo2bEh0bjF1elZQYlh0ancvV1h2enZt?= =?utf-8?B?Z1Q3c3BsWjlDWFh6K0xPMEhCbHFrUzBKRU1QdlJtRzhvYy9ISUJyTmJzUG0z?= =?utf-8?B?Qmc3RnYrRmdCNWtNejNqZmFLbzlSU3ViYXI4R21GeWVlN2dqVzJlam8rK2FO?= =?utf-8?B?NXkyU3FrTERES0ZnTWtjNXFYMEtMZm9rSVM4UVIzcm1HaWNzbVdud2lsWHpx?= =?utf-8?B?K1pEdTdsUlpJZDlXcTI5VVp3NVIrZEY4WUhITTBmZ05tWC9RcWRJTEk1OXRU?= =?utf-8?B?NGVoMGt0TjBRbDJZWmF6SjBCVGFIeG9iQWFxUWF0WnRiTzlma0RxRHNRPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0b6ccb06-dc6e-4fc5-8113-08dc4f3854f4 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2024 15:04:14.4485 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0306 Subject: Re: [FFmpeg-devel] [PATCH] lavc/videotoolboxenc: add MJPEG support X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: gnattu via ffmpeg-devel: > For example: > ./ffmpeg -hwaccel videotoolbox\ > -i INPUT -c:v mjpeg_videotoolbox\ > out.mp4 > > This encoder does not have many options and can only use ``-q:v` to control quality. > > Signed-off-by: Gnattu OC > --- > Changelog | 1 + > configure | 2 ++ > libavcodec/Makefile | 1 + > libavcodec/allcodecs.c | 1 + > libavcodec/videotoolboxenc.c | 39 +++++++++++++++++++++++++++++++++--- > 5 files changed, 41 insertions(+), 3 deletions(-) > > diff --git a/Changelog b/Changelog > index e83a00e35c..b73a44f9ad 100644 > --- a/Changelog > +++ b/Changelog > @@ -38,6 +38,7 @@ version 7.0: > - ffplay with hwaccel decoding support (depends on vulkan renderer via libplacebo) > - dnn filter libtorch backend > - Android content URIs protocol > +- VideoToolbox MJPEG encoder > > > version 6.1: > diff --git a/configure b/configure > index 2a1d22310b..52a0ee762f 100755 > --- a/configure > +++ b/configure > @@ -3474,6 +3474,8 @@ hevc_videotoolbox_encoder_deps="pthreads" > hevc_videotoolbox_encoder_select="atsc_a53 videotoolbox_encoder" > prores_videotoolbox_encoder_deps="pthreads" > prores_videotoolbox_encoder_select="videotoolbox_encoder" > +mjpeg_videotoolbox_encoder_deps="pthreads" > +mjpeg_videotoolbox_encoder_select="videotoolbox_encoder" > libaom_av1_decoder_deps="libaom" > libaom_av1_encoder_deps="libaom" > libaom_av1_encoder_select="extract_extradata_bsf" > diff --git a/libavcodec/Makefile b/libavcodec/Makefile > index 9ce6d445c1..f59b2ae691 100644 > --- a/libavcodec/Makefile > +++ b/libavcodec/Makefile > @@ -503,6 +503,7 @@ OBJS-$(CONFIG_MJPEGB_DECODER) += mjpegbdec.o > OBJS-$(CONFIG_MJPEG_CUVID_DECODER) += cuviddec.o > OBJS-$(CONFIG_MJPEG_QSV_ENCODER) += qsvenc_jpeg.o > OBJS-$(CONFIG_MJPEG_VAAPI_ENCODER) += vaapi_encode_mjpeg.o > +OBJS-$(CONFIG_MJPEG_VIDEOTOOLBOX_ENCODER) += videotoolboxenc.o > OBJS-$(CONFIG_MLP_DECODER) += mlpdec.o mlpdsp.o > OBJS-$(CONFIG_MLP_ENCODER) += mlpenc.o mlp.o > OBJS-$(CONFIG_MMVIDEO_DECODER) += mmvideo.o > diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c > index 2386b450a6..f8a90fdca2 100644 > --- a/libavcodec/allcodecs.c > +++ b/libavcodec/allcodecs.c > @@ -879,6 +879,7 @@ extern const FFCodec ff_mpeg4_mediacodec_encoder; > extern const FFCodec ff_mpeg4_omx_encoder; > extern const FFCodec ff_mpeg4_v4l2m2m_encoder; > extern const FFCodec ff_prores_videotoolbox_encoder; > +extern const FFCodec ff_mjpeg_videotoolbox_encoder; > extern const FFCodec ff_vc1_cuvid_decoder; > extern const FFCodec ff_vp8_cuvid_decoder; > extern const FFCodec ff_vp8_mediacodec_decoder; > diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c > index 15c34d59c3..0574edab56 100644 > --- a/libavcodec/videotoolboxenc.c > +++ b/libavcodec/videotoolboxenc.c > @@ -547,6 +547,7 @@ static CMVideoCodecType get_cm_codec_type(AVCodecContext *avctx, > else > return MKBETAG('a','p','c','n'); // kCMVideoCodecType_AppleProRes422 > } > + case AV_CODEC_ID_MJPEG: return kCMVideoCodecType_JPEG; > default: return 0; > } > } > @@ -1233,7 +1234,7 @@ static int vtenc_create_encoder(AVCodecContext *avctx, > kVTCompressionPropertyKey_Quality, > quality_num); > CFRelease(quality_num); > - } else if (avctx->codec_id != AV_CODEC_ID_PRORES) { > + } else if (avctx->codec_id != AV_CODEC_ID_PRORES && avctx->codec_id != AV_CODEC_ID_MJPEG) { > bit_rate_num = CFNumberCreate(kCFAllocatorDefault, > kCFNumberSInt32Type, > &bit_rate); > @@ -1347,7 +1348,7 @@ static int vtenc_create_encoder(AVCodecContext *avctx, > } > } > > - if (avctx->gop_size > 0 && avctx->codec_id != AV_CODEC_ID_PRORES) { > + if (avctx->gop_size > 0 && avctx->codec_id != AV_CODEC_ID_PRORES && avctx->codec_id != AV_CODEC_ID_MJPEG) { > CFNumberRef interval = CFNumberCreate(kCFAllocatorDefault, > kCFNumberIntType, > &avctx->gop_size); > @@ -1496,7 +1497,7 @@ static int vtenc_create_encoder(AVCodecContext *avctx, > } > } > > - if (!vtctx->has_b_frames && avctx->codec_id != AV_CODEC_ID_PRORES) { > + if (!vtctx->has_b_frames && avctx->codec_id != AV_CODEC_ID_PRORES && avctx->codec_id != AV_CODEC_ID_MJPEG) { > status = VTSessionSetProperty(vtctx->session, > kVTCompressionPropertyKey_AllowFrameReordering, > kCFBooleanFalse); > @@ -2844,6 +2845,13 @@ static const enum AVPixelFormat prores_pix_fmts[] = { > AV_PIX_FMT_NONE > }; > > +static const enum AVPixelFormat mjpeg_pix_fmts[] = { > + AV_PIX_FMT_VIDEOTOOLBOX, > + AV_PIX_FMT_NV12, > + AV_PIX_FMT_YUV420P, > + AV_PIX_FMT_NONE > +}; > + > #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM > #define COMMON_OPTIONS \ > { "allow_sw", "Allow software encoding", OFFSET(allow_sw), AV_OPT_TYPE_BOOL, \ > @@ -3004,3 +3012,28 @@ const FFCodec ff_prores_videotoolbox_encoder = { > .p.wrapper_name = "videotoolbox", > .hw_configs = vt_encode_hw_configs, > }; > + > +static const AVClass mjpeg_videotoolbox_class = { > + .class_name = "mjpeg_videotoolbox", > + .item_name = av_default_item_name, > + .option = NULL, > + .version = LIBAVUTIL_VERSION_INT, > +}; If you have no options, it makes no sense to use an AVClass. > + > +const FFCodec ff_mjpeg_videotoolbox_encoder = { > + .p.name = "mjpeg_videotoolbox", > + CODEC_LONG_NAME("VideoToolbox MJPEG Encoder"), > + .p.type = AVMEDIA_TYPE_VIDEO, > + .p.id = AV_CODEC_ID_MJPEG, > + .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | > + AV_CODEC_CAP_HARDWARE, > + .priv_data_size = sizeof(VTEncContext), > + .p.pix_fmts = prores_pix_fmts, > + .init = vtenc_init, > + FF_CODEC_ENCODE_CB(vtenc_frame), > + .close = vtenc_close, > + .p.priv_class = &mjpeg_videotoolbox_class, > + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > + .p.wrapper_name = "videotoolbox", > + .hw_configs = vt_encode_hw_configs, > +}; _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".