platform/upstream/gstreamer.git
6 years agodocs: add new audiolatency element to docs and update docs for git
Tim-Philipp Müller [Wed, 28 Feb 2018 00:06:41 +0000 (00:06 +0000)]
docs: add new audiolatency element to docs and update docs for git

6 years agoaudiolatency: Fix string format specifier and use microseconds everywhere
Nirbheek Chauhan [Tue, 27 Feb 2018 19:26:38 +0000 (00:56 +0530)]
audiolatency: Fix string format specifier and use microseconds everywhere

Should fix warnings or build errors on 32-bit platforms and on Windows.

Also clarify in logging that all timestamps are in microseconds.

6 years agoaudiolatency: Fix cerbero build failure
Nirbheek Chauhan [Tue, 27 Feb 2018 19:10:21 +0000 (00:40 +0530)]
audiolatency: Fix cerbero build failure

Average latency is a 64-bit integer.

https://ci.gstreamer.net/job/GStreamer-master/9962/

6 years agox265enc: Add format example for option-string
Alicia Boya García [Tue, 27 Feb 2018 14:47:40 +0000 (15:47 +0100)]
x265enc: Add format example for option-string

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

6 years agoaudiolatency: New plugin for measuring audio latency
Nirbheek Chauhan [Mon, 26 Feb 2018 13:08:58 +0000 (18:38 +0530)]
audiolatency: New plugin for measuring audio latency

Measures the audio latency between the source pad and the sink pad by
outputting period ticks on the source pad and measuring how long they
take to arrive on the sink pad.

Very useful for quantifying latency improvements in audio pipelines.
This plugin was particularly useful during development of the
low-latency features of the wasapi plugin.

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

6 years agottml: Add support for IMSC 1.0.1 fillLineGap attribute
Chris Bass [Tue, 27 Feb 2018 10:07:18 +0000 (10:07 +0000)]
ttml: Add support for IMSC 1.0.1 fillLineGap attribute

Strictly speaking, the TTML spec requires that text backgrounds extend
only to the font height of the related text, rather than to the vertical
distance between lines. The result of this is that there will typically
be vertical gaps between line backgrounds through which moving video can
be seen. Since this was unnacceptable to some content providers, v1.0.1
of the IMSC spec (which profiles TTML) adds a new attribute,
itts:fillLineGap[1], that allows content authors to specify that clients
should extend text backgrounds such that there are no gaps between
lines. This attribute is also going to be included in the next release
of EBU-TT-D.

This patch adds support for fillLineGap to ttmlparse and ttmlrender.

[1] https://www.w3.org/TR/ttml-imsc1.0.1/#itts-fillLineGap

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

6 years agodocs: plugins: add some more elements
Tim-Philipp Müller [Mon, 26 Feb 2018 11:20:51 +0000 (11:20 +0000)]
docs: plugins: add some more elements

Many will still be missing corresponding doc
sections in the source code though.

6 years agowasapi: Clarify usage of low-latency property, add myself as author
Nirbheek Chauhan [Mon, 26 Feb 2018 10:38:28 +0000 (16:08 +0530)]
wasapi: Clarify usage of low-latency property, add myself as author

The low-latency property is *always* safe to enable, so applications
that do realtime communication should set it, and the elements will
automatically configure WASAPI to use the lowest possible device
period, and the audioringbuffer in audiobasesink will also be
configured accordingly.

Applications can also use exclusive mode during capture and playback
for the lowest possible latency if they know that the device will not
be used by any other application.

In this mode, the latency-time and buffer-time properties will be
completely ignored.

6 years agowasapi: Add a property for trying the AudioClient3 API
Nirbheek Chauhan [Mon, 26 Feb 2018 10:25:19 +0000 (15:55 +0530)]
wasapi: Add a property for trying the AudioClient3 API

The AudioClient3 API is only available on Windows 10, and we will
automatically detect when it is available and use it.

However, using it for capturing audio with low latency and without
glitches seems to require setting the realtime priority of the entire
pipeline to "critical", which we cannot do from inside the element.

Hence, we can only enable that by default for wasapisink since
apps should be able to safely set the low-latency property to TRUE if
they need low-latency capture or playback.

6 years agowasapi: Set realtime thread priority at runtime
Nirbheek Chauhan [Wed, 14 Feb 2018 14:42:07 +0000 (20:12 +0530)]
wasapi: Set realtime thread priority at runtime

Use LoadLibrary() to set the thread characteristics at runtime so it
works automagically regardless of where or how the plugin was built.

