summaryrefslogtreecommitdiffstats
path: root/sys/winks/gstksvideosrc.c
AgeCommit message (Collapse)AuthorFilesLines
2008-09-10sys/winks/gstksclock.c (gst_ks_clock_worker_thread_func, gst_ks_clock_start):Ole André Vadla Ravnås1-4/+6
Original commit message from CVS: * sys/winks/gstksclock.c (gst_ks_clock_worker_thread_func, gst_ks_clock_start): Synchronize KS clock as a single-shot operation for now, there's not much point in doing it periodically until we're actually using the KS timestamps for anything else than just discarding old frames. * sys/winks/gstksvideosrc.c (gst_ks_video_src_open_device): Provide the GstClock when opening the device if we already have one.
2008-09-09sys/winks/gstksvideodevice.c (GST_DEBUG_IS_ENABLED, last_timestamp, ↵Ole André Vadla Ravnås1-55/+191
gst_ks_video_device_prepare_buffers, gst_ks_video... Original commit message from CVS: * sys/winks/gstksvideodevice.c (GST_DEBUG_IS_ENABLED, last_timestamp, gst_ks_video_device_prepare_buffers, gst_ks_video_device_create_pin, gst_ks_video_device_set_state, gst_ks_video_device_request_frame, gst_ks_video_device_read_frame): Guard against capturing old frames by keeping track of the last timestamp and also zero-fill the buffers before each capture. Only assign a master clock if the pin hasn't already got one. Actually free buffers on the way down to avoid a huge memory leak, as this was previously done when changing state to ACQUIRE downwards and we now skip that state on the way down. Add some debug. * sys/winks/gstksvideosrc.c (DEFAULT_DEVICE_PATH, DEFAULT_DEVICE_NAME, DEFAULT_DEVICE_INDEX, KS_WORKER_LOCK, KS_WORKER_UNLOCK, KS_WORKER_WAIT, KS_WORKER_NOTIFY, KS_WORKER_WAIT_FOR_RESULT, KS_WORKER_NOTIFY_RESULT, KS_WORKER_STATE_STARTING, KS_WORKER_STATE_READY, KS_WORKER_STATE_STOPPING, KS_WORKER_STATE_ERROR, KsWorkerState, device_path, device_name, device_index, running, worker_thread, worker_lock, worker_notify_cond, worker_result_cond, worker_state, worker_pending_caps, worker_setcaps_result, worker_pending_run, worker_run_result, gst_ks_video_src_reset, gst_ks_video_src_apply_driver_quirks, gst_ks_video_src_open_device, gst_ks_video_src_close_device, gst_ks_video_src_worker_func, gst_ks_video_src_start_worker, gst_ks_video_src_stop_worker, gst_ks_video_src_change_state, gst_ks_video_src_set_clock, gst_ks_video_src_set_caps, gst_ks_video_src_timestamp_buffer, gst_ks_video_src_create): Remove ENABLE_CLOCK_DEBUG define, it's GST_LEVEL_DEBUG after all. Get rid of PROP_ENSLAVE_KSCLOCK and always slave the ks clock to the GStreamer clock, it doesn't seem to hurt and matches DirectShow's behavior. As an added bonus we usually get PresentationTime set for each frame, so we can expand on this later for smarter latency reporting (by looking at the diff between the timestamp from the driver and the time according to the GStreamer clock). Use an internal worker thread for opening the device, setting caps, changing its state and closing it. This way we're a lot more compatible with drivers that rely on hacks to do video-effects between the low-level NT API and the application. Ick. Start the ks clock and set the pin to KSSTATE_RUN on the first create() so that we'll hopefully get hold of the GStreamer clock from the very beginning. This way there's no chance that the timestamps will make a sudden jump in the beginning of the stream when we're running with a clock. * sys/winks/kshelpers.c (CHECK_OPTIONS_FLAG, ks_options_flags_to_string): Reorder the flags to match the headerfile order, and make the string a bit more compact. * sys/winks/ksvideohelpers.c (ks_video_probe_filter_for_caps): Avoid leaking KSPROPERTY_PIN_DATARANGES.
2008-08-27sys/winks/gstksvideodevice.c (gst_ks_video_device_class_init, ↵Ole André Vadla Ravnås1-19/+71
gst_ks_video_device_set_state): Original commit message from CVS: * sys/winks/gstksvideodevice.c (gst_ks_video_device_class_init, gst_ks_video_device_set_state): Don't set the pin state to KSSTATE_RUN from the streaming thread. Skip KSSTATE_ACQUIRE when changing pin state downwards. Be nice and specify G_PARAM_STATIC_STRINGS. Remove unused finalize method. * sys/winks/gstksvideosrc.c (DEFAULT_ENABLE_QUIRKS, PROP_ENABLE_QUIRKS, enable_quirks, gst_ks_video_src_class_init, gst_ks_video_src_init, gst_ks_video_src_finalize, gst_ks_video_src_get_property, gst_ks_video_src_set_property, gst_ks_video_src_reset, gst_ks_video_src_apply_driver_quirks, gst_ks_video_src_change_state, gst_ks_video_src_set_caps): First driver quirk: work around Logitech's hostile driver software to improve stability and performance. See comments for details. Provide a property to disable driver quirks (enabled by default). Be nice and specify G_PARAM_STATIC_STRINGS. Remove unused dispose method. Tweak include order.
2008-08-24New plugin for low-latency video capture on Windows (#519935).Ole André Vadla Ravnås1-0/+816
Original commit message from CVS: * configure.ac: * sys/Makefile.am: * sys/winks/Makefile.am: * sys/winks/gstksclock.c: * sys/winks/gstksclock.h: * sys/winks/gstksvideodevice.c: * sys/winks/gstksvideodevice.h: * sys/winks/gstksvideosrc.c: * sys/winks/gstksvideosrc.h: * sys/winks/kshelpers.c: * sys/winks/kshelpers.h: * sys/winks/ksvideohelpers.c: * sys/winks/ksvideohelpers.h: New plugin for low-latency video capture on Windows (#519935). Uses Kernel Streaming, the lowest level API for doing video capture on Windows (more or less just raw ioctls).