ffmpeg | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Thu Jul 25 
18:38:32 2024 +0300| [d527d238728bf9b75d55960c4279134d0fba493b] | committer: 
Rémi Denis-Courmont

lavc/pixblockdsp: specialise aligned 16-bit get_pixels

The current code assumes that we have unaligned rows, which hurts on
platforms with slower unaligned accesses. (Also, this lets the compiler
unroll manually, which it seems to do in practice.)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d527d238728bf9b75d55960c4279134d0fba493b
---

 libavcodec/pixblockdsp.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/libavcodec/pixblockdsp.c b/libavcodec/pixblockdsp.c
index bbbeca1618..1fff244511 100644
--- a/libavcodec/pixblockdsp.c
+++ b/libavcodec/pixblockdsp.c
@@ -26,6 +26,13 @@
 
 static void get_pixels_16_c(int16_t *restrict block, const uint8_t *pixels,
                             ptrdiff_t stride)
+{
+    for (int i = 0; i < 8; i++)
+        AV_COPY128(block + i * 8, pixels + i * stride);
+}
+
+static void get_pixels_unaligned_16_c(int16_t *restrict block,
+                                      const uint8_t *pixels, ptrdiff_t stride)
 {
     AV_COPY128U(block + 0 * 8, pixels + 0 * stride);
     AV_COPY128U(block + 1 * 8, pixels + 1 * stride);
@@ -90,7 +97,7 @@ av_cold void ff_pixblockdsp_init(PixblockDSPContext *c, 
AVCodecContext *avctx)
     case 10:
     case 12:
     case 14:
-        c->get_pixels_unaligned =
+        c->get_pixels_unaligned = get_pixels_unaligned_16_c;
         c->get_pixels = get_pixels_16_c;
         break;
     default:

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to