platform/upstream/gstreamer.git
4 years agoopenjpegenc: add support for sub-frame encoding
Aaron Boxer [Mon, 11 Nov 2019 14:47:00 +0000 (09:47 -0500)]
openjpegenc: add support for sub-frame encoding

Following the standard for low latency JPEG 2000 encoding
https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-H.222.0-200701-S!Amd1!PDF-E&type=items
we divide the image into stripes of a specified height, and encode
each stripe as a self-contained JPEG 2000 image. This MR is based on
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/merge_requests/429

4 years agosvthevcenc: Add new SVT-HEVC encoder element
Yeongjin Jeong [Sat, 23 Mar 2019 12:01:51 +0000 (21:01 +0900)]
svthevcenc: Add new SVT-HEVC encoder element

The SVT-HEVC (Scalable Video Technology[0] for HEVC) Encoder is an
open source video coding technology[1] that is highly optimized for
Intel Xeon Scalable processors and Intel Xeon D processors.

[0] https://01.org/svt
[1] https://github.com/OpenVisualCloud/SVT-HEVC

4 years agoh265parser: Add simple GstH265Profile/string public utilites
Yeongjin Jeong [Mon, 30 Sep 2019 07:29:50 +0000 (16:29 +0900)]
h265parser: Add simple GstH265Profile/string public utilites

It makes more simplifies the conversion between GstH265Profile and string.

4 years agod3d11videosink: Use dynamic texture for fallback buffer
Seungha Yang [Thu, 19 Dec 2019 15:01:26 +0000 (00:01 +0900)]
d3d11videosink: Use dynamic texture for fallback buffer

Upload CPU memory to texture directly by using dynamic usage texture.
This will reduce at least one step of staging copy per frame.

4 years agod3d11colorconvert: Set TRANSFER_NEED_DOWNLOAD flag to output memory for later cpu...
Seungha Yang [Thu, 19 Dec 2019 14:58:17 +0000 (23:58 +0900)]
d3d11colorconvert: Set TRANSFER_NEED_DOWNLOAD flag to output memory for later cpu access

Otherwise CPU cannot access texture via gst_memory_map()

4 years agod3d11colorconvert: Use shader resource and render target bind flags together
Seungha Yang [Thu, 19 Dec 2019 13:07:42 +0000 (22:07 +0900)]
d3d11colorconvert: Use shader resource and render target bind flags together

The output of d3d11colorconvert would be used for rendering (i.e., shader resource)

4 years agod3d11window: Change aspect-ratio mode from window thread
Seungha Yang [Thu, 19 Dec 2019 12:47:57 +0000 (21:47 +0900)]
d3d11window: Change aspect-ratio mode from window thread

Call DXGI API from window thread as much as possible

4 years agoexamples: Add example for d3d11videosink
Seungha Yang [Tue, 17 Dec 2019 11:49:52 +0000 (20:49 +0900)]
examples: Add example for d3d11videosink

This is fork of win32-videooverlay in -base but more d3d11videosink specific one.

4 years agod3d11videosink: Add support for full screen mode
Seungha Yang [Sun, 15 Dec 2019 10:29:10 +0000 (19:29 +0900)]
d3d11videosink: Add support for full screen mode

borderless top-most style full screen mode support.
Basically fullscreen toggle mode is disabled by default. To enable it
use "fullscreen-toggle-mode" property to allow fullscreen mode change
by user input and/or property.

4 years agod3d11: Use GRecMutex to protect immediate context and dxgi API call
Seungha Yang [Thu, 19 Dec 2019 15:17:33 +0000 (00:17 +0900)]
d3d11: Use GRecMutex to protect immediate context and dxgi API call

In some cases, rendering and dxgi (e.g., swapchain) APIs should be
called from window message pump thread, but current design (dedicated d3d11 thread)
make it impossible. To solve it, change concurrency model to locking based one
from single-thread model.

4 years agod3d11window: Prefer to use flip-sequential over discard
Seungha Yang [Wed, 18 Dec 2019 11:55:01 +0000 (20:55 +0900)]
d3d11window: Prefer to use flip-sequential over discard

flip-sequential is more efficient than discard

