From patchwork Wed Dec 22 03:25:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32824 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp6022606iog; Tue, 21 Dec 2021 19:26:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJxngGSUx/e1s5v/ZZdAIg0Ims8tYMAACSESqlhzvieEgeAPkKVMFxfmdq/kh5Q9YENdTkGl X-Received: by 2002:a17:906:517:: with SMTP id j23mr902182eja.453.1640143587258; Tue, 21 Dec 2021 19:26:27 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gt42si439077ejc.972.2021.12.21.19.26.26; Tue, 21 Dec 2021 19:26:27 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=u6O+61qH; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5DF7C68B002; Wed, 22 Dec 2021 05:25:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074084.outbound.protection.outlook.com [40.92.74.84]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 360BC68AF8F for ; Wed, 22 Dec 2021 05:25:45 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=b2HHW8O7RBdrprHi8SliTAgcYs6Z52UaLOf0H4N4/p7tBVkwPzKVzQqhm5k9iSAgik80ffoLbUY6kQf7fMIgLqm6CjCV/gOXUFtByBwmzTxTIVOOze6NcdHwdl5F/lfwyuARWNaHu0fyfl6GrACDp6ny4+9rcnmlisGLtauUb5g/mMh41qUe/cG7YPV7WqIIVj1cCZdojd2oMjKiTT51ev4kZ6xQ5Nfho4gEuAy9219azbGuGyqZRXwPAbEJQVSfj8QFxVdDI7xJc+eHAkDxV1pMLl9VJpcTsB4YLayNp61eRLFvBLQ3uYFct7SiTx5kHJcx3UdSekv4iBUBoJmhIA== 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=nj679eXdhjRNi5ZJzIVk40DqItC8TcZQ63MXJCe+LEo=; b=X78Nq0PnlRHTw6GEy3DW7gQA1e6FC1gTMmSwNpR8ze0LeAAl9hIdLD0kfK+t5QTzh2MwIXmzKmp9Y/1S8VHxfKizJ+EwpZ4ktyXQUAPjwh2AD2Q+liYHpyxosNQUPN8NewE5xAiB779bDKaEy1kds6ndNP/vk6+/vrsio3c+B0w+g+dcf4BVZBm3UY+PEJt9P47OxyrdaOphxtmSejLSUG2MnlCNvteaUHCJIWbVhEFsUG+Jv+P/3WVxF27ebmBYCUU/6zd8wPpXVyhGb95ZiV3bFhEWQqGXW0EvEdWCWxbN5h43EliYeuYCGrL7MLy6qvXul634qnjUShxGOvUGGQ== 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=nj679eXdhjRNi5ZJzIVk40DqItC8TcZQ63MXJCe+LEo=; b=u6O+61qHjuQJtDdZ3dHoQ+vYfJDOUNj76pwq4jFp6AzWOhJ79McSrmNTobjLvVFpDfFVxq9WCT6uin2KD90fZlZrJ+RbQHhFMpVJFX2rwga/hQ8d84NeBHpc2QmnHpb1W5ybcduCGDhEGj/lAP3bWsBKSNkQ0Y/b91ZCbByhoFsmdeirmymEEifheYHfW/PEP/Ly09mM+cN6+sosfqYCaQFQznMizlWjzZIKvpXNbw4dBJM6FHDgdtvC7h7NUojToJkRQq9FohQBBO6OUnNJU6CdDWyZq1AIEfk4myAZmPwdzfdnE/z1cH67byX9tWY/rldWiGz3RCsOUYLxxeuIUg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4104.eurprd03.prod.outlook.com (2603:10a6:20b:18::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.15; Wed, 22 Dec 2021 03:25:30 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%6]) with mapi id 15.20.4801.022; Wed, 22 Dec 2021 03:25:30 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Dec 2021 04:25:08 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [+xvBIhe6Y1VNKdz/BNHsAtJFhrrkfpeX] X-ClientProxiedBy: AS9PR06CA0323.eurprd06.prod.outlook.com (2603:10a6:20b:45b::19) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211222032514.896794-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bf1a2cc7-81c3-40b8-c818-08d9c4fab4e4 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiR3EehW4kxQzdNcP2D/mG1JrhTNjhTvh5YpSe0loWcbPKZyQd/jbbZFEW8EXq+pmhDmzHNJM7oBXQl0hUC+k+MO1OJtVd3ZLT22HvRP9MpUoYWD4zsg+z4gfiugcvosJSV97sacEQE2QqoZVvkV/d6Nw8WOZnBa1xChluyuXlPnKygLiRs2e25WoAgaVe7SJsfcuYsJt4HsFiQ3lJflVEtk/pkwgn852sh+jkCtVlsXgRCnZPGOtg1HwoR7eBkLUFXRvB3sjwpC7JddqyDbgc2vmcosGWOPLcEQCBLJarq2TNKGSv8q1Jsg4idQBwN0jLKomhARtDPGVMrw0D5E+iQZ5RNbTkW7tasEgOPNMu3k/Fapxs75L9+3L+coUPdF5RUaJ0DucRka6onh55LZc1zfWeQsL3d4BkiJUUZvn8OSNOCZ+9BKGQp85FaGztxKQVLsFfMQTGHoB9ImNfWDEtdvbKtuYKceFTKgb5JyZQJpU+XNYyM5GMSc+23BG9VYQ4JELVshO2HlFzDHMnpFo4fBzKJNZMg/9Tx9WdiXPojqrVOA5sZvPcvSJrlHiTCkXgqHMdGPGELttysokBn4KuBC4ImCMNeMB2OxB2YrJtdKOpUStpPxtB/t8KT8fYGhHAlZEpeF6xoWpZ6d5ADNngxDzIkSGaEmQIojDJpnKpJQ21X0o7LJPamCKZTvRCVIgB2N7J1a66ZlK+8rfZgtGCmJHAOUmgSq/aTea5frLagyjxDZDOuTREhUpI1Y3bv5Gbc= X-MS-TrafficTypeDiagnostic: AM6PR03MB4104:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TpsG3zkcVFBZXSiGI0gj7Z+mdUw7rQabIvfchqV3QT5Ct21NOVgTrTNHxi45sDOTrq+Bkvniuj8ZCspqPGs3vXfAc9K0XWPyRyqawPc4p59qhUDpNf/lNBuEvzQt301dZBYzI5ep0tzVlBmpkyxGsLF93UcIstX4tdbqp/emIsao1ZUXAiAKTl5XdGSYOzyrA7nmFelbACpgvipHAK587/N/gq4QoYuvbCdXBtF3u1w9vMQ95W5RTF96vGWxV/MGMi/gYpqP8iaimJa848w3k84/1fQTWpTlyJrFOOKTrpA3/OQD33TT+0Qerf+pdDnWTNDkJ+aWkGtScnDkOthpTbDeMLeNV8dJPyyQQwZ3dfGxLgt8qW7sOsIFtgoNoP4QIcnyDt0BhaQ/IjWPt9i5eDtLET/SADSZXFV+C02uRe4S4WRLAuiLDyk5UwzN//eT+ftRWd15oOydzLo86kT86bPnBu5AtZVIArGXqBhPs+s8sjcXXD/jlyWBUWl2KXmHI4+WSILn+d6yrQbzy1WFouAvF6JWPzdTh62/gcCvKxPm44KovSFt+g+JCb80iSNOywxrI2WOJ4M7GR3ANqfohQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uLbmdzQLtiT4STNxOi7jh8R6tcUOGJ40dgpXifXdzm/2tzcGC/NGT3JypqpuKj7am8lWYIsWC21m8ERHld1XP+8EEIIvBLqAVyD/OWrW9vJftBvL82YvML+0sVOMMDOaRYQ61Y+6ezzKecsOYyJcjGOd4fHKiAKM/tegGNrxV8Ps65516guiCGI0e1IFHwR7rxnZDna1DQo/VB88rCZwUULaSF6Eh2Xgy3hyf/aFKaGP7AEmH0YjrvBXfKDjWBhd76YeDfZwAFSaVBN6GS5F68a5UaqrcOi+nbgj9/d8oMFKEAkOMoEMPdyiZNmX37wwC2i4MeVhCcbpgT0ceTJ4DTdCNdW7fXHxZa8iFxQPjMrgbKRUbM+WTTbInoPuWjSLKk63KCgM/8CdxAEKMxqaXLOfK3cP2o59NrJRrOIo5AC8lRPcHunsQudqd0ZPDqXHQaEIk/BJ7xS7RRaSDfasnd6Rf+V9iugcM8IVkYtIgmlxouw6JfwIy+T9Ljr4RKN0QHWxPDEuleP/R4NiRs0Gx7Xa110z6CVgPGsNuapG/6eJs1C/uu4xddqHgFE8NTFEFQx5ttQVygg1trum80Kz3JQXzG/Z5vdKDaclcDBaTLHhhhmbmTd5iiCnGgbZEJWF7ZTsWXy+2PPdJmL2OngZg/X1blpaqwJnIAoO0ewlIosH4UGEFT1NIUiA7DlBfhEx3YwDgE8PUVLJ6nul2B6gUeapsdG7Fr1li4Ig2WQJZJmNbkphCobgCdPUlZs7MF73mSIzSAdxpZjH0+THjEmgTqxpzQkr55wKAj9MnNz5g2jF4bbbaVM3IrM5yBGYseeuF3QfhQ/WH3zL4u1ByXcATpJZCeJjDABXVXRze5ofAucixPJjbmLPiImbh9LhN7bEYU7xSvYgpsk/MF6UTvi18mGplXAh3DGvnD2egjYMgyBh+LZ6PWmvQm6fli3xhLlcPLExDZbXN6kAh3ZvGzgH2Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf1a2cc7-81c3-40b8-c818-08d9c4fab4e4 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 03:25:30.7895 (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: AM6PR03MB4104 Subject: [FFmpeg-devel] [PATCH 08/14] avcodec/mpegvideo: Move MJPEG/AMV-only fields to MJpegContext 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: HBFGdZsLWDv5 This is possible now that MJpegContext is allocated jointly with MpegEncContext as part of the AVCodecContext's private data. Signed-off-by: Andreas Rheinhardt --- libavcodec/mjpegenc.c | 18 ++++++++++-------- libavcodec/mjpegenc.h | 3 +++ libavcodec/mjpegenc_common.c | 4 ++-- libavcodec/mpegvideo.h | 8 +++++--- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index c1b759f7a8..9b5acde58d 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -86,8 +86,10 @@ static void mjpeg_encode_picture_header(MpegEncContext *s) void ff_mjpeg_amv_encode_picture_header(MpegEncContext *s) { + MJPEGEncContext *const m = (MJPEGEncContext*)s; + av_assert2(s->mjpeg_ctx == &m->mjpeg); /* s->huffman == HUFFMAN_TABLE_OPTIMAL can only be true for MJPEG. */ - if (!CONFIG_MJPEG_ENCODER || s->huffman != HUFFMAN_TABLE_OPTIMAL) + if (!CONFIG_MJPEG_ENCODER || m->mjpeg.huffman != HUFFMAN_TABLE_OPTIMAL) mjpeg_encode_picture_header(s); } @@ -211,13 +213,13 @@ static void mjpeg_build_optimal_huffman(MJpegContext *m) */ int ff_mjpeg_encode_stuffing(MpegEncContext *s) { + MJpegContext *const m = s->mjpeg_ctx; PutBitContext *pbc = &s->pb; int mb_y = s->mb_y - !s->mb_x; int ret; #if CONFIG_MJPEG_ENCODER - if (s->huffman == HUFFMAN_TABLE_OPTIMAL) { - MJpegContext *m = s->mjpeg_ctx; + if (m->huffman == HUFFMAN_TABLE_OPTIMAL) { mjpeg_build_optimal_huffman(m); @@ -293,7 +295,7 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) av_assert0(s->slice_context_count == 1); if (s->codec_id == AV_CODEC_ID_AMV || (s->avctx->active_thread_type & FF_THREAD_SLICE)) - s->huffman = 0; + m->huffman = HUFFMAN_TABLE_DEFAULT; if (s->mpv_flags & FF_MPV_FLAG_QP_RD) { // Used to produce garbage with MJPEG. @@ -346,7 +348,7 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) // Buffers start out empty. m->huff_ncode = 0; - if(s->huffman == HUFFMAN_TABLE_OPTIMAL) + if (m->huffman == HUFFMAN_TABLE_OPTIMAL) return alloc_huffman(s); return 0; @@ -514,7 +516,7 @@ static void encode_block(MpegEncContext *s, int16_t *block, int n) void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64]) { int i; - if (s->huffman == HUFFMAN_TABLE_OPTIMAL) { + if (s->mjpeg_ctx->huffman == HUFFMAN_TABLE_OPTIMAL) { if (s->chroma_format == CHROMA_444) { record_block(s, block[0], 0); record_block(s, block[2], 2); @@ -614,11 +616,11 @@ static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, } #endif -#define OFFSET(x) offsetof(MpegEncContext, x) +#define OFFSET(x) offsetof(MJPEGEncContext, mjpeg.x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { FF_MPV_COMMON_OPTS -{ "pred", "Prediction method", OFFSET(pred), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 3, VE, "pred" }, +{ "pred", "Prediction method", FF_MPV_OFFSET(pred), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 3, VE, "pred" }, { "left", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "pred" }, { "plane", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, INT_MIN, INT_MAX, VE, "pred" }, { "median", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, INT_MIN, INT_MAX, VE, "pred" }, diff --git a/libavcodec/mjpegenc.h b/libavcodec/mjpegenc.h index 555677e69a..a593b67e96 100644 --- a/libavcodec/mjpegenc.h +++ b/libavcodec/mjpegenc.h @@ -57,6 +57,9 @@ typedef struct MJpegHuffmanCode { * Holds JPEG frame data and Huffman table data. */ typedef struct MJpegContext { + int huffman; + /* Force duplication of mjpeg matrices, useful for rtp streaming */ + int force_duplicated_matrix; //FIXME use array [3] instead of lumi / chroma, for easier addressing uint8_t huff_size_dc_luminance[12]; ///< DC luminance Huffman table size. uint16_t huff_code_dc_luminance[12]; ///< DC luminance Huffman table codes. diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c index b9df32ad15..0303e65790 100644 --- a/libavcodec/mjpegenc_common.c +++ b/libavcodec/mjpegenc_common.c @@ -73,7 +73,7 @@ static void jpeg_table_header(AVCodecContext *avctx, PutBitContext *p, int matrix_count = 1 + !!memcmp(luma_intra_matrix, chroma_intra_matrix, sizeof(luma_intra_matrix[0]) * 64); - if (s && s->force_duplicated_matrix) + if (s && s->mjpeg_ctx->force_duplicated_matrix) matrix_count = 2; /* quant matrixes */ put_marker(p, DQT); @@ -110,7 +110,7 @@ static void jpeg_table_header(AVCodecContext *avctx, PutBitContext *p, // Only MJPEG can have a variable Huffman variable. All other // formats use the default Huffman table. - if (s && s->huffman == HUFFMAN_TABLE_OPTIMAL) { + if (s && s->mjpeg_ctx->huffman == HUFFMAN_TABLE_OPTIMAL) { size += put_huffman_table(p, 0, 0, s->mjpeg_ctx->bits_dc_luminance, s->mjpeg_ctx->val_dc_luminance); size += put_huffman_table(p, 0, 1, s->mjpeg_ctx->bits_dc_chrominance, diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 879b019ffc..5a3486d74c 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -290,7 +290,6 @@ typedef struct MpegEncContext { uint16_t chroma_intra_matrix[64]; uint16_t inter_matrix[64]; uint16_t chroma_inter_matrix[64]; - int force_duplicated_matrix; ///< Force duplication of mjpeg matrices, useful for rtp streaming int intra_quant_bias; ///< bias for the quantizer int inter_quant_bias; ///< bias for the quantizer @@ -414,7 +413,6 @@ typedef struct MpegEncContext { struct MJpegContext *mjpeg_ctx; int esc_pos; int pred; - int huffman; /* MSMPEG4 specific */ int mv_table_index; @@ -575,6 +573,10 @@ typedef struct MpegEncContext { int noise_reduction; int intra_penalty; + +#if FF_API_MPEGVIDEO_OPTS + int dummy; ///< used as target for deprecated options +#endif } MpegEncContext; /* mpegvideo_enc common options */ @@ -664,7 +666,7 @@ FF_MPV_OPT_CMP_FUNC, \ #define FF_MPV_DEPRECATED_A53_CC_OPT \ { "a53cc", "Deprecated, does nothing", FF_MPV_OFFSET(a53_cc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #define FF_MPV_DEPRECATED_MATRIX_OPT \ - { "force_duplicated_matrix", "Deprecated, does nothing", FF_MPV_OFFSET(force_duplicated_matrix), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, + { "force_duplicated_matrix", "Deprecated, does nothing", FF_MPV_OFFSET(dummy), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, #define FF_MPV_DEPRECATED_BFRAME_OPTS \ { "b_strategy", "Deprecated, does nothing", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \ { "b_sensitivity", "Deprecated, does nothing", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, { .i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS | AV_OPT_FLAG_DEPRECATED }, \