6 years agowasapi: Use IAudioClient3 interface when available
Nirbheek Chauhan [Wed, 14 Feb 2018 06:43:36 +0000 (12:13 +0530)]
wasapi: Use IAudioClient3 interface when available

This allows us to request ultra-low-latency device periods even in
shared mode. However, this requires good drivers and Windows 10, so
we only enable this when we detect that we are running on Windows 10
at runtime.

You can forcibly disable this feature on Windows 10 by setting
GST_WASAPI_DISABLE_AUDIOCLIENT3=1 in the environment.

6 years agowasapi: __uuidof is simply not available in C
Nirbheek Chauhan [Wed, 14 Feb 2018 06:26:45 +0000 (11:56 +0530)]
wasapi: __uuidof is simply not available in C

Fix comment, and don't try to use it at all.

6 years agowasapi: Set a default category for util functions
Nirbheek Chauhan [Wed, 14 Feb 2018 06:17:14 +0000 (11:47 +0530)]
wasapi: Set a default category for util functions

Without this, they all go to the default category where they can be
missed

6 years agowasapi: Use a macro for HRESULT failure paths
Nirbheek Chauhan [Wed, 14 Feb 2018 03:57:31 +0000 (09:27 +0530)]
wasapi: Use a macro for HRESULT failure paths

Saves a lot of boilerplate across all files.

6 years agochecksumsink: remove src pad template from sink element
Sreerenj Balachandran [Fri, 23 Feb 2018 23:08:32 +0000 (14:08 -0900)]
checksumsink: remove src pad template from sink element

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

6 years agomsdk: remove unused code
Hyunjun Ko [Fri, 23 Feb 2018 23:30:56 +0000 (14:30 -0900)]
msdk: remove unused code

There's unused code remaining since MSDK bufferpool patches landed.

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

6 years agosrt: Add support for streamheaders to sinks
Jan Alexander Steffens (heftig) [Fri, 16 Feb 2018 08:17:40 +0000 (09:17 +0100)]
srt: Add support for streamheaders to sinks

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

6 years agosrt: Refactor gst_srt_*_sink_send_buffer, extract send
Jan Alexander Steffens (heftig) [Fri, 16 Feb 2018 08:16:12 +0000 (09:16 +0100)]
srt: Refactor gst_srt_*_sink_send_buffer, extract send

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

6 years agosrt: Add gst_srt_base_sink_stop
Jan Alexander Steffens (heftig) [Fri, 16 Feb 2018 08:12:51 +0000 (09:12 +0100)]
srt: Add gst_srt_base_sink_stop

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

6 years agosrt: Remove unused queued_buffers field
Jan Alexander Steffens (heftig) [Thu, 15 Feb 2018 11:07:32 +0000 (12:07 +0100)]
srt: Remove unused queued_buffers field

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

6 years agomsdkenc: remove unnecessary memset
Sreerenj Balachandran [Thu, 22 Feb 2018 21:32:45 +0000 (12:32 -0900)]
msdkenc: remove unnecessary memset

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

6 years agomsdk: enc: Support force-key-unit events
Sreerenj Balachandran [Thu, 22 Feb 2018 21:32:20 +0000 (12:32 -0900)]
msdk: enc: Support force-key-unit events

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

6 years agoh264parser: Expose framerate even if fixed_frame_rate flag isn't set
Nicolas Dufresne [Wed, 7 Feb 2018 21:29:59 +0000 (16:29 -0500)]
h264parser: Expose framerate even if fixed_frame_rate flag isn't set

There is nothing in the spec that state that framerate is not valid in
that case. This aligns GStreamer with FFMPEG behaviour for similar
streams.

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

6 years agomeson: simplify GST_DISABLE_GST_DEBUG check and don't use add_global_*
Tim-Philipp Müller [Wed, 21 Feb 2018 19:45:33 +0000 (19:45 +0000)]
meson: simplify GST_DISABLE_GST_DEBUG check and don't use add_global_*

add_global_arguments() can't be used in subprojects. It's
entirely possible that -bad is a subproject but gstreamer
is picked up from an installed location, so we should
really use add_project_arguments() in both cases.

6 years agodoc: Add section for fakevideosink
Nicolas Dufresne [Wed, 21 Feb 2018 16:41:40 +0000 (11:41 -0500)]
doc: Add section for fakevideosink

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

6 years agoAdd fakevideosink element
Nicolas Dufresne [Tue, 20 Feb 2018 03:02:14 +0000 (22:02 -0500)]
Add fakevideosink element

This is a wrapper around fakesink that will advertise GstVideoMeta
and other meta API in order to achieve zero-copy whenever possible.
his new element is useful when doing performance testing with
video stream and don't want the sink capability to change the
upstream behaviour.

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

6 years agomeson: Remove unused header list
Nicolas Dufresne [Tue, 20 Feb 2018 02:52:43 +0000 (21:52 -0500)]
meson: Remove unused header list

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

6 years agoFix SRT Library package config name
Nicolas Dufresne [Mon, 19 Feb 2018 19:52:30 +0000 (14:52 -0500)]
Fix SRT Library package config name

6 years agomeson: Use .dylib suffix if darwin
Justin Kim [Mon, 19 Feb 2018 06:45:36 +0000 (15:45 +0900)]
meson: Use .dylib suffix if darwin

For Mac OS, GST_EXTRA_MODULE_SUFFIX should be set as '.dylib'.

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

6 years agomsdk: enc: Fix typo
Sreerenj Balachandran [Wed, 21 Feb 2018 02:22:35 +0000 (17:22 -0900)]
msdk: enc: Fix typo

6 years agomsdk: h264_enc: Enable B-pyramid prediction support
Sreerenj Balachandran [Thu, 15 Feb 2018 19:00:04 +0000 (19:00 +0000)]
msdk: h264_enc: Enable B-pyramid prediction support

Since there is already an "adaptive-B" option, just
use boolean property for B-pyramid enabling.

Fixme: Not sure whether this can be supported in vp8 and vp9.
It could be possible through GPB (b without backward ref) but
can't verify currently. We can move this as common property
once verified with vp8 and vp9 without breaking any backward
compatibility.

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

6 years agomsdk: Add more tuning options
Sreerenj Balachandran [Thu, 15 Feb 2018 17:29:13 +0000 (17:29 +0000)]
msdk: Add more tuning options

Added tuning options for mb level bitrate control,
adaptive I-frame insertion, and adaptive B-frame insertion.

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

6 years agomsdk: h264_enc: Add slice size tuning option
Sreerenj Balachandran [Thu, 15 Feb 2018 16:31:56 +0000 (16:31 +0000)]
msdk: h264_enc: Add slice size tuning option

According to spec, it is a general property. But based on
testing it only works for h264 encoder.
Let's keep it as h264 specific for now.

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

6 years agomsdk: move enum definitions to separte file
Sreerenj Balachandran [Thu, 15 Feb 2018 15:59:08 +0000 (15:59 +0000)]
msdk: move enum definitions to separte file

Move enum value defintions which are (or in future) supported
by more than one codec into a common file.

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

6 years agomsdk: encoder: h264: Enable trellis quantization tuning
Sreerenj Balachandran [Thu, 15 Feb 2018 15:05:10 +0000 (15:05 +0000)]
msdk: encoder: h264: Enable trellis quantization tuning

Add a new property "trellis" to enable trellis quantization.
Keeping trellis as a flag value (which is boolean for gst x264 enc element)
since it is possible to enable/disable this seperately for
I,P and B frames through MediaSDK ext option headers.

The subclass implementations always need to inform base-encoder
if it requires the inclusion of Extend Header buffers (mfxExtCodingOption2
 and mfxExtCodingOption3).

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

6 years agomsdk: h264_enc: Add LookaheadDownsampling support
Sreerenj Balachandran [Thu, 15 Feb 2018 12:19:48 +0000 (12:19 +0000)]
msdk: h264_enc: Add LookaheadDownsampling support

This option controls down sampling in look ahead bitrate
control mode. According to spec it is only supported in AVC.

Fixme: Probably HEVC also have support for this in recent
MSDK versions. We could move the enumeration types to common
header usable for multiple codecs.

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

6 years agomsdk: encode: Add more rate control options
Sreerenj Balachandran [Wed, 14 Feb 2018 17:01:38 +0000 (17:01 +0000)]
msdk: encode: Add more rate control options

MediaSDK has support for a number of rate control algorithms.
Adding all possible options to the property rate-control.

Fixme1: In case of failure, currently we don't have a proper method
to show which rate-control has been failed. It could be better
to add some extensive validation on EncQuery output in case of error.
Unfortunately, not all ratecontrol methods are supported by every codecs
and we don't have the dynamic detection of supported ratecontrol methods yet.

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

6 years agomsdk: encode: Add property to set slice/partitioning
Sreerenj Balachandran [Wed, 14 Feb 2018 16:27:47 +0000 (16:27 +0000)]
msdk: encode: Add property to set slice/partitioning

Adding a new property num-slices to set the number of
slices/partitions per frame. Adding it as a general
property for all codecs (except jpeg).

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

6 years agomsdk: encoder: h265: generalize the behavior of "i-frames" property
Sreerenj Balachandran [Wed, 14 Feb 2018 14:29:57 +0000 (14:29 +0000)]
msdk: encoder: h265: generalize the behavior of "i-frames" property

We have the property "i-frames" to set the IDR interval in a
gop. Unfortunately MSDK HEVC encoder behaves bit differently
for IdrInterval field, IdrInteval == 1 indicate every
I-frame should be an IDR (which is IdrInterval == 0 for other codecs),
IdrInteval == 2 means every other I-frame is an IDR
(which is IdrInterval == 1 for other codecs) etc.
So we generalize the behaviour of property "i-frames" by
incrementing the value by one in each case (only for HEVC).

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

6 years agomsdk: encoder: register only the required properties
Sreerenj Balachandran [Wed, 14 Feb 2018 11:42:55 +0000 (11:42 +0000)]
msdk: encoder: register only the required properties

The base encoder common properties are not valid for
mjpeg encoder where there is no motion compensation or rate control.
Delaying the property installation on the base gobject
untill the subclass class_init get invoked.

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

6 years agomsdk: add missing files for dist target
Víctor Manuel Jáquez Leal [Sun, 18 Feb 2018 13:46:52 +0000 (14:46 +0100)]
msdk: add missing files for dist target

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

6 years agocolormanagement: Link to libgstbase for basetransform
Sebastian Dröge [Sun, 18 Feb 2018 10:01:07 +0000 (12:01 +0200)]
colormanagement: Link to libgstbase for basetransform

6 years agogl: GL_LIBS does not exist anymore but X11_LIBS does and is needed
Sebastian Dröge [Sun, 18 Feb 2018 09:49:25 +0000 (11:49 +0200)]
gl: GL_LIBS does not exist anymore but X11_LIBS does and is needed

In case of X11 we have to call XInitThreads().

6 years agoconfigure: Add configure check for gmodule-no-export-2.0
Sebastian Dröge [Sun, 18 Feb 2018 09:37:18 +0000 (11:37 +0200)]
configure: Add configure check for gmodule-no-export-2.0

This is needed for all code using the g_module_*() API.

6 years agowebrtc: We need at least libnice 0.1.14
Sebastian Dröge [Fri, 16 Feb 2018 15:36:04 +0000 (17:36 +0200)]
webrtc: We need at least libnice 0.1.14

meson.build already required that, let's do the same for configure.ac

6 years agoBack to development
Tim-Philipp Müller [Thu, 15 Feb 2018 19:44:23 +0000 (19:44 +0000)]
Back to development

6 years agoRelease 1.13.1
Tim-Philipp Müller [Thu, 15 Feb 2018 17:13:06 +0000 (17:13 +0000)]
Release 1.13.1

6 years agoDist compositor crossfade example and pythons script for meson build
Tim-Philipp Müller [Thu, 15 Feb 2018 18:50:51 +0000 (18:50 +0000)]
Dist compositor crossfade example and pythons script for meson build

And add to autotools build so it gets disted.

6 years agoconfigure: fix build with --disable-external
Tim-Philipp Müller [Thu, 15 Feb 2018 15:07:26 +0000 (15:07 +0000)]
configure: fix build with --disable-external

6 years agopo: update translations
Tim-Philipp Müller [Thu, 15 Feb 2018 14:59:35 +0000 (14:59 +0000)]
po: update translations

6 years agodocs: update plugin docs
Tim-Philipp Müller [Thu, 15 Feb 2018 14:57:00 +0000 (14:57 +0000)]
docs: update plugin docs

6 years agodecklink: Fix array of devices usage
Edward Hervey [Wed, 14 Feb 2018 14:57:48 +0000 (15:57 +0100)]
decklink: Fix array of devices usage

We need to allocate actual Device structures since we are going
to be setting callbacks with address to that structure

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

6 years agoUpdate ORC fallback disted code
Edward Hervey [Wed, 14 Feb 2018 13:36:00 +0000 (14:36 +0100)]
Update ORC fallback disted code

6 years agoaom: Implement cpu-used in av1enc
Sean DuBois [Mon, 5 Feb 2018 08:52:55 +0000 (08:52 +0000)]
aom: Implement cpu-used in av1enc

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

6 years agopnm: Fixed segfault in pnmenc
Dimitrios Katsaros [Tue, 13 Feb 2018 10:16:29 +0000 (11:16 +0100)]
pnm: Fixed segfault in pnmenc

The pnmenc was not mapping the input buffers as video buffers. Because
of this, the video frame stride was not being set based on frame but
based on the caps, which make the assumption that the strides are a
power of 4. For input that is not a power of 4, this would lead to a
SIGSEGV.

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