4 years agod3d11window: Don't hold backbuffer interface
Seungha Yang [Wed, 18 Dec 2019 11:36:32 +0000 (20:36 +0900)]
d3d11window: Don't hold backbuffer interface

We don't need to hold it

4 years agod3d11window: Use CreateSwapChainForHwnd if available
Seungha Yang [Wed, 18 Dec 2019 05:23:03 +0000 (14:23 +0900)]
d3d11window: Use CreateSwapChainForHwnd if available

That's recommended way from MS and CreateSwapChainForHwnd supports
more options than CreateSwapChain

4 years agod3d11: Use configuration file for dxgi header version check
Seungha Yang [Wed, 18 Dec 2019 04:21:31 +0000 (13:21 +0900)]
d3d11: Use configuration file for dxgi header version check

4 years agod3d11window: Use allow-tearing mode if device supports it
Seungha Yang [Tue, 17 Dec 2019 04:47:24 +0000 (13:47 +0900)]
d3d11window: Use allow-tearing mode if device supports it

As the recommendation from MS.

4 years agod3d11window: Disable fullscreen mode change by alt + enter
Seungha Yang [Sun, 15 Dec 2019 09:30:22 +0000 (18:30 +0900)]
d3d11window: Disable fullscreen mode change by alt + enter

Disable full screen mode change until proper handling is implemented

4 years agod3d11videosink: Remove resizing window hack and unify resizing flow
Seungha Yang [Sun, 15 Dec 2019 07:23:00 +0000 (16:23 +0900)]
d3d11videosink: Remove resizing window hack and unify resizing flow

In earlier implementation of d3d11videosink where no shader was implemented,
the aspect ratio and render size were adjusted by manipulating the backbuffer size
with unintuitive formula. Since now we do color conversion and resize using
shader, we can remove the hack.

4 years agod3d11: Pass GstD3D11Memory object to ensure_{shader_resource,render_target}_view...
Seungha Yang [Sun, 15 Dec 2019 06:50:19 +0000 (15:50 +0900)]
d3d11: Pass GstD3D11Memory object to ensure_{shader_resource,render_target}_view methods

The method name indicates it should be d3d11memory, so passing
GstD3D11Memory seems to make more sense than GstMemory.

4 years agod3d11videosink: Don't specify crop meta to allocation query
Seungha Yang [Sun, 15 Dec 2019 06:44:20 +0000 (15:44 +0900)]
d3d11videosink: Don't specify crop meta to allocation query

d3d11videosink could not handle it for now

4 years agoautoconvert: Fix lock-less exchange or free condition
Nicolas Dufresne [Thu, 19 Dec 2019 20:19:29 +0000 (15:19 -0500)]
autoconvert: Fix lock-less exchange or free condition

Before this change, we would free the list we just have saved.

Fixes #1158

4 years agogstsrtsink: Add `wait-for-connection` property to `srtsink`
Francisco Javier Velázquez-García (francisv) [Tue, 12 Nov 2019 11:27:51 +0000 (12:27 +0100)]
gstsrtsink: Add `wait-for-connection` property to `srtsink`

Add `wait-for-connection` property to `srtsink` element.  This
property allows the element to process packets even when no clients
are connected.

4 years agod3dvideosink: hold class lock for entire duration of class destruction
Aaron Boxer [Sat, 7 Dec 2019 15:56:28 +0000 (09:56 -0600)]
d3dvideosink: hold class lock for entire duration of class destruction

This avoids a race condition currently when temporarily releasing the
lock and then re-acquiring.

4 years agod3dvideosink: improve concurrency on hidden window create/destroy
Aaron Boxer [Sat, 7 Dec 2019 15:54:49 +0000 (09:54 -0600)]
d3dvideosink: improve concurrency on hidden window create/destroy

4 years agod3dvideosink: use thread pool to handle events from hidden window event queue
Aaron Boxer [Sat, 7 Dec 2019 20:51:28 +0000 (14:51 -0600)]
d3dvideosink: use thread pool to handle events from hidden window event queue

window event queue now does not lock on the class lock, so we can now shut
it down without releasing the class lock, thus avoiding a potential race when
stopping the sink.

4 years agod3dvideosink: improve concurrency on internal window create/destroy
Aaron Boxer [Sat, 7 Dec 2019 15:53:20 +0000 (09:53 -0600)]
d3dvideosink: improve concurrency on internal window create/destroy

Remove timeout and rely on condition variable instead to indicate thread
start.

4 years agod3dvideosink: only warn about HWND already set if new HWND is not NULL
Aaron Boxer [Sat, 7 Dec 2019 15:34:55 +0000 (09:34 -0600)]
d3dvideosink: only warn about HWND already set if new HWND is not NULL

4 years agod3dvideosink: add more null checks
Aaron Boxer [Sat, 7 Dec 2019 06:25:05 +0000 (00:25 -0600)]
d3dvideosink: add more null checks

4 years agod3dvideosink: check ref count and device before resetting display
Aaron Boxer [Sat, 7 Dec 2019 06:01:47 +0000 (00:01 -0600)]
d3dvideosink: check ref count and device before resetting display

4 years agod3dvideosink: use class lock when checking d3d formats, and cache format list
Aaron Boxer [Sat, 7 Dec 2019 15:41:32 +0000 (09:41 -0600)]
d3dvideosink: use class lock when checking d3d formats, and cache format list

4 years agod3dvideosink: destroy device just before final d3d release call
Aaron Boxer [Sat, 7 Dec 2019 05:50:50 +0000 (23:50 -0600)]
d3dvideosink: destroy device just before final d3d release call

and free overlays after swap chain is released

4 years agod3dvideosink: add two forward declarations
Aaron Boxer [Sat, 7 Dec 2019 05:26:34 +0000 (23:26 -0600)]
d3dvideosink: add two forward declarations

4 years agod3dvideosink: use class lock when setting pool config
Aaron Boxer [Sat, 7 Dec 2019 05:24:57 +0000 (23:24 -0600)]
d3dvideosink: use class lock when setting pool config

4 years agod3dvideosink: use class lock when allocating pool buffer
Aaron Boxer [Sat, 7 Dec 2019 05:23:45 +0000 (23:23 -0600)]
d3dvideosink: use class lock when allocating pool buffer

4 years agod3dvideosink: use class lock when creating overlay textures
Aaron Boxer [Sat, 7 Dec 2019 05:19:11 +0000 (23:19 -0600)]
d3dvideosink: use class lock when creating overlay textures

4 years agod3dvideosinnk: check d3d device exists before creating overlay vertex buffer
Aaron Boxer [Sat, 7 Dec 2019 05:16:05 +0000 (23:16 -0600)]
d3dvideosinnk: check d3d device exists before creating overlay vertex buffer

4 years agod3dvideosink: pass hidden window hwnd to GST_DEBUG, rather than NULL
Aaron Boxer [Sat, 7 Dec 2019 05:14:06 +0000 (23:14 -0600)]
d3dvideosink: pass hidden window hwnd to GST_DEBUG, rather than NULL

4 years agod3dvideosink: fix typo
Aaron Boxer [Sat, 7 Dec 2019 05:11:11 +0000 (23:11 -0600)]
d3dvideosink: fix typo

4 years agoh264parse: Align GST_H264_PROFILE_HIGH_422 to H264 standards
Stéphane Cerveau [Wed, 18 Dec 2019 03:03:40 +0000 (03:03 +0000)]
h264parse: Align GST_H264_PROFILE_HIGH_422 to H264 standards

According to H264 ITU standards from 06/19, GST_H264_PROFILE_HIGH_422
(profile_idc = 122) with constraint_set1_flag = 0 and
constraint_set3_flag = 0 can be mapped to high-4:2:2 or high-4:4:4.
GST_H264_PROFILE_HIGH_422 with constraint_set1_flag = 0 and
constraint_set3_flag = 1 can be mapped to high-4:2:2, high-4:4:4,
high-4:2:2-intra or high-4:4:4-intra.

4 years agoRevert "videoparseutils: support two new EIA 608 closed caption formats"
Olivier Crête [Tue, 17 Dec 2019 21:44:10 +0000 (16:44 -0500)]
Revert "videoparseutils: support two new EIA 608 closed caption formats"

This reverts commit f5c1c90122840396f3a34f787bd66a672be21c3b.

4 years agoRevert "ccextractor: support new CEA 608 formats"
Olivier Crête [Tue, 17 Dec 2019 21:43:54 +0000 (16:43 -0500)]
Revert "ccextractor: support new CEA 608 formats"

This reverts commit 80dd7b2d3d871f1cf456bda249bc90e4eeeb53b1.

4 years agoccextractor: support new CEA 608 formats
Aaron Boxer [Thu, 2 May 2019 17:20:29 +0000 (13:20 -0400)]
ccextractor: support new CEA 608 formats

4 years agovideoparseutils: support two new EIA 608 closed caption formats
Aaron Boxer [Fri, 25 Oct 2019 02:06:59 +0000 (22:06 -0400)]
videoparseutils: support two new EIA 608 closed caption formats

4 years agowlvideoformat: clean up video formats
Wonchul Lee [Sat, 9 Nov 2019 10:37:10 +0000 (19:37 +0900)]
wlvideoformat: clean up video formats

It cleans up videoFormat by combining the wl_shm_formats and
drm_formats into a single table that represents the same format.
In addition, it adds NV61 format to the waylandsink.

4 years agod3d11window: Always draw to internal window
Seungha Yang [Mon, 16 Dec 2019 07:59:07 +0000 (16:59 +0900)]
d3d11window: Always draw to internal window

... and use SetParent() WIN32 API when external window is used.
Depending on DXGI swap effect, the external window might not be
reusable by another backend. To preserve the external window's property
and setting, drawing to internal window seems to be safer way.

4 years agod3d11window: Always set error reason to GError object
Seungha Yang [Sat, 14 Dec 2019 12:41:01 +0000 (21:41 +0900)]
d3d11window: Always set error reason to GError object

4 years agomsdkdec: call finalize on the parent class
Julien Isorce [Fri, 13 Dec 2019 23:33:06 +0000 (15:33 -0800)]
msdkdec: call finalize on the parent class

Otherwise GstVideoDecoder is not finalized and
resources are leaked.

Somehow GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7" did not catch it.

Valgrind output:

==31645== 22,480 (1,400 direct, 21,080 indirect) bytes in 5 blocks are definitely lost in loss record 5,042 of 5,049
==31645==    at 0x4C2FB0F: malloc
==31645==    by 0x51D9E88: g_malloc
==31645==    by 0x51FA7B5: g_slice_alloc
==31645==    by 0x51FAC68: g_slice_alloc0
==31645==    by 0x58D9984: g_type_create_instance
==31645==    by 0x58BA344: g_object_new_with_properties
==31645==    by 0x58BADA0: g_object_new
==31645==    by 0x8ECA966: gst_video_decoder_init
==31645==    by 0x58D99E7: g_type_create_instance
==31645==    by 0x58BA344: g_object_new_with_properties

4 years agoavfvideosrc: element requests camera permissions even with capture-screen property...
Roman Shpuntov [Wed, 11 Dec 2019 07:17:37 +0000 (14:17 +0700)]
avfvideosrc: element requests camera permissions even with capture-screen property is true

https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1137

macOS has different dialogs for camera capture and screen capture.
No need to request screen capture permissions, the system detect
screen capture automatically and create request dialog.

4 years agod3d11window: Initialize surface rect with given external window handle
Seungha Yang [Wed, 11 Dec 2019 12:51:03 +0000 (21:51 +0900)]
d3d11window: Initialize surface rect with given external window handle

Unlike internal window, resize event might not happen with external window.

4 years agod3d11device: Report alive d3d11 objects at the end
Seungha Yang [Wed, 11 Dec 2019 11:21:42 +0000 (20:21 +0900)]
d3d11device: Report alive d3d11 objects at the end

It would be useful for debugging d3d11 object leak.

4 years agod3d11: Fix ID3D11SamplerState leak
Seungha Yang [Wed, 11 Dec 2019 11:19:45 +0000 (20:19 +0900)]
d3d11: Fix ID3D11SamplerState leak

4 years agoremove various useless linefeed in logs
Stéphane Cerveau [Wed, 11 Dec 2019 09:47:20 +0000 (10:47 +0100)]
remove various useless linefeed in logs

