changeset 35057:08f284d173f6

Support -dr for -vo corevideo. It is recommended to be careful when using this together with shared buffer since it might result in a significant number of artefacts, depending on how the application reads the shared buffer. Patch by Xidorn Quan [quanxunzhen gmail com]
author reimar
date Thu, 06 Sep 2012 17:52:11 +0000
parents b371a630600c
children 7f7dedf76624
files libvo/vo_corevideo.m
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_corevideo.m	Wed Sep 05 17:02:41 2012 +0000
+++ b/libvo/vo_corevideo.m	Thu Sep 06 17:52:11 2012 +0000
@@ -302,6 +302,7 @@
 
 static uint32_t draw_image(mp_image_t *mpi)
 {
+	if (!(mpi->flags & MP_IMGFLAG_DIRECT))
 	memcpy_pic(image_data, mpi->planes[0], image_width*image_bytes, image_height, image_stride, mpi->stride[0]);
 
 	return 0;
@@ -337,6 +338,20 @@
     return 0;
 }
 
+static int get_image(mp_image_t *mpi)
+{
+    if (!(mpi->flags & (MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_ACCEPT_WIDTH)) ||
+            (mpi->type != MP_IMGTYPE_TEMP && mpi->type != MP_IMGTYPE_STATIC))
+        return VO_FALSE;
+
+	// mpi should not be planar format here
+	mpi->planes[0] = image_data;
+	mpi->stride[0] = image_stride;
+	mpi->flags |=  MP_IMGFLAG_DIRECT;
+	mpi->flags &= ~MP_IMGFLAG_DRAW_CALLBACK;
+	return VO_TRUE;
+}
+
 static void uninit(void)
 {
     SetSystemUIMode( kUIModeNormal, 0);
@@ -436,6 +451,7 @@
 		case VOCTRL_RESUME:
 			return VO_TRUE;
 		case VOCTRL_QUERY_FORMAT: return query_format(*(uint32_t*)data);
+		case VOCTRL_GET_IMAGE: return get_image(data);
 		case VOCTRL_ONTOP: vo_ontop = !vo_ontop; if(!shared_buffer){ [mpGLView ontop]; } else { [mplayerosxProto ontop]; } return VO_TRUE;
 		case VOCTRL_ROOTWIN: vo_rootwin = !vo_rootwin; [mpGLView rootwin]; return VO_TRUE;
 		case VOCTRL_FULLSCREEN: vo_fs = !vo_fs; if(!shared_buffer){ [mpGLView fullscreen: NO]; } else { [mplayerosxProto toggleFullscreen]; } return VO_TRUE;