| === 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 |
| from gst-plugins-bad. |
| |
| |
| -- Pads -- |
| Camerabin2 sources must have 3 static pads named 'vfsrc', 'imgsrc' and |
| 'vidsrc'. |
| |
| 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 |
| stopped. |
| -> 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. |
| |