Commit graph

1047 commits

Author SHA1 Message Date
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
Wim Taymans
549bdd4ece video-converter: rework the generic converter function
Use a LineCache object to track and process lines between unpack,
upsample, convert, downsample and pack stages. This simplifies the
main core processing function a lot and allows for future additions
easily.

Add support for interlaced formats in chroma up and downsampling.
2014-10-29 16:26:10 +01:00
Wim Taymans
71efeaaa6f video-convert: swap src and dest
It is more natural and consistent with other uses.
2014-10-29 16:26:10 +01:00
Wim Taymans
6547985f27 video-chroma: fix typo 2014-10-29 16:26:10 +01:00
Vineeth T M
2847a8108c video-blend: segfault when xpos >= video size
When the xpos is given as greater than or equal to the video size,
we get a segfault, due to improper condition.
Hence adding proper conditions.

https://bugzilla.gnome.org/show_bug.cgi?id=738984
2014-10-27 10:29:15 +00:00
Luis de Bethencourt
3f5b9c4c8b videoblend: Avoid assigning a negative value to a guint
There are some few but certain conditions where it is possible for the
dest_width to be smaller than x. So we check this before assigning a negative
value to src_width, which is a unsigned and would be promoted to a number that
can segfault videoblend.

https://bugzilla.gnome.org/show_bug.cgi?id=738242
2014-10-11 19:10:46 +01:00
Wim Taymans
e115e5059b video-chroma: improve 4x downsampling coefficients 2014-10-08 11:36:15 +02:00
Sebastian Dröge
2c4bd2296a videoconverter: Free the converter config in free() 2014-10-06 10:11:05 +03:00
Sebastian Dröge
7b428a8bcb videoencoder: Stop storing if we received EOS
This was never reset when going from PAUSED->READY and resulted
in encoders being not reusable after EOS. They just rejected any
buffer because they received EOS in their previous life.

The flag wasn't used anywhere except for rejecting buffers after
EOS, and this is now handled by GstPad directly.
2014-10-04 23:09:19 +03:00
Aurélien Zanelli
9297fe9ba0 videoencoder: release frame in finish_frame when no output state is configured
Otherwise, frame is leaked.

https://bugzilla.gnome.org/show_bug.cgi?id=737706
2014-10-01 12:53:45 +03:00
Wim Taymans
b5f3e5261a video-converter: add orc optimized matrix8 function
Add an ORC implementation of the matrix8 function.
Regenerate video-orc-dist.[ch]
2014-09-29 17:28:06 +02:00
Rico Tzschichholz
c9f4ebf495 video: Make sure to link against libm 2014-09-27 19:09:08 +01:00
Wim Taymans
07d1d7ba38 video: improve YUV -> RGB conversion
Reorganize orc instructions to free up some registers.
We can reuse the ORC code to implement the generic AYUV->ARGB matrix.
2014-09-26 18:14:11 +02:00
Tim-Philipp Müller
70d729aa8c video: update disted orc backup files 2014-09-25 15:19:46 +01:00
Wim Taymans
98c42dc5e4 video: convertor -> converter 2014-09-24 16:19:30 +02:00
Wim Taymans
b2fd20c416 video: move videoconvert code to video library
Move the conversion code used in videoconvert to the video library
and expose a simple but generic API to do arbitrary conversion. It can
currently do colorspace conversion but the plan is to add videoscale to
it as well.

