From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: [FFmpeg-devel] [PATCH v2 24/24] avcodec/mpegvideo: Don't use ScanTable where unnecessary
Date: Fri, 21 Oct 2022 22:13:00 +0200
Message-ID: <AS8P250MB0744E2D055AE1E5D0EE150FC8F2D9@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <AS8P250MB07440727410EF826F84418C68F2D9@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM>
For the intra_[hv]_scantables, only ScanTable.permutated
is used, so one only needs to keep that.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
libavcodec/ituh263dec.c | 4 ++--
libavcodec/mpeg4videodec.c | 28 ++++++++++++++++++----------
libavcodec/mpeg4videoenc.c | 4 ++--
libavcodec/mpegvideo.c | 6 ++++--
libavcodec/mpegvideo.h | 4 ++--
libavcodec/msmpeg4.c | 6 ++++--
libavcodec/msmpeg4dec.c | 4 ++--
libavcodec/wmv2.c | 8 ++++----
8 files changed, 38 insertions(+), 26 deletions(-)
diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c
index 200de8527e..2164cd7346 100644
--- a/libavcodec/ituh263dec.c
+++ b/libavcodec/ituh263dec.c
@@ -544,9 +544,9 @@ static int h263_decode_block(MpegEncContext * s, int16_t * block,
i = 0;
if (s->ac_pred) {
if (s->h263_aic_dir)
- scan_table = s->intra_v_scantable.permutated; /* left */
+ scan_table = s->permutated_intra_v_scantable; /* left */
else
- scan_table = s->intra_h_scantable.permutated; /* top */
+ scan_table = s->permutated_intra_h_scantable; /* top */
}
} else if (s->mb_intra) {
/* DC coef */
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index c4f268c534..4ab558b46f 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -1327,9 +1327,9 @@ static inline int mpeg4_decode_block(Mpeg4DecContext *ctx, int16_t *block,
}
if (s->ac_pred) {
if (dc_pred_dir == 0)
- scan_table = s->intra_v_scantable.permutated; /* left */
+ scan_table = s->permutated_intra_v_scantable; /* left */
else
- scan_table = s->intra_h_scantable.permutated; /* top */
+ scan_table = s->permutated_intra_h_scantable; /* top */
} else {
scan_table = s->intra_scantable.permutated;
}
@@ -3258,13 +3258,17 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb,
if (s->alternate_scan) {
ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, ff_alternate_vertical_scan);
ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_alternate_vertical_scan);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, ff_alternate_vertical_scan);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
+ ff_permute_scantable(s->permutated_intra_h_scantable, ff_alternate_vertical_scan,
+ s->idsp.idct_permutation);
+ ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan,
+ s->idsp.idct_permutation);
} else {
ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, ff_zigzag_direct);
ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_zigzag_direct);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
+ ff_permute_scantable(s->permutated_intra_h_scantable, ff_alternate_horizontal_scan,
+ s->idsp.idct_permutation);
+ ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan,
+ s->idsp.idct_permutation);
}
/* Skip at this point when only parsing since the remaining
@@ -3432,13 +3436,17 @@ static int decode_studio_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb)
if (s->alternate_scan) {
ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, ff_alternate_vertical_scan);
ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_alternate_vertical_scan);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, ff_alternate_vertical_scan);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
+ ff_permute_scantable(s->permutated_intra_h_scantable, ff_alternate_vertical_scan,
+ s->idsp.idct_permutation);
+ ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan,
+ s->idsp.idct_permutation);
} else {
ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, ff_zigzag_direct);
ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_zigzag_direct);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
+ ff_permute_scantable(s->permutated_intra_h_scantable, ff_alternate_horizontal_scan,
+ s->idsp.idct_permutation);
+ ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan,
+ s->idsp.idct_permutation);
}
mpeg4_load_default_matrices(s);
diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c
index 8e6e35b927..77f960a262 100644
--- a/libavcodec/mpeg4videoenc.c
+++ b/libavcodec/mpeg4videoenc.c
@@ -175,7 +175,7 @@ static inline int decide_ac_pred(MpegEncContext *s, int16_t block[6][64],
ac_val1[i + 8] = level;
}
}
- st[n] = s->intra_h_scantable.permutated;
+ st[n] = s->permutated_intra_h_scantable;
} else {
const int xy = s->mb_x - 1 + s->mb_y * s->mb_stride;
/* left prediction */
@@ -197,7 +197,7 @@ static inline int decide_ac_pred(MpegEncContext *s, int16_t block[6][64],
ac_val1[i + 8] = block[n][s->idsp.idct_permutation[i]];
}
}
- st[n] = s->intra_v_scantable.permutated;
+ st[n] = s->permutated_intra_v_scantable;
}
for (i = 63; i > 0; i--) // FIXME optimize
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 4326f7f9a5..c436dc8001 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -357,8 +357,10 @@ av_cold void ff_mpv_idct_init(MpegEncContext *s)
ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, ff_zigzag_direct);
ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_zigzag_direct);
}
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
+ ff_permute_scantable(s->permutated_intra_h_scantable, ff_alternate_horizontal_scan,
+ s->idsp.idct_permutation);
+ ff_permute_scantable(s->permutated_intra_v_scantable, ff_alternate_vertical_scan,
+ s->idsp.idct_permutation);
}
static int init_duplicate_context(MpegEncContext *s)
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 6adf724dac..ccec0dd75f 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -82,8 +82,8 @@ typedef struct MpegEncContext {
* offsets used in ASM. */
ScanTable intra_scantable;
- ScanTable intra_h_scantable;
- ScanTable intra_v_scantable;
+ uint8_t permutated_intra_h_scantable[64];
+ uint8_t permutated_intra_v_scantable[64];
struct AVCodecContext *avctx;
/* The following pointer is intended for codecs sharing code
diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c
index 455436e9c4..3f5dc23130 100644
--- a/libavcodec/msmpeg4.c
+++ b/libavcodec/msmpeg4.c
@@ -150,9 +150,11 @@ av_cold void ff_msmpeg4_common_init(MpegEncContext *s)
if(s->msmpeg4_version>=4){
ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_wmv1_scantable[1]);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable, ff_wmv1_scantable[2]);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_wmv1_scantable[3]);
ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable, ff_wmv1_scantable[0]);
+ ff_permute_scantable(s->permutated_intra_h_scantable, ff_wmv1_scantable[2],
+ s->idsp.idct_permutation);
+ ff_permute_scantable(s->permutated_intra_v_scantable, ff_wmv1_scantable[3],
+ s->idsp.idct_permutation);
}
//Note the default tables are set in common_init in mpegvideo.c
diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c
index 05a7ed4db6..8e12e1aab2 100644
--- a/libavcodec/msmpeg4dec.c
+++ b/libavcodec/msmpeg4dec.c
@@ -687,9 +687,9 @@ int ff_msmpeg4_decode_block(MpegEncContext * s, int16_t * block,
}
if (s->ac_pred) {
if (dc_pred_dir == 0)
- scan_table = s->intra_v_scantable.permutated; /* left */
+ scan_table = s->permutated_intra_v_scantable; /* left */
else
- scan_table = s->intra_h_scantable.permutated; /* top */
+ scan_table = s->permutated_intra_h_scantable; /* top */
} else {
scan_table = s->intra_scantable.permutated;
}
diff --git a/libavcodec/wmv2.c b/libavcodec/wmv2.c
index 07a5d14f90..543784c813 100644
--- a/libavcodec/wmv2.c
+++ b/libavcodec/wmv2.c
@@ -36,12 +36,12 @@ av_cold void ff_wmv2_common_init(MpegEncContext *s)
w->wdsp.idct_perm);
ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable,
ff_wmv1_scantable[1]);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_h_scantable,
- ff_wmv1_scantable[2]);
- ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable,
- ff_wmv1_scantable[3]);
ff_init_scantable(s->idsp.idct_permutation, &s->inter_scantable,
ff_wmv1_scantable[0]);
+ ff_permute_scantable(s->permutated_intra_h_scantable, ff_wmv1_scantable[2],
+ s->idsp.idct_permutation);
+ ff_permute_scantable(s->permutated_intra_v_scantable, ff_wmv1_scantable[3],
+ s->idsp.idct_permutation);
s->idsp.idct_put = w->wdsp.idct_put;
s->idsp.idct_add = w->wdsp.idct_add;
s->idsp.idct = NULL;
--
2.34.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".
next prev parent reply other threads:[~2022-10-21 20:16 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-21 20:11 [FFmpeg-devel] [PATCH v2 01/24] configure: Add idctdsp dependency to codecs that need it Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 02/24] avcodec/eamad: Don't use IDCTDSP-API unnecessarily Andreas Rheinhardt
2022-10-22 0:07 ` Peter Ross
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 03/24] avcodec/eatgq: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 04/24] avcodec/eatqi: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 05/24] avcodec/aic: Remove useless ScanTable Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 06/24] avcodec/imm4: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 07/24] avcodec/idctdsp: Add function to apply permutation to array Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 08/24] avcodec/agm: Only keep what is used from ScanTable Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 09/24] avcodec/asvdec: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 10/24] avcodec/dnxhddec: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 11/24] avcodec/cavs: Only keep what is needed from IDCTDSP-API Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 12/24] avcodec/g2meet: Only keep what is used from ScanTable Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 13/24] avcodec/g2meet: Pre-permute quantization tables Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 14/24] avcodec/intrax8: Only keep what is used from ScanTable Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 15/24] avcodec/mdec: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 16/24] avcodec/mimic: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 17/24] avcodec/mjpegdec: " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 18/24] avcodec/mjpegenc_common: Only pass " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 19/24] avcodec/speedhqdec: Only keep " Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 20/24] avcodec/wmv2dec: Remove unnecessary ScanTables Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 21/24] avcodec/idctdsp: Move ScanTable to mpegvideo Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 22/24] avcodec/eatgq: Move transient GetByteContext from context to stack Andreas Rheinhardt
2022-10-21 20:12 ` [FFmpeg-devel] [PATCH v2 23/24] avcodec/mpegvideo: Move ASM-offset warning to its proper place Andreas Rheinhardt
2022-10-21 20:13 ` Andreas Rheinhardt [this message]
2022-10-23 11:17 ` [FFmpeg-devel] [PATCH v2 01/24] configure: Add idctdsp dependency to codecs that need it 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=AS8P250MB0744E2D055AE1E5D0EE150FC8F2D9@AS8P250MB0744.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