[MPlayer-cvslog] CVS: main/libmpcodecs vd_theora.c,1.5,1.6

Jindrich Makovicka CVS syncmail at mplayerhq.hu
Tue Feb 22 20:18:47 CET 2005


CVS change done by Jindrich Makovicka CVS

Update of /cvsroot/mplayer/main/libmpcodecs
In directory mail:/var2/tmp/cvs-serv10725/libmpcodecs

Modified Files:
	vd_theora.c 
Log Message:
Theora fixes:

- do not use negative stride (fixes -vf pp crash)
- pass true image dimensions to VO, not the aligned ones (fixes incorrect
aspect ratio bug & black bar under video)



Index: vd_theora.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/vd_theora.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- vd_theora.c	4 Feb 2005 18:31:04 -0000	1.5
+++ vd_theora.c	22 Feb 2005 19:18:44 -0000	1.6
@@ -27,6 +27,13 @@
 
 // to set/get/query special features/parameters
 static int control(sh_video_t *sh,int cmd,void* arg,...){
+    switch(cmd) {
+    case VDCTRL_QUERY_FORMAT:
+        if ((*((int*)arg)) == IMGFMT_YV12)
+	    return CONTROL_TRUE;
+	return CONTROL_FALSE;
+    }
+    
     return CONTROL_UNKNOWN;
 }
 
@@ -104,13 +111,13 @@
 
     if(sh->aspect==0.0 && context->inf.aspect_denominator!=0)
     {
-       sh->aspect = (float)(context->inf.aspect_numerator * context->inf.width)/
-          (context->inf.aspect_denominator * context->inf.height);
+       sh->aspect = (float)(context->inf.aspect_numerator * context->inf.frame_width)/
+          (context->inf.aspect_denominator * context->inf.frame_height);
     }
     
     mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: Theora video init ok!\n");
 
-    return mpcodecs_config_vo (sh,sh->disp_w,sh->disp_h,IMGFMT_YV12);
+    return mpcodecs_config_vo (sh,context->inf.frame_width,context->inf.frame_height,IMGFMT_YV12);
 }
 
 /* 
@@ -160,16 +167,15 @@
       return 0;
    }
 
-    mpi = mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, 0, sh->disp_w, sh->disp_h);
+    mpi = mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, 0, yuv.y_stride, yuv.y_height);
     if(!mpi) return NULL;
-    
-    mpi->planes[0]=yuv.y;
-    mpi->stride[0]=yuv.y_stride;
-    mpi->planes[1]=yuv.u;
-    mpi->stride[1]=yuv.uv_stride;
-    mpi->planes[2]=yuv.v;
-    mpi->stride[2]=yuv.uv_stride;
-
+    mpi->planes[0]=yuv.y+yuv.y_stride*(context->inf.frame_height-1);
+    mpi->stride[0]=-yuv.y_stride;
+    mpi->planes[1]=yuv.u+yuv.uv_stride*(context->inf.frame_height/2-1);
+    mpi->stride[1]=-yuv.uv_stride;
+    mpi->planes[2]=yuv.v+yuv.uv_stride*(context->inf.frame_height/2-1);
+    mpi->stride[2]=-yuv.uv_stride;
+   
     return mpi;
 }
 




More information about the MPlayer-cvslog mailing list