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 EF49B4B72A for ; Wed, 12 Jun 2024 13:52:41 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F40DD68D99E; Wed, 12 Jun 2024 16:51:54 +0300 (EEST) Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2109.outbound.protection.outlook.com [40.92.50.109]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 795F368D99B for ; Wed, 12 Jun 2024 16:51:53 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m6hJZfyyh6vjUxfnsDiXSdv20Dny5m4EbweDX2LYqe1pN1pDsvbH7FzmMPgVkDICRT8i8n7MMIWyzyQ6jJ94XpeQBjKSEDm/wuW3UoBCHnknW2jyCDbdmAPmdFYztIbM29UP72H4I/KqGQ+5U3Cf8SnD9jg+pbEBySZQ+HfFa1CAnYYJc71baErnST1pJsYFYcweoHFYFN5bkSxErwCe9+G28tN2zEeP6fNX/SnE03jndgv/cmuV3yCGQ2BrYX30UvYP1c9o81PICFGPRCUPll8tlmVGGaccAvNxsm5EBlsPC7001nIptXBrnyymib0kOYy9NzBT2lf23ipciyqpjw== 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=iTy4U4p14mffuS5A3gyvFm4OLep/wgJVgFEno/N9YjQ=; b=HefVNp9FAS1/9PozoHz79R7ix1ODflqK5FgPffmkyNZb9XI/VHxeFLmzg4IluCW4TYG8limYpcVmlyoi4ry/4okejJattVPLegFeYkB6+QnTm1CGXzMKfg+5PW9QtYWs/bkbsPlhAAtlXY/la2cRZr64HLI709wXLeiOUf/QYeBORRDpzSUHvxrhQ1GfeC3zNR6Fd3oeSmaOgKzzEf+YoC5Ra1D35PQ+q4MSF8KRUyVgSJOOdjk5vmCf8UX8xw6yl9NSYU+tliwDArK/fxW0FUpkl7wySmWOcXo4W824WNNi6flc1urQtIvoXeCNIQg5vnEykXYFSZrw6V9IEpp/jg== 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=iTy4U4p14mffuS5A3gyvFm4OLep/wgJVgFEno/N9YjQ=; b=CebSGquxVkgSRCnCjESaPY23Z2RNpqfOocAj1JxFf39nNqHt4dCrTeH2cd0VCO42lhAHfv3ztXjwtsW5rmL7bA0NlL583v7tA8cr4tBYhE9gT3BBm3hjb3UOmrhokjZSdygo6sMQ56+F3QrTLdr7dfSs3BQRlor9Jj41wAg/+CGJqjHbVM+N4nNHjYfmgyYBZ4hLqul6O5Rqu50Xmn2l022ehYA1oMd/+y1hjfgkmE9L9ORpeCozgSJMXzzzaL6p9rldzDOjOfzrjmiPW33rAjMxbjOa+6Vx6Jw4KsL/TlBSUyamdbEVViptMps3gE0E0jWt75/CLMzMEUTfEyq7AA== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS1P250MB0479.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4a4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.36; Wed, 12 Jun 2024 13:51:51 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%3]) with mapi id 15.20.7633.036; Wed, 12 Jun 2024 13:51:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jun 2024 15:48:16 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [mMPSJW/QsMuy/pTyLL9gBfzg030drq0yNWbBqf0ecmk=] X-ClientProxiedBy: ZR0P278CA0189.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::6) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240612134853.2102377-19-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS1P250MB0479:EE_ X-MS-Office365-Filtering-Correlation-Id: f6f4eafe-a016-4e42-c5e7-08dc8ae6cf8e X-Microsoft-Antispam: BCL:0; ARA:14566002|461199020|440099020|3412199017|1710799020; X-Microsoft-Antispam-Message-Info: k5/oU3aGvRPU7GZAg+LgxNm02YUuahCYXAzgs2rZ78ZMTqDNZhyT7hTOvVWTGNJ+xhr/AuQBb9dwFqoTuT6BbQefRzrg93ChW3+2WNl+O+AilS6btlpvTrTT29fYXGPAG+qdSXUTC70p5CzK3/IXp3bmTYffNLTlGaetfaTU+UStItf6JTlGM/G+2ckEFj7UzmWQVFNFBVNjMVNLj//fQ4+lmqzoiETdLyf8AXA8PkFdS0St1CxQ8NeZtPj2Ox4pbA285zY7JSrSW+mT2UEvqmOxuO0Yd6AQ5NiOYYw78qDQpfLVSYTUv2FiFcLx6Z7SxcIulZBOIOOOxG7NHttqeMgKsVvXyiRNJgQ8cea7rkXVKt81cVqlkldghIbcW97ra7jVjJ1FT0cFLTXpnhe4Va/hi/xpfIqWZt/Um44I611j28Dc9M7JSsrqmqSrSMOMRkkrThKOtmLddW+8eh6xr3uc7vfOTlKaHq4J5c+9y1qZLUXSEoZcraK9XVK5OZfkQLLYQA7mMk7CAhO/blpJR5v7DESY/K8XZSH6vGPvCBqIrLnf0LaQsPJ6kRYeW9ATO+IEeSw0ZtltVsrgaTNjr4pUTim9c7iR/YfjKbdhikvaHoYfTYUcDX6wmjYQ7eq5 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Z175wqBpspa8pzKta2lYmTnDeBFSy+t5bfVEDYqPjefvXdmZuU8CnktBGFJN?= =?us-ascii?Q?hXbJFwWH6zoK8C+chawQrFjH+MWUL6yzYzhM7Dkmmp2bzIZW1XWuvT76x/Fp?= =?us-ascii?Q?uCm6a6pMDCjP7AM19U1OIBE3RgAGsHRKhBtqMDJmw8vQTfgq33JQn9S/Osl4?= =?us-ascii?Q?zm8sCnTMqYqRzeHy4vQ2zWI2hO1whH3OHLX00rrXV6c1oH7a5b0IVcT3i+jr?= =?us-ascii?Q?sQP57CL+dyMZV6ngD6s/OrqhN3DELjv2fw1JhXzWSi8XPGdpYb8ybRDwPlQi?= =?us-ascii?Q?CsBc/wXYy79ZIKf2rxLxCZRk5EnQ+zHY7HMeQUD19XdtXv6DUxFuZ/UStFLk?= =?us-ascii?Q?PWR/ZH1HgqkLRlVoO6c6faGsl9rZP5dqZzUItYNOK5IssUGLK3YkYxJG2O11?= =?us-ascii?Q?qqK/5iZhSeiMd6KKg0LLfMVGU4wG0RrVZq/wyWe4CloO87MQfltmcvgcFM3Z?= =?us-ascii?Q?O4pKXnBpub9WFZ/obUpJ4CMuuYBFIvq0KTyW0PKnOAIc8fayRNF5tnUxrS4s?= =?us-ascii?Q?ghYZKyfEoX3QYnnNT6cFc8RfOCJaziVR7y3J9rH/pwdYAT3YAWFwe8YreeVb?= =?us-ascii?Q?Cj5C4H7imEwFC+inkMIeyKPFgKCaMcWBdhI4EhI5qVPkcVOyockWoMfEG0Sf?= =?us-ascii?Q?wHIwPXPr7V1u/P3FDlcfjmlADoe9ror3ZQVxTvLR537uJ/h01aiO+jNP97YC?= =?us-ascii?Q?sDBsLOuoEWixCEcFen+PP+Ez2oqgnuep8toQyyD/IpnEOjaWylnj0NgbZmZa?= =?us-ascii?Q?EI0Lfi71/dC7baJWaJEvk+a2LzVRJVB+WsTNv5xTdqwxbBLwJAQR7/qnDSe7?= =?us-ascii?Q?S+Dc2Ho2tqURQvlfe5HnwAQJTrUo7CA9cBFfNlN7FFTQ3Zqe730DCmuvZqs3?= =?us-ascii?Q?eD3W9pJ0AKzceexoPt0gHZjpv3XkOZMuycW5ZPBOce05LUty02REIoo7RRGb?= =?us-ascii?Q?5uvO69gS48omzwj6pMfOXIVejN2sS+WFzZApB8b56HKVmQOxNgvnBWcecNvV?= =?us-ascii?Q?B2199gdkXKZvYc5wgVxMEClsyPcY/b4hl1jMOaJ0d0XovCasivc02nTNnrbJ?= =?us-ascii?Q?ZZ6ebFnHslljET+5qixn+55XiuG8M87KmgCwERYU5hnbQjmv48fv6h1TltVT?= =?us-ascii?Q?pRfeufwDb98pmEyxuwdkh9YXr/ff7vcY+jsuuCAkKYK5oiekzCFE5hqBXvA8?= =?us-ascii?Q?FO9zyBdvumNtmY+ZHXAb9LBrd0Iz1im6nELPzSSS793w+T0ByyqqYbAiqEEl?= =?us-ascii?Q?0TctYO1RaW9SPuXM0TVf9ql7uC5BNVcp3IC5oeuPOg=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6f4eafe-a016-4e42-c5e7-08dc8ae6cf8e X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2024 13:51:51.1575 (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: AS1P250MB0479 Subject: [FFmpeg-devel] [PATCH 20/57] avcodec/motion_est: Factor one-time initialization out of ff_init_me 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 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: The majority of the stuff performed in it needs to be done only once; so factor it out into a function of its own to be called in the user's init function. Also avoid using MpegEncContext in it, to separate the two a bit more. Signed-off-by: Andreas Rheinhardt --- libavcodec/motion_est.c | 89 ++++++++++++++++++++------------------ libavcodec/motion_est.h | 9 +++- libavcodec/mpegvideo_enc.c | 19 ++++++-- libavcodec/snowenc.c | 11 ++--- libavcodec/svq1enc.c | 5 ++- 5 files changed, 80 insertions(+), 53 deletions(-) diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index 162472d693..ee28a4a445 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -305,45 +305,40 @@ static int zero_cmp(MpegEncContext *s, const uint8_t *a, const uint8_t *b, static void zero_hpel(uint8_t *a, const uint8_t *b, ptrdiff_t stride, int h){ } -int ff_init_me(MpegEncContext *s){ - MotionEstContext * const c= &s->me; - int cache_size= FFMIN(ME_MAP_SIZE>>ME_MAP_SHIFT, 1<avctx->dia_size)&255, FFABS(s->avctx->pre_dia_size)&255); +av_cold int ff_me_init(MotionEstContext *c, AVCodecContext *avctx, MECmpContext *mecc) +{ + int cache_size = FFMIN(ME_MAP_SIZE>>ME_MAP_SHIFT, 1<dia_size) & 255, FFABS(avctx->pre_dia_size) & 255); int ret; - if(FFMIN(s->avctx->dia_size, s->avctx->pre_dia_size) < -FFMIN(ME_MAP_SIZE, MAX_SAB_SIZE)){ - av_log(s->avctx, AV_LOG_ERROR, "ME_MAP size is too small for SAB diamond\n"); - return -1; + if (FFMIN(avctx->dia_size, avctx->pre_dia_size) < -FFMIN(ME_MAP_SIZE, MAX_SAB_SIZE)) { + av_log(avctx, AV_LOG_ERROR, "ME_MAP size is too small for SAB diamond\n"); + return AVERROR(EINVAL); } - c->avctx= s->avctx; + c->avctx = avctx; - if(s->codec_id == AV_CODEC_ID_H261) - c->avctx->me_sub_cmp = c->avctx->me_cmp; + if (avctx->codec_id == AV_CODEC_ID_H261) + avctx->me_sub_cmp = avctx->me_cmp; - if(cache_size < 2*dia_size && !c->stride){ - av_log(s->avctx, AV_LOG_INFO, "ME_MAP size may be a little small for the selected diamond size\n"); - } + if (cache_size < 2 * dia_size) + av_log(avctx, AV_LOG_INFO, "ME_MAP size may be a little small for the selected diamond size\n"); - ret = ff_set_cmp(&s->mecc, s->mecc.me_pre_cmp, c->avctx->me_pre_cmp); - ret |= ff_set_cmp(&s->mecc, s->mecc.me_cmp, c->avctx->me_cmp); - ret |= ff_set_cmp(&s->mecc, s->mecc.me_sub_cmp, c->avctx->me_sub_cmp); - ret |= ff_set_cmp(&s->mecc, s->mecc.mb_cmp, c->avctx->mb_cmp); + ret = ff_set_cmp(mecc, mecc->me_pre_cmp, avctx->me_pre_cmp); + ret |= ff_set_cmp(mecc, mecc->me_cmp, avctx->me_cmp); + ret |= ff_set_cmp(mecc, mecc->me_sub_cmp, avctx->me_sub_cmp); + ret |= ff_set_cmp(mecc, mecc->mb_cmp, avctx->mb_cmp); if (ret < 0) return ret; - c->flags = get_flags(c, 0, c->avctx->me_cmp &FF_CMP_CHROMA); - c->sub_flags= get_flags(c, 0, c->avctx->me_sub_cmp&FF_CMP_CHROMA); - c->mb_flags = get_flags(c, 0, c->avctx->mb_cmp &FF_CMP_CHROMA); + c->flags = get_flags(c, 0, avctx->me_cmp & FF_CMP_CHROMA); + c->sub_flags = get_flags(c, 0, avctx->me_sub_cmp & FF_CMP_CHROMA); + c->mb_flags = get_flags(c, 0, avctx->mb_cmp & FF_CMP_CHROMA); -/*FIXME s->no_rounding b_type*/ - if (s->avctx->flags & AV_CODEC_FLAG_QPEL) { + if (avctx->codec_id == AV_CODEC_ID_H261) { + c->sub_motion_search = no_sub_motion_search; + } else if (avctx->flags & AV_CODEC_FLAG_QPEL) { c->sub_motion_search= qpel_motion_search; - c->qpel_avg = s->qdsp.avg_qpel_pixels_tab; - if (s->no_rounding) - c->qpel_put = s->qdsp.put_no_rnd_qpel_pixels_tab; - else - c->qpel_put = s->qdsp.put_qpel_pixels_tab; }else{ if(c->avctx->me_sub_cmp&FF_CMP_CHROMA) c->sub_motion_search= hpel_motion_search; @@ -354,6 +349,32 @@ int ff_init_me(MpegEncContext *s){ else c->sub_motion_search= hpel_motion_search; } + + /* 8x8 fullpel search would need a 4x4 chroma compare, which we do + * not have yet, and even if we had, the motion estimation code + * does not expect it. */ + if (avctx->codec_id != AV_CODEC_ID_SNOW) { + if ((avctx->me_cmp & FF_CMP_CHROMA) /* && !s->mecc.me_cmp[2] */) + mecc->me_cmp[2] = zero_cmp; + if ((avctx->me_sub_cmp & FF_CMP_CHROMA) && !mecc->me_sub_cmp[2]) + mecc->me_sub_cmp[2] = zero_cmp; + } + + return 0; +} + +void ff_me_init_pic(MpegEncContext *s) +{ + MotionEstContext * const c= &s->me; + +/*FIXME s->no_rounding b_type*/ + if (s->avctx->flags & AV_CODEC_FLAG_QPEL) { + c->qpel_avg = s->qdsp.avg_qpel_pixels_tab; + if (s->no_rounding) + c->qpel_put = s->qdsp.put_no_rnd_qpel_pixels_tab; + else + c->qpel_put = s->qdsp.put_qpel_pixels_tab; + } c->hpel_avg = s->hdsp.avg_pixels_tab; if (s->no_rounding) c->hpel_put = s->hdsp.put_no_rnd_pixels_tab; @@ -367,24 +388,10 @@ int ff_init_me(MpegEncContext *s){ c->stride = 16*s->mb_width + 32; c->uvstride= 8*s->mb_width + 16; } - - /* 8x8 fullpel search would need a 4x4 chroma compare, which we do - * not have yet, and even if we had, the motion estimation code - * does not expect it. */ if (s->codec_id != AV_CODEC_ID_SNOW) { - if ((c->avctx->me_cmp & FF_CMP_CHROMA) /* && !s->mecc.me_cmp[2] */) - s->mecc.me_cmp[2] = zero_cmp; - if ((c->avctx->me_sub_cmp & FF_CMP_CHROMA) && !s->mecc.me_sub_cmp[2]) - s->mecc.me_sub_cmp[2] = zero_cmp; c->hpel_put[2][0]= c->hpel_put[2][1]= c->hpel_put[2][2]= c->hpel_put[2][3]= zero_hpel; } - - if(s->codec_id == AV_CODEC_ID_H261){ - c->sub_motion_search= no_sub_motion_search; - } - - return 0; } #define CHECK_SAD_HALF_MV(suffix, x, y) \ diff --git a/libavcodec/motion_est.h b/libavcodec/motion_est.h index f6a563b08c..feea9a473b 100644 --- a/libavcodec/motion_est.h +++ b/libavcodec/motion_est.h @@ -25,6 +25,7 @@ #include "avcodec.h" #include "hpeldsp.h" +#include "me_cmp.h" #include "qpeldsp.h" struct MpegEncContext; @@ -105,7 +106,13 @@ static inline int ff_h263_round_chroma(int x) return h263_chroma_roundtab[x & 0xf] + (x >> 3); } -int ff_init_me(struct MpegEncContext *s); +/** + * Performs one-time initialization of the MotionEstContext. + */ +int ff_me_init(MotionEstContext *c, struct AVCodecContext *avctx, + struct MECmpContext *mecc); + +void ff_me_init_pic(struct MpegEncContext *s); void ff_estimate_p_frame_motion(struct MpegEncContext *s, int mb_x, int mb_y); void ff_estimate_b_frame_motion(struct MpegEncContext *s, int mb_x, int mb_y); diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index c97120de21..5b8d877935 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -306,6 +306,18 @@ av_cold void ff_dct_encode_init(MpegEncContext *s) s->dct_quantize = dct_quantize_trellis_c; } +static av_cold int me_cmp_init(MpegEncContext *s, AVCodecContext *avctx) +{ + int ret; + + ff_me_cmp_init(&s->mecc, avctx); + ret = ff_me_init(&s->me, avctx, &s->mecc); + if (ret < 0) + return ret; + + return 0; +} + /* init video encoder */ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) { @@ -810,9 +822,11 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) return ret; ff_fdctdsp_init(&s->fdsp, avctx); - ff_me_cmp_init(&s->mecc, avctx); ff_mpegvideoencdsp_init(&s->mpvencdsp, avctx); ff_pixblockdsp_init(&s->pdsp, avctx); + ret = me_cmp_init(s, avctx); + if (ret < 0) + return ret; if (!(avctx->stats_out = av_mallocz(256)) || !FF_ALLOCZ_TYPED_ARRAY(s->q_intra_matrix, 32) || @@ -3603,8 +3617,7 @@ static int encode_picture(MpegEncContext *s, const AVPacket *pkt) s->q_chroma_intra_matrix16 = s->q_intra_matrix16; } - if(ff_init_me(s)<0) - return -1; + ff_me_init_pic(s); s->mb_intra=0; //for the rate distortion & bit compare functions for (int i = 0; i < context_count; i++) { diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 8d6dabae65..f3c78cfb21 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -217,6 +217,9 @@ static av_cold int encode_init(AVCodecContext *avctx) mcf(12,12) ff_me_cmp_init(&enc->mecc, avctx); + ret = ff_me_init(&enc->m.me, avctx, &enc->mecc); + if (ret < 0) + return ret; ff_mpegvideoencdsp_init(&enc->mpvencdsp, avctx); ff_snow_alloc_blocks(s); @@ -278,11 +281,6 @@ static av_cold int encode_init(AVCodecContext *avctx) if (ret) return ret; - ret = ff_set_cmp(&enc->mecc, enc->mecc.me_cmp, s->avctx->me_cmp); - ret |= ff_set_cmp(&enc->mecc, enc->mecc.me_sub_cmp, s->avctx->me_sub_cmp); - if (ret < 0) - return AVERROR(EINVAL); - s->input_picture = av_frame_alloc(); if (!s->input_picture) return AVERROR(ENOMEM); @@ -1874,9 +1872,8 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, mpv->mecc = enc->mecc; //move mpv->qdsp = enc->qdsp; //move mpv->hdsp = s->hdsp; - ff_init_me(&enc->m); + ff_me_init_pic(&enc->m); s->hdsp = mpv->hdsp; - enc->mecc = mpv->mecc; } if (enc->pass1_rc) { diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 35413b8afd..ceb8bf83c2 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -374,7 +374,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, s->m.p_mv_table = s->motion_val16[plane] + s->m.mb_stride + 1; s->m.mecc = s->mecc; // move - ff_init_me(&s->m); + ff_me_init_pic(&s->m); s->m.me.dia_size = s->avctx->dia_size; s->m.first_slice_line = 1; @@ -589,6 +589,9 @@ static av_cold int svq1_encode_init(AVCodecContext *avctx) ff_hpeldsp_init(&s->hdsp, avctx->flags); ff_me_cmp_init(&s->mecc, avctx); + ret = ff_me_init(&s->m.me, avctx, &s->mecc); + if (ret < 0) + return ret; ff_mpegvideoencdsp_init(&s->m.mpvencdsp, avctx); s->current_picture = av_frame_alloc(); -- 2.40.1 _______________________________________________ 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".