See https://bugzilla.gnome.org/show_bug.cgi?id=732415
2014-09-24 15:59:39 +02:00
Wim Taymans
0c40b83ed4 video-color: add gst_video_color_matrix_get_Kr_Kb()
Move the function to get the color matrix coefficients from
videoconvert to the video library.
2014-09-24 15:59:39 +02:00
Ognyan Tonchev
00b43badc7 videopool: add missing annotation for gst_video_buffer_pool_new()
https://bugzilla.gnome.org/show_bug.cgi?id=737072
2014-09-24 11:02:42 +03:00
Stefan Sauer
cabe5746fb videoencoder: log the timestamps if we are unhappy about them
When complaining about the DTS!=PTS on keyframes log the actualy timestamps.
2014-09-22 20:16:31 +02:00
Ognyan Tonchev
29f548a7cd videodecoder: do not leak events when flushing them
https://bugzilla.gnome.org/show_bug.cgi?id=736796
2014-09-18 12:40:15 +03:00
Ognyan Tonchev
d8260cdb89 videoencoder: do not leak events when flushing them
https://bugzilla.gnome.org/show_bug.cgi?id=736796
2014-09-18 12:40:08 +03:00
Sebastian Dröge
269f642c45 video-frame: Don't ref buffers twice when mapping 2014-09-16 01:07:18 +03:00
Ognyan Tonchev
787b3fa7ec videodecoder: do not leak pool and allocator in error case
https://bugzilla.gnome.org/show_bug.cgi?id=736679
2014-09-15 10:43:23 -04:00
Sebastian Dröge
3a7cdcdfc9 videofilter: Use new GST_VIDEO_FRAME_MAP_FLAG_NO_REF
https://bugzilla.gnome.org/show_bug.cgi?id=736118
2014-09-12 14:41:01 +03:00
Sebastian Dröge
40a293d44d video-frame: Add GST_VIDEO_FRAME_MAP_FLAG_NO_REF
This makes sure that the buffer is not reffed another time when
storing it in the GstVideoFrame, keeping it writable if it was
writable.

https://bugzilla.gnome.org/show_bug.cgi?id=736118
2014-09-12 14:39:16 +03:00
Sebastian Dröge
f711288c7c videofilter: Unref buffers before calling the transform_frame functions
GstVideoFrame has another reference, so the buffer looks unwriteable,
meaning that we can't attach any metas or anything to it

https://bugzilla.gnome.org/show_bug.cgi?id=736118
2014-09-12 14:27:44 +03:00
Sebastian Dröge
0a19783291 videodecoder: Fix broken boolean expression
We can seek with end_type==NONE and end_type==SET && end_position=-1. The
check for end_type!=NONE made the second condition impossible.

CID 1226440
2014-08-28 17:06:22 +03:00
Jan Schmidt
c98f051548 video: Add gst_video_guess_framerate() function
Takes a nominal frame duration and returns a standard
FPS if it matches closely enough (< 0.1%), or else
calculates a framerate that'll do.
2014-08-15 01:08:22 +10:00
Jan Schmidt
2a37534129 video: Various simple docs fixes 2014-08-15 01:08:12 +10:00
Jan Schmidt
946dc6b09f videodecoder: Reset last_timestamp_out on new segment
Reset last_timestamp_out when applying the output segment
change, to avoid decoder confusion over new timestamp timelines when
a seamless segment change happens.

Move some locks/unlocks to later when they're actually needed.

https://bugzilla.gnome.org/show_bug.cgi?id=734617
2014-08-14 17:59:06 +10:00
Jan Alexander Steffens (heftig)
8a1f8623fa videodecoder: Don't set decoding timestamps on raw video
https://bugzilla.gnome.org/show_bug.cgi?id=733720
2014-08-11 10:29:33 +02:00
George Kiagiadakis
a4d97f49e2 videodecoder: In reverse playback, flush the output queue after decoding each keyframe chain
This fixes the reverse playback scenario when upstream is not fully
parsing the stream and does not send every keyframe chain separately
with the DISCONT flag on the keyframe.

To explain this, let's suppose we have this stream:
 0 1 2 3 4 5 6 7 8
 K     K     K

In most circumstances, the upstream parser will chain in the
decoder the buffers in the following order:

 6 7 8 3 4 5 0 1 2
 D     D     D

In this case, GstVideoDecoder will flush the parse queue every time
it receives discont (D) and we will eventually get in the output queue:

  (flush here) 8 7 6  (flush here) 5 4 3 (flush here) 2 1 0

In case the upstream parser doesn't do this work, though,
GstVideoDecoder will receive the whole stream at once and will flush
the parse queue afterwards:

 0 1 2 3 4 5 6 7 8
 D

During the flush, it will look backwards for keyframes and will
decode in this order:

 6 7 8 3 4 5 0 1 2

This is the same order that it would receive from upstream if
upstream was parsing and looking for the keyframes, only that now
there is no flushing of the output queue in between keyframes,
which will result in the output queue looking like this:

 2 1 0 6 5 3 8 7 6

This will confuse downstream obviously and will play incorrectly.
This patch forces the decoder to flush the output queue every time
it picks a new keyframe to decode, so it will end up decoding 6 7 8
and then flushing before picking 3 for decoding, so the output will
get 8 7 6 before 6 5 3 and the video will play back correctly.

