summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabrice Bellard <fabrice@bellard.org>2001-09-16 21:49:48 +0000
committerFabrice Bellard <fabrice@bellard.org>2001-09-16 21:49:48 +0000
commit5a56c87c10df2a95cf8d2462bf0ff5bb145e297d (patch)
treed010f5d6c2588a34bbf85cba4b6b02e128d8c9c3
parent813cae4bc48fdd035f96cf676b600096f66fcf96 (diff)
restore audio settings - use all the frame buffers provided by the driver
Originally committed as revision 127 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libav/grab.c10
1 files 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;