6 years agobuild: check gudev dependency for msdk plugin
Sreerenj Balachandran [Wed, 14 Feb 2018 02:39:26 +0000 (17:39 -0900)]
build: check gudev dependency for msdk plugin

gudev is the dependecy for rendernode support in MediaSDK plugin.

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

6 years agomsdk: vc1_dec: Add Advanced profile (WVC1) support
Sreerenj Balachandran [Tue, 13 Feb 2018 23:41:52 +0000 (14:41 -0900)]
msdk: vc1_dec: Add Advanced profile (WVC1) support

Only supporting asf header-format having BDUs with startcode.
It might be possible to support other formats too, but haven't tested.

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

6 years agomsdk: dec: Add non-packetized stream handling support
Sreerenj Balachandran [Tue, 13 Feb 2018 23:41:20 +0000 (14:41 -0900)]
msdk: dec: Add non-packetized stream handling support

The gst-msdk decoders prefer packetized streams as input
and in this case we can avoid unnecessary input bitstream copy
to mfxBitstream. This works fine for codecs like h264 where
we only support byte-stream with au alignment. Other format
conversions should be done thorugh parsers. But this won't work
for codecs like vc1 where we don't have an autoplugged parser.
Even the parser is not capable to do format conversions.

Packetizing through base decoders parse() routine will bring a
lot of uncecessary of complexities and codecparser libraray dependency.
So we just use an interal gst_adaper to keep track of bitstream
which is not consumed by msdk durig AsynchronusDecoding.
This adapter will get used only if subclass implementations
set the "is_packetized" to FALSE for msdk base encoder.

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

6 years agomsdk: Add VC1 decoder (simple and main profiles)
Sreerenj Balachandran [Tue, 13 Feb 2018 23:40:54 +0000 (14:40 -0900)]
msdk: Add VC1 decoder (simple and main profiles)

Adding Simple and Main profiles decode support.

Currently msdkvc1dec is not capable to handle the codec_data,
only instream headers are supported. Also msdk vc1 decoder
expecting instream with Sequence header as per SMPTE 421M Annex L.

Most of the decdoebin/playbin pipeline won't work with the above
constraints
because vc1parse is still not an autoplug element.

Only way to make mskdvc1dec work is by connecting a vc1parse
as an upstream element.

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

6 years agomsdk : Add RenderNode support
Sreerenj Balachandran [Tue, 13 Feb 2018 23:40:22 +0000 (14:40 -0900)]
msdk : Add RenderNode support

Use drm render node as the first choice of device node file.
Fall backs to use drm primary (/dev/dri/card[0-9])
if there is no render node available

Basic logic is inherited from gstreamer-vaapi, but using
gudev API rather than libudev directly.

Added gudev library as dependency for msdk.

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

6 years agomsdk: Avoid build failures on Windows until d3d allocator is implemented
Hyunjun Ko [Tue, 13 Feb 2018 22:54:03 +0000 (13:54 -0900)]
msdk: Avoid build failures on Windows until d3d allocator is implemented

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

6 years agomsdkdec: use video memory if there's another MSDK context in a pipeline
Hyunjun Ko [Tue, 13 Feb 2018 22:53:02 +0000 (13:53 -0900)]
msdkdec: use video memory if there's another MSDK context in a pipeline

1\ If downstream's pool is MSDK bufferpool,
2\ If there's shared GstMsdkContext in the pipeline,

a decoder decides to use video memory.

This policy should be improved to handle more cases.

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

6 years agomsdk: add async depth from each msdk element to GstMsdkContext to be shared
Hyunjun Ko [Tue, 13 Feb 2018 22:52:14 +0000 (13:52 -0900)]
msdk: add async depth from each msdk element to GstMsdkContext to be shared

In case that pipeline is like ".. ! decoder ! encoder ! ..." with using
video memory,
decoder needs to know the async depth of the following msdk element so
that it could
allocate the correct number of video memory.

Otherwise, decoder's memory is exhausted while processing.

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

6 years agomsdkdec/enc: query GstContext to share GstMsdkContext
Hyunjun Ko [Tue, 13 Feb 2018 22:51:18 +0000 (13:51 -0900)]
msdkdec/enc: query GstContext to share GstMsdkContext

How to share/create GstMsdkcontext is the following:

- Search GstMsdkContext if there's in the pipeline.
  - If found, check if it's decoder, encoder or vpp by job type.
    - If it's same job type, it creates another instance of
GstMsdkContext
     with joined-session.
    - Otherwise just use the shared GstMsdkContext.
  - If not found, just creates new instance of GstMsdkContext.

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

