aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-11-18 03:16:38 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-11-18 03:16:38 +0100
commitcdbebae44440bea97f300f256d722c1495753bc2 (patch)
treeb9fc7a0e480d3c10bd950cd8495b48982f78de78
parent8426edef4cf521104bb9288ac46a48dc4bdaee53 (diff)
parent85dc006b1a829726dd5e3a9b0fcc6a1dbfe6dffa (diff)
downloadffmpeg-cdbebae44440bea97f300f256d722c1495753bc2.tar.gz
Merge commit '85dc006b1a829726dd5e3a9b0fcc6a1dbfe6dffa'
* commit '85dc006b1a829726dd5e3a9b0fcc6a1dbfe6dffa': lavc: fix bitshifts amount bigger than the type Conflicts: libavcodec/internal.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/cavs.c5
-rw-r--r--libavcodec/cavsdec.c4
-rw-r--r--libavcodec/dnxhdenc.c2
-rw-r--r--libavcodec/internal.h2
-rw-r--r--libavcodec/vp8.c4
5 files changed, 10 insertions, 7 deletions
diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c
index 45d815a840..c0880e005f 100644
--- a/libavcodec/cavs.c
+++ b/libavcodec/cavs.c
@@ -30,6 +30,7 @@
#include "golomb.h"
#include "h264chroma.h"
#include "idctdsp.h"
+#include "internal.h"
#include "mathops.h"
#include "qpeldsp.h"
#include "cavs.h"
@@ -539,8 +540,8 @@ static inline void scale_mv(AVSContext *h, int *d_x, int *d_y,
{
int den = h->scale_den[FFMAX(src->ref, 0)];
- *d_x = (src->x * distp * den + 256 + (src->x >> 31)) >> 9;
- *d_y = (src->y * distp * den + 256 + (src->y >> 31)) >> 9;
+ *d_x = (src->x * distp * den + 256 + FF_SIGNBIT(src->x)) >> 9;
+ *d_y = (src->y * distp * den + 256 + FF_SIGNBIT(src->y)) >> 9;
}
static inline void mv_pred_median(AVSContext *h,
diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c
index 42306cc8a4..b5304eab9e 100644
--- a/libavcodec/cavsdec.c
+++ b/libavcodec/cavsdec.c
@@ -467,7 +467,7 @@ static inline void mv_pred_direct(AVSContext *h, cavs_vector *pmv_fw,
{
cavs_vector *pmv_bw = pmv_fw + MV_BWD_OFFS;
int den = h->direct_den[col_mv->ref];
- int m = col_mv->x >> 31;
+ int m = FF_SIGNBIT(col_mv->x);
pmv_fw->dist = h->dist[1];
pmv_bw->dist = h->dist[0];
@@ -476,7 +476,7 @@ static inline void mv_pred_direct(AVSContext *h, cavs_vector *pmv_fw,
/* scale the co-located motion vector according to its temporal span */
pmv_fw->x = (((den + (den * col_mv->x * pmv_fw->dist ^ m) - m - 1) >> 14) ^ m) - m;
pmv_bw->x = m - (((den + (den * col_mv->x * pmv_bw->dist ^ m) - m - 1) >> 14) ^ m);
- m = col_mv->y >> 31;
+ m = FF_SIGNBIT(col_mv->y);
pmv_fw->y = (((den + (den * col_mv->y * pmv_fw->dist ^ m) - m - 1) >> 14) ^ m) - m;
pmv_bw->y = m - (((den + (den * col_mv->y * pmv_bw->dist ^ m) - m - 1) >> 14) ^ m);
}
diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
index f5a803bb71..d7105a1479 100644
--- a/libavcodec/dnxhdenc.c
+++ b/libavcodec/dnxhdenc.c
@@ -117,7 +117,7 @@ static int dnxhd_10bit_dct_quantize(MpegEncContext *ctx, int16_t *block,
for (i = 1; i < 64; ++i) {
int j = scantable[i];
- int sign = block[j] >> 31;
+ int sign = FF_SIGNBIT(block[j]);
int level = (block[j] ^ sign) - sign;
level = level * qmat[j] >> DNX10BIT_QMAT_SHIFT;
block[j] = (level ^ sign) - sign;
diff --git a/libavcodec/internal.h b/libavcodec/internal.h
index dcb2113f6f..b8ceb2e9f1 100644
--- a/libavcodec/internal.h
+++ b/libavcodec/internal.h
@@ -35,6 +35,8 @@
#define FF_SANE_NB_CHANNELS 63U
+#define FF_SIGNBIT(x) (x >> CHAR_BIT * sizeof(x) - 1)
+
#if HAVE_AVX
# define STRIDE_ALIGN 32
#elif HAVE_SIMD_ALIGN_16
diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
index 147c4f90b5..6ad26f3a7b 100644
--- a/libavcodec/vp8.c
+++ b/libavcodec/vp8.c
@@ -1916,8 +1916,8 @@ void inter_predict(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3],
mb->bmv[2 * y * 4 + 2 * x + 1].y +
mb->bmv[(2 * y + 1) * 4 + 2 * x ].y +
mb->bmv[(2 * y + 1) * 4 + 2 * x + 1].y;
- uvmv.x = (uvmv.x + 2 + (uvmv.x >> (INT_BIT - 1))) >> 2;
- uvmv.y = (uvmv.y + 2 + (uvmv.y >> (INT_BIT - 1))) >> 2;
+ uvmv.x = (uvmv.x + 2 + FF_SIGNBIT(uvmv.x)) >> 2;
+ uvmv.y = (uvmv.y + 2 + FF_SIGNBIT(uvmv.y)) >> 2;
if (s->profile == 3) {
uvmv.x &= ~7;
uvmv.y &= ~7;