Commit graph

827 commits

Author SHA1 Message Date
Marc Leeman
bc87f39a90 v4l2: init v4l2_buffer to 0x0 before ioctl
https://bugzilla.gnome.org/show_bug.cgi?id=712137
2013-11-12 13:08:33 -05:00
Peter Korsgaard
94f3d6fc07 v4l2bufferpool: O_CLOEXEC needs _GNU_SOURCE
On some systems (E.G. uClibc and older Glibc versions), O_CLOEXEC is only
defined when _GNU_SOURCE is specified, so do so.

_GNU_SOURCE needs to be defined before any system headers are included,
so move the fcntl.h section up.

https://bugzilla.gnome.org/show_bug.cgi?id=709423
2013-10-04 14:33:43 +02:00
Tim-Philipp Müller
51ff79842d v4l2src: print probed caps as caps again in debug log
This got lost during refactoring.
2013-10-03 18:33:01 +01:00
Robert Krakora
141a1fc296 v4l2bufferpool: Restore original GstMemory in buffer if it has been changed
https://bugzilla.gnome.org/show_bug.cgi?id=706083
2013-09-23 11:58:39 -04:00
Olivier Crête
19021e7176 v4l2: Remove commented out line 2013-09-19 17:39:17 -04:00
Olivier Crête
d1e16f7b0c v4l2bufferpool: dmabuf is not a singleton anymore
https://bugzilla.gnome.org/show_bug.cgi?id=707793
2013-09-18 15:13:59 -04:00
Mathieu Duponchelle
374a97a3e9 v4l2: Use newly #defined metadata names. 2013-09-09 15:39:17 +02:00
Sebastian Dröge
478f0dcfe7 v4l2bufferpool: Fix missing condition in previous commit 2013-09-09 14:46:42 +02:00
Sebastian Dröge
1e7c3e4520 v4l2bufferpool: Also fix strides for other semi-planar video formats 2013-09-09 14:45:55 +02:00
Andreea Fulger
78adf28a61 v4l2bufferpool: Fix stride for NV12/NV21
https://bugzilla.gnome.org/show_bug.cgi?id=707758
2013-09-09 14:45:55 +02:00
Tim-Philipp Müller
1dfc1f2686 Don't use setlocale in plugins()
Only apps should call setlocale(), not libraries.
2013-09-01 21:18:38 +01:00
Olivier Crête
d595c08aca v4l2: Add forward declaration for gst_v4l2_object_get_format_list 2013-08-19 13:19:42 -04:00
Olivier Crête
48caa1712a v4l2: De-duplicate caps probing between src and sink 2013-08-19 13:08:18 -04:00
Olivier Crête
24286f1612 v4l2: Use G_DEFINE_ macros for added thread safety 2013-08-19 12:48:35 -04:00
Tim-Philipp Müller
fdddc35f20 v4l2: remove unused enumtypes and use generic marshaller 2013-08-04 11:03:49 +01:00
Michael Olbrich
07e4dd3424 v4l2: bufferpool: don't forget to release buffer on error
If the pool is stopped while gst_v4l2_buffer_pool_dqbuf() waits for a
buffer then the return value is GST_FLOW_FLUSHING. In this case the buffer
to queue must also be released. Otherwise is will never be deleted or
returned to its pool.

https://bugzilla.gnome.org/show_bug.cgi?id=703764
2013-07-08 16:27:19 +02:00
Michael Olbrich
5c99fefa04 v4l2: don't extract data from caps twice
gst_video_info_from_caps() always extract width, height, interlace mode and
framerate now. It is no longer necessary to do it again for encoded
formats.

https://bugzilla.gnome.org/show_bug.cgi?id=703399
2013-07-02 10:08:46 +02:00
Wim Taymans
821d99a503 v4l2: don't redefine the PERFORMANCE debug variable
It is already defined in core.

fixes https://bugzilla.gnome.org/show_bug.cgi?id=702732
2013-06-20 15:35:11 +02:00
Sjoerd Simons
8e43c0ec9e v4l2: Optimize negotiation by removing the query filter
As cameras tend to have a quite specific set of capabilities (specific
framerates for each resolution), getting the peer caps filtered by our
probed caps can cause a big increase in the caps size which slows down
things quire a bit.

As for negotiation v4l2 iterates through the caps of the peer to find the
first intersection with the probed caps, getting the fully expanded
intersection of capabilities is not useful.

Using the same testcase as for bug #702632, adding this patch on top of
the patches suggested there speeds up getting the inital frame from
around ~14-15 seconds to around ~3-4 seconds.

https://bugzilla.gnome.org/show_bug.cgi?id=702638
2013-06-19 15:05:25 +02:00
Michael Olbrich
a1c34b5407 v4l2: make sure the element is not deleted before the pool
The pool accesses data from the v4l2object so it must exist at least
as long as the pool. Refcount the element which controls the object
live-time.

https://bugzilla.gnome.org/show_bug.cgi?id=701650
2013-06-07 20:07:42 +02:00
Michael Olbrich
0769a78dd1 v4l2: iterate controls with V4L2_CTRL_FLAG_NEXT_CTRL if possible
In v2.6.18 control classes where added to the v4l2 API.
Iterating over CIDs starting with V4L2_CID_BASE will only find controls for
the first control class.
By iterating with V4L2_CTRL_FLAG_NEXT_CTRL all controls are found.

This is necessary to make controls from other control classes available in
the extra-controls property.

If V4L2_CTRL_FLAG_NEXT_CTRL is not defined at compile time or not supported
at runtime then the old mechanism for iterating is used.

https://bugzilla.gnome.org/show_bug.cgi?id=701540
2013-06-05 13:00:21 +02:00
Michael Olbrich
74d217c44b v4l2: improve pixel aspect ratio handling
Instead of just assuming a aspect ratio of 1/1 use VIDIOC_CROPCAP to ask
the device.
This also add a pixel-aspect-ratio property to overwrite the value from the
driver and a force-aspect-ratio property to ignore it.

https://bugzilla.gnome.org/show_bug.cgi?id=700285
2013-06-04 17:37:15 +02:00
Stirling Westrup
86405d6ee7 v4l2: Fix compilation with older kernels
https://bugzilla.gnome.org/show_bug.cgi?id=701595
2013-06-04 17:04:11 +02:00
Michael Olbrich
3417a791ac v4l2: call VIDIOC_REQBUFS with count = 0 in pool_finalize
Without this the following sequence fails:

- set_caps()
  - object_stop() (does nothing)
  - set_format() -> VIDIOC_S_FMT
- set_config() -> VIDIOC_REQBUFS with count = N
- set_caps()
  - object_stop()
    - pool_finalize()
  - set_format() -> VIDIOC_S_FMT => EBUSY

Usually the pool is started after set_config(), in which case object_stop()
will result in a pool_stop and therefore VIDIOC_REQBUFS with count = 0 but
that is not guaranteed.
Also calling VIDIOC_REQBUFS with count = 0 in pool_finalize() if necessary
fixes this problem.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701543
2013-06-04 10:45:06 +02:00
Michael Olbrich
496995a7d5 v4l2: rework sink buffer refcounting
This is a followup patch for #700781, which is not quite correct.
The buffer handling is quite complicated here.
The original code intended to the the following:

- gst_v4l2_buffer_pool_process() calls QBUF and adds the buffer to the
  local list.
- The sink calls gst_buffer_unref() which returns the buffer to the pool
  but not the 'free list'.
- Some time later DQBUF returns the buffer and
  gst_v4l2_buffer_pool_release_buffer() puts in on the 'free list'.

If the buffer must be copied then (parent_class)->acquire_buffer() is
called directly to keep the buffer in the pool.

This has two problems:
1. If gst_v4l2_buffer_pool_release_buffer() is called before the buffer is
   returned to the pool, then the buffer is put on the 'free list' twice.
   This can happen if a reference to the buffer is kept outside the sink,
   of if DQBUF returns the buffer, that was just queued with QBUF.
2. If buffers are copied, then all buffers are in the pool at all times. As
   a result gst_v4l2_buffer_pool_stop() and gst_v4l2_buffer_pool_dqbuf()
   can access pool->buffers at the same time, which can lead to memory
   corruption.

The patch for #700781 fixes those problems, but with the side effect that
there are always buffers outside the pool (because they are queued) and
the pool is never stopped.
This patch fixes this by releasing the reference to the buffer after
handling it (to avoid problem 2.) so it can be returned to the pool.
gst_v4l2_buffer_pool_release_buffer() is only called if the buffer is
already in the pool (to avoid problem 1.).

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701375
2013-06-03 11:55:48 +02:00
Sebastian Dröge
82e7826af0 v4l2: Only conditionally use V4L2_CTRL_TYPE_INTEGER_MENU, it's not available in older versions 2013-05-29 20:35:41 +02:00
Michael Olbrich
0fb59275b0 v4l2: add a property for arbitrary v4l2 controls
This makes it possible to set any controls that can be set with
VIDIOC_S_CTRL.
The controls are set when the property is set (if the device is open)
and when the device is opened.