6 years agomsdk: context: add job type to figure out if joining session is necessary
Hyunjun Ko [Tue, 13 Feb 2018 22:50:48 +0000 (13:50 -0900)]
msdk: context: add job type to figure out if joining session is necessary

According to the driver's instruction, if there are two or more encoders
or decoders in a process, the session should be joined by
MFXJoinSession.

To achieve this successfully by GstContext, this patch adds job type
specified if it's encoder, decoder or vpp.

If a msdk element gets to know if joining session is needed by the
shared context,
it should create another instance of GstContext with joined session,
which
is not shared.

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

6 years agomsdk: adds util functions to handle GstContext
Hyunjun Ko [Tue, 13 Feb 2018 22:50:08 +0000 (13:50 -0900)]
msdk: adds util functions to handle GstContext

To share GstMsdkContext with each msdk element,
it will be using GstContext.

Most common code is from gstreamer-vaapi.

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

6 years agomsdkdec: use bufferpool
Hyunjun Ko [Tue, 13 Feb 2018 22:49:28 +0000 (13:49 -0900)]
msdkdec: use bufferpool

1\ In decide_allocation, it makes its own msdk bufferpool.
  - If downstream supports video meta, it just replace it with the msdk
bufferpool.
  - If not, it uses the msdk bufferpool as a side pool, which will be
decoded into.
    and will copy it to downstream's bufferpool.

2\ Decide if using video memory or system memory.
  - This is not completed in this patch.
  - It might be decided in update_src_caps.
  - But tested for both system memory and video memory cases.

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

6 years agomsdkenc: use bufferpool
Hyunjun Ko [Tue, 13 Feb 2018 22:48:32 +0000 (13:48 -0900)]
msdkenc: use bufferpool

1\ Proposes msdk bufferpool to upstream.
  - If upstream has accepted the proposed msdk bufferpool,
    encoder can get msdk surface from the buffer directly.
  - If not, encoder get msdk surface its own msdk bufferpool
    and copy from upstream's frame to the surface.

2\ Replace arrays of surfaces with msdk bufferpool.

3\ In case of using VPP, there should be another msdk bufferpool
   with NV12 info so that it could convert first and encode.

Calls gst_msdk_set_frame_allocator and uses video memory only on linux.
and uses system memory on Windows until d3d allocator is implemented.

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

6 years agomsdk: supports bufferpool
Hyunjun Ko [Tue, 13 Feb 2018 22:44:08 +0000 (13:44 -0900)]
msdk: supports bufferpool

Implements 2 memory allocators:
1\ GstMsdkSystemAllocator: This will allocate system memory.
2\ GstMsdkVideoAllocator: This will allocate device memory depending
on the platform. (eg. VASurface)

Currently GstMsdkBufferPool uses video allocator currently by default
only on linux. On Windows, we should use system memory until d3d
allocator
is implemented.

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

6 years agomsdk: adds frame allocator using libva
Hyunjun Ko [Tue, 13 Feb 2018 21:43:42 +0000 (12:43 -0900)]
msdk: adds frame allocator using libva

Implements msdk frame allocator which is required from the driver.
Also makes these functions global so that GstMsdkAllocator could use
the allocated video memory later and couple with GstMsdkMemory.

GstMsdkContext keeps allocation information such as mfxFrameAllocRequest
and mfxFrameAllocResponse after allocation.

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

6 years agomsdkdec: fix typo
Hyunjun Ko [Tue, 13 Feb 2018 21:43:00 +0000 (12:43 -0900)]
msdkdec: fix typo

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

6 years agomsdk: implements GstMsdkContext.
Hyunjun Ko [Tue, 13 Feb 2018 21:41:28 +0000 (12:41 -0900)]
msdk: implements GstMsdkContext.

Makes GstMsdkContext to be a descendant of GstObject so that
we could track the life-cycle of the session of the driver.

Also replaces MsdkContext with this one.
Keeps msdk_d3d.c alive for the future.

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

6 years agomsdk: libva: adds utility function between mfx and libva
Hyunjun Ko [Tue, 13 Feb 2018 21:39:44 +0000 (12:39 -0900)]
msdk: libva: adds utility function between mfx and libva

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

6 years agomsdk: adds new utility functions for conversion from gstreamer to libmfx
Hyunjun Ko [Tue, 13 Feb 2018 21:37:47 +0000 (12:37 -0900)]
msdk: adds new utility functions for conversion from gstreamer to libmfx

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

6 years agomsdk: move and rename the function msdk_video_alignment
Hyunjun Ko [Tue, 13 Feb 2018 21:36:46 +0000 (12:36 -0900)]
msdk: move and rename the function msdk_video_alignment