4 years agomsdk: ignore MFX_ERR_UNDEFINED_BEHAVIOR when loading a plugin
Haihao Xiang [Thu, 7 Nov 2019 07:54:47 +0000 (15:54 +0800)]
msdk: ignore MFX_ERR_UNDEFINED_BEHAVIOR when loading a plugin

An issue can be seen when using msdkh265enc with bitrate change in
playing state. The root cause is the corresponding plugin is loaded
again.

Returning MFX_ERR_UNDEFINED_BEHAVIOR from MSDK just means the plugin has
been loaded, so we may ignore this error when doing configuation again
in the sub class, otherwise the pipeline will be interrupted

4 years agod3d11videosink: Fix broken fallback rendering
Seungha Yang [Mon, 9 Dec 2019 12:01:32 +0000 (21:01 +0900)]
d3d11videosink: Fix broken fallback rendering

Make fallback rendering work

4 years agod3d11videosink: Add debug message for fallback reason
Seungha Yang [Mon, 9 Dec 2019 10:54:30 +0000 (19:54 +0900)]
d3d11videosink: Add debug message for fallback reason

4 years agod3d11window: Do not check shader resource view if not doing conversion
Seungha Yang [Sun, 8 Dec 2019 15:14:53 +0000 (00:14 +0900)]
d3d11window: Do not check shader resource view if not doing conversion

If d3d11window does not convert format internally, shader resource view
is not required. Note that shader resource view is used for
color conversion using shader but when conversion is not required,
we just copy input input texture to backbuffer.

4 years agomsdkvpp: check mfx surface nullity for the input buffer
Julien Isorce [Fri, 6 Dec 2019 05:19:13 +0000 (21:19 -0800)]
msdkvpp: check mfx surface nullity for the input buffer

In theory it should not happen but it happened to me
in some cases where it failed to allocate some video
buffers so this was a consequence of a corner case.
Better to be safe than sorry.

4 years agod3d11window: Clear old swapchain per prepare
Seungha Yang [Sun, 8 Dec 2019 07:39:16 +0000 (16:39 +0900)]
d3d11window: Clear old swapchain per prepare

_prepare() might be called multiple times for given window, so clear
old swapchain if any.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1138

4 years agosrtp: Remove %z as it doesn't work on Windows
Olivier Crête [Mon, 9 Dec 2019 20:35:03 +0000 (15:35 -0500)]
srtp: Remove %z as it doesn't work on Windows

4 years agogsttestsrcbin: Avoid not-linked errors when switching tracks
Alicia Boya García [Mon, 9 Dec 2019 16:54:02 +0000 (17:54 +0100)]
gsttestsrcbin: Avoid not-linked errors when switching tracks

The previous implementation had a very high reproducibility race where
if after a track switch, the ex-active track pad completed a buffer
chain (now returning not-linked) the flow combiner had all their pads in
non-linked state, propagating it as an error and stopping the pipeline.

By resetting the flow combiner in response to RECONFIGURE events that
race is made impossible.

4 years agomsdkdec: fix assertion 'frame->ref_count > 0' failed
Julien Isorce [Fri, 6 Dec 2019 16:50:05 +0000 (08:50 -0800)]
msdkdec: fix assertion 'frame->ref_count > 0' failed

Can happen if the oldest frame is the current frame
and if gst_video_decoder_finish_frame failed in which
case the current is unref and then drop instead of
just drop.
This patch also removes some assumptions, it was strange
to call unref and finish_frame in gst_msdkdec_finish_task.
In principle when owning a frame, the code should either
unref, or drop or finish.

4 years agod3d11window: Always set dxgi colorspace if possible
Seungha Yang [Sun, 8 Dec 2019 08:25:26 +0000 (17:25 +0900)]
d3d11window: Always set dxgi colorspace if possible

Not only for the 10 bits RGB case with HDR metadata, set proper color space
to swapchain in order to make color representaion correct

4 years agovtdec: add support for outputing vulkan images
Matthew Waters [Tue, 3 Sep 2019 03:56:22 +0000 (13:56 +1000)]
vtdec: add support for outputing vulkan images