https://bugzilla.gnome.org/show_bug.cgi?id=698837
2013-05-29 20:18:11 +02:00
Michael Olbrich
f9cc655adf v4l2: keep a reference to all queued buffers
Without this, a queued buffer may be required, filled and queued before it
is dequeued.
Calling gst_buffer_pool_acquire_buffer() ensures that the buffer is set up
correctly and gst_buffer_unref() calls buffer_release().

https://bugzilla.gnome.org/show_bug.cgi?id=700781
2013-05-21 16:44:58 +02:00
Michael Olbrich
00ffe41e6a v4l2: Don't stop streaming when set_caps is called with unchanged caps
This can happen if other parts of the pipeline are reconfigured.
Stop streaming even for a short amount of time can be quite visible, so it
should be avoided if possible.

https://bugzilla.gnome.org/show_bug.cgi?id=700503
2013-05-20 11:13:18 +02:00
Michael Olbrich
57c0f4d6b5 v4l2: only add interlace-mode to the caps for raw formats
https://bugzilla.gnome.org/show_bug.cgi?id=700280
2013-05-14 13:01:27 +02:00
Michael Olbrich
16b0fd5ad9 v4l2: copy and set the actual size of the content
https://bugzilla.gnome.org/show_bug.cgi?id=700282
2013-05-14 12:57:14 +02:00
Michael Olbrich
113b60935a v4l2: request 0 buffers when stopping
Without this stopping the pool in *_set_caps() is useless.
S_FMT will still fail with EBUSY.

https://bugzilla.gnome.org/show_bug.cgi?id=699835
2013-05-07 16:39:41 +02:00
Philipp Zabel
59d7d5c6bb v4l2: fill out v4l2_buffer.bytesused field for v4l2sink
When queuing a buffer for a sink, bytesused must contain the actual
amount of data.

For a source, the driver must overwrite this, so it doesn't matter
what is set here.

