Mercurial > mplayer.hg
changeset 30363:915be5c7a30c
Make sure that a qstride of 0 (intentional or not) does not completely break
the code (crash if malloc(0) != NULL, otherwise wrong qscales used for B-frames).
author | reimar |
---|---|
date | Sat, 23 Jan 2010 14:57:43 +0000 |
parents | 48c51ebbe421 |
children | bdf8e23db3f6 |
files | libmpcodecs/vf_fspp.c libmpcodecs/vf_spp.c |
diffstat | 2 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpcodecs/vf_fspp.c Sat Jan 23 12:27:13 2010 +0000 +++ b/libmpcodecs/vf_fspp.c Sat Jan 23 14:57:43 2010 +0000 @@ -533,9 +533,15 @@ vf->priv->mpeg2= mpi->qscale_type; if(mpi->pict_type != 3 && mpi->qscale && !vf->priv->qp){ - if(!vf->priv->non_b_qp) - vf->priv->non_b_qp= malloc(mpi->qstride * ((mpi->h + 15) >> 4)); - fast_memcpy(vf->priv->non_b_qp, mpi->qscale, mpi->qstride * ((mpi->h + 15) >> 4)); + int w = mpi->qstride; + int h = (mpi->h + 15) >> 4; + if (!w) { + w = (mpi->w + 15) >> 4; + h = 1; + } + if(!vf->priv->non_b_qp) + vf->priv->non_b_qp= malloc(w*h); + fast_memcpy(vf->priv->non_b_qp, mpi->qscale, w*h); } if(vf->priv->log2_count || !(mpi->flags&MP_IMGFLAG_DIRECT)){ char *qp_tab= vf->priv->non_b_qp;
--- a/libmpcodecs/vf_spp.c Sat Jan 23 12:27:13 2010 +0000 +++ b/libmpcodecs/vf_spp.c Sat Jan 23 14:57:43 2010 +0000 @@ -480,9 +480,15 @@ vf->priv->mpeg2= mpi->qscale_type; if(mpi->pict_type != 3 && mpi->qscale && !vf->priv->qp){ + int w = mpi->qstride; + int h = (mpi->h + 15) >> 4; + if (!w) { + w = (mpi->w + 15) >> 4; + h = 1; + } if(!vf->priv->non_b_qp) - vf->priv->non_b_qp= malloc(mpi->qstride * ((mpi->h + 15) >> 4)); - fast_memcpy(vf->priv->non_b_qp, mpi->qscale, mpi->qstride * ((mpi->h + 15) >> 4)); + vf->priv->non_b_qp= malloc(w*h); + fast_memcpy(vf->priv->non_b_qp, mpi->qscale, w*h); } if(vf->priv->log2_count || !(mpi->flags&MP_IMGFLAG_DIRECT)){ char *qp_tab= vf->priv->non_b_qp;