[FFmpeg-cvslog] Merge commit 'b2939a75270bc7e971462648168aa3a2a48c1c8c'
Clément Bœsch
git at videolan.org
Tue Mar 21 16:21:10 EET 2017
ffmpeg | branch: master | Clément Bœsch <u at pkh.me> | Tue Mar 21 15:19:17 2017 +0100| [6d11b2f6567619cfa40b7e3809572818c7fc41b9] | committer: Clément Bœsch
Merge commit 'b2939a75270bc7e971462648168aa3a2a48c1c8c'
* commit 'b2939a75270bc7e971462648168aa3a2a48c1c8c':
blockdsp: Change type of array stride parameters to ptrdiff_t
Merged-by: Clément Bœsch <u at pkh.me>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6d11b2f6567619cfa40b7e3809572818c7fc41b9
---
libavcodec/blockdsp.c | 6 ++++--
libavcodec/blockdsp.h | 3 ++-
libavcodec/mips/blockdsp_mips.h | 8 ++++----
libavcodec/mips/blockdsp_mmi.c | 4 ++--
libavcodec/mips/blockdsp_msa.c | 4 ++--
5 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/libavcodec/blockdsp.c b/libavcodec/blockdsp.c
index a5c527a..c7efe7e 100644
--- a/libavcodec/blockdsp.c
+++ b/libavcodec/blockdsp.c
@@ -35,7 +35,8 @@ static void clear_blocks_c(int16_t *blocks)
memset(blocks, 0, sizeof(int16_t) * 6 * 64);
}
-static void fill_block16_c(uint8_t *block, uint8_t value, int line_size, int h)
+static void fill_block16_c(uint8_t *block, uint8_t value, ptrdiff_t line_size,
+ int h)
{
int i;
@@ -45,7 +46,8 @@ static void fill_block16_c(uint8_t *block, uint8_t value, int line_size, int h)
}
}
-static void fill_block8_c(uint8_t *block, uint8_t value, int line_size, int h)
+static void fill_block8_c(uint8_t *block, uint8_t value, ptrdiff_t line_size,
+ int h)
{
int i;
diff --git a/libavcodec/blockdsp.h b/libavcodec/blockdsp.h
index 95e1d0f..6e27a02 100644
--- a/libavcodec/blockdsp.h
+++ b/libavcodec/blockdsp.h
@@ -19,6 +19,7 @@
#ifndef AVCODEC_BLOCKDSP_H
#define AVCODEC_BLOCKDSP_H
+#include <stddef.h>
#include <stdint.h>
#include "avcodec.h"
@@ -29,7 +30,7 @@
* h for op_pixels_func is limited to { width / 2, width },
* but never larger than 16 and never smaller than 4. */
typedef void (*op_fill_func)(uint8_t *block /* align width (8 or 16) */,
- uint8_t value, int line_size, int h);
+ uint8_t value, ptrdiff_t line_size, int h);
typedef struct BlockDSPContext {
void (*clear_block)(int16_t *block /* align 16 */);
diff --git a/libavcodec/mips/blockdsp_mips.h b/libavcodec/mips/blockdsp_mips.h
index 9559d40..1742b12 100644
--- a/libavcodec/mips/blockdsp_mips.h
+++ b/libavcodec/mips/blockdsp_mips.h
@@ -24,13 +24,13 @@
#include "../mpegvideo.h"
-void ff_fill_block16_msa(uint8_t *src, uint8_t val, int stride, int height);
-void ff_fill_block8_msa(uint8_t *src, uint8_t val, int stride, int height);
+void ff_fill_block16_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height);
+void ff_fill_block8_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height);
void ff_clear_block_msa(int16_t *block);
void ff_clear_blocks_msa(int16_t *block);
-void ff_fill_block16_mmi(uint8_t *block, uint8_t value, int line_size, int h);
-void ff_fill_block8_mmi(uint8_t *block, uint8_t value, int line_size, int h);
+void ff_fill_block16_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h);
+void ff_fill_block8_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h);
void ff_clear_block_mmi(int16_t *block);
void ff_clear_blocks_mmi(int16_t *block);
diff --git a/libavcodec/mips/blockdsp_mmi.c b/libavcodec/mips/blockdsp_mmi.c
index 1035dbb..68641e2 100644
--- a/libavcodec/mips/blockdsp_mmi.c
+++ b/libavcodec/mips/blockdsp_mmi.c
@@ -24,7 +24,7 @@
#include "blockdsp_mips.h"
#include "libavutil/mips/mmiutils.h"
-void ff_fill_block16_mmi(uint8_t *block, uint8_t value, int line_size, int h)
+void ff_fill_block16_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h)
{
double ftmp[1];
DECLARE_VAR_ALL64;
@@ -48,7 +48,7 @@ void ff_fill_block16_mmi(uint8_t *block, uint8_t value, int line_size, int h)
);
}
-void ff_fill_block8_mmi(uint8_t *block, uint8_t value, int line_size, int h)
+void ff_fill_block8_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h)
{
double ftmp0;
DECLARE_VAR_ALL64;
diff --git a/libavcodec/mips/blockdsp_msa.c b/libavcodec/mips/blockdsp_msa.c
index 32ac858..2b78c28 100644
--- a/libavcodec/mips/blockdsp_msa.c
+++ b/libavcodec/mips/blockdsp_msa.c
@@ -65,12 +65,12 @@ static void memset_zero_16width_msa(uint8_t *src, int32_t stride,
}
}
-void ff_fill_block16_msa(uint8_t *src, uint8_t val, int stride, int height)
+void ff_fill_block16_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height)
{
copy_8bit_value_width16_msa(src, val, stride, height);
}
-void ff_fill_block8_msa(uint8_t *src, uint8_t val, int stride, int height)
+void ff_fill_block8_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height)
{
copy_8bit_value_width8_msa(src, val, stride, height);
}
======================================================================
diff --cc libavcodec/mips/blockdsp_mips.h
index 9559d40,0000000..1742b12
mode 100644,000000..100644
--- a/libavcodec/mips/blockdsp_mips.h
+++ b/libavcodec/mips/blockdsp_mips.h
@@@ -1,37 -1,0 +1,37 @@@
+/*
+ * Copyright (c) 2015 Parag Salasakar (parag.salasakar at imgtec.com)
+ * Zhou Xiaoyong <zhouxiaoyong at loongson.cn>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_MIPS_BLOCKDSP_MIPS_H
+#define AVCODEC_MIPS_BLOCKDSP_MIPS_H
+
+#include "../mpegvideo.h"
+
- void ff_fill_block16_msa(uint8_t *src, uint8_t val, int stride, int height);
- void ff_fill_block8_msa(uint8_t *src, uint8_t val, int stride, int height);
++void ff_fill_block16_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height);
++void ff_fill_block8_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height);
+void ff_clear_block_msa(int16_t *block);
+void ff_clear_blocks_msa(int16_t *block);
+
- void ff_fill_block16_mmi(uint8_t *block, uint8_t value, int line_size, int h);
- void ff_fill_block8_mmi(uint8_t *block, uint8_t value, int line_size, int h);
++void ff_fill_block16_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h);
++void ff_fill_block8_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h);
+void ff_clear_block_mmi(int16_t *block);
+void ff_clear_blocks_mmi(int16_t *block);
+
+#endif // #ifndef AVCODEC_MIPS_BLOCKDSP_MIPS_H
diff --cc libavcodec/mips/blockdsp_mmi.c
index 1035dbb,0000000..68641e2
mode 100644,000000..100644
--- a/libavcodec/mips/blockdsp_mmi.c
+++ b/libavcodec/mips/blockdsp_mmi.c
@@@ -1,159 -1,0 +1,159 @@@
+/*
+ * Loongson SIMD optimized blockdsp
+ *
+ * Copyright (c) 2015 Loongson Technology Corporation Limited
+ * Copyright (c) 2015 Zhou Xiaoyong <zhouxiaoyong at loongson.cn>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "blockdsp_mips.h"
+#include "libavutil/mips/mmiutils.h"
+
- void ff_fill_block16_mmi(uint8_t *block, uint8_t value, int line_size, int h)
++void ff_fill_block16_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h)
+{
+ double ftmp[1];
+ DECLARE_VAR_ALL64;
+
+ __asm__ volatile (
+ "mtc1 %[value], %[ftmp0] \n\t"
+ "punpcklbh %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "punpcklbh %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "punpcklbh %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "1: \n\t"
+ MMI_SDC1(%[ftmp0], %[block], 0x00)
+ PTR_ADDI "%[h], %[h], -0x01 \n\t"
+ MMI_SDC1(%[ftmp0], %[block], 0x08)
+ PTR_ADDU "%[block], %[block], %[line_size] \n\t"
+ "bnez %[h], 1b \n\t"
+ : [ftmp0]"=&f"(ftmp[0]),
+ RESTRICT_ASM_ALL64
+ [block]"+&r"(block), [h]"+&r"(h)
+ : [value]"r"(value), [line_size]"r"((mips_reg)line_size)
+ : "memory"
+ );
+}
+
- void ff_fill_block8_mmi(uint8_t *block, uint8_t value, int line_size, int h)
++void ff_fill_block8_mmi(uint8_t *block, uint8_t value, ptrdiff_t line_size, int h)
+{
+ double ftmp0;
+ DECLARE_VAR_ALL64;
+
+ __asm__ volatile (
+ "mtc1 %[value], %[ftmp0] \n\t"
+ "punpcklbh %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "punpcklbh %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "punpcklbh %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "1: \n\t"
+ MMI_SDC1(%[ftmp0], %[block], 0x00)
+ PTR_ADDI "%[h], %[h], -0x01 \n\t"
+ PTR_ADDU "%[block], %[block], %[line_size] \n\t"
+ "bnez %[h], 1b \n\t"
+ : [ftmp0]"=&f"(ftmp0),
+ RESTRICT_ASM_ALL64
+ [block]"+&r"(block), [h]"+&r"(h)
+ : [value]"r"(value), [line_size]"r"((mips_reg)line_size)
+ : "memory"
+ );
+}
+
+void ff_clear_block_mmi(int16_t *block)
+{
+ double ftmp[2];
+
+ __asm__ volatile (
+ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "xor %[ftmp1], %[ftmp1], %[ftmp1] \n\t"
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x00)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x10)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x20)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x30)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x40)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x50)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x60)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x70)
+ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1])
+ : [block]"r"(block)
+ : "memory"
+ );
+}
+
+void ff_clear_blocks_mmi(int16_t *block)
+{
+ double ftmp[2];
+
+ __asm__ volatile (
+ "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
+ "xor %[ftmp1], %[ftmp1], %[ftmp1] \n\t"
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x00)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x10)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x20)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x30)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x40)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x50)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x60)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x70)
+
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x80)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x90)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0xa0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0xb0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0xc0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0xd0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0xe0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0xf0)
+
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x100)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x110)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x120)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x130)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x140)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x150)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x160)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x170)
+
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x180)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x190)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x1a0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x1b0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x1c0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x1d0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x1e0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x1f0)
+
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x200)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x210)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x220)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x230)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x240)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x250)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x260)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x270)
+
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x280)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x290)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x2a0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x2b0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x2c0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x2d0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x2e0)
+ MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x2f0)
+ : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1])
+ : [block]"r"((uint64_t *)block)
+ : "memory"
+ );
+}
diff --cc libavcodec/mips/blockdsp_msa.c
index 32ac858,0000000..2b78c28
mode 100644,000000..100644
--- a/libavcodec/mips/blockdsp_msa.c
+++ b/libavcodec/mips/blockdsp_msa.c
@@@ -1,86 -1,0 +1,86 @@@
+/*
+ * Copyright (c) 2015 Parag Salasakar (parag.salasakar at imgtec.com)
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/mips/generic_macros_msa.h"
+#include "blockdsp_mips.h"
+
+static void copy_8bit_value_width8_msa(uint8_t *src, uint8_t val,
+ int32_t src_stride, int32_t height)
+{
+ int32_t cnt;
+ uint64_t dst0;
+ v16u8 val0;
+
+ val0 = (v16u8) __msa_fill_b(val);
+ dst0 = __msa_copy_u_d((v2i64) val0, 0);
+
+ for (cnt = (height >> 2); cnt--;) {
+ SD4(dst0, dst0, dst0, dst0, src, src_stride);
+ src += (4 * src_stride);
+ }
+}
+
+static void copy_8bit_value_width16_msa(uint8_t *src, uint8_t val,
+ int32_t src_stride, int32_t height)
+{
+ int32_t cnt;
+ v16u8 val0;
+
+ val0 = (v16u8) __msa_fill_b(val);
+
+ for (cnt = (height >> 3); cnt--;) {
+ ST_UB8(val0, val0, val0, val0, val0, val0, val0, val0, src, src_stride);
+ src += (8 * src_stride);
+ }
+}
+
+static void memset_zero_16width_msa(uint8_t *src, int32_t stride,
+ int32_t height)
+{
+ int8_t cnt;
+ v16u8 zero = { 0 };
+
+ for (cnt = (height / 2); cnt--;) {
+ ST_UB(zero, src);
+ src += stride;
+ ST_UB(zero, src);
+ src += stride;
+ }
+}
+
- void ff_fill_block16_msa(uint8_t *src, uint8_t val, int stride, int height)
++void ff_fill_block16_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height)
+{
+ copy_8bit_value_width16_msa(src, val, stride, height);
+}
+
- void ff_fill_block8_msa(uint8_t *src, uint8_t val, int stride, int height)
++void ff_fill_block8_msa(uint8_t *src, uint8_t val, ptrdiff_t stride, int height)
+{
+ copy_8bit_value_width8_msa(src, val, stride, height);
+}
+
+void ff_clear_block_msa(int16_t *block)
+{
+ memset_zero_16width_msa((uint8_t *) block, 16, 8);
+}
+
+void ff_clear_blocks_msa(int16_t *block)
+{
+ memset_zero_16width_msa((uint8_t *) block, 16, 8 * 6);
+}
More information about the ffmpeg-cvslog
mailing list