--- margi2/cvdv.c 2001/03/08 01:41:26 1.7 +++ margi2/cvdv.c 2001/03/12 17:06:26 1.8 @@ -608,11 +608,12 @@ static unsigned int PSpoll(struct file * struct cvdv_cards *card = minorlist[MINOR(file->f_dentry->d_inode->i_rdev) % MAXDEV]; // minor number modulo 16 if (card != NULL) { - - return POLLOUT | POLLWRNORM; // always writeable, HAS TO BE CHANGED!!!! - + if (ring_read_rest(&(card->rbuf)) && + card->videostate.playState==VIDEO_PLAYING) + return POLLOUT | POLLWRNORM; + else return 0; } else - return POLLERR; // device with this minor number not found + return POLLERR; } @@ -1028,7 +1029,7 @@ static int margi_mmap(struct video_devic static struct video_device margi_template = { name: "Margi MPEG2 Decoder", - type: (VID_TYPE_MPEG_DECODER), + type: (VID_TYPE_MPEG_DECODER|VID_TYPE_OVERLAY), open: margi_open, close: margi_close, write: margi_write, @@ -1184,7 +1185,6 @@ dvbdev_ioctl(struct dvb_device *dvbdev, switch (cmd) { case VIDEO_STOP: - card->videostate.playState=VIDEO_STOPPED; DecoderPause(card); return 0; @@ -1194,11 +1194,9 @@ dvbdev_ioctl(struct dvb_device *dvbdev, VIDEO_SOURCE_MEMORY) { DecoderUnPause(card); } - card->videostate.playState=VIDEO_PLAYING; break; case VIDEO_FREEZE: - card->videostate.playState=VIDEO_FREEZED; DecoderPause(card); break; @@ -1275,10 +1273,14 @@ dvbdev_ioctl(struct dvb_device *dvbdev, case VIDEO_GET_CAPABILITIES: { - int cap=VIDEO_CAP_MPEG1| - VIDEO_CAP_MPEG2| - VIDEO_CAP_SYS| - VIDEO_CAP_PROG; + int cap=VIDEO_CAP_MPEG1| + VIDEO_CAP_MPEG2| + VIDEO_CAP_SYS| + VIDEO_CAP_PROG| + VIDEO_CAP_SPU| + VIDEO_CAP_NAVI| + VIDEO_CAP_CSS; + if (copy_to_user(parg, &cap, sizeof(cap))) @@ -1369,7 +1371,8 @@ dvbdev_ioctl(struct dvb_device *dvbdev, { int cap=AUDIO_CAP_LPCM| AUDIO_CAP_MP1| - AUDIO_CAP_MP2; + AUDIO_CAP_MP2| + AUDIO_CAP_AC3; if (copy_to_user(parg, &cap, sizeof(cap)))