Commit dde47d92 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

v4l2: GrabVideo() cleanup

parent 7dc94047
...@@ -231,7 +231,7 @@ static block_t *AccessRead( access_t *access ) ...@@ -231,7 +231,7 @@ static block_t *AccessRead( access_t *access )
if( poll( &fd, 1, 500 ) <= 0 ) if( poll( &fd, 1, 500 ) <= 0 )
return NULL; return NULL;
block_t *block = GrabVideo( VLC_OBJECT(access), sys ); block_t *block = GrabVideo (VLC_OBJECT(access), sys->i_fd, sys->bufv);
if( block != NULL ) if( block != NULL )
{ {
block->i_pts = block->i_dts = mdate(); block->i_pts = block->i_dts = mdate();
......
...@@ -537,7 +537,7 @@ static void *StreamThread (void *data) ...@@ -537,7 +537,7 @@ static void *StreamThread (void *data)
} }
int canc = vlc_savecancel (); int canc = vlc_savecancel ();
block_t *block = GrabVideo (VLC_OBJECT(demux), sys); block_t *block = GrabVideo (VLC_OBJECT(demux), fd, sys->bufv);
if (block != NULL) if (block != NULL)
{ {
block->i_pts = block->i_dts = mdate (); block->i_pts = block->i_dts = mdate ();
......
...@@ -111,7 +111,7 @@ int SetupFormat (vlc_object_t *, int, uint32_t, ...@@ -111,7 +111,7 @@ int SetupFormat (vlc_object_t *, int, uint32_t,
#define SetupFormat(o,fd,fcc,fmt,p) \ #define SetupFormat(o,fd,fcc,fmt,p) \
SetupFormat(VLC_OBJECT(o),fd,fcc,fmt,p) SetupFormat(VLC_OBJECT(o),fd,fcc,fmt,p)
struct buffer_t *InitMmap (vlc_object_t *, int, uint32_t *); struct buffer_t *InitMmap (vlc_object_t *, int, uint32_t *);
block_t* GrabVideo(vlc_object_t *, demux_sys_t *); block_t* GrabVideo (vlc_object_t *, int, const struct buffer_t *);
/* demux.c */ /* demux.c */
int DemuxOpen(vlc_object_t *); int DemuxOpen(vlc_object_t *);
......
...@@ -978,7 +978,8 @@ int SetupFormat (vlc_object_t *obj, int fd, uint32_t fourcc, ...@@ -978,7 +978,8 @@ int SetupFormat (vlc_object_t *obj, int fd, uint32_t fourcc,
/***************************************************************************** /*****************************************************************************
* GrabVideo: Grab a video frame * GrabVideo: Grab a video frame
*****************************************************************************/ *****************************************************************************/
block_t* GrabVideo (vlc_object_t *demux, demux_sys_t *sys) block_t *GrabVideo (vlc_object_t *demux, int fd,
const struct buffer_t *restrict bufv)
{ {
struct v4l2_buffer buf = { struct v4l2_buffer buf = {
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
...@@ -986,7 +987,7 @@ block_t* GrabVideo (vlc_object_t *demux, demux_sys_t *sys) ...@@ -986,7 +987,7 @@ block_t* GrabVideo (vlc_object_t *demux, demux_sys_t *sys)
}; };
/* Wait for next frame */ /* Wait for next frame */
if (v4l2_ioctl (sys->i_fd, VIDIOC_DQBUF, &buf) < 0) if (v4l2_ioctl (fd, VIDIOC_DQBUF, &buf) < 0)
{ {
switch (errno) switch (errno)
{ {
...@@ -1001,19 +1002,14 @@ block_t* GrabVideo (vlc_object_t *demux, demux_sys_t *sys) ...@@ -1001,19 +1002,14 @@ block_t* GrabVideo (vlc_object_t *demux, demux_sys_t *sys)
} }
} }
if (buf.index >= sys->bufc) {
msg_Err (demux, "Failed capturing new frame as i>=nbuffers");
return NULL;
}
/* Copy frame */ /* Copy frame */
block_t *block = block_Alloc (buf.bytesused); block_t *block = block_Alloc (buf.bytesused);
if (unlikely(block == NULL)) if (unlikely(block == NULL))
return NULL; return NULL;
memcpy (block->p_buffer, sys->bufv[buf.index].start, buf.bytesused); memcpy (block->p_buffer, bufv[buf.index].start, buf.bytesused);
/* Unlock */ /* Unlock */
if (v4l2_ioctl (sys->i_fd, VIDIOC_QBUF, &buf) < 0) if (v4l2_ioctl (fd, VIDIOC_QBUF, &buf) < 0)
{ {
msg_Err (demux, "queue error: %m"); msg_Err (demux, "queue error: %m");
block_Release (block); block_Release (block);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment