From 5a56c87c10df2a95cf8d2462bf0ff5bb145e297d Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Sun, 16 Sep 2001 21:49:48 +0000 Subject: [PATCH] restore audio settings - use all the frame buffers provided by the driver Originally committed as revision 127 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libav/grab.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libav/grab.c b/libav/grab.c index 00e268d6fd..6203d83849 100644 --- a/libav/grab.c +++ b/libav/grab.c @@ -42,7 +42,7 @@ static struct video_capability video_cap; static UINT8 *video_buf; static struct video_mbuf gb_buffers; static struct video_mmap gb_buf; -static struct video_audio audio; +static struct video_audio audio, audio_saved; static int gb_frame = 0; static int v4l_init(URLContext *h) @@ -73,6 +73,7 @@ static int v4l_init(URLContext *h) /* unmute audio */ ioctl(video_fd, VIDIOCGAUDIO, &audio); + memcpy(&audio_saved, &audio, sizeof(audio)); audio.flags &= ~VIDEO_AUDIO_MUTE; ioctl(video_fd, VIDIOCSAUDIO, &audio); @@ -132,7 +133,7 @@ static int v4l_init(URLContext *h) s->time_frame = gettime(); /* start to grab the first frame */ - gb_buf.frame = 1 - gb_frame; + gb_buf.frame = (gb_frame + 1) % gb_buffers.frames; gb_buf.height = height; gb_buf.width = width; gb_buf.format = VIDEO_PALETTE_YUV420P; @@ -196,7 +197,7 @@ static int v4l_mm_read_picture(URLContext *h, UINT8 *buf) perror("VIDIOCMCAPTURE"); return -EIO; } - gb_frame = 1 - gb_frame; + gb_frame = (gb_frame + 1) % gb_buffers.frames; while (ioctl(s->fd, VIDIOCSYNC, &gb_frame) < 0 && (errno == EAGAIN || errno == EINTR)); @@ -301,6 +302,9 @@ static int video_close(URLContext *h) { VideoData *s = h->priv_data; + /* restore audio settings */ + ioctl(s->fd, VIDIOCSAUDIO, &audio_saved); + close(s->fd); free(s); return 0;