changeset 9976:5843993013a8

fixes to the zr driver (uninit->reinit) by Stephan Bain <sjbain@akamail.com>
author rik
date Thu, 24 Apr 2003 17:17:57 +0000
parents 3914afe5c0a7
children 16cacec38fc7
files libvo/jpeg_enc.c libvo/vo_zr.c
diffstat 2 files changed, 15 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/jpeg_enc.c	Thu Apr 24 17:04:20 2003 +0000
+++ b/libvo/jpeg_enc.c	Thu Apr 24 17:17:57 2003 +0000
@@ -297,6 +297,7 @@
 	if (j == NULL) return NULL;
 
 	j->s = av_malloc(sizeof(MpegEncContext));
+	memset(j->s,0x00,sizeof(MpegEncContext));
 	if (j->s == NULL) {
 		av_free(j);
 		return NULL;
@@ -314,6 +315,7 @@
 	j->s->height = h;
 	j->s->qscale = q;
 
+	j->s->mjpeg_data_only_frames = 0;
 	j->s->out_format = FMT_MJPEG;
 	j->s->intra_only = 1;
 	j->s->encoding = 1;
--- a/libvo/vo_zr.c	Thu Apr 24 17:04:20 2003 +0000
+++ b/libvo/vo_zr.c	Thu Apr 24 17:17:57 2003 +0000
@@ -75,6 +75,7 @@
 	int off_y, off_c, stride;    /* for use by 'draw slice/frame' */
 
 	unsigned char *buf;   /* the jpeg images will be placed here */
+	unsigned int buf_allocated; /* size of the block actually allocated */
 	jpeg_enc_t *j;
 	unsigned char *y_data, *u_data, *v_data; /* used by the jpeg encoder */
 	int y_stride, u_stride, v_stride; /* these point somewhere in image */
@@ -92,13 +93,13 @@
 
 static zr_info_t zr_info[ZR_MAX_DEVICES] = {
 	{1, 1, 1, -1, -1, 2, {0, 0, 0, 0, 0}, NULL, 0, VIDEO_MODE_AUTO, 128, NULL, 0, 0, 0, 0, 0, 
-	0, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	0, NULL, 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 	{1, 1, 1, -1, -1, 2, {0, 0, 0, 0, 0}, NULL, 0, VIDEO_MODE_AUTO, 128, NULL, 0, 0, 0, 0, 0, 
-	0, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	0, NULL, 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 	{1, 1, 1, -1, -1, 2, {0, 0, 0, 0, 0}, NULL, 0, VIDEO_MODE_AUTO, 128, NULL, 0, 0, 0, 0, 0, 
-	0, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	0, NULL, 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
 	{1, 1, 1, -1, -1, 2, {0, 0, 0, 0, 0}, NULL, 0, VIDEO_MODE_AUTO, 128, NULL, 0, 0, 0, 0, 0, 
-	0, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+	0, NULL, 0, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
 
 
 
@@ -232,6 +233,8 @@
 		return 1;
 	}
 
+	/* the buffer count allocated may be different to the request */
+	zr->buf_allocated = zrq.count * zrq.size;
 	zr->buf = (unsigned char*)mmap(0, zrq.count*zrq.size, 
 			PROT_READ|PROT_WRITE, MAP_SHARED, zr->vdes, 0);
 
@@ -239,6 +242,10 @@
 		mp_msg(MSGT_VO, MSGL_ERR, "zr: error requesting %d buffers of size %d\n", zrq.count, zrq.size);
 		return 1;
 	}
+
+	zr->queue = 0;
+	zr->synco = 0;
+
 	return 0;
 }
 
@@ -256,6 +263,8 @@
 	zr->frame = -1;
 	if (ioctl(zr->vdes, MJPIOC_QBUF_PLAY, &zr->frame) < 0) 
 		mp_msg(MSGT_VO, MSGL_ERR, "zr: error stopping playback of last frame\n");
+	if (munmap(zr->buf,zr->buf_allocated))
+	   mp_msg(MSGT_VO, MSGL_ERR, "zr: error unmapping buffer\n");
 	close(zr->vdes);
 }