Using the relevant GIOChannel function to read video frames
This commit is contained in:
parent
cf2f777f0b
commit
edad8ade60
23
src/camera.c
23
src/camera.c
|
@ -597,22 +597,27 @@ static gboolean _camera_on_can_read(GIOChannel * channel,
|
||||||
GIOCondition condition, gpointer data)
|
GIOCondition condition, gpointer data)
|
||||||
{
|
{
|
||||||
Camera * camera = data;
|
Camera * camera = data;
|
||||||
ssize_t s;
|
GIOStatus status;
|
||||||
|
gsize size;
|
||||||
|
GError * error = NULL;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||||
#endif
|
#endif
|
||||||
if(channel != camera->channel || condition != G_IO_IN)
|
if(channel != camera->channel || condition != G_IO_IN)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if((s = read(camera->fd, camera->raw_buffer, camera->raw_buffer_cnt))
|
status = g_io_channel_read_chars(channel, camera->raw_buffer,
|
||||||
<= 0)
|
camera->raw_buffer_cnt, &size, &error);
|
||||||
|
/* this status can be ignored */
|
||||||
|
if(status == G_IO_STATUS_AGAIN)
|
||||||
|
return TRUE;
|
||||||
|
if(status == G_IO_STATUS_ERROR)
|
||||||
{
|
{
|
||||||
/* this error can be ignored */
|
/* FIXME use g_io_channel_shutdown() instead */
|
||||||
if(errno == EAGAIN)
|
|
||||||
return TRUE;
|
|
||||||
close(camera->fd);
|
close(camera->fd);
|
||||||
camera->fd = -1;
|
camera->fd = -1;
|
||||||
_camera_error(camera, strerror(errno), 1);
|
_camera_error(camera, error->message, 1);
|
||||||
|
g_error_free(error);
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(_camera_toolbar[0].widget),
|
gtk_widget_set_sensitive(GTK_WIDGET(_camera_toolbar[0].widget),
|
||||||
FALSE);
|
FALSE);
|
||||||
#ifdef EMBEDDED
|
#ifdef EMBEDDED
|
||||||
|
@ -623,8 +628,8 @@ static gboolean _camera_on_can_read(GIOChannel * channel,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s() %lu %ld\n", __func__,
|
fprintf(stderr, "DEBUG: %s() %lu %lu\n", __func__,
|
||||||
camera->raw_buffer_cnt, s);
|
camera->raw_buffer_cnt, size);
|
||||||
#endif
|
#endif
|
||||||
camera->source = g_idle_add(_camera_on_refresh, camera);
|
camera->source = g_idle_add(_camera_on_refresh, camera);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user