https://bugzilla.gnome.org/show_bug.cgi?id=734441
2014-08-11 10:22:55 +02:00
Nicolas Dufresne
ce50fc221e videoencoder: Don't delay set_format
This prevent implementing allocation query, as the format need to be
known in order to determin the size and number of buffers needed.

Note: This may lead to few regressions that will need fixing

https://bugzilla.gnome.org/show_bug.cgi?id=732288
2014-07-25 14:12:02 -04:00
Sebastian Dröge
11ef208736 videodecoder: Handle CAPS events immediately instead of delaying them
https://bugzilla.gnome.org/show_bug.cgi?id=733147
2014-07-21 09:35:37 +02:00
Gwenole Beauchesne
fb44ec9615 videodecoder: parse any source data that is still available.
Fix gst_video_decoder_parse_available() to really parse any pending
source data that is still available in the adapter. This is a memory
optimization to avoid expansion of video packed added to the adapter,
but also a fix to EOS condition when the subclass parse() function
ultimately only needed to call into gvd_have_frame() and no additional
source bytes were consumed, i.e. gvd_add_to_frame() is not called.

This situation can occur when decoding H.264 streams in byte-stream/nal
mode for instance. A decoder always requires the next NAL unit to be
parsed so that to determine picture boundaries. When a new picture is
found, no byte is consumed (i.e. gvd_add_to_frame() is not called)
but gvd_have_frame() is called (i.e. priv->current_frame is gone).

Also make sure to avoid infinite loops caused by incorrect subclass
parse() implementations. This can occur when no byte gets consumed
and no appropriate indication (GST_VIDEO_DECODER_FLOW_NEED_DATA) is
returned.

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

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2014-07-03 09:47:20 +02:00
Evan Nemerson
7b791749a0 docs: Assorted documentation and introspection fixes for new 1.4 API
https://bugzilla.gnome.org/show_bug.cgi?id=732595
2014-07-02 09:09:44 +02:00
Thiago Santos
fb3a9d1bc5 video: avoid overflows when doing int operations for size
size is a gsize, so cast the operands to it to avoid overflows
and setting wrong value to the video size.

Includes tests.

https://bugzilla.gnome.org/show_bug.cgi?id=731195
2014-06-09 23:38:39 -03:00
Thibault Saunier
d2ea3260e9 videodecoder: Keep still meaningfull pending events on FLUSH_STOP
Only EOS and segment should be deleted in that case.

+ Add a testcase

https://bugzilla.gnome.org/show_bug.cgi?id=709868
2014-06-03 13:03:49 +02:00
Thibault Saunier
2843f358d9 videoencoder: Keep still meaningfull pending events on FLUSH_STOP
Only EOS and segment should be deleted in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=709868
2014-06-03 13:03:19 +02:00
Thiago Santos
0cb5ea4396 videodecoder: actually return the push result in backwards playback
It was always returning _OK regardless of what downstream returned
2014-05-26 23:24:56 -03:00
Thiago Santos
ff9e37ea66 videodecoder: return EOS when segment is over
if a buffer is clipped by being completely out of segment, check if this
buffer is after the end of the segment and return EOS upstream

https://bugzilla.gnome.org/show_bug.cgi?id=709224
2014-05-26 19:26:45 -03:00
Nicolas Dufresne
e0cfd6e26b video-info: Also check the stride and offset are equal
gst_video_info_is_equal() was not checking if stride and offset
had changed.

https://bugzilla.gnome.org/show_bug.cgi?id=729896
2014-05-12 18:22:32 -04:00
Edward Hervey
ec95963b1f videodecoder: Free data after removing it from the list
While it wouldn't have caused any failures (g_list_remove doesn't dereference
the provided pointer), it does make the code cleaner.

CID #1212174
2014-05-12 17:17:07 +02:00
Nicolas Dufresne
64d58b80c0 videodecoder: Retry setting configuration with modified config
Buffer pool set_config() may return FALSE if requested configuration needed small
changes. Reget the config and try setting it again. This ensure we have a configured
pool if possible.
2014-05-08 15:09:47 -04:00
Sebastian Dröge
68f5350c66 Release 1.3.1 2014-05-03 17:50:10 +02:00
Thiago Santos
5ac9476b40 videodecoder: do not parse caps for not using it
Saving some cpu
2014-05-01 19:31:25 -03:00
Sebastian Dröge
9398207101 videoframe: Initialise GstVideoFrame to zeroes if mapping fails
This should allow for more meaningful errors. Dereferencing NULL
is more useful information than dereferencing a random address
happened to be on the stack.
2014-04-16 19:53:46 +02:00
Vincent Penquerc'h
3d1fdf8dd8 video-overlay-composition: guard against NULL pointer dereference on error
If gst_video_overlay_rectangle_apply_global_alpha is called with
a rectangle with unsuitable alpha, expanding the alpha plane will
fail, and thus lead to dereferencing a NULL src pointer. It's not
certain this will happen in practice, as the function is static
and callers might ensure suitable alpha before calling, but there
is no apparent explicit such check.
Add prologue asserts for proper alpha to explicitely prevent this.

Coverity 1139707
2014-04-10 12:35:03 +01:00
Vincent Penquerc'h
4a401adf38 videometa: fix texture_type memcpy size
Coverity 1139589, 1139588
2014-04-10 12:35:03 +01:00
Sebastian Dröge
8c7cbeed5b video-event: Update the running times in the force-keyunit events from the pad offsets 2014-04-10 09:18:05 +02:00
Thiago Santos
05e957106f videodecoder: do not deactivate the bufferpool, just unref
Videodecoder does late renegotiation, it will wait for the next
buffer before renegotiating its caps and bufferpool. It might happen
that downstream element switched from passthrough to non-passthrough
and sent a reconfigure upstream (that caused this renegotiation).
This downstream element will ask the video sink below for the bufferpool
with an allocation query and will get the same bufferpool that
videodecoder is holding, too.

When renegotiating, if videodecoder deactivates its bufferpool it
might be deactivating the bufferpool that some element downstream
is using and cause the pipeline to fail.

https://bugzilla.gnome.org/show_bug.cgi?id=727498
2014-04-04 13:50:03 -03:00
Sebastian Dröge
6189847ed0 videodecoder: Always drain the decoder after a discont group in reverse playback mode 2014-03-30 18:26:59 +02:00
Sebastian Dröge
5a4fbb1638 videodecoder: Flush the decoder once per discont group, not once per keyframe 2014-03-30 18:00:53 +02:00
Sebastian Dröge
f1f8731ff5 videodecoder: Handle reverse playback with multiple GOPs per discont group properly
baseparse will reverse each GOP for us already, so the segment events can
be after our keyframe. Make sure to get it and all other relevant sticky
events before starting to decode.
2014-03-30 17:59:55 +02:00
Sebastian Dröge
50c2218d4d videodecoder: Log event types of events that are pushed downstream 2014-03-29 10:33:01 +01:00
Sebastian Dröge
1c26e5734c videodecoder: In reverse playback mode we need to finish the subclass after passing all frames to it 2014-03-29 10:33:01 +01:00
Matthieu Bouron
a8951c16da video-overlay-composition: add GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION 2014-03-05 20:38:45 +01:00
Sebastian Rasmussen
900c204eb9 videoformat: Remove duplicate/incorrect section
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=725521
2014-03-02 23:41:51 +00:00
Sebastian Rasmussen
35bb1b3328 docs: Add annotations for return values
Rephrase and clarify some return value descriptions

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=725521
2014-03-02 23:41:18 +00:00
Sebastian Rasmussen
5b4f2ba20b docs: Fix argument and annotation typos
* colorbalance: Fix misspelled annotation
 * rtsp: Replace incorrectly documented function argument
 * sdp: Escape @ character to avoid gtk-doc warning
 * video-*: Add missing annotation colon
 * videodecoder/video-color: Fix function argument typos
 * videoutils: Remove unknown annotation field

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=725521
2014-03-02 23:22:51 +00:00
Tim-Philipp Müller
6442e76e9f docs: add GstVideoPool to docs 2014-02-23 14:42:12 +00:00
Nicolas Dufresne
6b77971097 video: Fix NV12_64Z32 default offset and size
This was a regression introduced by f52fd7a68, where we started using
the stride to encode the dimensions in tiles. This patch simply updates
offset and size calculation as described in the documentation,
part-mediatype-video-raw.txt.
2014-02-18 13:09:21 -05:00
Thiago Santos
da54836a33 videoencoder: push tags and events before eos
if any tags or events are pending, push them before pushing eos
2014-01-29 12:33:59 -03:00
Wim Taymans
8ac3dbc4f3 video-chroma: don't crash on NULL resamplers
Make dummy resamplers for all cases and only execute the horizontal
resampler instead of crashing.

