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 29F5344597 for ; Wed, 19 Oct 2022 12:24:26 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EE8DC68BC82; Wed, 19 Oct 2022 15:24:23 +0300 (EEST) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074102.outbound.protection.outlook.com [40.92.74.102]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A1F868BB7B for ; Wed, 19 Oct 2022 15:24:17 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BTt4EYPyAQf6DAHnEuxZsdScEP/vbwzQfcPCkpa6n6AHlHnoK0B8k4UcxadNIOqcEeg2T2nY7LhN7u0kNx0fjULjC0Wxhz064RDcpnYxldBtK/eOm99jBjVavFYgkvN+Neiv4Hm0n+p9uQpC7IO0mZTuRmIrLvDbPjoxl9uI8hQG8y0LicSg8RKenhIWT6397NwTNFDjeb3NSrzxkcCnhxLDXaPp3WJHp/B9vcaXrYa08i7gKDPg8+XB1IVqPIKTXep/+bD4T4UdRiIX7MosoVjwbGS2WLmzM82Y577+OLrEP1og/DJQqN3HsYNg+aOtN3kqpv9sjuNZAn/bcBX4tw== 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=R/uV/4SCXOosfHqKRvgv0U/0Ieb0pE20p7JU81qtt5g=; b=Xtk7B9zu24qOKaypLxIf4OjEXkRKctJ9cwClWyzW3uKuWmy2+gi2pYGktVM+RwRXLnhQf4pZ9l37AMAuFAzI4M3pTUkNS8F6LX9+ZXRvh9yqU3gvH/xboktjQTdvOEv17HDbHbCt4if8DLjPTxOOnElr/8tveFIi/v9HN36Ufo1KkHqCV0D4NUoU5xwxmwE+DtY36W+L+x/uBXfoFEM8YIg6EHzsxIOfuEDD4tv53KU7v1CKzW3mgMVbfLzSy2AsfixlGAz07Zq9BcISQCDRR9aDSQZBsnYfaCXVE9LxVg3AUJRlGV3k7Q5KUOF/GwS9Q8bPA9ka+RlxV7tDqAnBUA== 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=R/uV/4SCXOosfHqKRvgv0U/0Ieb0pE20p7JU81qtt5g=; b=dxQgl36druEWp9CMZB3PLTZbNX+oj6LbH4MWtJ1jKfjxXz2MWSyjMPbIwOKNnoN2JckQbD4PUwKM2TejkXtF3eGYlRH/WxOAghjEvWlr5JbOz5rBgPouaRFibc5hz6mfZ1Q8z4qflfctskjOhjYN53drW2bdkEcgz1Vm5Xb1MoPLfOoGBg64laC68/g70BKOsqmYobRqsG7JifHEj/xGmjp6UlYKjK9oz6cXIn17/G0HIcVSFvl/0PoiJLgo6TjGXb6ULtYz/jC2tH9/+pKcEPJ+opJdKPMhWnU9lHmr74ALqXaMM1qxW2P5yuDJ5cWlEAUjjmnuFIPwJhaWK7CNGg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0366.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.29; Wed, 19 Oct 2022 12:24:15 +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, 19 Oct 2022 12:24:15 +0000 Message-ID: Date: Wed, 19 Oct 2022 14:24:25 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Andreas Rheinhardt In-Reply-To: X-TMN: [o45bSrF2WltbqNCqlIGpks7tim7HmPdA0FAE6XEj3e8=] X-ClientProxiedBy: FR3P281CA0163.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a2::9) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0366:EE_ X-MS-Office365-Filtering-Correlation-Id: f0607c01-1d31-400e-a16c-08dab1ccd63c X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 68WVW+vaA6tloss0kRw75s+460OW6pqxoRvu1w1/JVmv66vsTTAEYp6ujNZVGqcXvR8i7aYqkDmWarsmy8XT8tklbQ9NiCxtYcXUz2BOtjpzDrPq5Xfi/f2xBNMOEAsXHpZEIwKkMymrmmSprhgx5B2YKwndtt/R2oRgQXmykl6SuWVJ3JJLi17feRGePmU0gXLTcupSF82J3dqyC1wEFu9/ZaZClAbohVUq7DoI+3BL5/8q80xGVnObJ4nVvM8FZgooDijzP6wE3ydgZYGsQN96tv1p3AAenjBQpIb7XdGxLxWNmNA9O9zm8cHWjOEQufIi73MkNouULSCOod/bqBIJl3kB5XfRwx0fSzU4C0L19rB4TwOEGhbFSvUMPa4h+4vsaRz55BXdaISpEzspNjj5ivGNMKd0MCiWQbofQIWDtpXzuQQZnhzjc6KqneXdpqNMOmStN+ubrZK/OdkCwHjqflhquOOB/H8+ZkV8FGpEuOhSuUO266xlUSB9+dAhOyWeeNITH4OlrMIbvACYIJJd4u7cDgD44fc5dWXfkDmLN2HE2nbgbta3oXYdGb4f/IS8O8FVqyZP0bJPsU7nywMypsnvpiBqRVrIslGBqVanZP3/wQHdN8xdloCEfungTCnX7MQuoOkQPDZApBeJhxT/fwrRfc6PPUO3NdQs2SidnLRsZKSgz6DoAwejH3Hv X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?anF1ZDFpTHVjZTd6ek1Wak1WcmIxNm9Hdm1janhacUx4NE5UbGMyQmlmZUk1?= =?utf-8?B?T3RydWw4NTNLOTBOcEFMQi9EWDMzdEVJc0ZkRmdvamJYVlZNSDA1NjZLamhq?= =?utf-8?B?R09taWE2RWNzYUw1M0w5cEhycjc2VUxjbm4ydlFtUWo3UUhZYVJCVkthd1M4?= =?utf-8?B?QithWHdRbUZ1cjdVUDJYYWVkV00wM0hYNmQweXB2dlhMMmZEUlN5NEZsbmVS?= =?utf-8?B?MkM5Tzk1WHE1ZW9VOUtxd3JCMTQ3ajJZQ3dBYTA4eWpNQTdJK0pvbjZQREdT?= =?utf-8?B?ZWJHSTJveXRIS1lWbTNrUW1Qc3dtNXhPdU1ndXdrMFEyTkptZXVWQjQvNDF4?= =?utf-8?B?QWRWSUhMdHlnYUllQTZhWFM0R1dhUHpNcHZsdm5saW9uNjc3OFM2STRVTVJj?= =?utf-8?B?SWVXMVV1dTN5ZWltL2NWR1hJZzBjbGU1NmtCWWVLU1l4NURJVDF5QnRnQytY?= =?utf-8?B?OEJjRDFKK3hOWFVHTnNaOXpMUlFlaW14cEhCamd0ekVFZDhZb1RobXZmY241?= =?utf-8?B?czhaOFRqWG9LaUFLR0ZKNFBMVE5JeHEycUEzV3l4WnN3Y0tUUzdkR0NQcUNk?= =?utf-8?B?YUdHWTVQQm14YS9maUFyQ0lUZ0Vzb2Y0NzNabDhpRVR0c0hJcmVwckt6TjUy?= =?utf-8?B?WG9vUDNFUnMxaWdibTZ4ME9BR1VXWGhsZUhDUnpPdjMvZVdKTVJZYXJvcXpE?= =?utf-8?B?eGpyUTRWN1dXcTBiVEp2c1hTclZhZER1VjVzdTVnb1haVHBMTS9yY1dHYUV2?= =?utf-8?B?N2xNQkdCUmpyQzJZeXBDSFJ3Y3pQbERqckNjUHlXbE1BN2c1eDA3OE5xOEhG?= =?utf-8?B?ZWVOQ1FhNG9hc2dpY242M2FJOVBsTmljcTJBSU1rN3F6SkdNV3pxSjFVaGFL?= =?utf-8?B?UFIrTk93UjFha3hIcCtqMmVSc3ZveVhCYkY0MFUwNVJSMUpHUDJBZ2JEYmdy?= =?utf-8?B?TmJRUS9Qb3Mya09EajQvU0g4SWFtYk0wdDYwTkVZUXpHSUtVNnFudHMrQ0tW?= =?utf-8?B?QW81eUhrYmNLWUV1bXEvVisrZE96U0pROVVQaHlqRDNlWVdwbTB0eGV3Nytq?= =?utf-8?B?SGkvb2pQalUwMldBM0I2VS9Sc3dkL1ZOWm1kU3lPT1RBeFppMmxFNytKQzZQ?= =?utf-8?B?dGg2STB5RzFBVnJpLy9GZGtreWFiSlB5YWp5YWx4MlBYM1FObTRaa0d6RW1r?= =?utf-8?B?YVoxN2ZIUXlLZ3lVd2VTVVBhcHNSemZCaE4ycElXM0Q1a0kxZ1dCUTZiaEww?= =?utf-8?B?N1RzTmlHVWVCVWR5aTZ2QzhiSHdHRml6ZEJHaUF6MmE0SVYxbE9HMXpZeTUz?= =?utf-8?B?enpmSE1FenZ4OWhaVTRTbjJkTGZZdjJjMjZtajg2NDVHNUpHR0MzQ3huS0xG?= =?utf-8?B?cHFxRnU4NWRBenJlbEJuN1loMEZYVzFjY08yWUhDY0VCYUIvT2NqK2piNVp0?= =?utf-8?B?U0VUQW9FMlRpRkJhQ3RnMXNMUys2dzRrUUE4Z0xJMnFwN05sdkVZK0FpQVUz?= =?utf-8?B?Z2s5RUdqNzJ1Nk0vbndPZ0tJeHJhRXovU0o3WUFTUUdhbjd4dmVFWWVoVklK?= =?utf-8?B?M3JtUDRmZlZxcXBZejVnOGFwSEJKUnpzelV4bjBXZEJPN1hGcHJFeENYYU96?= =?utf-8?B?eC9xSEJhYS8yRzBYQUNQYXYvM3Q5bE9pbVRka3hEZjlqQ3dSUnJiN2d0S2Iv?= =?utf-8?B?T0J5aG1OamZNanZ6d1NpdVk0dFliS2VTTVNseE1tVlBNelpMWStPWFphTVRq?= =?utf-8?Q?j9wuYWgROSFIJgQLGjFgHc6FuGulBHXFFOlczm4?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0607c01-1d31-400e-a16c-08dab1ccd63c X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2022 12:24:15.4119 (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: DU2P250MB0366 Subject: Re: [FFmpeg-devel] [PATCH 1/6] avcodec/mpegvideo_motion: Move mspel/gmc motion to mpeg4videodec.c 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: Andreas Rheinhardt: > It is the only codec for which mcsel is ever set. > > Signed-off-by: Andreas Rheinhardt > --- > libavcodec/mpeg4videodec.c | 168 ++++++++++++++++++++++++++++++++++ > libavcodec/mpeg4videodec.h | 3 + > libavcodec/mpegvideo_motion.c | 166 +-------------------------------- > 3 files changed, 174 insertions(+), 163 deletions(-) > > diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c > index 4dbf37afe5..58a8ac9027 100644 > --- a/libavcodec/mpeg4videodec.c > +++ b/libavcodec/mpeg4videodec.c > @@ -72,6 +72,174 @@ static const int mb_type_b_map[4] = { > MB_TYPE_L0 | MB_TYPE_16x16, > }; > > +static void gmc1_motion(MpegEncContext *s, > + uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, > + uint8_t *const *ref_picture) > +{ > + const uint8_t *ptr; > + int src_x, src_y, motion_x, motion_y; > + 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); > + src_x = av_clip(src_x, -16, s->width); > + if (src_x == s->width) > + motion_x = 0; > + src_y = av_clip(src_y, -16, s->height); > + if (src_y == s->height) > + motion_y = 0; > + > + linesize = s->linesize; > + uvlinesize = s->uvlinesize; > + > + ptr = ref_picture[0] + src_y * linesize + src_x; > + > + if ((unsigned)src_x >= FFMAX(s->h_edge_pos - 17, 0) || > + (unsigned)src_y >= FFMAX(s->v_edge_pos - 17, 0)) { > + s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, > + linesize, linesize, > + 17, 17, > + src_x, src_y, > + s->h_edge_pos, s->v_edge_pos); > + ptr = s->sc.edge_emu_buffer; > + } > + > + if ((motion_x | motion_y) & 7) { > + s->mdsp.gmc1(dest_y, ptr, linesize, 16, > + motion_x & 15, motion_y & 15, 128 - s->no_rounding); > + s->mdsp.gmc1(dest_y + 8, ptr + 8, linesize, 16, > + motion_x & 15, motion_y & 15, 128 - s->no_rounding); > + } else { > + int dxy; > + > + dxy = ((motion_x >> 3) & 1) | ((motion_y >> 2) & 2); > + if (s->no_rounding) { > + s->hdsp.put_no_rnd_pixels_tab[0][dxy](dest_y, ptr, linesize, 16); > + } else { > + s->hdsp.put_pixels_tab[0][dxy](dest_y, ptr, linesize, 16); > + } > + } > + > + 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); > + src_x = av_clip(src_x, -8, s->width >> 1); > + if (src_x == s->width >> 1) > + motion_x = 0; > + src_y = av_clip(src_y, -8, s->height >> 1); > + if (src_y == s->height >> 1) > + motion_y = 0; > + > + offset = (src_y * uvlinesize) + src_x; > + ptr = ref_picture[1] + offset; > + if ((unsigned)src_x >= FFMAX((s->h_edge_pos >> 1) - 9, 0) || > + (unsigned)src_y >= FFMAX((s->v_edge_pos >> 1) - 9, 0)) { > + s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, > + uvlinesize, uvlinesize, > + 9, 9, > + src_x, src_y, > + s->h_edge_pos >> 1, s->v_edge_pos >> 1); > + ptr = s->sc.edge_emu_buffer; > + emu = 1; > + } > + s->mdsp.gmc1(dest_cb, ptr, uvlinesize, 8, > + motion_x & 15, motion_y & 15, 128 - s->no_rounding); > + > + ptr = ref_picture[2] + offset; > + if (emu) { > + s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, > + uvlinesize, uvlinesize, > + 9, 9, > + src_x, src_y, > + s->h_edge_pos >> 1, s->v_edge_pos >> 1); > + ptr = s->sc.edge_emu_buffer; > + } > + s->mdsp.gmc1(dest_cr, ptr, uvlinesize, 8, > + motion_x & 15, motion_y & 15, 128 - s->no_rounding); > +} > + > +static void gmc_motion(MpegEncContext *s, > + uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, > + uint8_t *const *ref_picture) > +{ > + const uint8_t *ptr; > + int linesize, uvlinesize; > + const int a = s->sprite_warping_accuracy; > + int ox, oy; > + > + linesize = s->linesize; > + uvlinesize = s->uvlinesize; > + > + 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; > + > + s->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], > + a + 1, (1 << (2 * a + 1)) - s->no_rounding, > + s->h_edge_pos, s->v_edge_pos); > + s->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); > + > + 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; > + > + ptr = ref_picture[1]; > + s->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], > + 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]; > + s->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], > + a + 1, (1 << (2 * a + 1)) - s->no_rounding, > + (s->h_edge_pos + 1) >> 1, (s->v_edge_pos + 1) >> 1); > +} > + > +void ff_mpeg4_mcsel_motion(MpegEncContext *s, > + uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, > + uint8_t *const *ref_picture) > +{ > + if (s->real_sprite_warping_points == 1) { > + gmc1_motion(s, dest_y, dest_cb, dest_cr, > + ref_picture); > + } else { > + gmc_motion(s, dest_y, dest_cb, dest_cr, > + ref_picture); > + } > +} > + > void ff_mpeg4_decode_studio(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, > uint8_t *dest_cr, int block_size, int uvlinesize, > int dct_linesize, int dct_offset) > diff --git a/libavcodec/mpeg4videodec.h b/libavcodec/mpeg4videodec.h > index 65d846aed0..8d1e121b67 100644 > --- a/libavcodec/mpeg4videodec.h > +++ b/libavcodec/mpeg4videodec.h > @@ -87,6 +87,9 @@ int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb, > void ff_mpeg4_decode_studio(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, > uint8_t *dest_cr, int block_size, int uvlinesize, > int dct_linesize, int dct_offset); > +void ff_mpeg4_mcsel_motion(MpegEncContext *s, > + uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, > + uint8_t *const *ref_picture); > int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx); > int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx); > int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx); > diff --git a/libavcodec/mpegvideo_motion.c b/libavcodec/mpegvideo_motion.c > index fe3bfc4454..8922f5b1a5 100644 > --- a/libavcodec/mpegvideo_motion.c > +++ b/libavcodec/mpegvideo_motion.c > @@ -31,164 +31,10 @@ > #include "h261.h" > #include "mpegutils.h" > #include "mpegvideo.h" > +#include "mpeg4videodec.h" > #include "qpeldsp.h" > #include "wmv2.h" > > -static void gmc1_motion(MpegEncContext *s, > - uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, > - uint8_t *const *ref_picture) > -{ > - const uint8_t *ptr; > - int src_x, src_y, motion_x, motion_y; > - 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); > - src_x = av_clip(src_x, -16, s->width); > - if (src_x == s->width) > - motion_x = 0; > - src_y = av_clip(src_y, -16, s->height); > - if (src_y == s->height) > - motion_y = 0; > - > - linesize = s->linesize; > - uvlinesize = s->uvlinesize; > - > - ptr = ref_picture[0] + src_y * linesize + src_x; > - > - if ((unsigned)src_x >= FFMAX(s->h_edge_pos - 17, 0) || > - (unsigned)src_y >= FFMAX(s->v_edge_pos - 17, 0)) { > - s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, > - linesize, linesize, > - 17, 17, > - src_x, src_y, > - s->h_edge_pos, s->v_edge_pos); > - ptr = s->sc.edge_emu_buffer; > - } > - > - if ((motion_x | motion_y) & 7) { > - s->mdsp.gmc1(dest_y, ptr, linesize, 16, > - motion_x & 15, motion_y & 15, 128 - s->no_rounding); > - s->mdsp.gmc1(dest_y + 8, ptr + 8, linesize, 16, > - motion_x & 15, motion_y & 15, 128 - s->no_rounding); > - } else { > - int dxy; > - > - dxy = ((motion_x >> 3) & 1) | ((motion_y >> 2) & 2); > - if (s->no_rounding) { > - s->hdsp.put_no_rnd_pixels_tab[0][dxy](dest_y, ptr, linesize, 16); > - } else { > - s->hdsp.put_pixels_tab[0][dxy](dest_y, ptr, linesize, 16); > - } > - } > - > - 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); > - src_x = av_clip(src_x, -8, s->width >> 1); > - if (src_x == s->width >> 1) > - motion_x = 0; > - src_y = av_clip(src_y, -8, s->height >> 1); > - if (src_y == s->height >> 1) > - motion_y = 0; > - > - offset = (src_y * uvlinesize) + src_x; > - ptr = ref_picture[1] + offset; > - if ((unsigned)src_x >= FFMAX((s->h_edge_pos >> 1) - 9, 0) || > - (unsigned)src_y >= FFMAX((s->v_edge_pos >> 1) - 9, 0)) { > - s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, > - uvlinesize, uvlinesize, > - 9, 9, > - src_x, src_y, > - s->h_edge_pos >> 1, s->v_edge_pos >> 1); > - ptr = s->sc.edge_emu_buffer; > - emu = 1; > - } > - s->mdsp.gmc1(dest_cb, ptr, uvlinesize, 8, > - motion_x & 15, motion_y & 15, 128 - s->no_rounding); > - > - ptr = ref_picture[2] + offset; > - if (emu) { > - s->vdsp.emulated_edge_mc(s->sc.edge_emu_buffer, ptr, > - uvlinesize, uvlinesize, > - 9, 9, > - src_x, src_y, > - s->h_edge_pos >> 1, s->v_edge_pos >> 1); > - ptr = s->sc.edge_emu_buffer; > - } > - s->mdsp.gmc1(dest_cr, ptr, uvlinesize, 8, > - motion_x & 15, motion_y & 15, 128 - s->no_rounding); > -} > - > -static void gmc_motion(MpegEncContext *s, > - uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, > - uint8_t *const *ref_picture) > -{ > - const uint8_t *ptr; > - int linesize, uvlinesize; > - const int a = s->sprite_warping_accuracy; > - int ox, oy; > - > - linesize = s->linesize; > - uvlinesize = s->uvlinesize; > - > - 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; > - > - s->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], > - a + 1, (1 << (2 * a + 1)) - s->no_rounding, > - s->h_edge_pos, s->v_edge_pos); > - s->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); > - > - 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; > - > - ptr = ref_picture[1]; > - s->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], > - 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]; > - s->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], > - a + 1, (1 << (2 * a + 1)) - s->no_rounding, > - (s->h_edge_pos + 1) >> 1, (s->v_edge_pos + 1) >> 1); > -} > - > static inline int hpel_motion(MpegEncContext *s, > uint8_t *dest, uint8_t *src, > int src_x, int src_y, > @@ -849,14 +695,8 @@ static av_always_inline void mpv_motion_internal(MpegEncContext *s, > > switch (s->mv_type) { > case MV_TYPE_16X16: > - if (!is_mpeg12 && s->mcsel) { > - if (s->real_sprite_warping_points == 1) { > - gmc1_motion(s, dest_y, dest_cb, dest_cr, > - ref_picture); > - } else { > - gmc_motion(s, dest_y, dest_cb, dest_cr, > - ref_picture); > - } > + if (CONFIG_MPEG4_DECODER && !is_mpeg12 && s->mcsel) { > + ff_mpeg4_mcsel_motion(s, dest_y, dest_cb, dest_cr, ref_picture); > } else if (!is_mpeg12 && s->quarter_sample) { > qpel_motion(s, dest_y, dest_cb, dest_cr, > 0, 0, 0, Will apply this patchset tomorrow unless there are objections. - Andreas _______________________________________________ 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".