Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: [FFmpeg-devel] [PATCH 12/17] avcodec/ac3enc: Deduplicate copying input samples
Date: Sun,  7 Apr 2024 23:09:10 +0200
Message-ID: <GV1P250MB0737643599DB822551243B738F012@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <GV1P250MB073758D71A50C11C0A3C26CE8F012@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM>

These memcpy operands only depend upon sizeof(SampleType)
(and this size is actually the same for both the fixed-point
and the floating-point encoders for most (all supported?)
systems).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/ac3enc.c          | 25 ++++++++++++++++++++++++-
 libavcodec/ac3enc.h          |  2 +-
 libavcodec/ac3enc_template.c | 27 +--------------------------
 3 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 681b227d3d..7adb1c444a 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -503,6 +503,27 @@ static void ac3_adjust_frame_size(AC3EncodeContext *s)
     s->samples_written += AC3_BLOCK_SIZE * s->num_blocks;
 }
 
+/*
+ * Copy input samples.
+ * Channels are reordered from FFmpeg's default order to AC-3 order.
+ */
+static void copy_input_samples(AC3EncodeContext *s, uint8_t * const *samples)
+{
+    const unsigned sampletype_size = SAMPLETYPE_SIZE(s);
+
+    /* copy and remap input samples */
+    for (int ch = 0; ch < s->channels; ch++) {
+        /* copy last 256 samples of previous frame to the start of the current frame */
+        memcpy(&s->planar_samples[ch][0],
+               s->planar_samples[ch] + AC3_BLOCK_SIZE * sampletype_size * s->num_blocks,
+               AC3_BLOCK_SIZE * sampletype_size);
+
+        /* copy new samples for current frame */
+        memcpy(s->planar_samples[ch] + AC3_BLOCK_SIZE * sampletype_size,
+               samples[s->channel_map[ch]],
+               sampletype_size * AC3_BLOCK_SIZE * s->num_blocks);
+    }
+}
 
 /**
  * Set the initial coupling strategy parameters prior to coupling analysis.
@@ -1996,7 +2017,9 @@ int ff_ac3_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
     if (s->bit_alloc.sr_code == 1 || s->eac3)
         ac3_adjust_frame_size(s);
 
-    s->encode_frame(s, frame);
+    copy_input_samples(s, frame->extended_data);
+
+    s->encode_frame(s);
 
     ac3_apply_rematrixing(s);
 
diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h
index 8d6cb3b3de..271f0eb8eb 100644
--- a/libavcodec/ac3enc.h
+++ b/libavcodec/ac3enc.h
@@ -255,7 +255,7 @@ typedef struct AC3EncodeContext {
     int ref_bap_set;                                         ///< indicates if ref_bap pointers have been set
 
     /** fixed vs. float function pointers */
-    void (*encode_frame)(struct AC3EncodeContext *s, const AVFrame *frame);
+    void (*encode_frame)(struct AC3EncodeContext *s);
 
     /* fixed vs. float function pointers */
     int  (*mdct_init)(struct AC3EncodeContext *s);
diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c
index 3646e1dcaa..b0f9e69ee8 100644
--- a/libavcodec/ac3enc_template.c
+++ b/libavcodec/ac3enc_template.c
@@ -38,29 +38,6 @@
 #include "eac3enc.h"
 
 
-/*
- * Copy input samples.
- * Channels are reordered from FFmpeg's default order to AC-3 order.
- */
-static void copy_input_samples(AC3EncodeContext *s, SampleType **samples)
-{
-    int ch;
-
-    /* copy and remap input samples */
-    for (ch = 0; ch < s->channels; ch++) {
-        /* copy last 256 samples of previous frame to the start of the current frame */
-        memcpy(&s->planar_samples[ch][0],
-               (SampleType*)s->planar_samples[ch] + AC3_BLOCK_SIZE * s->num_blocks,
-               AC3_BLOCK_SIZE * sizeof(SampleType));
-
-        /* copy new samples for current frame */
-        memcpy((SampleType*)s->planar_samples[ch] + AC3_BLOCK_SIZE,
-               samples[s->channel_map[ch]],
-               AC3_BLOCK_SIZE * s->num_blocks * sizeof(SampleType));
-    }
-}
-
-
 /*
  * Apply the MDCT to input samples to generate frequency coefficients.
  * This applies the KBD window and normalizes the input to reduce precision
@@ -353,10 +330,8 @@ static void compute_rematrixing_strategy(AC3EncodeContext *s)
 }
 
 
-static void encode_frame(AC3EncodeContext *s, const AVFrame *frame)
+static void encode_frame(AC3EncodeContext *s)
 {
-    copy_input_samples(s, (SampleType **)frame->extended_data);
-
     apply_mdct(s);
 
     s->cpl_on = s->cpl_enabled;
-- 
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".

  parent reply	other threads:[~2024-04-07 21:10 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-07 20:39 [FFmpeg-devel] [PATCH 01/17] avcodec/ac3enc: Don't presume ch_layout to be AV_CHANNEL_ORDER_NATIVE Andreas Rheinhardt
2024-04-07 20:51 ` James Almer
2024-04-07 21:53   ` Andreas Rheinhardt
2024-04-07 22:21     ` James Almer
2024-04-07 22:26       ` Andreas Rheinhardt
2024-04-07 22:35         ` James Almer
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 02/17] avcodec/ac3enc: Don't overwrite AVCodecContext.ch_layout Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 03/17] avcodec/ac3enc: Remove redundant channel layout checks Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 04/17] avcodec/ac3enc: Use bit-operations for bit-mask Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 05/17] avcodec/ac3enc: Avoid copying strings Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 06/17] avcodec/ac3enc: Remove always-false sample rate check Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 07/17] avcodec/ac3enc: Remove disabled code for RealAudio variant of AC-3 Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 08/17] avcodec/ac3enc: Use common encode_frame function Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 09/17] avcodec/ac3enc: Move ff_ac3_validate_metadate() upwards Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 10/17] avcodec/ac3enc: Share more code between fixed/float encoders Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 11/17] avcodec/ac3enc: Deduplicate allocating buffers Andreas Rheinhardt
2024-04-07 21:09 ` Andreas Rheinhardt [this message]
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 13/17] avcodec/ac3enc_float: Remove uninformative error message Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 14/17] avcodec/ac3enc: Avoid function pointers to initialize MDCT Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 15/17] avcodec/ac3enc: Move EAC-3 specific initialization to eac3enc.c Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 16/17] avcodec/flacenc: Avoid shift where possible Andreas Rheinhardt
2024-04-07 21:09 ` [FFmpeg-devel] [PATCH 17/17] avformat/img2: Avoid relocations for ff_img_tags Andreas Rheinhardt
2024-04-08  0:56 ` [FFmpeg-devel] [PATCH 18/18] avcodec/ac3enc: Avoid calculating the CRC multiple times Andreas Rheinhardt
2024-04-10  6:16 ` [FFmpeg-devel] [PATCH 01/17] avcodec/ac3enc: Don't presume ch_layout to be AV_CHANNEL_ORDER_NATIVE Andreas Rheinhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=GV1P250MB0737643599DB822551243B738F012@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM \
    --to=andreas.rheinhardt@outlook.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git