See https://bugzilla.gnome.org/show_bug.cgi?id=722742
2014-01-23 10:45:00 +01:00
Sebastian Dröge
87829debe4 videodecoder: Add API to get the currently pending frame size for parsing
https://bugzilla.gnome.org/show_bug.cgi?id=719890
2014-01-18 13:54:22 +01:00
Thiago Santos
47f720a8f0 videodecoder: plug leak when frames are released on subclass stop
They end up stored in the 'pending_events' list and should be
freed after calling stop
2014-01-17 11:21:33 -03:00
Sebastian Dröge
335e6e888d videoverlay: Don't mention gconf elements and add a sentence about playbin/playsink
playbin/playsink now implement the video overlay interface
2014-01-14 13:20:48 +01:00
Wim Taymans
ecac298e4e videodecoder: only copy chroma_site when known
Only overwrite the chroma-site if we have a valid value in the reference
format.
2014-01-13 17:24:01 +01:00
Wim Taymans
fba783a5fe videoutils: add some debug 2014-01-13 17:24:01 +01:00
Nicolas Dufresne
595bcfb4d7 video: Generate types for tile enumeration
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:47:23 -05:00
Nicolas Dufresne
f52fd7a68b video: Don't use extra plane and componenent for tile format
Instead of using extra plane, we encode the number of tiles in x and y in the stride of
each planes (i.e. y_tiles << 16 | x_tiles) and introduce tile_mode, tile_width and
tile_height into GstVideoFormatInfo structure.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:47:03 -05:00
Wim Taymans
d899e6df5a video: rename NV12T -> NV12_64Z32
Is a bit more descriptive and allows us to add more tiled types
later.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:52 -05:00
Nicolas Dufresne
c8597330a9 video-frame: scale vertical tiles based on subsampling
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:45 -05:00
Nicolas Dufresne
53605e35f4 video-frame: fix tiled pixel stride
Pixel stride is per component, not per plane. We get the tile mode from
the pixelstride of the TILE component.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:37 -05:00
Wim Taymans
61cbdf379b format: improve docs
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:31 -05:00
Wim Taymans
f3e989179b video-format: fix off-by-one for tiled coordinates
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:17 -05:00
Wim Taymans
fb0fecbf48 video-tile: improve docs
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:07 -05:00
Wim Taymans
33c486e5c1 video-format: use shifts when possible
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:01 -05:00
Wim Taymans
980811c120 video-frame: fix copy of tiled formats
Add code to copy tiled planes.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:45:50 -05:00
Wim Taymans
3ceb7dfe22 video-tile: add tile mode and helper functions
Move the tile helper functions to their own file. Make it possible to
make other tiling modes later.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:45:37 -05:00
Wim Taymans
f8d3b9b4fc video: add NV12T support
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:45:26 -05:00
Wim Taymans
67a2717235 Add tiled color format support
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:45:02 -05:00
Thiago Santos
672cda66db videodecoder: do not lose events when dropping frames
Events must be persisted after a frame is dropped to avoid
losing obligatory information for the stream.

https://bugzilla.gnome.org/show_bug.cgi?id=721835
2014-01-13 06:11:09 -03:00
Thiago Santos
5b8e1925b5 videodecoder: use new segment earlier for reverse playback
For reverse playback, the segment event will only be pushed when
the first buffer is actually pushed. But for decoding frames and storing
those into the list to be pushed the output_segment.rate value is used
to determine if it is forward or reverse playback.

In case a previous segment event (or none) is in use it will mistakenly
think it is doing forward playback and push the buffers immediatelly and
try to clip buffers based on an old segment (or an uninitialized one, leading
to an assertion)

This patch fixes this by copying the segment earlier if on reverse playback

https://bugzilla.gnome.org/show_bug.cgi?id=721666
2014-01-13 06:11:09 -03:00
Sebastian Dröge
58592a2af3 audio/video-info: Properly initialize the info structures in set_format()
And don't assume in other code that set_format() preserves any fields at
all. These assumptions were already made here for fields that were changed
by set_format().
2013-12-30 10:53:24 +01:00
Sebastian Dröge
65732d9c97 audio/video-info: Initialize the complete struct to 0 in the beginning
Instead of only initializing some parts in some code paths. Also
makes it easier to use the reserved bits of the structs later.

https://bugzilla.gnome.org/show_bug.cgi?id=720810
2013-12-30 10:15:20 +01:00
Wim Taymans
f8e3a25415 video-frame: fix plane copy for index plane
Move the code to handle the index plane in the _copy_plane.
2013-12-25 10:54:55 +01:00
Lionel Landwerlin
aedca7acfc colorbalance: add missing annotation for list_channels()
https://bugzilla.gnome.org/show_bug.cgi?id=720999
2013-12-24 09:25:53 +00:00
Edward Hervey
b97c711def audio/video: Initialize all {audio|video}info fields
Fixes "Unitialized Scalar Variable" issues reported by Coverity.

Has the added advantage of detecting whether somebody *does* use those
fields (ending up with a invalid address).

https://bugzilla.gnome.org/show_bug.cgi?id=720810
2013-12-20 14:47:22 +01:00
Sebastian Dröge
27c1261c72 video-format: Document usage of GST_VIDEO_FORMAT_ENCODED
This must only ever be used in caps in combination with a non-system
memory GstCapsFeatures, and where it does not make sense to specify
any of the other video formats. Examples of this would be in gst-vaapi.
2013-12-17 17:25:07 +01:00
Sebastian Dröge
8499a0e35a Revert "video: specify/restrict usage of GST_VIDEO_FORMAT_ENCODED"
This reverts commit 5fcdabd907.

Instead of making it impossible to use the ENCODED format we should
just document that it must not be used for capsfeature-less caps.

Also this commit broke API/ABI.
2013-12-17 17:23:19 +01:00
Sebastian Dröge
3e61449c86 videoencoder: Release the allocator on hard resets 2013-12-17 17:10:19 +01:00
Julien Isorce
2e38741b94 videodecoder: release buffer pool and allocator on full reset
It allows to release the buffer pool sooner (i.e. when going
to GST_STATE_READY). Previously it was released in finalize.

Fixes bug https://bugzilla.gnome.org/show_bug.cgi?id=720389
2013-12-16 16:07:05 +00:00
Sebastian Dröge
b5d26f3907 videodecoder: gst_video_decoder_release_frame() is available since 1.2.2 2013-12-13 14:37:24 +01:00
Edward Hervey
5fcdabd907 video: specify/restrict usage of GST_VIDEO_FORMAT_ENCODED
GST_VIDEO_FORMAT_ENCODED was added to support *extracting* video-related
information (like width, height, framerate,...) from caps.

It is __NOT__ intended to be used as a format field on video/x-raw caps.
2013-12-11 16:51:42 +01:00
Sebastian Dröge
9ec4eaa866 convertframe: Fix indention 2013-12-09 16:34:22 +01:00
Sebastian Dröge
729e3c8a10 videoencoder: Add sink_query() src_query() virtual functions
Based on the videodecoder change by Nicolas Dufresne and applied
here for consistency.

https://bugzilla.gnome.org/show_bug.cgi?id=720103
2013-12-09 16:34:19 +01:00
Nicolas Dufresne
09a6ca97d2 videodecoder: Add sink_query() src_query() virtual
https://bugzilla.gnome.org/show_bug.cgi?id=720103
2013-12-09 09:41:46 -05:00
Olivier Crête
d273d0c156 videocodecframe: Correct function name in doc 2013-12-06 19:27:08 -05:00
Olivier Crête
779e360352 videoencoder: Remove gst_video_encoder_set/get_discont
They've never existed outside the header file.
2013-12-06 16:24:46 -05:00
Julien Isorce
79ef75888c videodec/enc: clear reconfigure flag if negotiate succeeds
So that it avoids to send an allocation query twice.
One from an early call to gst_video_encoder_negotiate from a
subclass, then one from gst_video_encoder_allocate_output_frame.
Which means that previously gst_video_encoder_negotiate was not
clearing the GST_PAD_FLAG_NEED_RECONFIGURE even on success.

Fixes bug https://bugzilla.gnome.org/show_bug.cgi?id=719684
2013-12-05 15:19:16 +00:00
Sebastian Dröge
5acc099479 videodecoder: Add API to allow subclasses to specify that they needs caps before any buffers 2013-12-05 11:36:54 +01:00
Sebastian Dröge
820d7d7798 videoencoder: Return not-negotiated if we don't have caps when the first buffer arrives
Otherwise things like filesrc ! jpegenc ! fakesink just crash with
a segmentation fault because subclasses expect caps to be there.
2013-12-05 11:26:55 +01:00
Justin Joy
4a81e22607 convertframe: Fix trivial memory leak in debug statement
gst_element_get_name() requires the caller to g_free() the return value

