Seungha Yang
98eebf3322
va: allocator: Fix deadlock caused by double lock
...
Trivial bug fix for deadlock
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1949 >
2021-01-12 21:28:04 +09:00
Matthew Waters
94fea694bc
wpesrc: replace object lock usage with a new lock
...
Using the object lock is problematic for anything that can dispatch to
another thread which is what createWPEView() does inside
gst_wpe_src_start(). Using the object lock there can cause a deadlock.
One example of such a deadlock is when createWPEView is called, but
another (or the same) wpesrc is on the WPEContextThread and e.g. posts a
bus message. This message propagations takes and releases the object
lock of numerous elements in quick succession for determining various
information about the elements in the bin. If the object lock is
already held, then the message propagation will block and stall bin
processing (state changes, other messages) and wpe servicing any events.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1490
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1934 >
2021-01-12 08:35:10 +00:00
Seungha Yang
ae7c20a6ed
codecs: h264picture: Count only complete complementary field pair for dpb fullness decision
...
Our DPB implementation was designed as such that allowing
temporary DPB overflow in the middle of field picture decoding
and incomplete field pair should not trigger DPB bumping.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1947 >
2021-01-10 23:27:27 +09:00
Seungha Yang
e14bbd7f5c
codecs: h264decoder: Add support for field-pair input frame
...
In case that upstream pushed buffer as a frame unit, not picture
unit for interlaced stream, baseclass should be able to detect
AU boundary (i.e., complementary field pair).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1947 >
2021-01-10 23:11:01 +09:00
Seungha Yang
6366435e19
codecs: h264decoder: Remove unused private variables
...
... and reset() method to clear internal status at one place
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1947 >
2021-01-10 22:02:54 +09:00
Mathieu Duponchelle
88e007fb21
webrtcbin: try harder not to pick duplicate media ids
...
On renegotiation, or when the user has specified a mid for
a transceiver, we need to avoid picking a duplicate mid for
a transceiver that doesn't yet have one.
Also assign the mid we created to the transceiver, that doesn't
fix a specific bug but seems to make sense to me.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1902 >
2021-01-08 20:22:57 +00:00
Seungha Yang
ad3fb007e1
meson: va: Skip configuration on non-linux environment
...
VA plugin is linux-only plugin, so we can skip it earlier.
Note that this plugin is making use of libdrm meson fallback,
which is unusable on the other platforms such as Windows
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1946 >
2021-01-07 23:47:35 +09:00
Haihao Xiang
3e2e07bb8a
msdkenc: the unit for max-frame-size is kbyte
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1944 >
2021-01-07 12:07:28 +00:00
Edward Hervey
4e7f7871db
srt: Define options added in later revisions
...
Allows compiling the plugin against old headers.
For SRTO_BINDTODEVICE there's nothing we can do, since the value depends on
configuration options of the library. Nice.
Fixes build with libsrt < 1.4.2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1945 >
2021-01-07 09:23:28 +01:00
Jakub Adam
6c35222973
srtobject: distinguish authentication error messages
...
Use GST_RESOURCE_ERROR_NOT_AUTHORIZED code in posted error messages
related to SRT authentication (e.g. incorrect or missing password) so
that the application can recognize them more easily.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1943 >
2021-01-06 23:35:20 +00:00
Jakub Adam
ef118f3d0a
srtobject: detect socket errors from srt_epoll_wait()
...
On an error event, epoll wait puts the failed socket in both readfds and
writefds. We can take advantage of this and avoid explicitly checking
socket state before every read or write attempt.
In addition, srt_getrejectreason() will give us more detailed
description of the connection failure.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1943 >
2021-01-06 23:35:20 +00:00
Olivier Crête
df8d29e9c3
webrtcbin: Remove remnant of non-rtcp-mux mode
...
There was some code left that wasn't used anymore.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1930 >
2021-01-06 23:02:37 +00:00
Jakub Adam
3c3e89304e
srtobject: make possible to specify more sockopts in SRT URI
...
Any socket option that can be passed to libsrt's srt-live-transmit
through SRT URI query string is now recognized.
Also make the code that applies options to SRT sockets more generic.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1842 >
2021-01-06 22:28:02 +00:00
Jakub Adam
5687b03438
srtsrc: fix typos
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1541 >
2021-01-06 19:21:14 +00:00
Jakub Adam
1e461b3166
srtsink: remove unused connection_mode variable
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1541 >
2021-01-06 19:21:14 +00:00
Jakub Adam
d540012091
srtobject: obey "wait-for-connection" in caller mode
...
The pipeline now gets stuck in gst_srt_object_write_one() until the
receiver comes online, which may or may not be desired based on the use
case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1836 >
2021-01-06 18:55:37 +00:00
Víctor Manuel Jáquez Leal
4625ac92b6
va: mpeg2dec: refactor the picture reference filling
...
Add the helper function _get_surface_id() which extracts the
VASurfaceID from the passed picture. This function gets the surface of
the next and previous reference picture.
Instead of if-statements, this refactor uses a switch-statement with a
fall-through, for P-type pictures, making the code a bit more readable.
Also it adds quirks for gallium driver, which cannot handle invalid
surfaces as forwarding nor backwarding references, so the function fails.
Also iHD cannot handle them, but to avoid failing, the current picture
is used as self-reference.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1939 >
2021-01-06 17:27:10 +01:00
Víctor Manuel Jáquez Leal
aff338bb24
va: mpeg2dec: set first field either frame or has a first field
...
Add a helper function _is_frame_start() which check if picture has a
frame structure or if it has not an interlaced first field yet. This
function is used with filling is_first_field parameter.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1939 >
2021-01-06 17:27:10 +01:00
Víctor Manuel Jáquez Leal
a926511df4
codecs: mpeg2decoder: decode only if B and not closed gop
...
Mark as decode only if picture type is B, without previous picture in DBP and
closed_gop is 0 as might be understood in "6.3.8 Group of pictures header".
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1939 >
2021-01-06 16:47:42 +01:00
Víctor Manuel Jáquez Leal
ec15caff93
codecs: mpeg2decoder: rename variables
...
Since prev_picture and next_picture are plain pointers, not pointer to pointers,
it's misleading to name them with _ptr suffix.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1939 >
2021-01-06 16:47:42 +01:00
Víctor Manuel Jáquez Leal
df6c4843a7
va: display: parse and set driver implementation
...
This enum can be used for quirk handling. It's not a property because
the driver enum list might change, it's not static, thus avoiding the
update of GType declaration.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1938 >
2021-01-05 17:54:34 +00:00
Víctor Manuel Jáquez Leal
543d54d492
va: display: add function precondition check
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1938 >
2021-01-05 17:54:34 +00:00
Jakub Adam
00e44e8ed7
srtobject: post a message on the bus when broken socket is detected
...
So that the application gets notified may react to it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1935 >
2021-01-05 16:50:01 +00:00
He Junyan
4c66a0265c
va: mpeg2dec: Using the current picture's surface when missing reference.
...
When missing the reference frames, we should not just discard the current
frame. Some streams have group of picture header. It is an optional header
that can be used immediately before a coded I-frame to indicate to the decoder
if the first consecutive B-pictures immediately following the coded I-frame can
be reconstructed properly in the case of a random access.
In that case, the B frames may miss the previous reference and can still be
correctly decoded. We also notice that the second field of the I frame may
be set to P type, and it only ref its first field.
We should not skip all those frames, and even the frame really misses the
reference frame, some manner such as inserting grey picture should be used
to handle these cases.
The driver crashes when it needs to access the reference picture while we set
forward_reference_picture or backward_reference_picture to VA_INVALID_ID. We
now set it to current picture to avoid this. This is just a temp manner.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1929 >
2021-01-04 13:09:01 +00:00
He Junyan
41d2edc964
codecs: mpeg2decoder: Creating the field based on its arriving time.
...
Spec says:
In a frame picture top_field_first being set to ‘1’ indicates that the
top field of the reconstructed frame is the first field output by the
decoding process. top_field_first being set to ‘0’ indicates that the
bottom field of the reconstructed frame is the first field output by
decoding process.
Here, the "output" should be interpreted just as the output order, not
including the decoding order. The field should be decoded as the order
they comes in the stream. Namely, no matter top_field_first is 0 or 1,
the first coming field is the first one to be decoded.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1929 >
2021-01-04 13:09:01 +00:00
He Junyan
b2b0483d03
va: mpeg2dec: Apply buffer_flags to the output buffer.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1929 >
2021-01-04 13:09:01 +00:00
He Junyan
459abad096
codecs: Add buffer_flags for mpeg2 picture.
...
We need to store the buffer flags such as GST_VIDEO_BUFFER_FLAG_INTERLACED
and GST_VIDEO_BUFFER_FLAG_TFF for interlaced video. Without these flags,
the VPP and display elements can not apply filter correctly.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1929 >
2021-01-04 13:09:01 +00:00
He Junyan
339a816c81
codecs: Reset the quant matrices for each sequence in mpeg2 decoder.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1929 >
2021-01-04 13:09:01 +00:00
Raghavendra
08b1485862
srt: Add authentication to srtsink and srtsrc elements
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1725 >
2021-01-04 00:03:47 +05:30
Haihua Hu
a4a532c092
dashsink: fix critical log when exit dynamic pipeline
...
availability-start-time and publish-time shared the same
GstDateTime object, this object will be unref twice and
cause reference count issue. Should use g_value_dup_boxed()
to copy this object.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1928 >
2020-12-31 10:34:50 +08:00
Haihao Xiang
1f1a5b4ad1
msdkenc{h264,h265}: add min-qp and max-qp properties
...
The SDK allows user to set a QP range [1], so add min-qp and max-qp to
sepecify QP range. By default, there is no limitations on QP.
[1] https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#mfxextcodingoption2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1908 >
2020-12-30 06:40:36 +00:00
Haihao Xiang
7bc3d51b42
msdkenc{h264,h265}: add p-pyramid property
...
The SDK can support P-Pyramid reference structure [1], so add a new
property to enable this feature in msdkenc{h264,h265}.
[1] https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#preftype
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1908 >
2020-12-30 06:40:36 +00:00
Haihao Xiang
af988e282a
msdkh265enc: add b-pyramid property
...
Like as msdkh264enc, b-pyramid is added to enable B-Pyramid reference
structure for H265 encoding
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1908 >
2020-12-30 06:40:36 +00:00
Haihao Xiang
ff206f6525
msdkh265enc: add transform-skip property
...
Since the SDK API 1.26, TransformSkip was added to control
transform_skip_enabled_flag setting in PPS [1]
[1] https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#mfxextcodingoption3
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1908 >
2020-12-30 06:40:36 +00:00
Haihao Xiang
bdff6f5e42
msdk: needn't close mfx session when failed
...
Otherwise we will get double free issue because mfx session is closed in
finalize. See
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1867#note_739346
for the double free issue.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1916 >
2020-12-30 05:08:52 +00:00
Olivier Crête
51ef4557b5
webrtcstats: PLI/FIR/NACK direction are the opposite of the media
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1924 >
2020-12-29 15:07:03 -05:00
Sebastian Dröge
b258144c16
assrender: Don't try unlocking unlocked mutex
...
When flushing right at the beginning of the video chain function or
when failing negotiation at the top of the function, the assrender mutex
would be unlocked without being previously locked.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1918 >
2020-12-29 11:19:53 +00:00
Seungha Yang
68a47eb316
d3d11compositor: Add support for resolution change
...
Not only for position update (e.g., xpos, ypos),
we need to configure shader again per resolution change of each
input stream.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1912 >
2020-12-28 16:05:20 +00:00
Seungha Yang
4151e8e052
d3d11shader: Fix ID3DBlob object leak
...
Even if HLSL compiler was able to compile our shader code, D3DCompile()
might return ID3DBlob object for compile warnings and the object
should be released.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1914 >
2020-12-28 14:18:36 +00:00
He Junyan
29be6ff83a
codecs: Fix a typo in mpeg2 stateless decoder base class.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1915 >
2020-12-28 17:13:22 +08:00
Víctor Manuel Jáquez Leal
f1fe62dbe5
va: mpeg2dec: cosmetic changes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1798 >
2020-12-28 13:17:21 +08:00
Víctor Manuel Jáquez Leal
060c54ab07
codecs: mpeg2decoder: fix documentation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1798 >
2020-12-28 13:15:50 +08:00
Víctor Manuel Jáquez Leal
5243048cb0
codecs: mpeg2decoder: simplify macros
...
For constructors, instead of casting to pointers, cast to the structures.
For compare, use inlined functions.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1798 >
2020-12-28 13:14:51 +08:00
He Junyan
19811759d6
va: Add mpeg2 VA decoder.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1798 >
2020-12-28 13:14:06 +08:00
He Junyan
0e161dd363
codecs: Add mpeg2 stateless decoder base class.
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1798 >
2020-12-28 13:05:29 +08:00
Seungha Yang
e82f1f8b0b
mfvideoenc: Re-define default GOP size value
...
The behavior for zero AVEncMPVGOPSize value would be
varying depending on GPU vendor implementation and some
GPU will produce keyframe only once at the beginning of encoding.
That's unlikely expected result for users.
To make this property behave consistently among various GPUs,
this commit will change default value of "gop-size" property to -1
which means "auto". When "gop-size" is unspecified, then
mfvideoenc will calculate GOP size based on framerate
like that of our x264enc implementation.
See also
https://docs.microsoft.com/en-us/windows/win32/directshow/avencmpvgopsize-property
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1911 >
2020-12-27 03:58:39 +09:00
Seungha Yang
8df131ab42
mfvideoenc: Fix use of uninitialized value
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1911 >
2020-12-27 03:51:16 +09:00
Seungha Yang
7eab7ae8cc
d3d11device: Add property for getting adapter LUID
...
LUID (Locally Unique Identifier) can used for identifying GPU
and that's required for some Windows APIs (e.g., MFTEnum2()) to setup device.
See also
https://docs.microsoft.com/en-us/windows/win32/api/mfapi/nf-mfapi-mftenum2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1910 >
2020-12-26 23:50:52 +09:00
Seungha Yang
4b522dd355
mfvideoenc: Remove duplicated class registration code
...
Each codec subclass has the same code for class/element registration,
so we can move the code into one helper methodm and that will make
future enhancement simple.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1909 >
2020-12-26 14:25:06 +00:00
Haihao Xiang
86fdd39147
msdk: check GstMsdkContext instead of mfxSession instance
...
When creating a GstMsdkContext instance, it also creates a mfxSession
instance, so we may check GstMsdkContext instead of mfxSession instance
to make sure MSDK is available. In addition, according to MSDK doc [1],
MFXVideoCORE_SetHandle function should be executed before any actual
usage of library including queries, otherwise the behavior is
unexpected, so we should call MFXVideoCORE_QueryPlatform after
MFXVideoCORE_SetHandle on Linux
[1] https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#working-with-va-api-applications
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1867 >
2020-12-24 02:53:13 +00:00