summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-03-29 14:46:59 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2009-03-29 14:46:59 +0000
commit49e2373fe76d678363fbf0089c028ef7801480ea (patch)
treee9acbe119dbf1028ac70814734c912bf1cd6ca3f
parent8fec98cef22002ae7fb6618426043fc6c3906aca (diff)
downloadmpv-49e2373fe76d678363fbf0089c028ef7801480ea.tar.bz2
mpv-49e2373fe76d678363fbf0089c028ef7801480ea.tar.xz
Consistently use MP_MAX_PLANES as size for plane pointer/stride arrays in libmpcodecs.
This might avoid some issues since sws_scale in some cases assumes these have at least 4 valid entries. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29103 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--libmpcodecs/vf_sab.c8
-rw-r--r--libmpcodecs/vf_scale.c12
-rw-r--r--libmpcodecs/vf_screenshot.c12
-rw-r--r--libmpcodecs/vf_smartblur.c8
4 files changed, 18 insertions, 22 deletions
diff --git a/libmpcodecs/vf_sab.c b/libmpcodecs/vf_sab.c
index c78f8ea9ec..b6049b2012 100644
--- a/libmpcodecs/vf_sab.c
+++ b/libmpcodecs/vf_sab.c
@@ -174,10 +174,10 @@ static inline void blur(uint8_t *dst, uint8_t *src, int w, int h, int dstStride,
int x, y;
FilterParam f= *fp;
const int radius= f.distWidth/2;
- uint8_t *srcArray[3]= {src, NULL, NULL};
- uint8_t *dstArray[3]= {f.preFilterBuf, NULL, NULL};
- int srcStrideArray[3]= {srcStride, 0, 0};
- int dstStrideArray[3]= {f.preFilterStride, 0, 0};
+ uint8_t *srcArray[MP_MAX_PLANES]= {src};
+ uint8_t *dstArray[MP_MAX_PLANES]= {f.preFilterBuf};
+ int srcStrideArray[MP_MAX_PLANES]= {srcStride};
+ int dstStrideArray[MP_MAX_PLANES]= {f.preFilterStride};
// f.preFilterContext->swScale(f.preFilterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);
sws_scale(f.preFilterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);
diff --git a/libmpcodecs/vf_scale.c b/libmpcodecs/vf_scale.c
index b6c683c430..9b94013de4 100644
--- a/libmpcodecs/vf_scale.c
+++ b/libmpcodecs/vf_scale.c
@@ -319,9 +319,9 @@ static void start_slice(struct vf_instance_s* vf, mp_image_t *mpi){
vf->priv->w, vf->priv->h);
}
-static void scale(struct SwsContext *sws1, struct SwsContext *sws2, uint8_t *src[3], int src_stride[3], int y, int h,
- uint8_t *dst[3], int dst_stride[3], int interlaced){
- uint8_t *src2[3]={src[0], src[1], src[2]};
+static void scale(struct SwsContext *sws1, struct SwsContext *sws2, uint8_t *src[MP_MAX_PLANES], int src_stride[MP_MAX_PLANES],
+ int y, int h, uint8_t *dst[MP_MAX_PLANES], int dst_stride[MP_MAX_PLANES], int interlaced){
+ uint8_t *src2[MP_MAX_PLANES]={src[0], src[1], src[2]};
#ifdef WORDS_BIGENDIAN
uint32_t pal2[256];
if (src[1] && !src[2]){
@@ -334,9 +334,9 @@ static void scale(struct SwsContext *sws1, struct SwsContext *sws2, uint8_t *src
if(interlaced){
int i;
- uint8_t *dst2[3]={dst[0], dst[1], dst[2]};
- int src_stride2[3]={2*src_stride[0], 2*src_stride[1], 2*src_stride[2]};
- int dst_stride2[3]={2*dst_stride[0], 2*dst_stride[1], 2*dst_stride[2]};
+ uint8_t *dst2[MP_MAX_PLANES]={dst[0], dst[1], dst[2]};
+ int src_stride2[MP_MAX_PLANES]={2*src_stride[0], 2*src_stride[1], 2*src_stride[2]};
+ int dst_stride2[MP_MAX_PLANES]={2*dst_stride[0], 2*dst_stride[1], 2*dst_stride[2]};
sws_scale_ordered(sws1, src2, src_stride2, y>>1, h>>1, dst2, dst_stride2);
for(i=0; i<3; i++){
diff --git a/libmpcodecs/vf_screenshot.c b/libmpcodecs/vf_screenshot.c
index b8c6c0a1b5..93fef3e186 100644
--- a/libmpcodecs/vf_screenshot.c
+++ b/libmpcodecs/vf_screenshot.c
@@ -108,16 +108,14 @@ static void gen_fname(struct vf_priv_s* priv)
static void scale_image(struct vf_priv_s* priv, mp_image_t *mpi)
{
- uint8_t *dst[3];
- int dst_stride[3];
+ uint8_t *dst[MP_MAX_PLANES] = {NULL};
+ int dst_stride[MP_MAX_PLANES] = {0};
dst_stride[0] = priv->stride;
- dst_stride[1] = dst_stride[2] = 0;
if (!priv->buffer)
priv->buffer = memalign(16, dst_stride[0]*priv->dh);
dst[0] = priv->buffer;
- dst[1] = dst[2] = 0;
sws_scale_ordered(priv->ctx, mpi->planes, mpi->stride, 0, priv->dh, dst, dst_stride);
}
@@ -137,12 +135,10 @@ static void draw_slice(struct vf_instance_s* vf, unsigned char** src,
int* stride, int w,int h, int x, int y)
{
if (vf->priv->store_slices) {
- uint8_t *dst[3];
- int dst_stride[3];
+ uint8_t *dst[MP_MAX_PLANES] = {NULL};
+ int dst_stride[MP_MAX_PLANES] = {0};
dst_stride[0] = vf->priv->stride;
- dst_stride[1] = dst_stride[2] = 0;
dst[0] = vf->priv->buffer;
- dst[1] = dst[2] = 0;
sws_scale_ordered(vf->priv->ctx, src, stride, y, h, dst, dst_stride);
}
vf_next_draw_slice(vf,src,stride,w,h,x,y);
diff --git a/libmpcodecs/vf_smartblur.c b/libmpcodecs/vf_smartblur.c
index 7003f75c95..b18f54436a 100644
--- a/libmpcodecs/vf_smartblur.c
+++ b/libmpcodecs/vf_smartblur.c
@@ -132,10 +132,10 @@ static void uninit(struct vf_instance_s* vf){
static inline void blur(uint8_t *dst, uint8_t *src, int w, int h, int dstStride, int srcStride, FilterParam *fp){
int x, y;
FilterParam f= *fp;
- uint8_t *srcArray[3]= {src, NULL, NULL};
- uint8_t *dstArray[3]= {dst, NULL, NULL};
- int srcStrideArray[3]= {srcStride, 0, 0};
- int dstStrideArray[3]= {dstStride, 0, 0};
+ uint8_t *srcArray[MP_MAX_PLANES]= {src};
+ uint8_t *dstArray[MP_MAX_PLANES]= {dst};
+ int srcStrideArray[MP_MAX_PLANES]= {srcStride};
+ int dstStrideArray[MP_MAX_PLANES]= {dstStride};
sws_scale(f.filterContext, srcArray, srcStrideArray, 0, h, dstArray, dstStrideArray);