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;