Re: [FFmpeg-devel] [PATCH 1/4] libavutil: Add saturating subtraction functions

2017-12-03 Thread Rostislav Pehlivanov
On 2 December 2017 at 17:36, Andrew D'Addesio  wrote:

> Add av_sat_sub32 and av_sat_dsub32 as the subtraction analogues to
> av_sat_add32/av_sat_dadd32.
>
> Also clarify the formulas for dadd32/dsub32.
>
> Signed-off-by: Andrew D'Addesio 
> ---
>  libavutil/arm/intmath.h | 16 
>  libavutil/common.h  | 32 +++-
>  2 files changed, 47 insertions(+), 1 deletion(-)
>
> diff --git a/libavutil/arm/intmath.h b/libavutil/arm/intmath.h
> index 65e42c5..5311a7d 100644
> --- a/libavutil/arm/intmath.h
> +++ b/libavutil/arm/intmath.h
> @@ -94,6 +94,22 @@ static av_always_inline int av_sat_dadd32_arm(int a,
> int b)
>  return r;
>  }
>
> +#define av_sat_sub32 av_sat_sub32_arm
> +static av_always_inline int av_sat_sub32_arm(int a, int b)
> +{
> +int r;
> +__asm__ ("qsub %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
> +return r;
> +}
> +
> +#define av_sat_dsub32 av_sat_dsub32_arm
> +static av_always_inline int av_sat_dsub32_arm(int a, int b)
> +{
> +int r;
> +__asm__ ("qdsub %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
> +return r;
> +}
> +
>  #endif /* HAVE_ARMV6_INLINE */
>
>  #if HAVE_ASM_MOD_Q
> diff --git a/libavutil/common.h b/libavutil/common.h
> index 8142b31..5e03828 100644
> --- a/libavutil/common.h
> +++ b/libavutil/common.h
> @@ -260,13 +260,37 @@ static av_always_inline int av_sat_add32_c(int a,
> int b)
>   *
>   * @param  a first value
>   * @param  b value doubled and added to a
> - * @return sum with signed saturation
> + * @return sum sat(a + sat(2*b)) with signed saturation
>   */
>  static av_always_inline int av_sat_dadd32_c(int a, int b)
>  {
>  return av_sat_add32(a, av_sat_add32(b, b));
>  }
>
> +/**
> + * Subtract two signed 32-bit values with saturation.
> + *
> + * @param  a one value
> + * @param  b another value
> + * @return difference with signed saturation
> + */
> +static av_always_inline int av_sat_sub32_c(int a, int b)
> +{
> +return av_clipl_int32((int64_t)a - b);
> +}
> +
> +/**
> + * Subtract a doubled value from another value with saturation at both
> stages.
> + *
> + * @param  a first value
> + * @param  b value doubled and subtracted from a
> + * @return difference sat(a - sat(2*b)) with signed saturation
> + */
> +static av_always_inline int av_sat_dsub32_c(int a, int b)
> +{
> +return av_sat_sub32(a, av_sat_add32(b, b));
> +}
> +
>  /**
>   * Clip a float value into the amin-amax range.
>   * @param a value to clip
> @@ -513,6 +537,12 @@ static av_always_inline av_const int
> av_parity_c(uint32_t v)
>  #ifndef av_sat_dadd32
>  #   define av_sat_dadd32av_sat_dadd32_c
>  #endif
> +#ifndef av_sat_sub32
> +#   define av_sat_sub32 av_sat_sub32_c
> +#endif
> +#ifndef av_sat_dsub32
> +#   define av_sat_dsub32av_sat_dsub32_c
> +#endif
>  #ifndef av_clipf
>  #   define av_clipf av_clipf_c
>  #endif
> --
> 2.15.1.windows.2
>
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

Pushed with a minor bump, these will be useful for some entropy coding
systems which rely on saturated adds.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] libavutil: Add saturating subtraction functions

2017-12-03 Thread Michael Niedermayer
On Sat, Dec 02, 2017 at 11:46:56AM -0600, Andrew D'Addesio wrote:
> Add av_sat_sub32 and av_sat_dsub32 as the subtraction analogues to
> av_sat_add32/av_sat_dadd32.
> 
> Also clarify the formulas for dadd32/dsub32.
> 
> Signed-off-by: Andrew D'Addesio 
> ---
>  libavutil/arm/intmath.h | 16 
>  libavutil/common.h  | 32 +++-
>  2 files changed, 47 insertions(+), 1 deletion(-)

this should bump something in version.h

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The real ebay dictionary, page 2
"100% positive feedback" - "All either got their money back or didnt complain"
"Best seller ever, very honest" - "Seller refunded buyer after failed scam"


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 1/4] libavutil: Add saturating subtraction functions

2017-12-02 Thread Andrew D'Addesio
Add av_sat_sub32 and av_sat_dsub32 as the subtraction analogues to
av_sat_add32/av_sat_dadd32.

Also clarify the formulas for dadd32/dsub32.

Signed-off-by: Andrew D'Addesio 
---
 libavutil/arm/intmath.h | 16 
 libavutil/common.h  | 32 +++-
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/libavutil/arm/intmath.h b/libavutil/arm/intmath.h
index 65e42c5..5311a7d 100644
--- a/libavutil/arm/intmath.h
+++ b/libavutil/arm/intmath.h
@@ -94,6 +94,22 @@ static av_always_inline int av_sat_dadd32_arm(int a, int b)
 return r;
 }
 
+#define av_sat_sub32 av_sat_sub32_arm
+static av_always_inline int av_sat_sub32_arm(int a, int b)
+{
+int r;
+__asm__ ("qsub %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
+return r;
+}
+
+#define av_sat_dsub32 av_sat_dsub32_arm
+static av_always_inline int av_sat_dsub32_arm(int a, int b)
+{
+int r;
+__asm__ ("qdsub %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
+return r;
+}
+
 #endif /* HAVE_ARMV6_INLINE */
 
 #if HAVE_ASM_MOD_Q
diff --git a/libavutil/common.h b/libavutil/common.h
index 8142b31..5e03828 100644
--- a/libavutil/common.h
+++ b/libavutil/common.h
@@ -260,13 +260,37 @@ static av_always_inline int av_sat_add32_c(int a, int b)
  *
  * @param  a first value
  * @param  b value doubled and added to a
- * @return sum with signed saturation
+ * @return sum sat(a + sat(2*b)) with signed saturation
  */
 static av_always_inline int av_sat_dadd32_c(int a, int b)
 {
 return av_sat_add32(a, av_sat_add32(b, b));
 }
 
+/**
+ * Subtract two signed 32-bit values with saturation.
+ *
+ * @param  a one value
+ * @param  b another value
+ * @return difference with signed saturation
+ */
+static av_always_inline int av_sat_sub32_c(int a, int b)
+{
+return av_clipl_int32((int64_t)a - b);
+}
+
+/**
+ * Subtract a doubled value from another value with saturation at both stages.
+ *
+ * @param  a first value
+ * @param  b value doubled and subtracted from a
+ * @return difference sat(a - sat(2*b)) with signed saturation
+ */
+static av_always_inline int av_sat_dsub32_c(int a, int b)
+{
+return av_sat_sub32(a, av_sat_add32(b, b));
+}
+
 /**
  * Clip a float value into the amin-amax range.
  * @param a value to clip
@@ -513,6 +537,12 @@ static av_always_inline av_const int av_parity_c(uint32_t 
v)
 #ifndef av_sat_dadd32
 #   define av_sat_dadd32av_sat_dadd32_c
 #endif
+#ifndef av_sat_sub32
+#   define av_sat_sub32 av_sat_sub32_c
+#endif
+#ifndef av_sat_dsub32
+#   define av_sat_dsub32av_sat_dsub32_c
+#endif
 #ifndef av_clipf
 #   define av_clipf av_clipf_c
 #endif
-- 
2.15.1.windows.2

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 1/4] libavutil: Add saturating subtraction functions

2017-12-02 Thread Andrew D'Addesio
Add av_sat_sub32 and av_sat_dsub32 as the subtraction analogues to
av_sat_add32/av_sat_dadd32.

Also clarify the formulas for dadd32/dsub32.

Signed-off-by: Andrew D'Addesio 
---
 libavutil/arm/intmath.h | 16 
 libavutil/common.h  | 32 +++-
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/libavutil/arm/intmath.h b/libavutil/arm/intmath.h
index 65e42c5..5311a7d 100644
--- a/libavutil/arm/intmath.h
+++ b/libavutil/arm/intmath.h
@@ -94,6 +94,22 @@ static av_always_inline int av_sat_dadd32_arm(int a, int b)
 return r;
 }
 
+#define av_sat_sub32 av_sat_sub32_arm
+static av_always_inline int av_sat_sub32_arm(int a, int b)
+{
+int r;
+__asm__ ("qsub %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
+return r;
+}
+
+#define av_sat_dsub32 av_sat_dsub32_arm
+static av_always_inline int av_sat_dsub32_arm(int a, int b)
+{
+int r;
+__asm__ ("qdsub %0, %1, %2" : "=r"(r) : "r"(a), "r"(b));
+return r;
+}
+
 #endif /* HAVE_ARMV6_INLINE */
 
 #if HAVE_ASM_MOD_Q
diff --git a/libavutil/common.h b/libavutil/common.h
index 8142b31..5e03828 100644
--- a/libavutil/common.h
+++ b/libavutil/common.h
@@ -260,13 +260,37 @@ static av_always_inline int av_sat_add32_c(int a, int b)
  *
  * @param  a first value
  * @param  b value doubled and added to a
- * @return sum with signed saturation
+ * @return sum sat(a + sat(2*b)) with signed saturation
  */
 static av_always_inline int av_sat_dadd32_c(int a, int b)
 {
 return av_sat_add32(a, av_sat_add32(b, b));
 }
 
+/**
+ * Subtract two signed 32-bit values with saturation.
+ *
+ * @param  a one value
+ * @param  b another value
+ * @return difference with signed saturation
+ */
+static av_always_inline int av_sat_sub32_c(int a, int b)
+{
+return av_clipl_int32((int64_t)a - b);
+}
+
+/**
+ * Subtract a doubled value from another value with saturation at both stages.
+ *
+ * @param  a first value
+ * @param  b value doubled and subtracted from a
+ * @return difference sat(a - sat(2*b)) with signed saturation
+ */
+static av_always_inline int av_sat_dsub32_c(int a, int b)
+{
+return av_sat_sub32(a, av_sat_add32(b, b));
+}
+
 /**
  * Clip a float value into the amin-amax range.
  * @param a value to clip
@@ -513,6 +537,12 @@ static av_always_inline av_const int av_parity_c(uint32_t 
v)
 #ifndef av_sat_dadd32
 #   define av_sat_dadd32av_sat_dadd32_c
 #endif
+#ifndef av_sat_sub32
+#   define av_sat_sub32 av_sat_sub32_c
+#endif
+#ifndef av_sat_dsub32
+#   define av_sat_dsub32av_sat_dsub32_c
+#endif
 #ifndef av_clipf
 #   define av_clipf av_clipf_c
 #endif
-- 
2.15.1.windows.2

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel