Commit graph

121 commits

Author SHA1 Message Date
Edward Hervey
2ff87c0fb9 videomixer: if we're not linked downstream, we can do any format
Stupid me, assuming _get_allowed_caps() would actually return the
pad templates if there was no peer.
2010-06-04 11:44:09 +02:00
Edward Hervey
d72a2fb6da videomixer: Don't return caps in get_caps() that will be rejected
This commit basically puts _get_caps() in sync with accept_caps().

If we don't have a master pad OR the master pad caps aren't negotiated
then we just return the downstream allowed caps.

If we have a master pad with negotiated caps, we return those caps
with a free range of width/height/framerate
2010-06-03 19:01:14 +02:00
Edward Hervey
59dcdc37a0 videomixer: filter caps returned from downstream with our pad template. 2010-06-01 20:45:29 +02:00
Edward Hervey
01abf5b94e videomixer: Implement sinkpad GetCapsFunction.
This allows returning only the formats, width, height, framerate
and pixel-aspect-ratio that downstream can support.

https://bugzilla.gnome.org/show_bug.cgi?id=620148
2010-06-01 12:42:10 +02:00
Sebastian Dröge
f5bca501e5 videomixer: Don't mix input with different pixel aspect ratios
Fixes bug #618530.
2010-06-01 11:21:29 +02:00
Sebastian Dröge
85c6b9b712 videomixer: Make selection of a sinkpad number threadsafe 2010-05-05 19:35:48 +02:00
Sebastian Dröge
6dd3edd0f7 videomixer: Add support for YUY2, YVYU, UYVY 2010-04-29 19:28:22 +02:00
Sebastian Dröge
bd0b307a74 videomixer: Add support for Y444, Y42B, Y41B and YV12 2010-04-29 19:28:22 +02:00
Sebastian Dröge
5a530b19e8 videomixer: Fix byte order for MMX ARGB/AYUV color filling
Fixes bug #616409.
2010-04-22 13:30:55 +02:00
Sebastian Dröge
a27856e6b8 videomixer: Fix AYUV checker/color filling 2010-04-21 17:53:49 +02:00
Sebastian Dröge
3f88dce350 videomixer: Add i387 floating point registers to the clobbered registers list
They are the same as the mm0-mm7 MMX registers and will be overwritten
by the assembly code if gcc doesn't know about the MMX registers.

Note: They're all added to the list of clobbered registers in all cases
and not only when __MMX__ is not defined just to make sure that no other
bugs happen with this code just because some compiler version gets things
wrong.

Fixes bug #614466.
2010-04-19 16:57:19 +02:00
Sebastian Dröge
fe4ff4f324 videomixer: Add support for ABGR and RGBA
Now all 4 ARGB variants are supported by videomixer.
2010-03-20 17:32:48 +01:00
Tim-Philipp Müller
073201b329 build: Makefile.am cleanups
Mostly add $(GST_BASE_CFLAGS) where it was missing, but also fix up
order of flags and libs if needed (see docs/random/moving-plugins).
2010-03-18 21:34:24 +00:00
Benjamin Otte
1055aaa9cb Add -Wredundant-decls warning flag
Also fix compile issues
2010-03-17 19:35:10 +01:00
Benjamin Otte
3342b1679e Add -Wmissing-declarations -Wmissing-prototypes warning flags
And fix all the warnings.
2010-03-17 18:23:28 +01:00
Alessandro Decina
49b2a94644 Make sure FLUSH_STOP is sent so not to leave downstream flushing. 2010-02-24 02:05:49 +01:00
Wim Taymans
caec8d9837 videomixer: fix timestamp problems
When the pad with the highest framerate goes EOS, instead of not timestamping
output buffers, intepollate timestamps and durations from the last seen ones.

Fixes #608026
2010-02-12 13:53:57 +01:00
Sebastian Dröge
41b17ec2a7 videomixer: Fix assembly register constraints
Fixes bug #608209.
2010-01-27 16:35:10 +01:00
Stefan Kost
404e673ac0 videomixer: use 'q' constraint instead of 'r'
This avoids the "bad register name `%dil'" compilation errors on 32bit where
because of 'r' gcc puts the value in a general purpose register and then tries
to access the lower part as %dil/%sil which is not existing on 32bit. 'q' requests
a-d registers
2010-01-13 16:48:46 +02:00
Sebastian Dröge
daa52708b3 videomixer: Implement basic QoS
This drops frames if they're too late anyway before blending and all
that starts but QoS events are not forwarded upstream. In the future
the QoS events should be transformed somehow and forwarded upstream.
2010-01-11 19:32:35 +01:00
Sebastian Dröge
6158f401a1 videomixer: Add MMX implementations for I420 and all non-alpha RGB formats 2010-01-11 18:37:45 +01:00
Sebastian Dröge
2950262186 videomixer: Refactor processing functions
This allows easier plugging of optimized processing functions
in the future, like for SSE or AltiVec.
2010-01-11 18:37:44 +01:00
Wim Taymans
362785df88 videomixer: optimize blend code some more
Use more efficient formula that uses less multiplies.
Reduce the amount of scalar code, use MMX to calculate the desired
alpha value.
Unroll and handle 2 pixels in one iteration for improved pairing.
2009-12-25 12:38:45 +01:00
Wim Taymans
4f9ded7742 videomixer: scale and clamp
Scale and clamp to the max alpha values.
2009-12-24 22:59:09 +01:00
Wim Taymans
3c0f18d765 videomixer: some trivial cleanups 2009-12-24 21:45:12 +01:00
Sebastian Dröge
3ac6f5e48b videomixer: Fix assembly compilation on x86
Fixes bug #604814.
2009-12-17 18:14:55 +01:00
Sebastian Dröge
0a0f7ecc16 videomixer: Use movzbl instead of movzxb for moving one byte to a l register
For some reason latest gcc/binutils accept movzxb here while
movzbl would be correct and is the only thing accepted by older
gcc/binutils.

