From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id BFE764F227 for ; Sun, 15 Jun 2025 17:03:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 7B10C68DA10; Sun, 15 Jun 2025 19:59:02 +0300 (EEST) Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id E8F3268D39B for ; Sun, 15 Jun 2025 19:58:59 +0300 (EEST) Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-b2fca9d7872so2298535a12.1 for ; Sun, 15 Jun 2025 09:58:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750006737; x=1750611537; darn=ffmpeg.org; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date :references:in-reply-to:message-id:from:from:to:cc:subject:date :message-id:reply-to; bh=9vkC2wl1lBQ+2E/RzGXUOQqnX+lzwztipRZf7N0Cu5o=; b=HJtNDbfbq2ZTeca+eZ1ri0LJYpAM1lTzRfVPqYhFiluUr6oqDBFYEFuqjiTmSaE/NI 5ZaIk2+wbDN7gJ41wLdbg6RcdbjU2jS5BfoxuDuEI4X4oJZSwchbAoolZs76/gmKfdrO CQcto01I/0snKNKYwz7+clMbxIdG35W/yIgNn5MON7INPgIjSLubsomlO3IC03DbY5D8 NG+d8zOqbzcvlpKAXUOc/xX/WnSPifRzMuXCLAJM7/F+n7Av+esUuG0D5hXCUM9qe9bZ xTF5W6oWXaL50C1bo5LTvj9/XGsCepi/okQN7SP/bgfJGVowTBVJp+Fd6EYcUDVhOfU4 F39g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750006737; x=1750611537; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date :references:in-reply-to:message-id:from:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9vkC2wl1lBQ+2E/RzGXUOQqnX+lzwztipRZf7N0Cu5o=; b=dPJ5I2bxSrK56HZW3SFUADB309DGja+MmD91xwVErJp5MqC6HQ/qQPzMLLM56VNP+N +FZGu7hgpup8kyWnHb/5ReWSQ+d+pLiKm4rvT9pkHsgoDrO46/OfFJaqdynRSe6unsuv DsWTpikSz1Iakjbm6K4CpWS55BxMXZR9ApOWhcdJtTuV0MdMZbmmq1HIA62pUopPYARO VKAkVE/Uy46O5xDEhdAgRVdsqhf2F2n9mideqPvsWwIuoJXZCEB3FLgJ7CJNDsqVibrQ Ik930BozUXDqnuHXL647a+ppejh+Klg1HFqVQGkgJnav1zP+zSv1MTopsocqTgX1wd75 DvCw== X-Gm-Message-State: AOJu0YxhLXHfuzMVw29lnbJlTD2wJQjEDg6TxLaa3/9CWywogxSPurYE X7MuXXGv2OBRbRGQsTnrj89ntHgc2kY8wgeNMxkXt608EaBO+i0TKUX5wcetbg== X-Gm-Gg: ASbGncu5zXxg3xjcrUI8xZksj/k1zFETvjdog8i3bvuKDQJBoW4eOMwSFAiZOur31Ci +Bep50AiQ66Qr6WyVg5u06G609yoFbpyGYBYT/c0iyz5vAdv6sFGUysilIvRlPKiiRyq3ymX31j UaUBPXpv0cxeiMpznYJeH2cizivAXtD5Pk+9a6uAE3C4SKuG7iEGD9wX3cMktF7k6AaUmOLxTdu Bq99GShILbTt2+aDyeptcnOe1VT9gwgIRPvYijnbiRIxMMZ3lFuqIfQfgpieOj3lo6FQ6wd28zE U3UjRJo4gvvQZbdgkhl42iGhA5ni6nWPqqdWiyHaUKUpoNtNXLairQvstr/jJUcKG1nkWiLO28O 6QDzOMylS3Fi1i4Tf1pkOrmsaFL0= X-Google-Smtp-Source: AGHT+IEV2rw1L5YsWtO8kgbucEQrBxQwRW6GoTnu/EgksKDSKNnF+1aYluvbXgKsJu0ZOsNNn+wNtA== X-Received: by 2002:a05:6a20:430d:b0:21f:543f:f11c with SMTP id adf61e73a8af0-21fbd46edeamr11729619637.2.1750006737345; Sun, 15 Jun 2025 09:58:57 -0700 (PDT) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b2fe164ca5fsm5207871a12.34.2025.06.15.09.58.56 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Jun 2025 09:58:57 -0700 (PDT) From: Andreas Rheinhardt X-Google-Original-From: Andreas Rheinhardt Message-Id: <4a80df4e520db77d7547c5c1fb280d4cc7c15171.1750006480.git.ffmpegagent@gmail.com> In-Reply-To: References: Date: Sun, 15 Jun 2025 16:54:35 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH 44/47] avcodec/mpeg4video: Move ff_mpeg4_pred_dc() to decoder 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: From: Andreas Rheinhardt Only used by the decoder now that the encoder solves out-of-slice predictions by setting the out-of-slice values appropriately. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpeg4video.h | 44 ----------------------------------- libavcodec/mpeg4videodec.c | 47 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 46 deletions(-) diff --git a/libavcodec/mpeg4video.h b/libavcodec/mpeg4video.h index 059ea025e2..274b21a067 100644 --- a/libavcodec/mpeg4video.h +++ b/libavcodec/mpeg4video.h @@ -37,48 +37,4 @@ void ff_mpeg4_init_direct_mv(MpegEncContext *s); */ int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my); -/** - * Predict the dc. - * @param n block index (0-3 are luma, 4-5 are chroma) - * @param dir_ptr pointer to an integer where the prediction direction will be stored - */ -static inline int ff_mpeg4_pred_dc(MpegEncContext *s, int n, int *dir_ptr) -{ - int a, b, c, wrap, pred; - const int16_t *const dc_val = s->dc_val + s->block_index[n]; - - /* find prediction */ - - wrap = s->block_wrap[n]; - - /* B C - * A X - */ - a = dc_val[-1]; - b = dc_val[-1 - wrap]; - c = dc_val[-wrap]; - - /* outside slice handling (we can't do that by memset as we need the - * dc for error resilience) */ - if (s->first_slice_line && n != 3) { - if (n != 2) - b = c = 1024; - if (n != 1 && s->mb_x == s->resync_mb_x) - b = a = 1024; - } - if (s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y + 1) { - if (n == 0 || n == 4 || n == 5) - b = 1024; - } - - if (abs(a - b) < abs(b - c)) { - pred = c; - *dir_ptr = 1; /* top */ - } else { - pred = a; - *dir_ptr = 0; /* left */ - } - return pred; -} - #endif /* AVCODEC_MPEG4VIDEO_H */ diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 654e8eee3b..522242de40 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -888,6 +888,49 @@ static inline int get_amv(Mpeg4DecContext *ctx, int n) return sum; } +/** + * Predict the dc. + * @param n block index (0-3 are luma, 4-5 are chroma) + * @param dir_ptr pointer to an integer where the prediction direction will be stored + */ +static inline int mpeg4_pred_dc(MpegEncContext *s, int n, int *dir_ptr) +{ + const int16_t *const dc_val = s->dc_val + s->block_index[n]; + const int wrap = s->block_wrap[n]; + int pred; + + /* find prediction */ + + /* B C + * A X + */ + int a = dc_val[-1]; + int b = dc_val[-1 - wrap]; + int c = dc_val[-wrap]; + + /* outside slice handling (we can't do that by memset as we need the + * dc for error resilience) */ + if (s->first_slice_line && n != 3) { + if (n != 2) + b = c = 1024; + if (n != 1 && s->mb_x == s->resync_mb_x) + b = a = 1024; + } + if (s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y + 1) { + if (n == 0 || n == 4 || n == 5) + b = 1024; + } + + if (abs(a - b) < abs(b - c)) { + pred = c; + *dir_ptr = 1; /* top */ + } else { + pred = a; + *dir_ptr = 0; /* left */ + } + return pred; +} + static inline int mpeg4_get_level_dc(MpegEncContext *s, int n, int pred, int level) { int scale = n < 4 ? s->y_dc_scale : s->c_dc_scale; @@ -971,7 +1014,7 @@ static inline int mpeg4_decode_dc(MpegEncContext *s, int n, int *dir_ptr) } } - pred = ff_mpeg4_pred_dc(s, n, dir_ptr); + pred = mpeg4_pred_dc(s, n, dir_ptr); return mpeg4_get_level_dc(s, n, pred, level); } @@ -1362,7 +1405,7 @@ static inline int mpeg4_decode_block(Mpeg4DecContext *ctx, int16_t *block, i = 0; } else { i = -1; - pred = ff_mpeg4_pred_dc(s, n, &dc_pred_dir); + pred = mpeg4_pred_dc(s, n, &dc_pred_dir); } if (!coded) goto not_coded; -- ffmpeg-codebot _______________________________________________ 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".