Commit graph

990 commits

Author SHA1 Message Date
Wim Taymans
b9bee1af8c video-converter: handle mixed interlaced
When dealing with mixed interlaced, setup a scaler and chroma-resampler
for both interlaced and progressive frames and switch between them
depending on the interlace mode of the input frame.
2014-11-21 16:06:54 +01:00
Wim Taymans
0358e23baf video-converter: Cleanup options parsing
Cleanup option parsing
Add some debug
2014-11-21 16:04:11 +01:00
Wim Taymans
d001b10f29 video-converter: there is no need to apply x offset to temp lines 2014-11-21 15:59:47 +01:00
Wim Taymans
1a3e8395bb video-scaler: ensure both fields have the same number of taps 2014-11-21 15:58:34 +01:00
Wim Taymans
eefdba6dbd video-converter: rework the options a little
Rework the options a little to make it nicer to set defaults.
2014-11-21 11:15:04 +01:00
Wim Taymans
7b7270ecff video-resampler: add option to limits taps
Add an option to limit the number of taps to use in automatic mode. The
problem is that for lanczos, we might use more taps than what we can
handle with the current precision.
Rework the other options a little to make it nicer to set defaults.
2014-11-21 11:12:50 +01:00
Wim Taymans
6620ab9d31 video: update orc files 2014-11-20 18:20:28 +01:00
Sebastian Dröge
823f170fac video-converter: Use correct enum, GstVideoFormat instead of GstFormat 2014-11-19 14:38:03 +01:00
Wim Taymans
9647a8ca78 video-converter: fix size check
Add some debug, fix size check that decides what scaling to do first and
when to do conversion.
2014-11-19 13:25:13 +01:00
Wim Taymans
23adc12e02 video-converter: avoid primaries conversion when asked
Don't do conversion between primaries when the option is disabled.
Only do some matrix code when needed.
2014-11-19 12:55:03 +01:00
Wim Taymans
f6683b8f14 video-info: add a note about subsampled formats
Add a note about gst_video_info_set_format() and interlaced formats.
2014-11-19 12:55:03 +01:00
Wim Taymans
24989b53fc video-info: handle interlaced size correctly
Refactor GstVideoInfo init, make function to set default colorimetry.
Call fill_planes after we configure the GstVideoInfo with parameters
from the caps.
The size of the chroma planes for interlaced vertically subsampled
formats needs to be rounded up to 2, we have 2 fields with each
the same anount of chroma lines.
2014-11-19 12:55:03 +01:00
Wim Taymans
8f43cc67d5 video-color: return FALSE on unparsable colorimetry 2014-11-19 12:55:02 +01:00
Wim Taymans
5c043f3d50 video-format: handle unpack interlaced subsampled formats
For interlaced vertically subsampled formats the check for even lines
needs to take into account the two fields.
2014-11-19 12:55:02 +01:00
Wim Taymans
588fdeb834 video-scaler: fix interlaced shift 2014-11-19 12:55:02 +01:00
Wim Taymans
ac756ba0d9 video-converter: keep a small backlog of lines
Allow lines to jump backwards slightly, usefull for interlaced content.
2014-11-19 12:55:02 +01:00
Wim Taymans
b911434716 video-chroma: Fix interlaced chroma resampling
Use the interlaced flag to select the right resampler.
2014-11-19 12:55:02 +01:00
Wim Taymans
d6ed383c6f video: add some more debuging 2014-11-19 12:55:02 +01:00
Wim Taymans
7d0cef3bcb video-scaler: fix interlacing some more
Use the right phase.
Take the right lines from interlaced content.
2014-11-19 12:55:02 +01:00
Wim Taymans
73349f14b9 video-converter: fix dither method 2014-11-19 12:55:02 +01:00
Wim Taymans
c116da93f1 video-converter: fix some leaks
And remove some unused fields.
2014-11-19 12:55:02 +01:00
Wim Taymans
cfc173e96b video-converter: add support for gamma and primaries
Keep only 1 structure with all matrix information.
Add structure to hold gamma information.
Add more options to control gamma, primaries and color matrix handling.
Add functions to compute transformations to and from XYZ and use this
to convert between primaries.
Merge gamma into the convert to and from RGB stage.
Fix border val.
Simplify the fastpath table, remove unused fields, add some more checks.
2014-11-19 12:55:02 +01:00
Wim Taymans
7c02acc544 video-color: add method to get primaries info 2014-11-19 12:55:02 +01:00
Wim Taymans
943e1319a2 video-color: fix default 601 primaries 2014-11-19 12:55:02 +01:00
Wim Taymans
d03bad7761 video-scaler: fix interlaced taps setup 2014-11-19 12:55:02 +01:00
Wim Taymans
c98bc6fdc6 video-color: make sRGB colorimetry the default for RGB 2014-11-19 12:55:02 +01:00
Wim Taymans
63012a07c5 video-converter: split YUV to and from RGB conversions
Prepare for doing full gamma corrected conversion and scaling by first
splitting the conversions from and to RGB into separate steps.
split scaling in downscaling and upscaling steps to be performed before
and after conversion respectively.
2014-11-19 12:55:02 +01:00
Wim Taymans
f51bed2a3b video-converter: don't convert too much
because we do conversion after downscaling we only need to convert the
smallest width.
2014-11-19 12:55:02 +01:00
Wim Taymans
fc5dd035fa video-converter: add orc splat functions to draw border 2014-11-19 12:55:02 +01:00
Tim-Philipp Müller
5339e4507a video-blend: minor optimisation
Only need to run matrix on those pixels which
will actually be used.
2014-11-16 23:26:45 +00:00
Tim-Philipp Müller
9396d843d6 video-blend: fix clipping of overlay images on the left
Fix clipping of images that are partially left of the video
surface, they would get clipped on the right side instead of
the left side, because the video unpack functions currently
ignore the x offset parameter. Work around that until that
is implemented.