Fixes bug #604679.
2009-12-16 10:50:32 +01:00
Sebastian Dröge
9e45038d8d videomixer: src/dest are input and output of the AYUV blending MMX assembler 2009-12-16 06:59:01 +01:00
Sebastian Dröge
061ededa36 videomixer: Add MMX implementations of the AYUV blending and color filling functions
This provides a 20% speedup for blending and 100% for color filling.

The blending can probably be optimized even more.
2009-12-15 12:30:21 +01:00
Sebastian Dröge
66d3ac8fb7 videomixer: Dequeue current buffer on FLUSH_STOP and don't unref NULL buffers
... NULL buffers shouldn't really happen anymore when popping the
buffer from GstCollectPads but better check for this and print a warning.
2009-12-12 16:55:13 +01:00
Sebastian Dröge
760eaf7b2a videomixer: Fix stupid mistake in last commit 2009-12-11 13:11:12 +01:00
Sebastian Dröge
089d9d9dba videomixer: Don't do floating point math in the inner processing loop for I420 blending 2009-12-11 12:36:42 +01:00
Sebastian Dröge
6f51dfba95 videomixer: Remove wrong comments, copied from the I420 blend function 2009-12-10 10:48:49 +01:00
Sebastian Dröge
93089ef445 videomixer: The queued duration is a signed integer
...and it will really be negative sometimes.
2009-12-09 21:15:07 +01:00
Sebastian Dröge
7418dee253 videomixer: Only pop buffers from collectpads after they're fully consumed
This decreases latency and memory usage because new buffers are only
accepted by collectpads if there's no queued buffer.
2009-12-09 21:03:57 +01:00
Sebastian Dröge
b0f8978fd8 videomixer: Use gst_util_uint64_scale_int() for fps to seconds per frame calculations 2009-12-09 16:15:09 +01:00
Tim-Philipp Müller
0506545b04 videomixer: fix up Makefile some more
Remove CFLAGS from LIBADD and make order of the various CFLAGS and
LIBS at least consistent with each other.
2009-09-22 11:02:02 +01:00
Brian Cameron
341be447a6 videomixer: Add $(GST_PLUGINS_BASE_LIBS) to LDFLAGS for linking libgstvideo
Fixes bug #595897.
2009-09-22 08:09:39 +02:00
Sebastian Dröge
91ad86c0f9 videomixer: Random cleanup 2009-07-10 19:54:25 +02:00
Sebastian Dröge
f19ef7eada videomixer: Send queries to the master pad by default instead of all pads 2009-07-10 19:54:13 +02:00
Sebastian Dröge
0bf61ecfaf videomixer: Add RGB, BGR, xRGB, RGBx, xBGR, BGRx support 2009-07-10 19:35:49 +02:00
Sebastian Dröge
bbcb4f8f15 videomixer: Clean up debugging a bit 2009-07-10 17:43:07 +02:00
Sebastian Dröge
0775db4455 videomixer: Remove some redundant checks and error out immediately if not negotiated
Also stop leaking the output buffer in some error cases.
2009-07-10 17:33:40 +02:00
Sebastian Dröge
4ccd9c92ae videomixer: Remove the calculate_frame_size() function and use libgstvideo instead 2009-07-10 17:23:03 +02:00
Edward Hervey
34c97c0c6f videomixer: Remove unused link/unlink pad methods 2009-07-10 14:37:16 +02:00
Edward Hervey
b02949faeb videomixer: I420 mode: Add fast path for 0.0 and 1.0 alpha
If the source alpha is 0.0, we take nothing.
If the source alpha is 1.0, we overwrite everything.
2009-07-10 14:37:13 +02:00
Edward Hervey
3c88249d48 videomixer: I420 blending : Fix main algorithm.
When blending a source layer with an alpha of 'a' on top of another
destination layer we take the sum of:
* 'a' percent of the source layer
* (100 - 'a') percent of the destination layer (the remainder)
2009-07-10 14:37:10 +02:00
Edward Hervey
ace4cb2295 videomixer: Make debugging category global to all the code. 2009-07-10 14:37:07 +02:00
Edward Hervey
3ebf5e9a2a videomixer: improve readability of debugging statements. 2009-07-10 14:37:04 +02:00
Sebastian Dröge
356972740a videomixer: Make checker pattern lookup table constant 2009-07-08 18:19:45 +02:00