https://bugzilla.gnome.org/show_bug.cgi?id=699598
2013-05-04 11:19:14 +01:00
Michael Olbrich
53da901cc9 v4l2: always generate video info from caps
In the past gst_video_info_from_caps() only video/x-raw. Now it also
supports other video/* and image/* formats.
With this patch the format won't be GST_VIDEO_FORMAT_UNKOWN and
gst_v4l2_buffer_pool_set_config() handles strides correctly.

https://bugzilla.gnome.org/show_bug.cgi?id=699570
2013-05-03 13:14:58 +02:00
Michael Olbrich
1e777ede92 v4l2: try to allocate new buffers with VIDIOC_CREATE_BUFS if needed
If max_buffers is 0 then an arbitrary number of buffers (currently 4) is
allocated. If this is not enough v4l2src starts copying buffers.
With this patch VIDIOC_CREATE_BUFS is used to allocate a new buffer. If
this fails v4l2src falls back to copying buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=699447
2013-05-03 11:18:04 +02:00
Michael Olbrich
eebe5fc70d v4l2: fix and cleanup VIDIOC_EXPBUF handling
clear the struct, and provide a correct error message

https://bugzilla.gnome.org/show_bug.cgi?id=699337
2013-05-01 15:40:55 +02:00
Philipp Zabel
4d3f6850ca v4l2: handle return value -ENOTTY for unimplemented VIDIOC_G_PARM
Newer kernels return -ENOTTY, older kernels return -EINVAL if the ioctl
is not implemented. With this patch, GStreamer handles both cases.

https://bugzilla.gnome.org/show_bug.cgi?id=698825
2013-05-01 15:34:50 +02:00
Michael Olbrich
bf3a0b7e37 v4l2: fix broken boolean expression to detect non-frame buffers
https://bugzilla.gnome.org/show_bug.cgi?id=699294
2013-04-30 11:47:09 +02:00
Michael Olbrich
d4126ff986 v4l2: also poll for output devices
Note that the V4L2 API defines that for output devices POLLOUT
indicates that a buffer is ready to be dequeued.

https://bugzilla.gnome.org/show_bug.cgi?id=698992
2013-04-27 09:31:29 +01:00
Philipp Zabel
fd0123800c v4l2: fix copying of encoded buffers
The existence of a GstVideoFormatInfo does not guarantee, that
the buffer contains video frames, so the format must be checked.

Also, for encoded buffers the length is variable and must be set.

https://bugzilla.gnome.org/show_bug.cgi?id=698949
2013-04-26 15:36:49 +02:00
Michael Olbrich
3466796f10 v4l2: add support for mpeg4 and H.263
https://bugzilla.gnome.org/show_bug.cgi?id=698826
2013-04-26 14:26:15 +02:00
Philipp Zabel
305023fe9d v4l2: handle ENODATA return value for VIDIOC_ENUMSTD
In kernel v3.7-rc1, VIDIOC_ENUMSTD returns ENODATA if the current input
does not support the STD API.

https://bugzilla.gnome.org/show_bug.cgi?id=698827
2013-04-25 15:40:59 +02:00
Michael Olbrich
2e80c0d2c0 v4l2: bufferpool: reset buffer size in release_buffer
The buffer might still be in use elsewhere when dequeuing buffers for
outputs.

https://bugzilla.gnome.org/show_bug.cgi?id=698822
2013-04-25 12:34:24 +02:00
Michael Olbrich
8f9cc96a69 v4l2: bufferpool: remove unused includes
The hacks that needed these are long gone.

https://bugzilla.gnome.org/show_bug.cgi?id=698821
2013-04-25 11:30:48 +01:00
Diogo Carbonera Luvizon
0a7d4afc1b v4l2: save the format correctly
If TRY_FMT is not implemented,  gst_v4l2_object_get_nearest_size will
use S_FMT and will change the device's operation mode. To save the
old device mode we need to set the type field or else it will fail
to save the previous format.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=685209
2013-04-24 16:00:24 +02:00
Olivier Crête
b5a9ed20e1 v4l2src: Disable renegotiation in the negotiate method
This way, we don't block the initial negotiation.

Thanks to Jeremy Whiting for doing all the testing.

https://bugzilla.gnome.org/show_bug.cgi?id=695981
2013-04-17 17:04:11 -04:00
Olivier Crête
3340baa374 Revert "v4l2: disable renegotiation"
This reverts commit d1b26e1d59.

This causes the initial negotiation to never happen if a reconfigure
event is received after gst_base_src_start_complete() but before the loop
starts.

https://bugzilla.gnome.org/show_bug.cgi?id=695981
2013-04-17 17:02:08 -04:00
Sebastian Dröge
b0b0557c48 gst: Add better support for static plugins 2013-04-15 15:54:11 +02:00
Wim Taymans
14300e5805 v4l2: free all queued buffers
Don't just loop over the first num_queued buffers but loop over
all the buffers and check if they need to be freed. It is possible that
not all buffers are queued and then the entry in our array will be NULL.
Those buffers that are not queued were freed in stop().

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=696651
2013-04-03 11:14:41 +02:00
Wim Taymans
0dfc88d893 v4l2: improve debug 2013-04-03 11:14:41 +02:00
Tim-Philipp Müller
60302a57a4 v4l2: fix printf format compiler warning in debug message 2013-04-02 23:36:22 +01:00
Bastien Nocera
8e633d2059 v4l2: fix compilation against newer kernel headers as on FC19 2013-03-18 14:59:35 +00:00
Benjamin Gaignard
e29ab42922 v4l2: Add support of dmabuf
v4l has add a new IOCTL to export a buffer by using dmabuf.
This patch allow to use this new IOTCL if it has been defined in videodev2.h
I introduce a new IO mode (GST_V4L2_IO_DMABUF) to enable this way of working.

https://bugzilla.gnome.org/show_bug.cgi?id=693826
2013-02-19 12:57:07 +01:00
Benjamin Gaignard
59e583b59f v4l2: don't check stride for encoded formats
Don't try to check the stride for encoded formats. Some drivers output
something != 0 and then we don't want to fail on that.
2013-02-15 16:23:23 +01:00
Sjoerd Simons
00eed11d6a v4l2: Re-enable prepare-format emission
With the port to gstreamer 1.0 the prepare-format signal stopped being
emitted. Start emitting this again for use in uvch264src.  While there
change the emission to include the caps for extra flexibility instead of
fource, width, height.

https://bugzilla.gnome.org/show_bug.cgi?id=692042
2013-01-23 21:06:16 -05:00
Robert Krakora
ad2f74afbc v4l2: Also handle the new ENOENT return value of VIDIOC_QUERYCTRL
https://bugzilla.gnome.org/show_bug.cgi?id=691098
2013-01-04 10:04:26 +01:00
Koop Mast
0bcf8ecd93 v4l2: Teach where the videodev2.h header lives on freebsd.
https://bugzilla.gnome.org/show_bug.cgi?id=690233
2012-12-17 11:17:01 +01:00
Tim-Philipp Müller
527c218533 v4l2src: link against -lrt for clock_gettime()
Need to explicitly link against -lrt for clock_gettime(), which
we don't get in the libs any more, because core moved the
gmodule-no-export-2.0 bit into Requires.Private.

Not required for newer glibc, but for older ones, so check for that.
2012-11-30 23:18:12 +00:00
Tim-Philipp Müller
e672123621 v4l2: remove unused define 2012-11-25 16:05:11 +00:00
Tim-Philipp Müller
230cf41cc9 Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-04 00:07:18 +00:00
Michael Smith
b04b1b5089 meta info: threadsafe registration using g_once 2012-10-03 10:51:45 -07:00
Sjoerd Simons
5d1ed54814 v4l2src: handle latency query before setting up the bufferpool
Fixes crash if no bufferpool is set up yet.

https://bugzilla.gnome.org/show_bug.cgi?id=684430
2012-09-20 13:49:42 +01:00
Wim Taymans
e6ce9c226f v4l2: remove unused properties 2012-09-13 10:56:27 +02:00
Wim Taymans
d1b26e1d59 v4l2: disable renegotiation
We can't yet wait for the bufferpool to DRAIN before starting renegotiation so
disable it for now.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=682770
2012-09-11 15:41:10 +02:00
Wim Taymans
d154743949 v4l2: remove unused code. 2012-09-06 10:43:52 +02:00
Tim-Philipp Müller
4bb52bbadf docs: gst-launch -> gst-launch-1.0 and ffmpegcolorspace -> videoconvert 2012-08-27 21:20:30 +01:00
Huacai Chen
05d4f81834 v4l2: make gst_v4l2_fill_lists() adapt to kernel 3.3+
When do v4l2_ioctl() with VIDIOC_ENUMINPUT fails on some devices,
kernels before 3.3.0 return EINVAL, but newer kernels return ENOTTY.
This patch make those devices work well on kernel 3.3+.

Related kernel commit:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=07d106d0a33d6063d2061305903deb02489eba20

Signed-off-by: Huacai Chen <chenhc@lemote.com>
Signed-off-by: Rui Wang <wangr@lemote.com>
Signed-off-by: Jie Chen <chenj@lemote.com>
2012-08-21 23:09:33 +01:00
Matthias Clasen
9f2aa8d47f v4l2: fix build with recent kernels, the v4l2_buffer input field was removed
This was unused apparently and removed in the kernel in commit:

 From 2b719d7baf490e24ce7d817c6337b7c87fda84c1 Mon Sep 17 00:00:00 2001
 From: Sakari Ailus <sakari.ailus@iki.fi>
 Date: Wed, 2 May 2012 09:40:03 -0300
 Subject: [PATCH] [media] v4l: drop v4l2_buffer.input and V4L2_BUF_FLAG_INPUT

 Remove input field in struct v4l2_buffer and flag V4L2_BUF_FLAG_INPUT which
 tells the former is valid. The flag is used by no driver currently.

https://bugzilla.gnome.org/show_bug.cgi?id=681491

Conflicts:
	sys/v4l2/gstv4l2bufferpool.c
2012-08-09 08:40:33 +01:00
Tim-Philipp Müller
787c314ec3 Silence some 'variable may be used uninitialized' compiler warnings
When compiling with -DG_DISABLE_ASSERT
2012-08-08 11:31:59 +01:00
Wim Taymans
2052cabdc4 fix for allocator API changes 2012-07-09 16:28:41 +02:00
Wim Taymans
16b8e2d171 update for query api changes 2012-07-06 11:50:50 +02:00
Wim Taymans
8eadb9c12c update for query api changes 2012-07-06 11:26:46 +02:00
Wim Taymans
77813e67e1 update for allocation query changes 2012-07-06 11:05:11 +02:00
Wim Taymans
56690cf021 v4l2: improve debug 2012-06-26 13:19:02 +02:00
Wim Taymans
77f33e591f Revert "v4l2: free kernel buffers before allocating new ones"
This reverts commit 1b09bc609a.

Seems to make libv4l2 complain, maybe because we call REQBUFS with 0 buffers
before we allocated buffers.
2012-06-26 13:02:13 +02:00
Wim Taymans
1b09bc609a v4l2: free kernel buffers before allocating new ones
See https://bugzilla.gnome.org/show_bug.cgi?id=670257
2012-06-26 12:07:47 +02:00
Wim Taymans
9fd4af2164 v4l2src: improve debug 2012-06-26 12:07:29 +02:00
Wim Taymans
f4e3ae65ab v4l2: setup strides and offsets for all planes 2012-06-26 11:14:59 +02:00
Hans de Goede
b9676944bb v4l2object: Don't probe UVC devices for being interlaced
UVC devices are never interlaced, and doing VIDIOC_TRY_FMT on them
causes expensive and slow USB IO, so don't probe them for interlaced.

This shaves 2 seconds of the startup time of cheese with a Logitech
Webcam Pro 9000.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=677722
2012-06-11 11:23:34 +02:00
Michael Jones
fa95cec825 v4l2: add missing G_END_DECLS
G_BEGIN_DECLS didn't have matching G_END_DECLS

https://bugzilla.gnome.org/show_bug.cgi?id=677165
2012-05-31 13:13:45 +02:00
Peter Seiderer
65a28698db v4l2src: fix v4l2_std_id logging
input.std is of type v4l2_std_id which is defined as 64-bit unsigned integer.
Casting to uint means the higher bits, wich are used for the private video
standards of the TI video capture/display driver for example, are lost.
2012-05-09 15:12:28 +01:00
Sebastian Dröge
982148c07c v4l2src: Update for basesrc API changes 2012-05-01 13:33:46 +02:00
Wim Taymans
a473750350 v4l2: improve timestamp code
Sample the pipeline clock and device clock closer to eachother to reduce jitter.
Don't subtract the frame duration from the timestamp when we can use the device
timestamps.
Assume a delay of 1 frame in read-write mode.
2012-04-25 09:41:46 +02:00
Wim Taymans
46045316ce v4l2: use driver timestamps
Use the drive timestamps for timestamping outgoing buffers.
2012-04-24 12:37:33 +02:00
Wim Taymans
eecb9a96a6 v4l2: Improve buffer management
Query the amount of available buffers when doing set_config(). This allows us to
configure the parent bufferpool with the number of buffers to preallocate.
Keep track of the provided allocator and use it when we need to allocate a
buffer in RW mode.
When we are can not allocate the requested max_buffers amount of buffers, make
sure we keep 2 buffers around in the pool and copy them into an output buffer.
This makes sure that we always have a buffer to capture into. We also need to
detect those copied buffers and unref them when they return to the pool.
2012-04-23 18:10:33 +02:00
Wim Taymans
713ddbf541 v4l2: free the queued buffers
Only free the queued buffers that we keep track of in our buffer array. for rw
io-mode, we do allocate buffers but we don't keep track of them in the buffer
array.
2012-04-23 18:10:33 +02:00
Wim Taymans
5d7d4e0d9b v4l2: mark memory as no-share
We don't support sharing our mmapped memory so mark it as NO_SHARE.
2012-04-23 18:10:33 +02:00
Wim Taymans
9fe11d0d11 v4l2: remove old unused file 2012-04-23 18:10:33 +02:00
Wim Taymans
37e7a41771 v4l2: remove unused function 2012-04-23 18:10:33 +02:00
Mart Raudsepp
8719375be7 docs: Add Since tag for new GstV4l2Src::prepare-format signal 2012-04-23 11:24:19 +02:00
Wim Taymans
f08bab4e86 v4l2: update for video api change 2012-04-19 14:16:01 +02:00
Wim Taymans
85d4dde9d1 v4l2: fix compilation on older v4l2
Fix compilation on systems where the H264 format is not defined.
2012-04-19 12:38:58 +02:00
Sebastian Dröge
04b70571e5 video: Update for libgstvideo API changes 2012-04-19 12:20:59 +02:00
Youness Alaoui
09dabd4be6 v4l2src: Allow mpeg-ts cameras to negociate format
This removes an ugly hack until the reason for the hack can be documented
2012-04-19 10:31:18 +02:00
Sebastian Dröge
e7a76badc5 v4l2src: Fix merge 2012-04-19 09:50:25 +02:00
Sebastian Dröge
deb7cdcdda v4l2src: Rename pre-set-format signal to prepare-format 2012-04-19 09:50:01 +02:00
Youness Alaoui
a63451ecd7 v4l2src: Add H264 encoded stream support to the caps
This is not enough to properly support H264 cameras, but it will
allow an H264 stream to be generated by v4l2src using the default
settings of the camera. If used with the pre-set-format signal, the
H264 encoder can be fully configured.

Conflicts:

	sys/v4l2/gstv4l2object.c
2012-04-19 09:49:33 +02:00
Youness Alaoui
06d64c7792 v4l2src: Adding a pre-set-format signal
In order to support UVC H264 encoding cameras, an H264 Probe&Commit
must happen before the normal v4l2 set-format. This new signal is
meant to allow an external application or bin to do it.
It also serves to expose the file descriptor used by v4l2src in case
some custom ioctls need to be called.

Conflicts:

	sys/v4l2/Makefile.am
	sys/v4l2/gstv4l2src.c
	sys/v4l2/v4l2src_calls.c
2012-04-19 09:45:49 +02:00
Víctor Manuel Jáquez Leal
8c5d8b52ea v4l2: ensure autogenerated files are created
The tuner marshal and enumtypes are autogenerated, and they need
to be created before the compilation of gstv4l2tuner.c

This patch adds the automake instruction for ensuring the
autogeneration of those files previous the compilation.
2012-04-13 17:13:22 +02:00
Sebastian Dröge
d99eb6d2cb Update everything for the removal of the interface library and mixer/tuner interfaces 2012-04-13 13:15:11 +02:00
Tim-Philipp Müller
e09ae5736d Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
Sebastian Dröge
aa2cd462da gst: Update for GST_PLUGIN_DEFINE() API changes 2012-04-05 17:36:38 +02:00
Sebastian Dröge
5cdd49bf25 gst: Update versioning 2012-04-04 14:37:47 +02:00
Wim Taymans
3d61d12e03 update for buffer api change 2012-03-30 18:15:34 +02:00
Wim Taymans
e310ee8218 caps: improve caps handling
Avoid caps copy and leaks
2012-03-27 16:42:41 +02:00
Wim Taymans
098d8ceae7 v4l2: update for get_param
Remove const from the GstCaps.
Plug some GstStructure leaks
2012-03-27 12:44:46 +02:00
Wim Taymans
01838ff975 v4l2src: don't error in shutdown
Don't log with the ERROR category when we are stopping because we are shutting
down.

Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=672824
2012-03-26 16:00:42 +02:00
Wim Taymans
cfe58e7156 v4l2: fix latency 2012-03-26 15:51:28 +02:00
Wim Taymans
fa436c0799 v4l2: called base class start
Chain up to the base class start method so that metadata is properly tagged.
Remove an unused variable.

fixes: https://bugzilla.gnome.org/show_bug.cgi?id=672813
2012-03-26 15:33:59 +02:00
Wim Taymans
ced47580b7 update for bufferpool changes 2012-03-15 22:11:17 +01:00
Wim Taymans
f3a770a20c update for allocation query changes 2012-03-15 20:37:56 +01:00
Wim Taymans
6ed3bc109b update for bufferpool api change 2012-03-15 14:06:40 +01:00
Wim Taymans
ecaea36c3d update for memory api changes 2012-03-15 13:36:17 +01:00
Wim Taymans
751fcf035b take padding into account 2012-03-14 19:56:56 +01:00
Wim Taymans
a32d944a38 fix for caps api changes 2012-03-11 19:06:37 +01:00
Mark Nauwelaerts
26dd999b68 Merge branch 'master' into 0.11
Conflicts:
	ext/wavpack/gstwavpackparse.c
	sys/v4l2/gstv4l2bufferpool.c
	sys/v4l2/gstv4l2bufferpool.h
	sys/v4l2/gstv4l2videooverlay.c
2012-03-05 13:29:59 +01:00
Wim Taymans
2adc948d18 x-raw-bayer -> x-bayer 2012-03-05 12:43:17 +01:00
Oleksij Rempel (Alexey Fisher)
a83d2f7047 v4l2sink: don't use deprecated XKeycodeToKeysym
https://bugzilla.gnome.org/show_bug.cgi?id=671299

Signed-off-by: Oleksij Rempel (Alexey Fisher) <bug-track@fisher-privat.net>
2012-03-05 11:34:36 +00:00
Tim-Philipp Müller
6f707fcbca v4l2: clear DISCONT flag when recycling buffers into the buffer pool
The base class may have set the DISCONT flag on the first buffer pushed
out. We need to clear that when recycling buffers back into the buffer
pool, otherwise we constantly push out buffers with the discont flag
set, which might upset downstream elements, esp. for compressed
formats like mpeg-ts.
2012-03-03 13:07:45 +00:00
Oleksij Rempel (Alexey Fisher)
4cd9255f0a v4l2src: fix v4l2_munmap() for compressed formats
Make sure we always call munmap() with the same size we called mmap()
with before.

Current v4l2src uses the same structure for VIDIOC_QUERYBUF, VIDIOC_QBUF
and v4l2_munmap calls. The problem is that the video buffer size (length)
may vary for compressed or emulated bufs. VIDIOC_QBUF will change it if
we pass the pointer of a v4l2_buffer. This is why we should avoid using
same variable for mmap and video buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=671126
2012-03-03 13:07:40 +00:00
Sebastian Dröge
3299f39179 mixer/colorbalance: Update for API changes 2012-03-02 10:13:08 +01:00
Mark Nauwelaerts
f189f62b13 Merge branch 'master' into 0.11
Conflicts:
	ext/wavpack/gstwavpackenc.c
	tests/check/elements/audioiirfilter.c
	tests/examples/v4l2/probe.c
2012-03-01 11:29:50 +01:00
Wim Taymans
9c789aa434 update for metadata API changes 2012-02-29 17:26:01 +01:00
Wim Taymans
dda3219e4c update for metadata tags 2012-02-28 11:38:59 +01:00
Edward Hervey
9beda57c3a Suppress deprecation warnings in selected files, for g_value_array_* mostly 2012-02-27 14:47:25 +01:00
Wim Taymans
c17aa1565a v4l2: use public api
instead of poking into the private structures of the base class
2012-02-27 09:21:27 +01:00
Wim Taymans
0ab5677107 update for metadata change 2012-02-24 10:26:26 +01:00
Wim Taymans
ca9532ccc5 update for new memory api 2012-02-22 02:10:33 +01:00
Wim Taymans
6623ab258b Merge branch 'master' into 0.11 2012-02-16 14:23:50 +01:00
Gary Ching-Pang Lin
c1c858f273 v4l2src: failure to query some optional controls is not a fatal error
Don't post a (fatal) error message on the bus just because we
failed to query some control. Fixes issue with built-in
Suyin Corp webcam for HP notebook (usbid 064e:e28a) on
OpenSuse 12.1, where querying red/blue balance fails.

https://bugzilla.gnome.org/show_bug.cgi?id=670197
2012-02-16 13:10:47 +00:00
Tuukka Pasanen
ef37bb48bc v4l2src: fix for webcamstudio vloopback
Because vlooback emits 25 - ENOTTY and no EINVAL v4l2src thought it
can't handle this and does not work.

https://bugzilla.gnome.org/show_bug.cgi?id=669455
2012-02-16 12:59:10 +00:00
Wim Taymans
9365f12d6e GST_FLOW_WRONG_STATE -> GST_FLOW_FLUSHING 2012-02-08 16:43:30 +01:00
Sebastian Dröge
0b517ce9fb Merge branch '0.11' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-good into 0.11 2012-01-25 12:49:34 +01:00
Sebastian Dröge
10554b271f Merge branch 'master' into 0.11
Conflicts:
	ext/flac/gstflacdec.c
	ext/jpeg/gstjpegenc.c
	ext/pulse/pulsesink.c
	sys/v4l2/gstv4l2src.c
2012-01-25 12:49:11 +01:00
Wim Taymans
b4630dd3e0 more memory API porting 2012-01-25 12:30:29 +01:00
Wim Taymans
1584806634 port to new gthread API 2012-01-19 11:33:53 +01:00
Vincent Penquerc'h
b0608128b1 v4l2src: fix caps leak 2012-01-13 17:25:59 +00:00
Havard Graff
150403ab13 v4l2src: Don't assert when the interface is not implemented.
Simply return FALSE instead.

https://bugzilla.gnome.org/show_bug.cgi?id=667817
2012-01-13 10:07:20 +00:00
Sebastian Dröge
93e3ed5a86 Merge branch 'master' into 0.11
Conflicts:
	ext/cairo/gsttextoverlay.c
	ext/pulse/pulseaudiosink.c
	gst/audioparsers/gstaacparse.c
	gst/avi/gstavimux.c
	gst/flv/gstflvmux.c
	gst/interleave/interleave.c
	gst/isomp4/gstqtmux.c
	gst/matroska/matroska-demux.c
	gst/matroska/matroska-mux.c
	gst/matroska/matroska-mux.h
	gst/matroska/matroska-read-common.c
	gst/multifile/gstmultifilesink.c
	gst/multipart/multipartmux.c
	gst/shapewipe/gstshapewipe.c
	gst/smpte/gstsmpte.c
	gst/udp/gstmultiudpsink.c
	gst/videobox/gstvideobox.c
	gst/videocrop/gstaspectratiocrop.c
	gst/videomixer/videomixer.c
	gst/videomixer/videomixer2.c
	gst/wavparse/gstwavparse.c
	po/ja.po
	po/lv.po
	po/sr.po
	tests/check/Makefile.am
	tests/check/elements/qtmux.c
	tests/check/elements/rgvolume.c
2012-01-10 14:32:32 +01:00
Wim Taymans
4b8975f867 update for removed property probe 2011-12-21 11:59:46 +01:00
Wim Taymans
4f42f58565 v4l2: update for new interlaced caps 2011-12-19 19:03:52 +01:00
Tim-Philipp Müller
66f6e12888 Work around deprecated thread API in glib master
Add private replacements for deprecated functions such as
g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
to avoid the deprecation warnings. We'll change these
over to the new API once we depend on glib >= 2.32.
2011-12-12 09:46:27 +00:00
Tim-Philipp Müller
668e15598b Merge remote-tracking branch 'origin/master' into 0.11
Conflicts:
	sys/v4l2/gstv4l2object.c
2011-12-08 01:28:26 +00:00
Vincent Penquerc'h
687d6138d1 v4l2src: do not ignore the highest frame interval
https://bugzilla.gnome.org/show_bug.cgi?id=665387
2011-12-07 13:41:12 +00:00
Vincent Penquerc'h
2b0a001d0d v4l2src: do not ignore the largest resolution
The 'max' value isn't an STL style "one after the end" bound,
but the largest allowed value.

https://bugzilla.gnome.org/show_bug.cgi?id=665387
2011-12-07 13:41:12 +00:00
Tim-Philipp Müller
87ba312e19 v4l2: replace deprecated GST_CLASS_LOCK 2011-12-05 12:15:21 +00:00
Vincent Penquerc'h
1e974b1581 v4l2src: add a comment about a "hidden" assumption on rank values
https://bugzilla.gnome.org/show_bug.cgi?id=665387
2011-12-02 14:44:47 +00:00
Wim Taymans
710491109d fix for moved interfaces 2011-11-29 19:10:58 +01:00
Vincent Penquerc'h
c0e101e93f various: fix pad template leaks
https://bugzilla.gnome.org/show_bug.cgi?id=662664
2011-11-28 13:30:27 +00:00
Tim-Philipp Müller
736a484129 More printf format warning fixes 2011-11-22 01:40:39 +00:00
Wim Taymans
07cc855b24 Merge branch 'master' into 0.11
Conflicts:
	ext/speex/gstspeexenc.c
	gst/rtpmanager/rtpsession.c
2011-11-17 17:17:11 +01:00
Wim Taymans
797523efbd _peer_get_caps() -> _peer_query_caps() 2011-11-15 18:04:44 +01:00
Wim Taymans
b2d508ac40 update for _get_caps() -> _query_caps() 2011-11-15 18:04:44 +01:00
Sjoerd Simons
e7ae593993 v4l2: Set pixel-aspect-ratio to 1/1
We don't currently support setting the pixel-aspect-ratio from V4L2. So
simply set it to be 1/1 in the caps to prevent negotiation failures when
fixating to weird values (e.g. when the downstream caps has
pixel-aspect-ratio = [ MIN, MAX ] )

https://bugzilla.gnome.org/show_bug.cgi?id=663580
2011-11-14 11:43:41 +01:00
Tim-Philipp Müller
c27bbe4be2 Update for GstURIHandler get_protocols() changes 2011-11-13 23:44:44 +00:00
Tim-Philipp Müller
a150d1e734 soup, pushfile, rtsp, udp, v4l2: update for GstURIHandler API changes 2011-11-13 18:50:51 +00:00
Wim Taymans
88e398b0ea update for removed fixate function 2011-11-10 11:03:18 +01:00
Stefan Sauer
fb162c8eb4 controller: port to new controller location and api 2011-11-04 20:15:48 +01:00
Wim Taymans
b1ef7e8a86 update for meta api change 2011-11-02 09:06:37 +01:00
Wim Taymans
9a8a8e72c8 structure: fix for api update 2011-11-02 09:06:37 +01:00
Tim-Philipp Müller
d18a578ba4 rtpmanager, v4l2: fix compiler warnings after gst_caps_new_simple() change 2011-10-28 09:06:41 +01:00
Wim Taymans
fc4684f4c6 fix compilation 2011-10-27 16:03:17 +02:00
Stefan Sauer
2468492f02 interfaces: clean up the use of iface and class/klass 2011-10-21 14:58:41 +02:00
Wim Taymans
586ef0babd Merge branch 'master' into 0.11
Conflicts:
	ext/speex/gstspeexdec.c
	ext/speex/gstspeexenc.c
	gst/isomp4/atoms.c
	gst/isomp4/gstqtmux.c
2011-10-06 12:23:39 +02:00
Stas Sergeev
73fac4e5bc v4l2, ximagesrc: fix some printf format compiler warnings
https://bugzilla.gnome.org/show_bug.cgi?id=660150
2011-09-30 18:05:32 +01:00
Wim Taymans
87fbd1e784 Merge branch 'master' into 0.11
Conflicts:
	common
	ext/pulse/pulsesink.c
	ext/soup/gstsouphttpclientsink.c
	gst/audioparsers/gstaacparse.c
	gst/audioparsers/gstac3parse.c
	gst/rtp/gstrtph264depay.c
	gst/rtpmanager/gstrtpjitterbuffer.c
	gst/rtpmanager/rtpjitterbuffer.c
	gst/rtsp/gstrtspsrc.c
	sys/ximage/gstximagesrc.c
2011-09-28 12:44:59 +02:00
Guillaume Desmottes
06c65418d7 v4l2: use GST_RESOURCE_ERROR_BUSY if v4l2_ioctl fails with EBUSY
https://bugzilla.gnome.org/show_bug.cgi?id=658543
2011-09-08 15:04:42 +02:00
Wim Taymans
5b55cf057b Merge branch 'master' into 0.11
Conflicts:
	sys/v4l2/v4l2src_calls.c
2011-08-29 13:43:59 +02:00
Wim Taymans
75e153bb13 allocation: fix for vmethod changes 2011-08-26 14:20:49 +02:00
Vincent Penquerc'h
3968dc7688 v4l2src: make this work more than once in a row
We used to skip frame rate setup if the camera was already setup
with the requested frame rate. This breaks some cameras though,
causing them to not output data (several models of Thinkpad cameras
have this problem at least).
So, don't skip.

https://bugzilla.gnome.org/show_bug.cgi?id=638300
2011-08-26 10:33:10 +02:00
Wim Taymans
18065ac823 port to new video flags 2011-08-25 16:41:23 +02:00
Wim Taymans
44c1589b48 v4l2: improve fixate function
Use new core function to fixate a field.
Chain up to parent fixate function.
2011-08-17 17:57:11 +02:00
Wim Taymans
4bb2b140e9 Merge branch 'master' into 0.11
Conflicts:
	sys/v4l2/v4l2src_calls.c
2011-08-16 18:35:53 +02:00
Vincent Penquerc'h
639abf01f9 v4l2: take care not to change the current format where appropriate
Some drivers are buggy are will change the current format when
processing VIDIOC_TRY_FMT. Save and restore the current format
to ensure the format is kept unchanged.

https://bugzilla.gnome.org/show_bug.cgi?id=649067
2011-08-09 09:53:33 +02:00
Tim-Philipp Müller
d5db5ca9be v4l2: update for GstXOverlay => GstVideoOverlay rename 2011-08-08 15:25:31 +01:00
Sjoerd Simons
8edb15d12f v4l2src: Use fraction compare util function.
Use the fraction compare utility to compare function, not the
handcrafted one. The handcrafted one is buggy as it doesn't take into
account rounding error. For example comparing a framerate of 20/1 on a
camera configured as 30/1 fps would yield true: 1 == (1 * 20)/30 and not
re-configure the camera. Fixes #656104
2011-08-07 16:41:53 +02:00
Wim Taymans
1b1fb68c23 v4l2src: call set_caps method of baseclass
Call the baseclass set_caps function to make it send the caps event and
properly trigger the negotiation functions.
2011-08-04 16:35:46 +02:00
Edward Hervey
dc14c1ffc9 v4l2sink: Size variable should be a guint and not a gsize 2011-08-04 13:52:18 +02:00
Wim Taymans
add1cbdbd8 v4l2: activate the pool in fallback
When nobody is using our pool, activate it ourselves.
Avoid leaking the buffer array.
Set default pool configuration with caps.
Don't keep current_caps, core does that for us now.
2011-08-04 12:56:47 +01:00
Wim Taymans
4121021bb2 Merge branch 'master' into 0.11
Conflicts:
	ext/pulse/pulsesink.c
	ext/pulse/pulsesrc.c
	gst/audioparsers/gstac3parse.c
	gst/rtp/gstrtph264depay.c
	gst/rtp/gstrtph264pay.c
	gst/rtpmanager/gstrtpssrcdemux.c
2011-08-03 18:25:30 +02:00
Tim-Philipp Müller
a1712ad87c docs: fix two more Since: tags 2011-08-02 23:42:58 +01:00
Wim Taymans
752a6778b2 v4l: change for new API 2011-07-29 17:21:36 +02:00
Wim Taymans
63fc64dd98 v4l2: remove unused variables
Use the more specialized type for the bufferpool.
Use the size from the driver as the size of the image to read.
Don't configure the pool when created. This will be done in the setup_allocation
method later or by upstream for sinks.
Remove unused properties and variables. Bufferpool sizes are now configured in
the bufferpool by the elements in the pipeline. We might want to influence the
pool size later somehow.
2011-07-27 16:46:46 +02:00
Wim Taymans
b638bb4735 v4l2bufferpool: remove unused variable 2011-07-27 13:46:09 +02:00
Wim Taymans
f7c500fe9c v4l2src: add metadata 2011-07-27 13:43:08 +02:00
Wim Taymans
fcfdececce bufferpool: check for metadata
Only add video metadata when it was configured in the pool. Fail if there was no
video metadata configured and the strides are not the default ones.
2011-07-27 13:41:28 +02:00
Wim Taymans
443e9f7c1d v4l2: add colorspace to debug 2011-07-27 12:41:33 +01:00
Wim Taymans
8c4241427a v4l2: rename a variable
Rename the size variable to sizeimage and fill it with the size that has been
given to use by the v4l2 driver instead of making something up..
2011-07-26 16:15:05 +02:00
Wim Taymans
e43ab9f2cd v4l2: use new setup_allocation vmethod 2011-07-26 13:18:55 +02:00
Wim Taymans
b2e1532021 v4l2: implement more bits of RW I/O mode
Implement the relaese of RW buffers in the pool.
Warn for unsupported write() mode for sinks.
2011-07-26 10:56:07 +01:00
Wim Taymans
be32a6393e v4l2: improve IO mode error handling
Error out when an unsupported IO mode was selected
2011-07-26 10:54:23 +01:00
Wim Taymans
9a8f1c4339 v4l2: remove unused method 2011-07-25 15:51:22 +02:00
Wim Taymans
e6a8718f0c v4l2: fix flushing start and stop
Move the flushing calls to the right place in the bufferpool.
Fix the min and max buffer sizes.
2011-07-25 15:39:18 +02:00
Wim Taymans
0a88ac4c92 v4l2: dequeue buffers when all are queued
Prefer to always use the default bufferpool queue for the _acquire function
because it properly supports unblocking when setting inactive etc. As a result,
we need to dequeue buffers and put them back in the bufferpool queue when we
have queued all buffers in the sink.
Rename some variables to more meaningfull names to avoid a problem with
freeing the wrong amount of buffers.
2011-07-25 14:47:05 +01:00
Wim Taymans
b98bc75f47 v4l2: only to STREAMOFF when streaming
Only call STREAMOFF when we previously called STREAMON
2011-07-25 10:24:33 +01:00
Wim Taymans
44fa0b9cab v4l2: handle unsupported formats 2011-07-19 18:20:43 +01:00
Wim Taymans
87d9a57aba v4l2: Fix sink bufferpool handling
Remove old method, use neww _process method for the sink.
Inform the parent bufferpool class about the settings too. This is needed to let
it know about the max-buffers.
Allocate the negotiated max-buffers and initially mmap min-buffers. The idea is
that the bufferpool will allocate more when needed.
Improve debugging.
Only poll in capture mode, it does not seem to work in playback mode on this
beagleboard.
2011-07-19 16:59:55 +01:00
Wim Taymans
55eb26f1e7 v4l2: More work on bufferpools
Add different transport methods to the bufferpool (MMAP and READ/WRITE)
Do more parsing of the bufferpool config.
Start and stop streaming based on the bufferpool state.
Make separate methods for getting a buffer from the pool and filling it with
data. This allows us to fill buffers from other pools too. Either use copy or
read to fill up the target buffers.
Add property to force a transfer mode in v4l2src.
Increase default number of buffers to 4.
Negotiate bufferpool and its properties in v4l2src.
2011-07-18 18:54:49 +02:00
Wim Taymans
39716c02a7 v4l2: add IO method enum 2011-07-18 10:52:23 +02:00
Wim Taymans
23656bbb72 bufferpool: improve _new function 2011-07-18 10:51:21 +02:00
Wim Taymans
4440801ace v4l2: implement setup_allocation
Implement the setup_allocation vmethod, we'll hopefully do something clever in
there later.
2011-07-15 16:55:50 +02:00
Wim Taymans
3eaecf3aed v4l2: improve bufferpool config setting
Pass the caps and the default video size to the bufferpool config.
Don't activate the bufferpool, this will be done by the object that decides to
use the bufferpool.
Improve debugging and error reporting.
2011-07-15 16:26:06 +01:00
Wim Taymans
37ef3f8997 v4l2: handle dequeueing correcly
First clean up the buffers in the queue, then the remaining ones in the
device.
2011-07-15 13:52:38 +01:00
Wim Taymans
c807bfb693 v4l2: unref copied buffer
After we copy the incomming buffer to one of our bufferpool buffers, unref the
target buffer after rendering so that it is put back in the pool.
2011-07-15 13:29:42 +01:00
Wim Taymans
b1378f159a v4l2: dequeue buffers for the sink
When we have all buffers queued for playback and we need a new empty buffer,
dequeue one and return it.
Set the right size for sink buffers.
Improve counting of queued buffers.
2011-07-15 13:07:11 +01:00
Wim Taymans
4dc85b87d9 v4l2: use the parent queue for the sink
We want to maintain a queue of free buffers for the sink, use the parent methods
to do that.
2011-07-15 12:35:14 +01:00
Wim Taymans
47816e1155 v4l2: fix error messages 2011-07-15 12:00:54 +02:00
Wim Taymans
549a4ddc8f v4l2: add ALLOCATION query to the sink 2011-07-15 11:30:25 +02:00
Wim Taymans
21f532ae10 v4l2: convert to GstBufferPool
Extend from GstBufferPool.
Handle the lifetime of the pool buffers correctly with the start/stop vmethods.
Map acquire and release directly to QBUF and DQBUF. We still expose an explicit
qbuf for the v4l2sink for now.
2011-07-15 11:27:18 +02:00
Wim Taymans
0f16daed15 v4l2: remove experimental markers 2011-07-15 11:18:03 +02:00
Wim Taymans
ef18a3c09b v4l2: merge code 2011-07-14 16:21:36 +02:00
Wim Taymans
33d93069c1 v4l2: Move output details to device object
Move the details of how a buffer is rendered to the device object.
2011-07-14 16:12:15 +02:00
Wim Taymans
7c5f5b1b7f v4l2: move capture code to device object
Move the details of how to capture to the device object. Remove the
v4l2src_calls.[ch] files because they are empty now.
Provide two simple methods to get and return a buffer to the device.
Also do a slow copy when the buffer is not from our pool.
2011-07-13 18:32:00 +02:00
Wim Taymans
ebd03a3fad v4l2: add some more debug 2011-07-13 16:58:08 +02:00
Wim Taymans
d7a27613c1 v4l2: stop streaming in READY and NULL 2011-07-13 16:56:21 +01:00
Wim Taymans
387e76114d v4l2: start streaming for the output as well 2011-07-13 16:40:39 +02:00
Wim Taymans
d9e61954a1 v4l2: Let the device object manage the pool
Rename start and stop methods to open and close because that is what they do.
After setting the format on the device object, setup the bufferpools. Move this
code from the v4l2src_calls.c file, it is shared between source and sink.
Make new device start and stop method that merges various bits of common code
spread over several files.
2011-07-13 16:33:58 +02:00
Wim Taymans
398001f20d v4l2: don't store stride in the videoinfo
We want to keep the default strides in the videoinfo. Keep the stride of the
video frames separate so that we can use both to copy a video frame and do
correct stride conversion.
2011-07-13 13:52:30 +01:00
Wim Taymans
3aed125163 v4l2: Use video frame copy for raw video
Use the video frame copy API for raw video frames so that we copy with the right
strides.
2011-07-13 13:38:15 +02:00
Wim Taymans
e77d183a1e v4l2: add video metadata to raw video buffers 2011-07-13 13:37:58 +02:00
Wim Taymans
be83e4f704 v4l2: small cleanups 2011-07-13 13:15:16 +02:00
Wim Taymans
01def08e7a v4l2: improve caps parsing
Use GstVideoInfo to store the parsed caps.
Remove outsize from the caps parsing code, it's wrong because it does not use
the stride given by the driver.
2011-07-13 13:04:40 +02:00
Wim Taymans
c83730fc11 v4l2: use errno 2011-07-13 11:40:11 +01:00
Wim Taymans
6d97bfc41f v4l2: handle EINVAL without posting a warning
EINVAL means that a call is not supported, we only want to post a WARNING when
something is really wrong.
2011-07-13 11:36:54 +02:00
Wim Taymans
50ce1807f0 v4l2: only set framerate for capture for now 2011-07-13 11:29:26 +02:00
Wim Taymans
9f4cf3be58 v4l2: Move configuration of framerate to _set_format
Move the configuration of the framerate to where we set the other format
parameters.
Remove hack to check if the device is active.
Store streamparm in the device info.
Use some macros to access the current device configuration.
Remove some duplicate fields in src and sink and use the device configuration
instead.
2011-07-13 11:19:28 +02:00
Wim Taymans
100d46b5b9 v4l2: fix return value... 2011-07-12 19:13:45 +02:00
Wim Taymans
e8ae00f5fc v4l2: simplify setting the capture format
Pass the caps to the set_format function and make _set_format parse the caps.
Also keep the parsed values in the v4l2object so that we can refer to them when
we want.
2011-07-12 19:03:32 +01:00
Wim Taymans
b7ad28ba53 v4l2: remove more unused parameters 2011-07-12 18:41:47 +01:00
Wim Taymans
baa03a951b v4l: handle object out of the normal flow 2011-07-12 18:29:35 +01:00
Wim Taymans
0dcf0aebb0 v4l2: Let the bufferpool own the V4l2Object
Keep track of the currently configured format and setting in the
v4l2object.
Pass the v4l2object to the bufferpool constructor so that the bufferpool can
know everything about the currently configured settings. This also allows us
to remove some awkward code.
2011-07-12 18:13:42 +02:00
Wim Taymans
f55656dcfc v4l: remove caps argument, it's not needed
Remove the caps parameter, we don't need it anymore because we don't set
caps on buffers anymore.
2011-07-12 17:06:41 +02:00
Wim Taymans
59b86d2558 v4l: pass the bytesperline around
When setting a format, return the bytesperline to the caller so that it can be
used to allocate buffers.
2011-07-12 16:46:21 +01:00
Wim Taymans
1ef806181c pool: make buffer writable
We need writable buffers when we need to do a slow memcpy.
2011-07-12 16:43:04 +01:00
Wim Taymans
e9d80b9f14 v4l2sink: handle pools
Create a new pool in setcaps and stop/destroy the old one.
Remove buffer_alloc functions.
Check that we have v4l2 metadata in show_frame and fall back to memcpy into a
buffer from our pool if we don't receive one of our own buffers.
2011-07-11 13:51:52 +02:00
Wim Taymans
851f550003 v4l2: various cleanups
Various cleanups, avoids useless casts, move error handling outside of the main
code flow.
Negotiate to a resonable resolution instead of the max resolution.
2011-07-11 12:15:12 +02:00
Wim Taymans
3b4afcb8df v4l2: fix gray format, use filter in getcaps 2011-07-08 16:37:11 +02:00
Wim Taymans
7a296af37f v4l2: port and enable v4l2sink 2011-07-08 16:10:47 +02:00
Wim Taymans
b8640c8cd9 v4l2src: port to new video formats 2011-07-08 14:34:40 +02:00
Wim Taymans
e20d6f0bb5 v4l2: port to 0.11 2011-07-08 12:49:12 +02:00
Wim Taymans
d89790d545 Merge branch 'master' into 0.11
Conflicts:
	gst/avi/gstavidemux.c
	gst/rtp/gstrtpac3depay.c
	gst/rtp/gstrtpg726depay.c
	gst/rtp/gstrtpmpvdepay.c
	gst/videofilter/gstgamma.c
2011-05-24 17:34:19 +02:00
Rob Clark
9c9585116c v4l2: add norm property
Based on a patch by Guennadi Liakhovetski.

v2: updates because I forgot to add GstTuner interface to v4l2sink
v3: update to add all possible values to norm enum
2011-05-24 10:47:26 +02:00
Wim Taymans
e15651816e Merge branch 'master' into 0.11 2011-05-17 16:13:59 +02:00
Edward Hervey
1a310d558c v4l2objects: Only allow mpeg-ts on source objects
Ugly fix for #648312
2011-05-17 09:25:23 +02:00
Wim Taymans
7555d0949f Merge branch 'master' into 0.11
Conflicts:
	android/apetag.mk
	android/avi.mk
	android/flv.mk
	android/icydemux.mk
	android/id3demux.mk
	android/qtdemux.mk
	android/rtp.mk
	android/rtpmanager.mk
	android/rtsp.mk
	android/soup.mk
	android/udp.mk
	android/wavenc.mk
	android/wavparse.mk
	configure.ac
2011-04-18 10:23:45 +02:00
Tim-Philipp Müller
86d8c8162e v4l2sink: fix another unused-but-set-variable warning 2011-04-16 18:16:11 +01:00
Robert Swain
e02b7e7fdf v4l2src: Address unused but set variable
The v4l2object formats list was being obtained into a local variable and
then still used from the context. Make use of the local variable.
2011-04-16 13:15:03 +01:00
Sebastian Dröge
0b9cf7e47d v4l2radio: Free videodev string before replacing it 2011-04-14 13:38:30 +02:00
Wim Taymans
c124ba1489 Merge branch 'master' into 0.11
Conflicts:
	gst/rtsp/gstrtspsrc.c
2011-04-05 17:20:08 +02:00
Stefan Kost
270dd376bc docs: fix docuemntation warnings (and reindent) 2011-04-05 12:06:55 +03:00
Wim Taymans
8f22a09dc4 Merge branch 'master' into 0.11-fdo 2011-03-28 20:50:59 +02:00
Alexey Chernov
e7a63c34ac v4l2: new v4l2radio element to control analog radio devices
https://bugzilla.gnome.org/show_bug.cgi?id=640118
2011-03-27 20:29:43 +01:00
Wim Taymans
c63dc97adf meta: update for new API 2011-03-08 17:02:30 +00:00
Wim Taymans
a4fdb8ee44 Merge branch 'master' into 0.11
Conflicts:
	tests/examples/cairo/Makefile.am
2011-03-08 10:14:20 +00:00
David Schleef
910a6f0c96 v4l2: Use #ifdefs for V4L2_PIX_FMT_PJPG
It's only recently added to kernel headers.
2011-03-04 18:38:39 -08:00
Wim Taymans
338c300f5f Merge branch 'master' into 0.11 2011-03-04 16:30:36 +01:00
Tim-Philipp Müller
0cd62a10ad v4l2: remove unnecessary linux/videodev.h include
Causes compilation issues with newer kernel headers where the old
v4l interface has been removed.

https://bugzilla.gnome.org/show_bug.cgi?id=643716
2011-03-03 17:37:19 +00:00
Wim Taymans
de1ca68077 v4l2: register metadata 2011-02-28 11:58:49 +01:00
Wim Taymans
9c08bde90b meta: fix for new API 2011-02-28 11:58:49 +01:00
Wim Taymans
f229f4d192 metadata: use metadata for private buffer data
Use buffer metadata to store element private data.
2011-02-28 11:58:49 +01:00
Wim Taymans
d90a388289 miniobject: port to 0.11
Use buffer private data instead of subclassing.
2011-02-28 11:58:48 +01:00
Wim Taymans
759a3507d7 Merge branch 'master' into 0.11
Conflicts:
	configure.ac
2011-02-28 11:58:05 +01:00
Thiago Santos
5dac2e5fde v4l2: Add PJPG mapping
Adds mapping of progressive jpeg format
2011-02-15 16:14:25 -03:00
Mark Nauwelaerts
6b86b56abd v4l2: fix interlaced set_format configuration
Commit 6c8268dbfd broke recording
from interlaced v4l2 source (e.g. typical tv capture card) since
V4L2_FIELD_SEQ_TB (with fields stored separately) does not map
to currently defined interlaced format (fields stored interleaved).

Besides this mismatch, hardware might quite likely not support or
appreciate this field value, since querying supported formats mapped
_INTERLACED field formats to interlaced=true caps (so the latter should
not be mapped to field value that is not known to be supported).
2011-02-04 10:49:06 +01:00
Tim-Philipp Müller
9acda034f8 v4l2sink: fix accidental breakage of navigation interface support 2011-01-20 00:08:18 +00:00
Tim-Philipp Müller
9dcb60822f v4l2: define V4L2_FIELD_INTERLACED_{TB,BT} if not available in header
Older kernels don't have these, and there's no easy way to check for the
existance of enums that doesn't involve a configure check, so just define
these if the V4L2_CAP_VIDEO_OUTPUT_OVERLAY define is not there, which was
added in the same commit as the TB/BT enum. Fixes compilation on CentOS 5.

https://bugzilla.gnome.org/show_bug.cgi?id=639339
2011-01-12 22:41:17 +00:00
Tim-Philipp Müller
09d19e7dcd v4l2sink: don't put functional code like ioctl calls into g_return_if_fail()
These macros will expand to NOOPs given the right defines. Also,
g_return_if_fail() and friends are meant to be used to catch programming
errors (like invalid input to functions), not runtime error handling.
2011-01-07 01:35:45 +00:00
Tim-Philipp Müller
06b68c81b4 v4l2src: undo presumably accidental enablement of the GstXOverlay interface
Looks like this got enabled by accident when adding it to v4l2sink,
so undo this for now. Not sure it makes much sense in a GStreamer
context with current hardware.
2011-01-03 15:16:48 +00:00
Tim-Philipp Müller
b0eb10cc53 v4l2: mark v4l2sink as experimental and build only if --enable-experimental is passed
It's not really of 'good' quality yet, but there's a lot of
code shared with v4l2src, so not so easy to move it elswhere.

https://bugzilla.gnome.org/show_bug.cgi?id=612244
2011-01-02 11:40:29 +00:00
Tim-Philipp Müller
0be6bd355a Revert "v4l2: add norm property"
This reverts commit 9e1d419d07.

Reverting this since it adds unreviewed and bad API to v4l2src
(property of type enum, with seemingly random and unsorted values).
2011-01-02 11:40:28 +00:00
Rob Clark
6c8268dbfd v4l2: add interlaced support 2010-12-29 11:46:42 -06:00
Rob Clark
538d3a959b v4l2sink: add navigation support 2010-12-29 11:46:42 -06:00
Rob Clark
9e1d419d07 v4l2: add norm property
Based on a patch by Guennadi Liakhovetski.
2010-12-29 11:46:42 -06:00
Rob Clark
bb07a39c67 v4l2: cleanup get/set input/output
output devices should use get/set output, and in either case we should
not print a warning message if the ioctl fails but the device does not
claim to support the tuner interface
2010-12-29 11:46:41 -06:00
Rob Clark
bf88547489 v4l2xoverlay: add support to create window
If xoverlay is available, v4l2sink should create a window for the overlay to
display in.

The window automatically tries to make itself as large as possible.
This works well on a small screen, but perhaps should first attempt to use
the size of the video that is played (no scaling).
2010-12-29 11:46:41 -06:00
Rob Clark
ff5494046a v4l2sink: special handling for cases gst_buffer_make_metadata_writable()
Special case check for sub-buffers:  In certain cases, places like
GstBaseTransform, which might check that the buffer is writable before copying
metadata, timestamp, and such, will find that the buffer has more than one
reference to it.  In these cases, they will create a sub-buffer with an offset=0
and length equal to the original buffer size.

This could happen in two scenarios: (1) a tee in the pipeline, and (2) because
the refcnt is incremented in gst_mini_object_free() before the finalize function
is called, and decremented after it returns..  but returning this buffer to the
buffer pool in the finalize function, could wake up a thread blocked in
_buffer_alloc() which could run and get a buffer w/ refcnt==2 before the thread
originally unref'ing the buffer returns from finalize function and decrements
the refcnt back to 1!

This is related to issue #545501
2010-12-29 11:46:41 -06:00
Rob Clark
c3721534c9 v4l2: fix race condition
The size of the buffer would be zero'd out in gst_v4l2_buffer_finalize()
after the buffer is qbuf'd or pushed onto the queue of available buffers..
leaving a race condition where the thread waiting for the buffer could awake
and set back a valid size before the finalizing thread zeros out the length.
This would result that the newly allocated buffer has length of zero.
2010-12-29 11:46:41 -06:00
Rob Clark
34e448980b v4l2sink: add properties to control crop 2010-12-29 11:46:41 -06:00
Rob Clark
67cd90408f v4l2: re-enable x-overlay support 2010-12-29 11:46:41 -06:00
Rob Clark
417b899c44 v4l2sink: fix for PAUSED->READY->PAUSED state transitions
When v4l2sink goes to PAUSED->READY it only stops streaming, so the state
should be set to STATE_PENDING_STREAMON in case the element transitions
back to PLAYING.
2010-12-29 11:46:41 -06:00
Rob Clark
61db502a12 v4l2sink: add "min-queued-bufs" property 2010-12-29 11:46:41 -06:00
Rob Clark
0cec72b97e v4l2sink: Add support for blocking dequeue.
We'd prefer to throttle the decoder if we run out of buffers, to keep a bound
on memory usage.  Also, for OMAP4 it is a requirement of the decoder to not
alternate between memory alloced by the display driver and malloc'd userspace
memory.
2010-12-29 11:46:40 -06:00
Rob Clark
ecfbaf58a5 v4l2: clear flags before reusing buffer from buffer pool
note: this really only affects v4l2sink since gst_v4l2_buffer_pool_get() is
only called once per buffer in the v4l2src case (in
gst_v4l2src_buffer_pool_activate())
2010-12-29 11:46:40 -06:00
Rob Clark
e24cfa7250 v4l2sink: don't render preroll buffers
Most v4l2 drivers will get upset when you queue the same buffer twice in a
row without first dequeueing it.

Rendering of pre-roll buffers can be re-introduced later, but will require
tracking the state of the buffer, and avoiding to re-QBUF if the buffer has
already been passed to the driver.
2010-12-29 11:46:40 -06:00
Rob Clark
48a8b53bdd v4l2sink: Improve behavior for shared buffers.
When the decoder is using pad_alloc(), v4l2sink would behave badly if
the number of buffers ('queue-size' property) was not high enough to
account for all the buffers needed by the decoder, and other elements
(such as queues) between the decoder and v4l2sink.  This patch
slightly increases the default number of buffers, and changes v4l2sink
to drop frames rather than return an error in case the number of
buffers is not high enough.
2010-12-29 11:46:40 -06:00
Rob Clark
60c1a44917 v4l2: fix typo 2010-12-23 16:44:06 -06:00
Rob Clark
66387181ac fix compile errors on macosx
with i686-apple-darwin10-gcc-4.2.1:

gstv4l2object.c: In function 'gst_v4l2_object_get_nearest_size':
gstv4l2object.c:1988: warning: format '%u' expects type 'unsigned int', but argument 12 has type 'gint *'
gstv4l2object.c:1988: warning: format '%u' expects type 'unsigned int', but argument 13 has type 'gint *'
2010-12-17 19:19:35 -06:00
Wim Taymans
22443cfb13 v4l2: don't abuse the class lock
Use a new static lock to protect the probed device list instead of the object
class lock.
2010-12-07 11:40:58 +01:00
Janne Grunau
ab69275f4d v4l2src: set top field first for interlaced buffers if v4l2 exports it
https://bugzilla.gnome.org/show_bug.cgi?id=634393
2010-12-04 16:42:21 +00:00
Janne Grunau
351ac54822 v4l2src: check field information and set interlaced caps accordingly
Reject the format if the field type is not supported.

https://bugzilla.gnome.org/show_bug.cgi?id=634391
2010-12-04 16:39:35 +00:00
IOhannes m zmölnig
b37845dac0 v4l2sink: Only get/set overlay params if needed
it's perfectly ok for a video output device to not have overlay capabilities.
this patch removes the need to get/set the overlay parameters if the user
does not explicitely request one of the overlay properties
2010-10-10 11:23:39 +02:00
IOhannes m zmölnig
4ba93e9f1a v4l2sink: Protect against NULL-pointer access
gst_v4l2sink_change_state() would free the pool without checking whether there
was a valid pool...
2010-10-10 11:23:39 +02:00
Philippe Normand
672bfc3369 v4l2: use the xoverlay APIs 2010-09-21 13:40:33 +02:00
Tim-Philipp Müller
601b993f95 docs: add gtk-doc chunks with Since: markers for new v4l2src properties 2010-09-15 17:05:30 +01:00
Stefan Kost
1f4f4581d8 v4l2src: don't skip calculating the duration 2010-09-10 17:00:58 +03:00
Stefan Kost
a08d4a5447 v4l2src: add controlable colorbalance parameters
Expose colorbalance controls as object properties (like we do on xvimagesink).
Make them controlable.
2010-09-10 17:00:58 +03:00
David Schleef
178c57be4f v4l2src: add decimate property 2010-09-04 12:39:26 -07:00
Sjoerd Simons
e9a30e454a v4l2src: Use GstBaseSrc::block-size as fallback size 2010-09-04 14:52:11 +02:00
Sjoerd Simons
74d7521a7c v4l2src: Fix using mpegts via the mmap interface
MPEG doesn't have a static size per frame, so don't pretend it has one
and fail when capturing because it doesn't match. Instead mark the size
as unknown and let the read frame grabbing method use a reasonable fallback
value (assuming that's only for actual streaming formats)

Fixes bug #628349.
2010-09-04 14:52:11 +02:00
Tim-Philipp Müller
6321d9910d v4l2src: also log pixel formats in sorted order 2010-08-06 20:07:26 +01:00