https://bugzilla.gnome.org/show_bug.cgi?id=719850
2013-12-04 18:03:25 +01:00
Mark Nauwelaerts
40fc306017 videodecoder: make _release_frame external API
... so subclasses can release a frame all the way (also from frame list)
without having to pass through _finish_frame or _drop_frame.
The latter may not be applicable, or may or may not have already
been called for the frame in question.

See https://bugzilla.gnome.org/show_bug.cgi?id=693772
2013-12-01 12:06:37 +01:00
Mark Nauwelaerts
614d35d795 videodecoder: fix spelling error in debug message 2013-12-01 12:06:36 +01:00
Matthew Waters
2e84acce58 videometa: add GstVideoGLTextureUploadMeta buffer pool option
allows configuration of whether GstVideoGLTextureUploadMeta is
added to buffers resulting from a buffer pool.  This is sperate
to the caps feature in that an element may want to add the upload
meta itself rather than allowing the buffer pool to.

https://bugzilla.gnome.org/show_bug.cgi?id=712798
2013-11-26 14:04:38 +01:00
Thiago Santos
81471099d2 videodecoder: error out if no frames are decoded before eos
Raise an error in case no frames are decoded before EOS and we
have input, meaning that data was received but it was somehow invalid.

https://bugzilla.gnome.org/show_bug.cgi?id=711094
2013-11-25 10:53:25 -03:00
Thiago Santos
0765962fbc videodecoder: allow using -1 for infinite tolerated errors
Allows using -1 to make videodecoder never post an error message
after decoding errors.

https://bugzilla.gnome.org/show_bug.cgi?id=711094
2013-11-25 10:53:14 -03:00
Mark Nauwelaerts
ee86a91957 videodecoder: avoid descending output timestamps
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=712796
2013-11-23 19:39:52 +01:00
Sreerenj Balachandran
cd52ff313e videodecoder: try to negotiate the buffer pool even though there is no o/p format
We could have allocation query before caps event and even without caps inside
the query. In such cases , the downstream can return a bufferpool object with
out actually configuring it. This feature is helpful to negotiate the bufferpool
with out knowing the output video format. For eg: some hardware accelerated
decoders can interpret the o/p video format only after it finishes the decoding
of one buffer at least.

https://bugzilla.gnome.org/show_bug.cgi?id=687183
2013-11-11 13:28:11 +01:00
Stephan Sundermann
2b45196042 navigation: Add missing out parameter annotations to GstNavigation
https://bugzilla.gnome.org/show_bug.cgi?id=709938
2013-10-11 23:06:55 +02:00
Stefan Sauer
9269bee9bd videodecoder: don't overflow in bytes<->time conversion
fps_n and _d values can be large and this can overflow a uint. Also fix
copy'n'paste mistake in comments.
2013-10-08 09:15:21 +02:00
Wim Taymans
30a0cccbf6 video-frame: copy offsets from metadata
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=708606
2013-09-23 11:55:07 +02:00
Olivier Crête
c10311ba70 videodecoder: If there is no PTS at all, assume it starts from the segment start
This is to make the multifilesrc ! pngdec case work

