* v4lsrc: actually try the format out on capsnego
* all three: fix interlacing (not handled at all...)
* libgstrec: build (a library for video recording)
+For other plugins:
+* SDL: seems okay for now
+* jpegmmxenc/dec: seems okay for now
+* avidemux: seems okay for now, though it doesn't really handle
+ events yet
+* avimux: interaction with disksink, maxfilesize support, events
+ (GST_EVENT_RESTART!!->s/RESTART/NEW_MEDIA/), etc. - big TODO
TODO list (long term):
======================
/* G-Streamer generic V4L element - generic V4L calls handling
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer generic V4L element - generic V4L calls handling
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer hardware MJPEG video sink plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
v4lmjpegsink = GST_V4LMJPEGSINK (gst_pad_get_parent (pad));
/* we are not going to act on variable caps */
- if (!GST_CAPS_IS_FIXED (vscapslist))
+ if (!GST_CAPS_IS_FIXED (vscapslist) || !GST_V4L_IS_OPEN(GST_V4LELEMENT(v4lmjpegsink)))
return GST_PAD_CONNECT_DELAYED;
- for (caps = capslist; caps != NULL; caps = vscapslist = vscapslist->next)
+ for (caps = vscapslist; caps != NULL; caps = vscapslist = vscapslist->next)
{
- v4lmjpegsink->width = gst_caps_get_int (caps, "width");
- v4lmjpegsink->height = gst_caps_get_int (caps, "height");
+ v4lmjpegsink->width = gst_caps_get_int (caps, "width");
+ v4lmjpegsink->height = gst_caps_get_int (caps, "height");
if (!gst_v4lmjpegsink_set_playback(v4lmjpegsink,
v4lmjpegsink->width, v4lmjpegsink->height,
}
/* if we got here - it's not good */
- gst_element_error(GST_ELEMENT(v4lmjpegsink),
- "Failed to find acceptable caps");
return GST_PAD_CONNECT_REFUSED;
}
/* G-Streamer hardware MJPEG video sink plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* width/height/norm of the jpeg stream */
gint width;
gint height;
+ gint norm;
/* cache values */
gint x_offset;
/* G-Streamer hardware MJPEG video source plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer hardware MJPEG video source plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer BT8x8/V4L frame grabber plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
}
/* still nothing - no good caps */
- gst_element_error(GST_ELEMENT(v4lsrc),
- "Failed to find acceptable caps");
return GST_PAD_CONNECT_REFUSED;
}
{
GstV4lSrc *v4lsrc;
GstElementStateReturn parent_value;
- GstCaps *caps;
gint transition = GST_STATE_TRANSITION (element);
g_return_val_if_fail(GST_IS_V4LSRC(element), GST_STATE_FAILURE);
/* G-Streamer BT8x8/V4L frame grabber plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
struct video_mmap mmap;
struct video_mbuf mbuf;
gint sync_frame;
- gboolean *frame_queued;
+ gint8 *frame_queued;
guint buffer_size;
/* a seperate pthread for the sync() thread (improves correctness of timestamps) */
/* G-Streamer generic V4L element - generic V4L calls handling
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer generic V4L element - generic V4L calls handling
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer hardware MJPEG video sink plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer hardware MJPEG video sink plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer hardware MJPEG video source plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer hardware MJPEG video source plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
/* G-Streamer BT8x8/V4L frame grabber plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
v4lsrc->mmap.frame = num;
+ if (v4lsrc->frame_queued[num] < 0)
+ {
+ v4lsrc->frame_queued[num] = 0;
+ return TRUE;
+ }
+
if (ioctl(GST_V4LELEMENT(v4lsrc)->video_fd, VIDIOCMCAPTURE, &(v4lsrc->mmap)) < 0)
{
gst_element_error(GST_ELEMENT(v4lsrc),
return FALSE;
}
- v4lsrc->frame_queued[num] = TRUE;
+ v4lsrc->frame_queued[num] = 1;
pthread_mutex_lock(&(v4lsrc->mutex_queued_frames));
v4lsrc->num_queued_frames++;
pthread_mutex_lock(&(v4lsrc->mutex_queued_frames));
if (v4lsrc->num_queued_frames < MIN_BUFFERS_QUEUED)
{
+ if (v4lsrc->frame_queued[frame] < 0)
+ break;
#ifdef DEBUG
fprintf(stderr, "Waiting for new frames to be queued (%d < %d)\n",
v4lsrc->num_queued_frames, MIN_BUFFERS_QUEUED);
}
pthread_mutex_unlock(&(v4lsrc->mutex_queued_frames));
- /* if still wrong, we got interrupted and we should exit */
- if (v4lsrc->num_queued_frames < MIN_BUFFERS_QUEUED)
+ if (!v4lsrc->num_queued_frames)
{
#ifdef DEBUG
- fprintf(stderr, "Still not enough frames, quitting...\n");
+ fprintf(stderr, "Got signal to exit...\n");
#endif
goto end;
}
pthread_mutex_unlock(&(v4lsrc->mutex_soft_sync));
}
- frame = (frame+1)%v4lsrc->mbuf.frames;
-
pthread_mutex_lock(&(v4lsrc->mutex_queued_frames));
v4lsrc->num_queued_frames--;
+ v4lsrc->frame_queued[frame] = 0;
pthread_mutex_unlock(&(v4lsrc->mutex_queued_frames));
+
+ frame = (frame+1)%v4lsrc->mbuf.frames;
}
end:
v4lsrc->isready_soft_sync[*num] = 0;
pthread_mutex_unlock(&(v4lsrc->mutex_soft_sync));
- v4lsrc->frame_queued[*num] = FALSE;
-
return TRUE;
}
v4lsrc->mbuf.size/(v4lsrc->mbuf.frames*1024));
/* keep trakc of queued buffers */
- v4lsrc->frame_queued = (gint *) malloc(sizeof(int) * v4lsrc->mbuf.frames);
+ v4lsrc->frame_queued = (gint8 *) malloc(sizeof(gint8) * v4lsrc->mbuf.frames);
if (!v4lsrc->frame_queued)
{
gst_element_error(GST_ELEMENT(v4lsrc),
return FALSE;
}
for (n=0;n<v4lsrc->mbuf.frames;n++)
- v4lsrc->frame_queued[n] = FALSE;
+ v4lsrc->frame_queued[n] = 0;
/* init the pthread stuff */
pthread_mutex_init(&(v4lsrc->mutex_soft_sync), NULL);
/* we actually need to sync on all queued buffers but not on the non-queued ones */
for (n=0;n<v4lsrc->mbuf.frames;n++)
- while (v4lsrc->frame_queued[n])
- if (!gst_v4lsrc_sync_next_frame(v4lsrc, &num))
- return FALSE;
+ v4lsrc->frame_queued[n] = -1;
- pthread_cancel(v4lsrc->thread_soft_sync);
pthread_join(v4lsrc->thread_soft_sync, NULL);
return TRUE;
/* G-Streamer BT8x8/V4L frame grabber plugin
- * Copyright (C) 2001 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public