Move the msdk_video_alignment function from decoder
to msdk.c and rename so that others could call this function
without duplicated declaration.

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

6 years agoaudioaggregator: remove, moved to -base
Tim-Philipp Müller [Tue, 13 Feb 2018 14:11:49 +0000 (14:11 +0000)]
audioaggregator: remove, moved to -base

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

6 years agoaudiomixer: remove, moved to -base
Tim-Philipp Müller [Tue, 13 Feb 2018 00:28:36 +0000 (00:28 +0000)]
audiomixer: remove, moved to -base

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

6 years agoproxy: remove unneeded object private structs
Tim-Philipp Müller [Mon, 12 Feb 2018 19:30:01 +0000 (19:30 +0000)]
proxy: remove unneeded object private structs

Plugin headers are not installed.

Also mark internal funcs as internal.

6 years agoqt: remove plugin, moved to -good
Tim-Philipp Müller [Mon, 12 Feb 2018 18:48:32 +0000 (18:48 +0000)]
qt: remove plugin, moved to -good

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

6 years agoconfigure: remove two more unneeded gtk conditionals
Tim-Philipp Müller [Mon, 12 Feb 2018 15:44:00 +0000 (15:44 +0000)]
configure: remove two more unneeded gtk conditionals

6 years agogtk: remove, plugin has moved to -good
Tim-Philipp Müller [Thu, 8 Feb 2018 19:11:21 +0000 (19:11 +0000)]
gtk: remove, plugin has moved to -good

6 years agointeraudio: Make sure both PTS and DTS values are defined
Carlos Rafael Giani [Thu, 7 Dec 2017 14:52:39 +0000 (15:52 +0100)]
interaudio: Make sure both PTS and DTS values are defined

The inter plugin originated in 0.10, which had only one timestamp. As a
result, during the port to 1.0, the DTS were left undefined. This can cause
subtle bugs with basesrc, which can end up incorrectly picking DTS over PTS
and producing output buffers with incorrect timestamps.

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

6 years agowasapisrc: Re-align device period if necessary
Nirbheek Chauhan [Thu, 8 Feb 2018 20:35:23 +0000 (02:05 +0530)]
wasapisrc: Re-align device period if necessary

Same changes as done for wasapisink in cbe2fc40a. Turns out this is
sometimes also needed for capture. Reported by Mathieu_Du.

Also improve logging in that case for easier debugging.

6 years agomeson: make version numbers ints and fix int/string comparison
Tim-Philipp Müller [Thu, 8 Feb 2018 19:09:45 +0000 (19:09 +0000)]
meson: make version numbers ints and fix int/string comparison

WARNING: Trying to compare values of different types (str, int).
The result of this is undefined and will become a hard error
in a future Meson release.

6 years agoRevert "gdpdepay: don't use allocator if it has custom alloc"
Víctor Manuel Jáquez Leal [Mon, 5 Feb 2018 17:03:31 +0000 (18:03 +0100)]
Revert "gdpdepay: don't use allocator if it has custom alloc"

This reverts commit f6cb16ab8cecfe683473b173732ad040e858abd5.

6 years agoproxy: Fix plugin definition
Nirbheek Chauhan [Thu, 8 Feb 2018 09:49:12 +0000 (15:19 +0530)]
proxy: Fix plugin definition

I'm not sure how this was missed in review...

6 years agoproxy: Remove dead code from Makefile.am
Nirbheek Chauhan [Thu, 8 Feb 2018 09:15:28 +0000 (14:45 +0530)]
proxy: Remove dead code from Makefile.am

There is no gstproxytest.c

6 years agomeson: Fix wasapi build on Windows
Nirbheek Chauhan [Thu, 8 Feb 2018 09:11:05 +0000 (14:41 +0530)]
meson: Fix wasapi build on Windows

Was missing device prober and avrt (on msvc)

6 years agowasapi: Unprepare when src/sink_prepare fails
Nirbheek Chauhan [Thu, 8 Feb 2018 08:57:43 +0000 (14:27 +0530)]
wasapi: Unprepare when src/sink_prepare fails

unprepare() is not called automatically on failure.

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

6 years agowasapisink: Re-align device period if necessary
Nirbheek Chauhan [Wed, 7 Feb 2018 21:41:10 +0000 (03:11 +0530)]
wasapisink: Re-align device period if necessary

Sometimes the minimum period advertised by a card results in an
unaligned buffer size error during initialization in exclusive mode.
In that case, we can fetch the actual buffer size in frames and
calculate the period from that.