4 years agovulkan/image: expose initialization function for subclasses
Matthew Waters [Tue, 3 Sep 2019 03:42:43 +0000 (13:42 +1000)]
vulkan/image: expose initialization function for subclasses

4 years agovulkan/macos: link directly to MoltenVK
Matthew Waters [Mon, 2 Sep 2019 14:30:31 +0000 (00:30 +1000)]
vulkan/macos: link directly to MoltenVK

It's currently the only sane way we can use MoltenVK functions to
integrate with Metal API.

It also removes the need to specify the VK_ICD_FILENAMES environment
variable pointing to MoltenVK_icd.json.

4 years agoapplemedia: rename IOSurfaceMemory -> IOSurfaceGLMemory
Matthew Waters [Mon, 2 Sep 2019 05:00:27 +0000 (15:00 +1000)]
applemedia: rename IOSurfaceMemory -> IOSurfaceGLMemory

4 years agovideotexturecache: implement GL specifics as a subclass
Matthew Waters [Wed, 28 Aug 2019 08:59:35 +0000 (18:59 +1000)]
videotexturecache: implement GL specifics as a subclass

4 years agoapplemedia/videocache: make a GObject subclass
Matthew Waters [Mon, 26 Aug 2019 06:51:03 +0000 (16:51 +1000)]
applemedia/videocache: make a GObject subclass

4 years agoavfvideosrc: don't leak texture caches
Matthew Waters [Wed, 28 Aug 2019 10:09:39 +0000 (20:09 +1000)]
avfvideosrc: don't leak texture caches

If decide_allocation is called multiple times, then we would continually
overwrite the previous cache without freeing

4 years agod3d11: translate windows error codes to human readable strings
Aaron Boxer [Fri, 6 Dec 2019 04:06:41 +0000 (22:06 -0600)]
d3d11: translate windows error codes to human readable strings

This will help with debugging.

4 years agomlaudiosink: Fix crash when stopping pipeline
Xavier Claessens [Mon, 16 Sep 2019 17:15:59 +0000 (13:15 -0400)]
mlaudiosink: Fix crash when stopping pipeline

This is a bug in LuminOS 0.97.0.

4 years agoAdd mlaudiosink element
Xavier Claessens [Tue, 9 Apr 2019 19:22:19 +0000 (15:22 -0400)]
Add mlaudiosink element

4 years agoopenh264enc: keep the headers
Stéphane Cerveau [Thu, 5 Sep 2019 14:48:19 +0000 (16:48 +0200)]
openh264enc: keep the headers

be able to resend the headers on demand after a key-unit request

4 years agodecklink: Return new references to the devices from get_devices()
Sebastian Dröge [Thu, 5 Dec 2019 19:22:18 +0000 (21:22 +0200)]
decklink: Return new references to the devices from get_devices()

Otherwise the caller will free the devices we store internally.

4 years agodash: move parser nodes/types to separated files
Stéphane Cerveau [Fri, 24 May 2019 14:24:00 +0000 (16:24 +0200)]
dash: move parser nodes/types to separated files

Rename GstMpdClient to GstMPDClient and use GObject model.

Move nodes to file from gstmpdparser.c:
- GstMPDRootNode
- GstMPDBaseURLNode
- GstMPDUTCTimingNode
- GstMPDMetricsNode
- GstMPDMetricsRangeNode
- GstMPDSNode
- GstMPDSegmentTimelineNode
- GstSegmentTemplateNode
- GstMPDSegmentURLNode
- GstMPDSegmentListNode
- GstMPDPeriodNode
- GstMPDRepresentationNode
- GstMPDsubRepresentationNode
- GstMPDAdaptationSetNode
- GstMPDContentComponentNode
- GstMPDSubsetNode
- GstMPDProgramInformationNode

Move types to gstmpdhelper from gstmpdparser.c:

- GstURLType
- GstDescriptorType
- GstSegmentBaseType
- GstMPDMultSegmentBaseType
- GstMPDRepresentationBaseType

Cleanup naming when possible.

4 years agodash: split mpdparser, mpdclient and xmlhelper
Stéphane Cerveau [Mon, 20 May 2019 16:48:23 +0000 (18:48 +0200)]
dash: split mpdparser, mpdclient and xmlhelper

