From patchwork Wed Oct 12 18:06:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 38708 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp1505392pzb; Wed, 12 Oct 2022 11:06:46 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4D9ya2e+d30M6wISzbeOqsJ8+adBDVSqzYyw9dHetbqp+k0UNbHa4NEqFJSi6u+x9+6mWT X-Received: by 2002:aa7:dd57:0:b0:453:2d35:70bb with SMTP id o23-20020aa7dd57000000b004532d3570bbmr28681498edw.26.1665598005995; Wed, 12 Oct 2022 11:06:45 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ga7-20020a1709070c0700b0078c37681f89si9256062ejc.650.2022.10.12.11.06.45; Wed, 12 Oct 2022 11:06:45 -0700 (PDT) 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=bEn753ch; 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 65DAF68BAF5; Wed, 12 Oct 2022 21:06:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067025.outbound.protection.outlook.com [40.92.67.25]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 874E468BCAE for ; Wed, 12 Oct 2022 21:06:35 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Me6KycbhjC/Ihd7HGZuT6EF0cIUtB0PbVRntf23hhFeEbUPtRomb1OrlAq//zKB6UUGJ6mZOd+hAk+Suf2gGq/Qk5esDsGqC/BNIASpOkJUK7TjGjwT5e/Wb5/JXlrE1GNo3lg9ZL0vY0SrP08fft6iUT8ammyRUrSzH+cU6+pCcqFvTd/HwoNCw8gkPaUdPQVAwzvQPWC3XDcCQena5NDjDXXpNPXx14ieOHiqHgnMhfUewU+tFJrZDJ4wMVEpVOQg+Q/KAX+n9nnfgK0PPk17GRF0hdQk1/7Fxo19bh8FBNS9hiMYZHwYzfamqVQ4iicTJBdTLybUyYXt7FqTX3w== 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=kN61gN4jhEage8zBc6bMy2LKK7w5J1cGzyRQxdgjAxs=; b=UqZZNn0d6poya3gLANBNGxw8TL03mz6mdxnvqgtGsEAlH9h0ne82wSVtor/tfL+FOkEmk+ycb3KLxFJIo3lmgOe27W+IGObW/32gNU0KsgqnVc0+F9Wkz2dcwclKu+M+F5ZjypycA+3s9Volq1+9He0vnjDh3/wgmQ3C2tY3dTQwOhRnQGXXHOpawXuUA6wIDyJeI2owCgXGU1N6nQM2zjul+HTfFS7J39jEHQUP3UBoLrNOpdGqTSyAC+APO6Q4SV3m0g3fKropRqafVrP90yYDsDL4FZbo/TjVQQjj4SBif6SaOe+eiKK3Kc1hIQS4s9YkGpcyAzBf3MgjyCuVng== 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=kN61gN4jhEage8zBc6bMy2LKK7w5J1cGzyRQxdgjAxs=; b=bEn753chpmGfxDMP8xx60/ltdsOFMDh9+bUbPludqvDceGC/EQN7/IqfQiHIyCT/pIFIAKy6shA150qZO6Q9MNldVS6U7BXPaaTQTRhKN0Mi9Z+VOAHhyEKOsp5BUk7gloB8Ln8qx1V8VoQr7msDSmuiLJ2EGuOL5QeqGvQthzxkvohS3mxP5zaNwXzPvLipjKvreY2ssnFmzDFC/N7N/zmRPr3eGk4cOi8h0by2kQtcSBfignPULixWYRMN2OCfOtxdGthYSjaG9XebCd0ssfKei/ld4aTaTa/qAvO3kzhBrGJgYLK3dhOjq5ZcXFoEO/MZThHkBdN63/zVmjVfXQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0095.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:270::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.15; Wed, 12 Oct 2022 18:06:34 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f9d7:680f:70c4:44fe]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f9d7:680f:70c4:44fe%7]) with mapi id 15.20.5709.015; Wed, 12 Oct 2022 18:06:34 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Oct 2022 20:06:20 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [LMrPN3hfUpOqDLxBEPQh2clVL0cFL55bVdewaMjxy8Y=] X-ClientProxiedBy: AS9PR06CA0077.eurprd06.prod.outlook.com (2603:10a6:20b:464::24) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20221012180623.1834366-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0095:EE_ X-MS-Office365-Filtering-Correlation-Id: 83fa8584-5dc9-4b5a-c60b-08daac7c7f76 X-MS-Exchange-SLBlob-MailProps: ZILSnhm0P3kTotjjC9DVrXGSRzCr0nLNGl0OybCog5e2TugfWDxXW9lE0GeTozzlo0nDgWDU6hSlYHLQEBVazSVP0VjK7RJi1ki3wN5/cVtmqqQacls2SiFUycFTULWsOsDSXxbyCn0ohHyaPpHsz2kBy7e7dBEmAwqCuyzH4y2RcTL+GbgS6V+hnDDA+aEKLRLoDXD+l9HvYq356kEgmXvD3w0fnEDqr21ox8F5yqCxQaBIS7ymC5mj9HWI22kscffbk+Nl3zISBaVAj/As3JpycXbOnEZRaJtRnWbS2r7/rKKDQZqZqogCfUOroalGGbF8+uUt2gP2N2w3s1Kz2deCbZayMyL4HNC+vi9xaNIG28OfFrxRCnZ7gruyVpN6hTPZLjtKfciInC21SC7ON8fnPc8HViGbVD52OYSQqW5kuqt9iEEdWCN4mCtDeijGBsdmpF1BR9oPSif6IdlElYnHLgDxwWJ8a7KeXQKdhQqpWUIGfjTIP3SPkVJ0Pxlsco/5vgNtTVPS+UM37PidBxB1yxAQKWjggFRjgapEUmrnQca2uYPHY4O94+kJAsSyfL0+hI7ZOFWgXn5pM4gQqfBW3qET7hwwFR4xqJFIEXgwb8Im5ywO40/fJZbgc0RvSoiKmypleQFTWeftsIbM19dPlVAtlhZhpnwy5CTvbsRZDqu0qMtV24WaoHfIEfWs4+5cziWEvQOfgbMZ7RW589ZFRLT2jKJ0vSwEK9zNhzk7iHw6oLE5UQjEntC0Vw+JOz5MFQiFmUfWQ6UglJ55ga6oRSla8QZF X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2QrAgrmV36pU6a2O/I4z4vaFdD2XyUAzd0Plre0mkg8CE/UeqCJNcAwftUkdROGF9GKJasCAJXJFyKXDhy8Ugicitx0na0vaUrqtefs8KaTCFiu1OtdYuaa3B04bk1Y7QiVPqyPsBxi0zl7wmoaagCsgZpryc4/wapgaEc9MxhNZnKWqA02VMZdMMt/DzhL4MeqvRt0gSWIrBApVMJHgO/V/AzARE6C93JlEroWU+9+2Lnb9C6QRJnt5rzKypuZUXr09xFO2tbVJxMW8+WSqlat8wmDWhDsx6eQbjzJR3Az+xx85XiuWVDAah2pjPKJRwUrwgsthRoE/tbVdn6U0crfeAbaSFvAxebJXA2XLtHDyqB7XdPCZ8pGU9+hZVGYyBdevPYWWtpBI+6XZjUgR+RVEnzxMBOUtUf6muqC4/+Ww3VAJWldBS9yoeQmec8D8DdRswjcnTQAPO/Cl2KONcBIFS8rsDCyO7pzDLc9hlRBKjkZHadvDywHdv0nrqDXxHr2rEHdOrV9aoaW1uT4+VsnFJ1v6SVR1YK7Ku7ESAjHrPwTP2oF2t1V4pK8kefKP5Q8mIvN3m0Hxk63MPLsuU/IjQHadKSukuLTxEi9nZdRls6snKRWul/VTkhg3qrqttKn6TOLexTCe4kmuavZhMhhW6KXbNqxL/cRzzqUP/rIGTOIvJaa1E/QR2ViMQL+y X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: W36kz0iSnk9kpH20IiGGYnNJeZrIEV5r+5d8qt+MNjNJoifPLaRS+dWkd18CEOyr3y+qm83SGTFEDKO4kcCOnhy8IBvRb/VaBFe0HyPb6+A7++zXWeyaQR0eCWryNbeUr7VdPprTdzstJOz7WWf65zu0sxPcnL1oxgSyh/nW+ayODVfm/kAD3pF+Z+j86kBVw8iJ4N2zbnm3pF3Wihwo9PNOaZUDe5FX1wE9fmYpGHGm+9dl8SpS6jq9mG6fgg+ljFpu0yFahYGchM8MJ3nBVpHy6VG9v0Xjg0lOKTTSiRcaWLXKNsYlRw1GmmnLITQzmSTByijf0UpNXlCAQnzx1PacpfJKEl4QXkeNEN4BFV1rGxmpkrTICawJiB2BB6VRi0JIkUmoREI5Hk6JSEhub01H4AzYB9JlTO7N8eWANY0cajJ2NwzDLWPlUey8GBWk9zxP9bmKEJb9oIjMZHbp65Y76RcFhC3+ACcwQX78RaOEvX283hnOpzE8O1Rcr3xeNQvoPhzykI5b4rPpNFRTkNb2ZVpqW0fhy6vcTbkSfimO/c5OOtkH8fJAQ/j50TLP17mEId9HRcoSKg8keAZmd54t+DQ1rtmrkToMhajSh86p9oBXUG1WgVq+2YiFHzzLl2XEeN4R1HU28P2ISPISZHuza4e3PtDKkYF0elPdjTQdOt3rDFR7QXhyCLBYpfp3/zcfRDvT/pUkyTmvED4WuaOHoX9sUQcOcMhoOs9kiPg8BIwEccTHRrOYthik93AhEC/xwKDDNx4BoaWOn+bLluySbNKwAAQ9TktlBkWtKTuIGEQONvc9lYI2glu1Cpu81YvoypfRiKxWEG8FMTwH4YKjjo6uFaH50NdmOavZmyBhNJx8Qt7YrSpwnFkQMScu5wVXrJ0TgIjIPFpMaMtBzsfvH0q5rT0aoz0Ow8PULP/DYO5rhwrAxd9tk/SxDHWdIm0xMZSqPSTfeMTFH3IwKJlr4OBFNhabkYRJP6LItBOZJwvjDjVJpB7u1KE4qPyfA9C/8YX3KhFXAXDnmWMuCo9/l+9jITplpuRz3rDunuTImoF3SYADuV588AC1zV5qjILEpkuw4TNo6totKVSoD9oXy0+OmYNuAXaz2cvPi90SsccQ3YxcWoRTfKfAA2wQ+X9tEI+itOW0UM9vOveVqSF731ZhJBpAW4tHCql3mrP5de30ruNFpqwNhZXKv4W4fDGSwJSysMfl1K6k7RtaUUAKv2ZO86zCQ8XMjkgF5mrHlyA+rzs5L03BD77yoFElYvuOmFDsnSzQ4f6seeCZrHMu1jNw4HmlrSqnEpxKQiQ= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 83fa8584-5dc9-4b5a-c60b-08daac7c7f76 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2022 18:06:34.2477 (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: DU2P250MB0095 Subject: [FFmpeg-devel] [PATCH 3/6] avcodec/mpegvideo: Move sprite-related fields to Mpeg4DecContext 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: M+cRCGuGW3mJ Only used there. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpeg4videodec.c | 106 ++++++++++++++++++------------------- libavcodec/mpeg4videodec.h | 4 ++ libavcodec/mpegvideo.h | 4 -- libavcodec/vaapi_mpeg4.c | 2 +- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 1638664e00..dcf970af5a 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -81,12 +81,12 @@ static void gmc1_motion(MpegEncContext *s, const Mpeg4DecContext *ctx, ptrdiff_t offset, linesize, uvlinesize; int emu = 0; - motion_x = s->sprite_offset[0][0]; - motion_y = s->sprite_offset[0][1]; - src_x = s->mb_x * 16 + (motion_x >> (s->sprite_warping_accuracy + 1)); - src_y = s->mb_y * 16 + (motion_y >> (s->sprite_warping_accuracy + 1)); - motion_x *= 1 << (3 - s->sprite_warping_accuracy); - motion_y *= 1 << (3 - s->sprite_warping_accuracy); + motion_x = ctx->sprite_offset[0][0]; + motion_y = ctx->sprite_offset[0][1]; + src_x = s->mb_x * 16 + (motion_x >> (ctx->sprite_warping_accuracy + 1)); + src_y = s->mb_y * 16 + (motion_y >> (ctx->sprite_warping_accuracy + 1)); + motion_x *= 1 << (3 - ctx->sprite_warping_accuracy); + motion_y *= 1 << (3 - ctx->sprite_warping_accuracy); src_x = av_clip(src_x, -16, s->width); if (src_x == s->width) motion_x = 0; @@ -128,12 +128,12 @@ static void gmc1_motion(MpegEncContext *s, const Mpeg4DecContext *ctx, if (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY) return; - motion_x = s->sprite_offset[1][0]; - motion_y = s->sprite_offset[1][1]; - src_x = s->mb_x * 8 + (motion_x >> (s->sprite_warping_accuracy + 1)); - src_y = s->mb_y * 8 + (motion_y >> (s->sprite_warping_accuracy + 1)); - motion_x *= 1 << (3 - s->sprite_warping_accuracy); - motion_y *= 1 << (3 - s->sprite_warping_accuracy); + motion_x = ctx->sprite_offset[1][0]; + motion_y = ctx->sprite_offset[1][1]; + src_x = s->mb_x * 8 + (motion_x >> (ctx->sprite_warping_accuracy + 1)); + src_y = s->mb_y * 8 + (motion_y >> (ctx->sprite_warping_accuracy + 1)); + motion_x *= 1 << (3 - ctx->sprite_warping_accuracy); + motion_y *= 1 << (3 - ctx->sprite_warping_accuracy); src_x = av_clip(src_x, -8, s->width >> 1); if (src_x == s->width >> 1) motion_x = 0; @@ -175,7 +175,7 @@ static void gmc_motion(MpegEncContext *s, const Mpeg4DecContext *ctx, { const uint8_t *ptr; int linesize, uvlinesize; - const int a = s->sprite_warping_accuracy; + const int a = ctx->sprite_warping_accuracy; int ox, oy; linesize = s->linesize; @@ -183,46 +183,46 @@ static void gmc_motion(MpegEncContext *s, const Mpeg4DecContext *ctx, ptr = ref_picture[0]; - ox = s->sprite_offset[0][0] + s->sprite_delta[0][0] * s->mb_x * 16 + - s->sprite_delta[0][1] * s->mb_y * 16; - oy = s->sprite_offset[0][1] + s->sprite_delta[1][0] * s->mb_x * 16 + - s->sprite_delta[1][1] * s->mb_y * 16; + ox = ctx->sprite_offset[0][0] + ctx->sprite_delta[0][0] * s->mb_x * 16 + + ctx->sprite_delta[0][1] * s->mb_y * 16; + oy = ctx->sprite_offset[0][1] + ctx->sprite_delta[1][0] * s->mb_x * 16 + + ctx->sprite_delta[1][1] * s->mb_y * 16; ctx->mdsp.gmc(dest_y, ptr, linesize, 16, ox, oy, - s->sprite_delta[0][0], s->sprite_delta[0][1], - s->sprite_delta[1][0], s->sprite_delta[1][1], + ctx->sprite_delta[0][0], ctx->sprite_delta[0][1], + ctx->sprite_delta[1][0], ctx->sprite_delta[1][1], a + 1, (1 << (2 * a + 1)) - s->no_rounding, s->h_edge_pos, s->v_edge_pos); ctx->mdsp.gmc(dest_y + 8, ptr, linesize, 16, - ox + s->sprite_delta[0][0] * 8, - oy + s->sprite_delta[1][0] * 8, - s->sprite_delta[0][0], s->sprite_delta[0][1], - s->sprite_delta[1][0], s->sprite_delta[1][1], - a + 1, (1 << (2 * a + 1)) - s->no_rounding, - s->h_edge_pos, s->v_edge_pos); + ox + ctx->sprite_delta[0][0] * 8, + oy + ctx->sprite_delta[1][0] * 8, + ctx->sprite_delta[0][0], ctx->sprite_delta[0][1], + ctx->sprite_delta[1][0], ctx->sprite_delta[1][1], + a + 1, (1 << (2 * a + 1)) - s->no_rounding, + s->h_edge_pos, s->v_edge_pos); if (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY) return; - ox = s->sprite_offset[1][0] + s->sprite_delta[0][0] * s->mb_x * 8 + - s->sprite_delta[0][1] * s->mb_y * 8; - oy = s->sprite_offset[1][1] + s->sprite_delta[1][0] * s->mb_x * 8 + - s->sprite_delta[1][1] * s->mb_y * 8; + ox = ctx->sprite_offset[1][0] + ctx->sprite_delta[0][0] * s->mb_x * 8 + + ctx->sprite_delta[0][1] * s->mb_y * 8; + oy = ctx->sprite_offset[1][1] + ctx->sprite_delta[1][0] * s->mb_x * 8 + + ctx->sprite_delta[1][1] * s->mb_y * 8; ptr = ref_picture[1]; ctx->mdsp.gmc(dest_cb, ptr, uvlinesize, 8, ox, oy, - s->sprite_delta[0][0], s->sprite_delta[0][1], - s->sprite_delta[1][0], s->sprite_delta[1][1], + ctx->sprite_delta[0][0], ctx->sprite_delta[0][1], + ctx->sprite_delta[1][0], ctx->sprite_delta[1][1], a + 1, (1 << (2 * a + 1)) - s->no_rounding, (s->h_edge_pos + 1) >> 1, (s->v_edge_pos + 1) >> 1); ptr = ref_picture[2]; ctx->mdsp.gmc(dest_cr, ptr, uvlinesize, 8, ox, oy, - s->sprite_delta[0][0], s->sprite_delta[0][1], - s->sprite_delta[1][0], s->sprite_delta[1][1], + ctx->sprite_delta[0][0], ctx->sprite_delta[0][1], + ctx->sprite_delta[1][0], ctx->sprite_delta[1][1], a + 1, (1 << (2 * a + 1)) - s->no_rounding, (s->h_edge_pos + 1) >> 1, (s->v_edge_pos + 1) >> 1); } @@ -233,7 +233,7 @@ void ff_mpeg4_mcsel_motion(MpegEncContext *s, { const Mpeg4DecContext *const ctx = (Mpeg4DecContext*)s; - if (s->real_sprite_warping_points == 1) { + if (ctx->real_sprite_warping_points == 1) { gmc1_motion(s, ctx, dest_y, dest_cb, dest_cr, ref_picture); } else { @@ -418,8 +418,8 @@ static inline int mpeg4_is_resync(Mpeg4DecContext *ctx) static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *gb) { MpegEncContext *s = &ctx->m; - int a = 2 << s->sprite_warping_accuracy; - int rho = 3 - s->sprite_warping_accuracy; + int a = 2 << ctx->sprite_warping_accuracy; + int rho = 3 - ctx->sprite_warping_accuracy; int r = 16 / a; int alpha = 1; int beta = 0; @@ -607,7 +607,7 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g sprite_delta[1][1] = a; ctx->sprite_shift[0] = 0; ctx->sprite_shift[1] = 0; - s->real_sprite_warping_points = 1; + ctx->real_sprite_warping_points = 1; } else { int shift_y = 16 - ctx->sprite_shift[0]; int shift_c = 16 - ctx->sprite_shift[1]; @@ -653,18 +653,18 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g goto overflow; } } - s->real_sprite_warping_points = ctx->num_sprite_warping_points; + ctx->real_sprite_warping_points = ctx->num_sprite_warping_points; } for (i = 0; i < 4; i++) { - s->sprite_offset[i&1][i>>1] = sprite_offset[i&1][i>>1]; - s->sprite_delta [i&1][i>>1] = sprite_delta [i&1][i>>1]; + ctx->sprite_offset[i&1][i>>1] = sprite_offset[i&1][i>>1]; + ctx->sprite_delta [i&1][i>>1] = sprite_delta [i&1][i>>1]; } return 0; overflow: - memset(s->sprite_offset, 0, sizeof(s->sprite_offset)); - memset(s->sprite_delta, 0, sizeof(s->sprite_delta)); + memset(ctx->sprite_offset, 0, sizeof(ctx->sprite_offset)); + memset(ctx->sprite_delta, 0, sizeof(ctx->sprite_delta)); return AVERROR_PATCHWELCOME; } @@ -832,25 +832,25 @@ static inline int get_amv(Mpeg4DecContext *ctx, int n) MpegEncContext *s = &ctx->m; int x, y, mb_v, sum, dx, dy, shift; int len = 1 << (s->f_code + 4); - const int a = s->sprite_warping_accuracy; + const int a = ctx->sprite_warping_accuracy; if (s->workaround_bugs & FF_BUG_AMV) len >>= s->quarter_sample; - if (s->real_sprite_warping_points == 1) { + if (ctx->real_sprite_warping_points == 1) { if (ctx->divx_version == 500 && ctx->divx_build == 413 && a >= s->quarter_sample) - sum = s->sprite_offset[0][n] / (1 << (a - s->quarter_sample)); + sum = ctx->sprite_offset[0][n] / (1 << (a - s->quarter_sample)); else - sum = RSHIFT(s->sprite_offset[0][n] * (1 << s->quarter_sample), a); + sum = RSHIFT(ctx->sprite_offset[0][n] * (1 << s->quarter_sample), a); } else { - dx = s->sprite_delta[n][0]; - dy = s->sprite_delta[n][1]; + dx = ctx->sprite_delta[n][0]; + dy = ctx->sprite_delta[n][1]; shift = ctx->sprite_shift[0]; if (n) dy -= 1 << (shift + a + 1); else dx -= 1 << (shift + a + 1); - mb_v = s->sprite_offset[0][n] + dx * s->mb_x * 16U + dy * s->mb_y * 16U; + mb_v = ctx->sprite_offset[0][n] + dx * s->mb_x * 16U + dy * s->mb_y * 16U; sum = 0; for (y = 0; y < 16; y++) { @@ -2698,7 +2698,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) ctx->num_sprite_warping_points = 0; return AVERROR_INVALIDDATA; } - s->sprite_warping_accuracy = get_bits(gb, 2); + ctx->sprite_warping_accuracy = get_bits(gb, 2); ctx->sprite_brightness_change = get_bits1(gb); if (ctx->vol_sprite_usage == STATIC_SPRITE) skip_bits1(gb); // low_latency_sprite @@ -3286,8 +3286,8 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb, if (ctx->vol_sprite_usage == STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n"); } else { - memset(s->sprite_offset, 0, sizeof(s->sprite_offset)); - memset(s->sprite_delta, 0, sizeof(s->sprite_delta)); + memset(ctx->sprite_offset, 0, sizeof(ctx->sprite_offset)); + memset(ctx->sprite_delta, 0, sizeof(ctx->sprite_delta)); } } @@ -3329,7 +3329,7 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb, gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first, s->quarter_sample ? 'q' : 'h', s->data_partitioning, ctx->resync_marker, - ctx->num_sprite_warping_points, s->sprite_warping_accuracy, + ctx->num_sprite_warping_points, ctx->sprite_warping_accuracy, 1 - s->no_rounding, ctx->vo_type, ctx->vol_control_parameters ? " VOLC" : " ", ctx->intra_dc_threshold, ctx->cplx_estimation_trash_i, ctx->cplx_estimation_trash_p, diff --git a/libavcodec/mpeg4videodec.h b/libavcodec/mpeg4videodec.h index 302c5c38da..c0e6ec6592 100644 --- a/libavcodec/mpeg4videodec.h +++ b/libavcodec/mpeg4videodec.h @@ -38,7 +38,11 @@ typedef struct Mpeg4DecContext { int shape; int vol_sprite_usage; int sprite_brightness_change; + int sprite_warping_accuracy; int num_sprite_warping_points; + int real_sprite_warping_points; + int sprite_offset[2][2]; ///< sprite offset[isChroma][isMVY] + int sprite_delta[2][2]; ///< sprite_delta [isY][isMVY] /// sprite trajectory points uint16_t sprite_traj[4][2]; /// sprite shift [isChroma] diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 007d681a09..925e61138d 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -376,13 +376,9 @@ typedef struct MpegEncContext { uint16_t pb_time; ///< time distance between the last b and p,s,i frame uint16_t pp_field_time; uint16_t pb_field_time; ///< like above, just for interlaced - int real_sprite_warping_points; - int sprite_offset[2][2]; ///< sprite offset[isChroma][isMVY] - int sprite_delta[2][2]; ///< sprite_delta [isY][isMVY] int mcsel; int quant_precision; int quarter_sample; ///< 1->qpel, 0->half pel ME/MC - int sprite_warping_accuracy; int data_partitioning; ///< data partitioning flag from header int partitioned_frame; ///< is current frame partitioned int low_delay; ///< no reordering needed / has no B-frames diff --git a/libavcodec/vaapi_mpeg4.c b/libavcodec/vaapi_mpeg4.c index ca3f3b22f6..4e74e0382b 100644 --- a/libavcodec/vaapi_mpeg4.c +++ b/libavcodec/vaapi_mpeg4.c @@ -66,7 +66,7 @@ static int vaapi_mpeg4_start_frame(AVCodecContext *avctx, av_unused const uint8_ .interlaced = !s->progressive_sequence, .obmc_disable = 1, .sprite_enable = ctx->vol_sprite_usage, - .sprite_warping_accuracy = s->sprite_warping_accuracy, + .sprite_warping_accuracy = ctx->sprite_warping_accuracy, .quant_type = s->mpeg_quant, .quarter_sample = s->quarter_sample, .data_partitioned = s->data_partitioning,