diff libmpcodecs/vf_spp.c @ 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 0f1b5b68af32
children 41fb4acf3df6
line wrap: on
line diff
--- 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;