provide a separate namespace for mpd helper
for xml parsing and the real mpd parsing.

4 years agod3dvideosink: Fix warning for unhandled enum in switch
Seungha Yang [Wed, 4 Dec 2019 06:33:42 +0000 (15:33 +0900)]
d3dvideosink: Fix warning for unhandled enum in switch

d3dhelpers.c:135:3: warning: enumeration value 'D3DFMT_D32_LOCKABLE' not handled in switch [-Wswitch]

4 years agovulkanviewconvert: clear the cached uniforms on caps change
Matthew Waters [Wed, 4 Dec 2019 08:29:38 +0000 (19:29 +1100)]
vulkanviewconvert: clear the cached uniforms on caps change

Caps changes can change the output/input layout which needs to be
reflected in the input uniforms to the shader.

4 years agod3d11: Initialize debug categories of non-GstElement implementation in plugin init
Seungha Yang [Wed, 4 Dec 2019 15:53:40 +0000 (00:53 +0900)]
d3d11: Initialize debug categories of non-GstElement implementation in plugin init

That's the way to expose debug category to --gst-debug-help

4 years agod3d11window: Invoke resize task with high priority
Seungha Yang [Wed, 4 Dec 2019 14:23:09 +0000 (23:23 +0900)]
d3d11window: Invoke resize task with high priority

On resize event, swapchain should be configured with higher priority
than the other tasks since it's directly related to visual artifacts.

4 years agod3d11device: Add gst_d3d11_device_thread_add_full method
Seungha Yang [Wed, 4 Dec 2019 14:20:39 +0000 (23:20 +0900)]
d3d11device: Add gst_d3d11_device_thread_add_full method

I would be used to invoke GPU task with specified priority.

4 years agod3d11videosinkbin: Drop d3d11 color convert element
Seungha Yang [Wed, 4 Dec 2019 05:15:19 +0000 (14:15 +0900)]
d3d11videosinkbin: Drop d3d11 color convert element

d3d11videosink can convert color space now, so the conversion element
seems to be redundant.

4 years agod3d11videosink: Add color conversion support
Seungha Yang [Tue, 3 Dec 2019 13:54:26 +0000 (22:54 +0900)]
d3d11videosink: Add color conversion support

Draw to back buffer texture directly. It would reduce the number of
copy at least once when color conversion is required.

4 years agod3d11converter: Skip setup converter if input and output formats are equal
Seungha Yang [Tue, 3 Dec 2019 13:29:27 +0000 (22:29 +0900)]
d3d11converter: Skip setup converter if input and output formats are equal

4 years agod3d11colorconvert: Split color space converter to reuse code
Seungha Yang [Tue, 3 Dec 2019 11:35:06 +0000 (20:35 +0900)]
d3d11colorconvert: Split color space converter to reuse code

4 years agod3d11: Split shader to reuse code
Seungha Yang [Mon, 2 Dec 2019 11:24:05 +0000 (20:24 +0900)]
d3d11: Split shader to reuse code

4 years agod3d11videosink: Draw window with cached texture on resize
Seungha Yang [Mon, 2 Dec 2019 14:27:42 +0000 (23:27 +0900)]
d3d11videosink: Draw window with cached texture on resize

This would render nicer than presenting scene with broken aspect ratio,
especially in case of low framerate.

4 years agod3d11: Add support for D3D11_USAGE_DYNAMIC
Seungha Yang [Sat, 30 Nov 2019 11:26:26 +0000 (20:26 +0900)]
d3d11: Add support for D3D11_USAGE_DYNAMIC

D3D11 dynamic texture is a special memory type, which is mainly used for
frequent CPU write access to the texture. For now, this texture type
does not support gst_memory_{map,unmap}

4 years agod3d11device: Add debug message for CreateTexture2D failure
Seungha Yang [Mon, 2 Dec 2019 05:23:10 +0000 (14:23 +0900)]
d3d11device: Add debug message for CreateTexture2D failure

4 years agod3d11device: Fix misreading debug message
Seungha Yang [Mon, 2 Dec 2019 05:03:04 +0000 (14:03 +0900)]
d3d11device: Fix misreading debug message