We can't do this pre-emptively because we can't call GetBufferSize
till Initialize has been called at least once.

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

6 years agowasapisink: pre-load the buffer with silence
Nirbheek Chauhan [Wed, 7 Feb 2018 21:39:26 +0000 (03:09 +0530)]
wasapisink: pre-load the buffer with silence

This reduces the chances of startup glitches, and also reduces the
chances that we'll get garbled output due to driver bugs.

Recommended by the WASAPI documentation.

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

6 years agowasapi: Try to use latency-time and buffer-time
Nirbheek Chauhan [Tue, 6 Feb 2018 23:18:58 +0000 (04:48 +0530)]
wasapi: Try to use latency-time and buffer-time

So far, we have been completely discarding the values of latency-time
and buffer-time and trying to always open the device in the lowest
latency mode possible. However, sometimes this is a bad idea:

1. When we want to save power/CPU and don't want low latency
2. When the lowest latency setting causes glitches
3. Other audio-driver bugs

Now we will try to follow the user-set values of latency-time and
buffer-time in shared mode, and only latency-time in exclusive mode (we
have no control over the hardware buffer size, and there is no use in
setting GstAudioRingBuffer size to something larger).

The elements will still try to open the devices in the lowest latency
mode possible if you set the "low-latency" property to "true".

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

6 years agowasapi: Cover more HRESULT error messages
Nirbheek Chauhan [Tue, 6 Feb 2018 18:26:41 +0000 (23:56 +0530)]
wasapi: Cover more HRESULT error messages

This requires using allocated strings, but it's the best option. For
instance, a call could fail because CoInitialize() wasn't called, or
because some other thing in the stack failed.

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

6 years agowasapi: Increase thread priority to reduce glitches
Nirbheek Chauhan [Tue, 6 Feb 2018 18:15:02 +0000 (23:45 +0530)]
wasapi: Increase thread priority to reduce glitches

This is particularly important when running in exclusive mode because
any delays will immediately cause glitching.

The MinGW version in Cerbero is too old, so we can only enable this when
building with MSVC or when people build GStreamer for MSYS2 or other
MinGW-based distributions.

To force-enable this code when building with MinGW, build with
CFLAGS="-DGST_FORCE_WIN_AVRT -lavrt".

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

6 years agowasapi: Allow opening devices in exclusive mode
Nirbheek Chauhan [Tue, 6 Feb 2018 18:10:49 +0000 (23:40 +0530)]
wasapi: Allow opening devices in exclusive mode

This provides much lower latency compared to opening in shared mode,
but it also means that the device cannot be opened by any other
application. The advantage is that the achievable latency is much
lower.

In shared mode, WASAPI's engine period is 10ms, and so that is the
lowest latency achievable.

In exclusive mode, the limit is the device period itself, which in my
testing with USB DACs, on-board PCI sound-cards, and HDMI cards is
between 2ms and 3.33ms.

We set our audioringbuffer limits to match the device, so the
achievable sink latency is 6-9ms. Further improvements can be made if
needed.

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

6 years agowasapi: Rename struct element for device name
Nirbheek Chauhan [Tue, 6 Feb 2018 18:07:19 +0000 (23:37 +0530)]
wasapi: Rename struct element for device name

We will use ->device for storing a pointer to the IMMDevice structure
which is needed for fetching the caps supported by devices in
exclusive mode.

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

6 years agowasapi: Fix indentation issues missed by the commit hook
Nirbheek Chauhan [Thu, 8 Feb 2018 06:02:32 +0000 (11:32 +0530)]
wasapi: Fix indentation issues missed by the commit hook

These were missed because the relevant commits were made on Windows
where `indent` wasn't installed.

6 years agovulkanupload: actually loop over possible uploaders
Matthew Waters [Thu, 8 Feb 2018 05:55:43 +0000 (16:55 +1100)]
vulkanupload: actually loop over possible uploaders

Fix some funky control that wasn't working

CID #1417219

6 years agowebrtc: Fix ffeb09e4 conditional
Matthew Waters [Thu, 8 Feb 2018 04:48:49 +0000 (15:48 +1100)]
webrtc: Fix ffeb09e4 conditional

Fixes ffeb09e4abe73d3b9e8909996816f0288e307e22

if (sscanf(...)) {  // != 0
  error;
}

Is not correct where != 0 indicates some kind of success.

Check instead that the correct number of elements were slurped.

6 years agowebrtc: change dead code to an assert
Matthew Waters [Thu, 8 Feb 2018 04:47:33 +0000 (15:47 +1100)]
webrtc: change dead code to an assert

CID #1429140