https://bugzilla.gnome.org/show_bug.cgi?id=688043
2013-09-19 09:52:48 +02:00
Sebastian Dröge
35ee4b056b videodecoder/videoencoder: Mark pads as requiring reconfiguration again if negotiation fails
Otherwise we might end up in non-optimal configuration, especially
when a flush happened during reconfiguration.
2013-09-12 09:35:00 +02:00
Wim Taymans
d3641943b3 docs: fix some doc blocks 2013-09-09 15:52:05 +02:00
Mathieu Duponchelle
1664468eaa videofilter: implement transform_meta virtual method.
If tags of the meta only contain "video", let it be copied.
2013-09-09 15:37:02 +02:00
Mathieu Duponchelle
d1cb9c994b video/audio: #define metadata strings.
For instance "orientation" becomes GST_VIDEO_ORIENTATION_METADATA.
2013-09-09 15:37:02 +02:00
Tim-Philipp Müller
d7775cffb9 video: fix build without orc or older or versions
./.libs/libgstvideo-1.0.so: undefined reference to `video_orc_unpack_NV24'
./.libs/libgstvideo-1.0.so: undefined reference to `video_orc_pack_NV24'
2013-09-06 13:28:00 +01:00
Wim Taymans
fae9d82515 video-format: fix NV24 pack/unpack function
We can't reuse the NV12 functions, we need to make new ones.
2013-09-06 12:45:36 +02:00
Wim Taymans
26d04c7582 video-format: handle odd width in more pack/unpack functions 2013-09-06 12:45:36 +02:00
Tim-Philipp Müller
2f6f0ee214 video-format: minor pack_YVYU optimisation
Re-use already calculated line offset.
2013-09-05 18:34:21 +01:00
Wim Taymans
e55ff1e374 video-format: fix chroma offsets 2013-09-05 17:06:36 +02:00
Wim Taymans
bbeac11e74 video-format: fix unpack functions for odd formats 2013-09-05 16:16:12 +02:00
Wim Taymans
d33e73e00f video-format: clean up pack/unpack functions 2013-09-05 15:02:17 +02:00
Wim Taymans
6508c738ff video-format: handle odd width in various pack functions 2013-09-05 14:13:24 +02:00
Wim Taymans
9b01d9a1d9 video-format: don't overrun the arrays on UYVP 2013-09-05 12:44:32 +02:00
Matej Knopp
d03feedf4c videoencoder: Check for invalid stop position before calculating a duration from it
https://bugzilla.gnome.org/show_bug.cgi?id=707332
2013-09-03 09:50:56 +02:00
Andoni Morales Alastruey
688505de88 videoencoder: fix forwarding of GstForceKeyUnit events
Use the frame id to match the output forced keyframe with
the event that forced it.

https://bugzilla.gnome.org/show_bug.cgi?id=706885
2013-08-27 15:11:33 +02:00
Sebastian Dröge
b0e4b5f69a videoencoder: Make sure to return TRUE if the same caps are set again 2013-08-25 10:26:30 +02:00
Sebastian Dröge
f678411c6e videoencoder: Only set the caps when they actually changed 2013-08-23 19:20:03 +02:00
Edward Hervey
d1cf4b2b9a videocoder: Don't push out identical caps
This avoids triggering plenty of extra code/methods/overhead downstream when
we can just quickly check whenever we want to set caps whether they are
identical or not

https://bugzilla.gnome.org/show_bug.cgi?id=706600
2013-08-23 15:22:43 +02:00
Rico Tzschichholz
cb3e2fd218 videometa: fix syntax error 2013-08-21 11:20:28 +01:00
Tim-Philipp Müller
2f05268517 video: make direct includes work again
Not nice to break people's code if we can avoid it. Could
add a warning in the next cycle, and then require single
includes in the cycle after.

https://bugzilla.gnome.org/show_bug.cgi?id=695889
2013-08-16 14:14:15 +01:00
Sebastian Dröge
c4d7ffddb5 videodecoder: Don't reset too much if we're resetting because of a soft-flush
Fixes reverse playback with Ogg/Theora.
2013-08-15 14:33:18 +02:00
Sebastian Dröge
695675ab7e videodecoder: Don't reset decoder on segment events
Either there was a flush before that resets everything anyway,
or resetting would make us lose information we might need if
it's just a segment update.
2013-08-15 13:26:39 +02:00
Sebastian Dröge
146bb1a153 video{en,de}coder: Add new flush vfunc as a replacement for reset 2013-08-15 13:26:39 +02:00
Sebastian Dröge
9df036c216 video{en,de}coder: Revert to old ::reset() behaviour and deprecate it 2013-08-15 13:26:38 +02:00
Youness Alaoui
17eb692c6a videodecoder: Clear taglist on reception of a STREAM_START event
https://bugzilla.gnome.org/show_bug.cgi?id=705109
2013-08-12 13:02:28 +02:00
Edward Hervey
b4b9f74f8b videodecoder: Revert previous commit
The 'hard' argument of reset changed signification after the latest
start/stop/reset refactoring.
2013-08-02 08:22:59 +02:00
Edward Hervey
84d476610b videodecoder: Pass on 'hard' argument from _flush to _reset
When most of the code was moved from _flush() to _reset() the 'hard'
argument was no longer propagated.
2013-08-01 16:02:48 +02:00
Sebastian Dröge
047abdc944 videodecoder/encoder: Call reset() always between start() and stop() and never outside 2013-07-26 10:22:32 +02:00
Sebastian Dröge
9259ee6729 videoencoder/decoder: Call reset() before start() too 2013-07-25 14:25:31 +02:00