https://bugzilla.gnome.org/show_bug.cgi?id=739281
2014-11-16 16:44:43 +00:00
Tim-Philipp Müller
2fae23c318 video-blend: fix allocation of temp src line for wide sources
Fix allocation of temporary source line buffers for source
images that are wider than the video overlay surface.
2014-11-16 16:44:36 +00:00
Vineeth T M
9032c12e69 video-blend: fix blending of rectangles partially or fully outside of the video
In case of overlay being completely or partially outside
the video frame, the offset calculations are not right,
which resulted in the overlay not being displayed as
expected, or crashes due to invalid memory access.

When the overlay rectangle is completely outside,
we need not render the overlay at all.

For partial display of overlay rectangles, src_yoff
was not being calculated, hence it was always clipping
the bottom half of the overlay, By calculating the
src_yoff, now the overlay is clipped properly.

https://bugzilla.gnome.org/show_bug.cgi?id=739281
2014-11-16 13:55:22 +00:00
Wim Taymans
61e84bc435 video-converter: take offset into account when unpacking
When we can directly take the input line from the source frame when
unpacking, also take into account the x offset.
2014-11-12 09:57:38 +01:00
Wim Taymans
bb4863111b video-converter: add some notes 2014-11-12 09:57:12 +01:00
Wim Taymans
b73096ce8c video-color: add gamma encode/decode functions
Add functions to encode and decode gamma.
Add unit test to check that encode and decode are eachothers inverse
and that the limits are respected.
2014-11-11 16:11:15 +01:00
Wim Taymans
c5271a2eae video-orc: update disted file
and disable one failing function
2014-11-10 12:01:48 +01:00
Wim Taymans
70cdd9195f video-orc: use faster saturating conversions
saturating conversions are generally faster.
2014-11-10 11:45:52 +01:00
Wim Taymans
dcd02cd323 video-chroma: add ORC version of UP_H2_CS
It is however slower than the C version and thus disabled.
2014-11-10 11:45:52 +01:00
Wim Taymans
39662d0393 video-chroma: ORCify 2x vertical upsampling
Make an ORC version of the 2x vertical upsampling code.
Improve unit tests, test chroma up and down sampling.
memset buffer in conversion to make valgrind happy.
2014-11-07 12:13:28 +01:00
Wim Taymans
780df29cb1 video-info: use h-cosited chroma for HD video by default 2014-11-06 18:19:44 +01:00
Wim Taymans
7690d97189 video-converter: clamp lines 2014-11-06 18:19:44 +01:00
Wim Taymans
87d59ac66d video-orc: update disted files 2014-11-06 16:29:16 +01:00
Wim Taymans
d35c5fd75c video-converter: ORCify 8<->16 conversion 2014-11-06 16:26:24 +01:00
Wim Taymans
da6f66e550 video-converter: unpack into the destination when needed
Make sure we write into the destination line when we can propose the
dest allocator.
2014-11-06 16:26:24 +01:00
Wim Taymans
d148963c7a video-converter: add more debug 2014-11-06 16:26:24 +01:00
Sebastian Dröge
860dfa93c9 video: Update disted orc files 2014-11-06 15:01:27 +01:00
Wim Taymans
21f57317bb video-chroma: optimize chroma subsampling a little
Combine multiplies in 4x filters.
Rename conversion functions to make them nicer in orc.
Add ORC versions for various downsampling algorithms
Add unit test chroma resampler
2014-11-06 13:08:42 +01:00
Wim Taymans
57b9ea8f54 video-format: update some docs and add a FIXME(2.0) 2014-11-06 10:45:13 +01:00
Wim Taymans
0f64126919 video-format: add range extension to BGR_10XE format 2014-11-06 10:45:13 +01:00
Wim Taymans
cecb900704 video-format: fix pack of 4:2:0 formats
When packing 4:2:0 formats, we need to take the chroma from the even
lines, for the odd lines we only take luminance.
2014-11-06 10:45:13 +01:00
Wim Taymans
1f14077b41 video-format: fix range extension of UYVP
We need to shift the top 6 bits to the lower 6 bits
2014-11-06 10:45:13 +01:00
Wim Taymans
3f44aaf810 video-chroma: do h subsampling after v subsampling
We only need to do the horizontal subsampling on 1 line if we do it
after vertical subsampling and we also avoid doing vertical subsampling
on unused pixels.
2014-11-06 10:45:13 +01:00
Wim Taymans
7888b4f9fa video-converter: keep separate lines with border
Make separate with a border around them so that we can avoid a memcpy.
2014-11-05 11:55:22 +01:00
Wim Taymans
cf970376df video-scaler: avoid memcpy when not needed 2014-11-05 11:55:22 +01:00
Wim Taymans
0980dfcb99 video-converter: pass output line correctly 2014-11-05 11:55:21 +01:00
Wim Taymans
3dd059baf3 video-converter: rework the converter to allow more optimizations
Rework the converter, keep track of the conversion steps by chaining the
cache objects together. We can then walk the chain and decide the
optimal allocation pattern.
Remove the free function, we're not going to need this anytime soon.
Keep track of what output line we're constructing so that we can let the
allocator return a line directly into the target image when possible.
Directly read from the source pixels when possible.
2014-11-04 17:38:11 +01:00
Wim Taymans
3286320297 video-scaler: fix temp line allocation
We need to allocate the templine with the amount of pixels we are going
to handle, which we only know for the vertical resampler when we are
asked to resample.
2014-11-04 17:38:11 +01:00
Wim Taymans
67a4702b19 video-scaler: fix taps in interlaced mode 2014-11-04 17:38:11 +01:00
Wim Taymans
562416bb94 video-scaler: fix phases in interlaced mode 2014-11-04 17:38:11 +01:00
Wim Taymans
9cc353ce7c video-orc: fix v_2tap_u16 2014-11-04 17:36:49 +01:00
Wim Taymans
7a56ec1186 video-converter: add extra pixels for the border
We need extra pixels for the border.
2014-11-03 16:19:25 +01:00
Wim Taymans
bd6d2b40d1 video-scaler: add support for 16bits formats
Add scaler functions for 16 bits formats.
Rename the scaler functions so that 16bits versions don't look too
weird.
Remove old unused h_2tap functions
Fix v_ntap functions, it was using 1 tap too little.
2014-11-03 15:41:02 +01:00
Wim Taymans
e72a01e949 video-converter: Add support for 16 bits formats
Rework the way we track the current state of the video through the
different conversion phases and use this to make sure we use the right
format and pstride where needed.
2014-11-03 15:41:02 +01:00
Wim Taymans
2f38f83c08 video-orc: comment out unused function
A faster version of 4tap horizontal scaling causes segfaults in ORC
presumably because it uses too many registers so disable it to avoid
crashing in the ORC tests.
2014-11-03 10:07:56 +01:00
Sebastian Dröge
b4ee10f616 video-scaler: Fix compiler warning
video-scaler.c:151:58: error: implicit conversion from enumeration type
      'GstVideoScalerFlags' to different enumeration type
      'GstVideoResamplerFlags' [-Werror,-Wenum-conversion]
    gst_video_resampler_init (&scale->resampler, method, flags, out_size,
    ~~~~~~~~~~~~~~~~~~~~~~~~                             ^~~~~
2014-11-03 08:12:44 +01:00
Tim-Philipp Müller
c409d134de video: fix some g-i / gtk-doc warnings 2014-11-01 14:58:13 +00:00
Tim-Philipp Müller
d2e364ff7a video: update disted orc backup functions
Fixes build without orc.
2014-11-01 14:47:26 +00:00
Tim-Philipp Müller
f04a9589d4 video: add video blend helper functions to docs
I don't think those were ever meant to be made public,
but they are, so we might as well document them.
2014-11-01 14:30:07 +00:00
Wim Taymans
ceee8d5d40 video-scaler: ORCify vertical ntap function 2014-11-01 13:15:29 +01:00
Wim Taymans
45462d2ea4 video-scaler: handle 4tap interlaced 2014-11-01 13:15:29 +01:00
Wim Taymans
cfa1f73f45 video-orc: update dist files 2014-10-31 16:53:06 +01:00
Wim Taymans
524d30a168 video-scaler: add ORC optimized ntap horizontal scalers 2014-10-31 16:50:49 +01:00
Jan Schmidt
691f020c57 video: Update disted orc files for new functions.
Fixes the build when building without ORC
2014-10-31 22:52:43 +11:00
Wim Taymans
b3ff9c030f video-converter: align offsets to subsampling
Only apply an offset that is a multiple of the subsampling. To handle
arbitrary offsets in the future, we need to be able to chroma-resample
part of the borders.
2014-10-31 11:23:21 +01:00
Wim Taymans
308d21c71f video-converter: clamp output lines 2014-10-31 11:23:21 +01:00
Wim Taymans
b2eb5f02fc video-format: add alignment checks
Some of the ORC functions need specific alignment
2014-10-31 11:23:21 +01:00
Wim Taymans
19cd171035 video-scaler: fix offset check 2014-10-31 11:23:21 +01:00
Wim Taymans
5c3c42b95d video-converter: also chroma up/downsample when scaling 2014-10-31 11:23:21 +01:00
Wim Taymans
6a529cb1dd video-converter: clamp input lines correctly 2014-10-31 11:23:21 +01:00
Tim-Philipp Müller
ef98393b0d video-scaler: fix build without orc
https://bugzilla.gnome.org/show_bug.cgi?id=739433
2014-10-30 23:53:39 +00:00
Wim Taymans
5cf4aa358d video-converter: add border color 2014-10-30 17:34:48 +01:00
Wim Taymans
ce2d4d40a1 video-converter: add support for src/dest regions
Add support for cropping the source and placing the converted image
into a rectangle in the destination frame.
Add an option to add a border and border color.
2014-10-30 17:34:48 +01:00
Wim Taymans
49d909dabf video-scaler: add more ORC functions
Add the old ORC functions for nearest and linear. Label them as Low
quality because they are not as accurate but ORC lacks opcodes to
express this for now.
2014-10-30 11:48:00 +01:00
Wim Taymans
ca2bd1cc6b video-scaler: rename resampler to video-resampler
Prefix the resampler with video-. It we would like to reuse the
resampler for audio later, we can copy/move it and deprecate this
one.
2014-10-30 11:48:00 +01:00
Wim Taymans
daf20d5e09 video-scaler: remove color range argument
We just need to clip to the format limits, if there is extra headroom in
the range we can use that without problems.
2014-10-29 17:38:33 +01:00
Wim Taymans
21ba193dd6 video-scaler: add ORC optimized versions
Add ORC optimized versions of 2 and 4tap vertical scaling. Provide
a high quality 12 bits and a low quality 6 bits version.
2014-10-29 16:26:19 +01:00
Wim Taymans
84176843c1 video-scaler: add precision to make_s16_taps 2014-10-29 16:26:19 +01:00
Wim Taymans
72b30ac5ed video-converter: copy config fields
When setting a new config, copy all the fields into our own config and
not only the ones we know about.
2014-10-29 16:26:19 +01:00
Wim Taymans
28e5ed00de resampler: make offset/phase/n_taps uint32
Make various resizer fields uint32 so that we can use them in ORC
functions later.
2014-10-29 16:26:19 +01:00
Wim Taymans
9591e22fee video-converter: don't convert too much
Always convert the smallest width.
2014-10-29 16:26:10 +01:00
Wim Taymans
fcc7fbd460 resampler: make shift easier to use 2014-10-29 16:26:10 +01:00
Wim Taymans
716b91d86e resampler: add parameters to cubic filter
Improve cubic filter and add parameters. Switch to mitchell filter
by default.
2014-10-29 16:26:10 +01:00
Wim Taymans
32047eaac0 video-scaler: add extra options 2014-10-29 16:26:10 +01:00
Wim Taymans
c409a45d13 video-converter: define some options 2014-10-29 16:26:10 +01:00
Wim Taymans
ad0e0006b2 resampler: add some options 2014-10-29 16:26:10 +01:00
Wim Taymans
b4a5001e3c resampler: limit max number of taps
Don't use more taps than the input size.
2014-10-29 16:26:10 +01:00
Wim Taymans
a81d450b7e video-converter: add scaling support
Add scaling support for the video-converter object
2014-10-29 16:26:10 +01:00
Wim Taymans
199fab4b06 video-scaler: add video scaler helper object
Add a video scaler object build on top of the resampler. It has
implementation to deal with interlaced video as well as horizontal and
vertical scaling functions.
2014-10-29 16:26:10 +01:00
Wim Taymans
c9c9e8158d video: add generic resampler
Add an object that can generate a set of resample filter coefficients.
2014-10-29 16:26:10 +01:00