|=== Camerabin2 Source Requirements (draft) ===
|This small document contains a collection of notes on different requirements
|of a camerabin2 source element.
|-- General --
|It is recommended that camerabin2 source elements inherit from basecamerasrc
|-- Pads --
|Camerabin2 sources must have 3 static pads named 'vfsrc', 'imgsrc' and
|From an external point of view, all 3 pads work independently and camerabin2
|makes no assumptions about relations about them (caps they can produce, or if
|the same buffer is pushed to 2 different pads).
|'vfsrc' is the pad where the viewfinder buffers should be pushed, it will
|be feeding a video sink. This is the same scenario as a 'regular' source
|feeding a video sink. Buffers should be continuously pushed on this pad.
|'imgsrc' is the pad where image capture buffers are pushed. Timestamps aren't
|really important here as the images are going to be encoded and saved
|separately from each other. For each capture in image mode, one buffer should
|be pushed on this pad.
|'vidsrc' is the pad where video capture buffers are pushed. Once capture is
|started, buffers should start being pushed on this pad until the capture is
|-> TODO - define how segments/timestamps should work here
|-> TODO - How to make audio and video sync properly
|-- Capture --
|The sources should have a 'mode' property that informs the source of the
|current capturing mode. The available options are image or video.
|There are 2 signals that should be implemented, start-capture and
|stop-capture, they take no arguments.
|On image mode, start-capture tells the source to push an image capture
|buffer on its imgsrc pad. For video mode, start-capture tells the source
|to start pushing buffers on the vidsrc pad, it should only stop
|pushing when a stop-capture signal is received. In either case, it is
|recommended that the viewfinder pad keeps pushing buffers so the user
|has a smooth experience.
|Note that basecamerasrc already has the mode property and start/stop-capture
|signals. It has functions that should be overriden by its child classes to
|implement the handling of these actions.
|-- Previews --
|Camerabin2 sources must have a post-previews boolean property that the user
|can select if we wants or not preview images.
|Previews are posted on the bus as custom 'preview-image' messages. This message
|must have a 'buffer' field that contains a GstBuffer, the preview.
|Additionally, there should be a preview-caps property that is used to inform the
|camera source what is the expected format of the preview image.
|A preview image should be posted for each capture.
|-- Negotiation --
|Capture caps selection on camerabin2 works just like gstreamer's default
|caps negotiation. Camerabin2 puts capsfilters downstream from each of the
|camera source pads. The camera source can simply get_caps on the peer of
|each of its pads to know what are the allowed caps for that pad.