4 years agod3d11colorconvert: Disable color conversion with software rasterizer
Seungha Yang [Sun, 1 Dec 2019 07:13:38 +0000 (16:13 +0900)]
d3d11colorconvert: Disable color conversion with software rasterizer

It's much slower than our CPU based color-converter in most case.

4 years agod3d11videosink: Handle context query
Seungha Yang [Thu, 18 Jul 2019 14:12:13 +0000 (23:12 +0900)]
d3d11videosink: Handle context query

Propagate d3d11device via context query.

4 years agod3d11colorconvert: Avoid copy in/out texture if possible
Seungha Yang [Sun, 6 Oct 2019 12:59:54 +0000 (21:59 +0900)]
d3d11colorconvert: Avoid copy in/out texture if possible

When input and/or output d3d11memory has its own view, use them for
rendering to avoid texture copy

4 years agod3d11memory: Allocate texture with required views
Seungha Yang [Sun, 6 Oct 2019 12:35:48 +0000 (21:35 +0900)]
d3d11memory: Allocate texture with required views

Store required resource views with d3d11 texture when it requested.

4 years agod3d11: Add d3d11videosinkbin element
Seungha Yang [Wed, 6 Nov 2019 10:39:09 +0000 (19:39 +0900)]
d3d11: Add d3d11videosinkbin element

New wrapper element to support d3d11 memory upload, color conversion, and
rendering at once.

4 years agod3d11: Add color space conversion element using shader
Seungha Yang [Sun, 18 Aug 2019 12:01:55 +0000 (21:01 +0900)]
d3d11: Add color space conversion element using shader

Add d3d11colorconvert element for color space conversion.
Currently {RGB, YUV} to RGB conversion is supported.

4 years agod3d11memory: Register mininal compare function for GstD3D11AllocationParams
Seungha Yang [Sun, 6 Oct 2019 11:59:51 +0000 (20:59 +0900)]
d3d11memory: Register mininal compare function for GstD3D11AllocationParams

The d3d11 allocation param is stored in GstStructure so it should
provide compare function for later use such as gst_structure_is_equal()

4 years agod3d11window: Set render target whenever drawing
Seungha Yang [Thu, 3 Oct 2019 12:24:07 +0000 (21:24 +0900)]
d3d11window: Set render target whenever drawing

Device context's render target might be updated for offscreen rendering

4 years agod3d11videosink: Specify d3d11 memory caps feature on sinkpad template
Seungha Yang [Sat, 24 Aug 2019 08:43:43 +0000 (17:43 +0900)]
d3d11videosink: Specify d3d11 memory caps feature on sinkpad template

4 years agod3d11: Introduce d3d11 upload/download element
Seungha Yang [Wed, 6 Nov 2019 10:38:31 +0000 (19:38 +0900)]
d3d11: Introduce d3d11 upload/download element

That's equivalent to glupload and gldownload elements but for d3d11

4 years agod3d11: Refactor d3d11 memory and dxgi format usage
Seungha Yang [Wed, 6 Nov 2019 10:37:33 +0000 (19:37 +0900)]
d3d11: Refactor d3d11 memory and dxgi format usage

* Create staging texture only when the CPU access is requested.
Note that we should avoid the CPU access to d3d11 memory as mush as possible.
Incoming d3d11upload and d3d11download will take this GPU memory upload/download.

* Upload/Download texture memory from/to staging only if it needed, similar to
GstGL PBO implementation.

* Define more dxgi formats for future usage (e.g., color conversion, dxva2 decoder).
Because I420_* formats are not supported formats by dxgi, each plane should
be handled likewise GstGL separately, but NV12/P10 formats might be supported ones.
So we decide the number of d3d11memory per GstBuffer for video memory depending on
OS version and dxgi format. For instance, if NV12 is supported by OS,
only one d3d11memory with DXGI_FORMAT_NV12 texture can be allocated by this commit.
One use case of such texture is DXVA. In case DXVA decoder, it might need to produce decoded data
to one DXGI_FORMAT_NV12 instead of seperate Y and UV planes.
Such behavior will be controlled via configuration of GstD3D11BufferPool and
default configuration is separate resources per plane.