gstreamer/ext
Joan Pau Beltran e28b123608 dc1394src: port to 1.X
The dc1394src is a PushSrc element for IIDC cameras based on libdc1394.
The implementation from the 0.x series is deffective:
caps negotiation does not work, and some video formats
provided by the camera are not supported.

Refactor the code to port it to 1.X and enhance the support
for the full set of video options of IIDC cameras:

  - The IIDC specification includes a set of camera video modes
    (video format, frame size, and frame rates).
    They do not map perfectly to Gstreamer formats, but those that
    do not match are very rare (if used at all by any camera).
    In addition, although the specification includes a raw format,
    some cameras use mono video formats to capture in Bayer format.
    Map corresponding video modes to Gstreamer formats in capabilities,
    allowing both gray raw and Bayer video formats for mono video modes.

  - The specification includes scalable video modes (Format7),
    where the frame size and rate can be set to arbitrary values
    (within the limits of the camera and the bus transport).
    Allow the use of such mode, using the frame size and rate
    from the negotiatied caps, and set the camera frame rate
    adjusting the packet size as in:
    <http://damien.douxchamps.net/ieee1394/libdc1394/faq/#How_do_I_set_the_frame_rate>

    The scalable modes also allow for a custom ROI offset.
    Support for it can be easily added later using properties.

  - Camera operation using libdc1394 is as follows:

      1. Enumerate cameras on the system and open the camera
         identified the enumeration index or by a GUID (64bit hex code).

      2. Query the video formats supported by the camera.

      3. Configure the camera for the desired video format.

      4. Setup the capture resources for the configured video format
         and start the camera transmission.

      5. Capture frames from the camera and release them when not used.

      6. Stop the camera transmission and clear the capture resources.

      7. Close the camera freeing its resources.

    Do steps 2 and 3 when getting and setting the caps respectively.
    Ideally 4 and 6 would be done when going from PAUSED to PLAYING
    and viceversa, but since caps might not be set yet, the video mode
    is not properly configured leaving the camera in a broken state.
    Hence, setup capture and start transmission in the set caps method,
    and consequently clear the capture and stop the transmission
    when going from PAUSED to READY (instead of PLAYING to PAUSED).
    Symmetrycally, open the camera when going from READY to PAUSED,
    allowing to probe the camera caps in the negotiation stage.
    Implement that using the `start` and `stop` methods of `GstBaseSrc`,
    instead of the `change-state` method of `GstElement`.
    Stop the camera before setting new caps and restarting it again
    to handle caps reconfiguration while in PLAYING (it has no effect
    if the camera is not started).

  - Create buffers copying the bytes of the captured frames.
    Alternatively, the buffers could just wrap the bytes of the frames,
    releasing the frame in the buffer's destroy notify function,
    if all buffers were destroyed before going from PLAYING to PAUSED.

  - No timestamp nor offset is set when creating buffers.
    Timestamping is delegated to the parent class BaseSrc,
    setting `gst_base_src_set_live` TRUE, `gst_base_src_set_format`
    with GST_FORMAT_TIME and `gst_base_src_set_do_timestamp`.
    Captured frames have a timestamp field with the system time
    at the completion of the transmission of the frame,
    but it is not sure that this comes from a monotonic clock,
    and it seems to be left NULL in Windows.

  - Use GUID and unit properties to select the camera to operate on.
    The camera number used in version 0.X does not uniquely identify
    the device (it depends on the set of cameras currently detected).
    Since the GUID is 64bit identifier (same as MAC address),
    handle it with a string property with its hexadecimal representation.
    For practicality, operate on the first camera available if the GUID
    is null (default) and match any camera unit number if unit is -1.
    Alternatively, the GUID could be handed with an unsigned 64 bit
    integer type property, using `0xffffffffffffffff` as default value
    to select the first camera available (it is not a valid GUID value).

  - Keep name `GstDc1394` and prefix `gst_dc1394` as in version 0.X,
    although `GstDC1394Src` and `gst_dc1394_src` are more descriptive.

  - Adjust build files to reenable the compilation of the plugin.

    Remove dc1394 from the list of unported plugins in configure.ac.

    Add the missing flags and libraries to Makefile.
    Use `$()` for variable substitution, as many plugins do,
    although other plugins use `@@` instead.

https://bugzilla.gnome.org/show_bug.cgi?id=763026
2016-06-09 21:47:58 +01:00
..
apexsink bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
assrender bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
bs2b Constify some static arrays everywhere 2015-01-21 10:18:50 +01:00
bz2 bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
chromaprint chromaprint: emit notify::fingerprint signal when fingerprint is ready 2016-04-07 20:44:09 +01:00
curl curlsink: catch an unknown error 2016-04-04 17:48:55 +01:00
daala bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
dash dash: strip lead/trailing whitespace from descriptortype attributes 2016-04-22 17:33:15 -03:00
dc1394 dc1394src: port to 1.X 2016-06-09 21:47:58 +01:00
directfb meta: Initialize all remaining metas in their init function 2016-04-13 10:25:32 +03:00
dtls dtsl: add some documentation 2016-04-18 12:35:40 +01:00
dts bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
faac bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
faad bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
flite bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
fluidsynth bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
gl gltestsrc: gltestsrc.h already defines GstGLTestSrc 2016-05-28 22:20:51 +01:00
gme bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
gsm bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
gtk gtk: Fix logging in base widget and fix desc of GL sink 2016-03-27 12:04:16 +03:00
hls bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
kate bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
ladspa ladspa: use _OBJECT log variants for plugin_init 2016-05-15 14:47:22 -07:00
libde265 bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
libmms bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
libvisual bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
lv2 lv2: support CVPorts 2016-05-18 21:33:43 -07:00
mimic bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
modplug bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
mpeg2enc bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
mplex bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
musepack bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
nas bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
neon bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
ofa ofa: port to 1.0 2013-05-12 23:42:06 +01:00
openal bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
opencv opencv/facedetect: fix the build with opencv 3.1.0 2016-05-15 12:29:07 +01:00
openexr bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
openh264 openh264dec: minor clean-ups 2016-04-11 20:23:45 +01:00
openjpeg openjpeg: fix builddir != srcdir build, and distcheck 2016-06-07 14:15:41 +01:00
openni2 bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
opus bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
qt bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
resindvd bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
rsvg bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
rtmp rtmpsrc: Remove dead assignments 2016-05-15 14:18:23 +02:00
sbc bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
schroedinger bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
sdl bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
smoothstreaming smoothstreaming: update fps calculation for h264 codec parser API changes 2016-05-28 10:29:20 +01:00
sndfile bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
sndio bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
soundtouch bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
spandsp bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
spc bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
srtp srtpdec: also check for "roc" in caps 2016-04-15 15:37:32 +02:00
teletextdec teletexdec: Simplify negotiation code 2016-03-29 10:57:32 +02:00
timidity bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
voaacenc bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
voamrwbenc bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
vulkan vkswapper: check the error of the presentation for out of date 2016-05-13 15:24:35 +03:00
wayland bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
webp webpdec: Wait for segment event before checking it 2016-06-07 21:10:04 -04:00
x265 bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
xvid bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
zbar bad: use new gst_element_class_add_static_pad_template() 2016-03-24 14:56:51 +02:00
Makefile.am new vulkan based video sink 2016-02-17 01:13:43 +11:00