mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +00:00
d3d11testsrc: Add "alpha" and "alpha-mode" properties
Adding global alpha and alpha mode options Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4825>
This commit is contained in:
parent
cb28a16007
commit
80878a6ea4
1 changed files with 122 additions and 26 deletions
|
@ -201,7 +201,13 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
const ColorValue *clear_color[2];
|
ColorValue value;
|
||||||
|
gboolean is_valid;
|
||||||
|
} StaticColor;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
StaticColor static_color[2];
|
||||||
GstD3D11TestSrcQuad *quad[2];
|
GstD3D11TestSrcQuad *quad[2];
|
||||||
GstD3D11TestSrcPattern pattern;
|
GstD3D11TestSrcPattern pattern;
|
||||||
} GstD3D11TestSrcRender;
|
} GstD3D11TestSrcRender;
|
||||||
|
@ -224,6 +230,8 @@ struct _GstD3D11TestSrc
|
||||||
D3D11_VIEWPORT viewport;
|
D3D11_VIEWPORT viewport;
|
||||||
ID2D1Factory *d2d_factory;
|
ID2D1Factory *d2d_factory;
|
||||||
gint64 token;
|
gint64 token;
|
||||||
|
gfloat alpha;
|
||||||
|
GstD3D11ConverterAlphaMode alpha_mode;
|
||||||
|
|
||||||
gboolean reverse;
|
gboolean reverse;
|
||||||
gint64 n_frames;
|
gint64 n_frames;
|
||||||
|
@ -318,7 +326,7 @@ static const gchar templ_ps_snow[] =
|
||||||
" float4 output;\n"
|
" float4 output;\n"
|
||||||
" float val = get_rand (time * input.Texture);\n"
|
" float val = get_rand (time * input.Texture);\n"
|
||||||
" output.rgb = float3(val, val, val);\n"
|
" output.rgb = float3(val, val, val);\n"
|
||||||
" output.a = 1.0f;\n"
|
" output.a = %s;\n"
|
||||||
" return output;\n"
|
" return output;\n"
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
|
@ -347,7 +355,8 @@ static const gchar templ_ps_checker[] =
|
||||||
" float result = fmod (xy_mod.x + xy_mod.y, 2.0);\n"
|
" float result = fmod (xy_mod.x + xy_mod.y, 2.0);\n"
|
||||||
" output.r = step (result, 0.5);\n"
|
" output.r = step (result, 0.5);\n"
|
||||||
" output.g = 1.0 - output.r;\n"
|
" output.g = 1.0 - output.r;\n"
|
||||||
" output.ba = float2 (0.0f, 1.0f);\n"
|
" output.b = 0;\n"
|
||||||
|
" output.a = %s;\n"
|
||||||
" return output;\n"
|
" return output;\n"
|
||||||
"}";
|
"}";
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
@ -373,6 +382,8 @@ setup_snow_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render,
|
||||||
ComPtr < ID3D11Buffer > index_buffer;
|
ComPtr < ID3D11Buffer > index_buffer;
|
||||||
ComPtr < ID3D11Buffer > const_buffer;
|
ComPtr < ID3D11Buffer > const_buffer;
|
||||||
GstD3D11TestSrcQuad *quad;
|
GstD3D11TestSrcQuad *quad;
|
||||||
|
gchar *ps_src;
|
||||||
|
gchar float_str_buf[G_ASCII_DTOSTR_BUF_SIZE];
|
||||||
|
|
||||||
memset (input_desc, 0, sizeof (input_desc));
|
memset (input_desc, 0, sizeof (input_desc));
|
||||||
memset (&buffer_desc, 0, sizeof (buffer_desc));
|
memset (&buffer_desc, 0, sizeof (buffer_desc));
|
||||||
|
@ -400,8 +411,10 @@ setup_snow_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = gst_d3d11_create_pixel_shader_simple (self->device,
|
g_ascii_formatd (float_str_buf, G_ASCII_DTOSTR_BUF_SIZE, "%f", self->alpha);
|
||||||
templ_ps_snow, "main", &ps);
|
ps_src = g_strdup_printf (templ_ps_snow, float_str_buf);
|
||||||
|
hr = gst_d3d11_create_pixel_shader_simple (self->device, ps_src, "main", &ps);
|
||||||
|
g_free (ps_src);
|
||||||
if (!gst_d3d11_result (hr, self->device)) {
|
if (!gst_d3d11_result (hr, self->device)) {
|
||||||
GST_ERROR_OBJECT (self, "Failed to compile pixel shader");
|
GST_ERROR_OBJECT (self, "Failed to compile pixel shader");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -672,25 +685,28 @@ setup_smpte_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render)
|
||||||
vertex_data[base].color.r = color->r;
|
vertex_data[base].color.r = color->r;
|
||||||
vertex_data[base].color.g = color->g;
|
vertex_data[base].color.g = color->g;
|
||||||
vertex_data[base].color.b = color->b;
|
vertex_data[base].color.b = color->b;
|
||||||
vertex_data[base].color.a = color->a;
|
vertex_data[base].color.a = self->alpha;
|
||||||
|
|
||||||
/* top left */
|
/* top left */
|
||||||
vertex_data[base + 1].position.x = left;
|
vertex_data[base + 1].position.x = left;
|
||||||
vertex_data[base + 1].position.y = top;
|
vertex_data[base + 1].position.y = top;
|
||||||
vertex_data[base + 1].position.z = 0.0f;
|
vertex_data[base + 1].position.z = 0.0f;
|
||||||
vertex_data[base + 1].color = vertex_data[base].color;
|
vertex_data[base + 1].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 1].color.a = self->alpha;
|
||||||
|
|
||||||
/* top right */
|
/* top right */
|
||||||
vertex_data[base + 2].position.x = right;
|
vertex_data[base + 2].position.x = right;
|
||||||
vertex_data[base + 2].position.y = top;
|
vertex_data[base + 2].position.y = top;
|
||||||
vertex_data[base + 2].position.z = 0.0f;
|
vertex_data[base + 2].position.z = 0.0f;
|
||||||
vertex_data[base + 2].color = vertex_data[base].color;
|
vertex_data[base + 2].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 2].color.a = self->alpha;
|
||||||
|
|
||||||
/* bottom right */
|
/* bottom right */
|
||||||
vertex_data[base + 3].position.x = right;
|
vertex_data[base + 3].position.x = right;
|
||||||
vertex_data[base + 3].position.y = bottom;
|
vertex_data[base + 3].position.y = bottom;
|
||||||
vertex_data[base + 3].position.z = 0.0f;
|
vertex_data[base + 3].position.z = 0.0f;
|
||||||
vertex_data[base + 3].color = vertex_data[base].color;
|
vertex_data[base + 3].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 3].color.a = self->alpha;
|
||||||
|
|
||||||
/* clockwise indexing */
|
/* clockwise indexing */
|
||||||
indices[idx_base] = base; /* bottom left */
|
indices[idx_base] = base; /* bottom left */
|
||||||
|
@ -729,25 +745,28 @@ setup_smpte_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render)
|
||||||
vertex_data[base].color.r = color->r;
|
vertex_data[base].color.r = color->r;
|
||||||
vertex_data[base].color.g = color->g;
|
vertex_data[base].color.g = color->g;
|
||||||
vertex_data[base].color.b = color->b;
|
vertex_data[base].color.b = color->b;
|
||||||
vertex_data[base].color.a = color->a;
|
vertex_data[base].color.a = self->alpha;
|
||||||
|
|
||||||
/* top left */
|
/* top left */
|
||||||
vertex_data[base + 1].position.x = left;
|
vertex_data[base + 1].position.x = left;
|
||||||
vertex_data[base + 1].position.y = top;
|
vertex_data[base + 1].position.y = top;
|
||||||
vertex_data[base + 1].position.z = 0.0f;
|
vertex_data[base + 1].position.z = 0.0f;
|
||||||
vertex_data[base + 1].color = vertex_data[base].color;
|
vertex_data[base + 1].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 1].color.a = self->alpha;
|
||||||
|
|
||||||
/* top right */
|
/* top right */
|
||||||
vertex_data[base + 2].position.x = right;
|
vertex_data[base + 2].position.x = right;
|
||||||
vertex_data[base + 2].position.y = top;
|
vertex_data[base + 2].position.y = top;
|
||||||
vertex_data[base + 2].position.z = 0.0f;
|
vertex_data[base + 2].position.z = 0.0f;
|
||||||
vertex_data[base + 2].color = vertex_data[base].color;
|
vertex_data[base + 2].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 2].color.a = self->alpha;
|
||||||
|
|
||||||
/* bottom right */
|
/* bottom right */
|
||||||
vertex_data[base + 3].position.x = right;
|
vertex_data[base + 3].position.x = right;
|
||||||
vertex_data[base + 3].position.y = bottom;
|
vertex_data[base + 3].position.y = bottom;
|
||||||
vertex_data[base + 3].position.z = 0.0f;
|
vertex_data[base + 3].position.z = 0.0f;
|
||||||
vertex_data[base + 3].color = vertex_data[base].color;
|
vertex_data[base + 3].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 3].color.a = self->alpha;
|
||||||
|
|
||||||
/* clockwise indexing */
|
/* clockwise indexing */
|
||||||
indices[idx_base] = base; /* bottom left */
|
indices[idx_base] = base; /* bottom left */
|
||||||
|
@ -788,25 +807,28 @@ setup_smpte_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render)
|
||||||
vertex_data[base].color.r = color->r;
|
vertex_data[base].color.r = color->r;
|
||||||
vertex_data[base].color.g = color->g;
|
vertex_data[base].color.g = color->g;
|
||||||
vertex_data[base].color.b = color->b;
|
vertex_data[base].color.b = color->b;
|
||||||
vertex_data[base].color.a = color->a;
|
vertex_data[base].color.a = self->alpha;
|
||||||
|
|
||||||
/* top left */
|
/* top left */
|
||||||
vertex_data[base + 1].position.x = left;
|
vertex_data[base + 1].position.x = left;
|
||||||
vertex_data[base + 1].position.y = top;
|
vertex_data[base + 1].position.y = top;
|
||||||
vertex_data[base + 1].position.z = 0.0f;
|
vertex_data[base + 1].position.z = 0.0f;
|
||||||
vertex_data[base + 1].color = vertex_data[base].color;
|
vertex_data[base + 1].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 1].color.a = self->alpha;
|
||||||
|
|
||||||
/* top right */
|
/* top right */
|
||||||
vertex_data[base + 2].position.x = right;
|
vertex_data[base + 2].position.x = right;
|
||||||
vertex_data[base + 2].position.y = top;
|
vertex_data[base + 2].position.y = top;
|
||||||
vertex_data[base + 2].position.z = 0.0f;
|
vertex_data[base + 2].position.z = 0.0f;
|
||||||
vertex_data[base + 2].color = vertex_data[base].color;
|
vertex_data[base + 2].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 2].color.a = self->alpha;
|
||||||
|
|
||||||
/* bottom right */
|
/* bottom right */
|
||||||
vertex_data[base + 3].position.x = right;
|
vertex_data[base + 3].position.x = right;
|
||||||
vertex_data[base + 3].position.y = bottom;
|
vertex_data[base + 3].position.y = bottom;
|
||||||
vertex_data[base + 3].position.z = 0.0f;
|
vertex_data[base + 3].position.z = 0.0f;
|
||||||
vertex_data[base + 3].color = vertex_data[base].color;
|
vertex_data[base + 3].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 3].color.a = self->alpha;
|
||||||
|
|
||||||
/* clockwise indexing */
|
/* clockwise indexing */
|
||||||
indices[idx_base] = base; /* bottom left */
|
indices[idx_base] = base; /* bottom left */
|
||||||
|
@ -847,25 +869,28 @@ setup_smpte_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render)
|
||||||
vertex_data[base].color.r = color->r;
|
vertex_data[base].color.r = color->r;
|
||||||
vertex_data[base].color.g = color->g;
|
vertex_data[base].color.g = color->g;
|
||||||
vertex_data[base].color.b = color->b;
|
vertex_data[base].color.b = color->b;
|
||||||
vertex_data[base].color.a = color->a;
|
vertex_data[base].color.a = self->alpha;
|
||||||
|
|
||||||
/* top left */
|
/* top left */
|
||||||
vertex_data[base + 1].position.x = left;
|
vertex_data[base + 1].position.x = left;
|
||||||
vertex_data[base + 1].position.y = top;
|
vertex_data[base + 1].position.y = top;
|
||||||
vertex_data[base + 1].position.z = 0.0f;
|
vertex_data[base + 1].position.z = 0.0f;
|
||||||
vertex_data[base + 1].color = vertex_data[base].color;
|
vertex_data[base + 1].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 1].color.a = self->alpha;
|
||||||
|
|
||||||
/* top right */
|
/* top right */
|
||||||
vertex_data[base + 2].position.x = right;
|
vertex_data[base + 2].position.x = right;
|
||||||
vertex_data[base + 2].position.y = top;
|
vertex_data[base + 2].position.y = top;
|
||||||
vertex_data[base + 2].position.z = 0.0f;
|
vertex_data[base + 2].position.z = 0.0f;
|
||||||
vertex_data[base + 2].color = vertex_data[base].color;
|
vertex_data[base + 2].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 2].color.a = self->alpha;
|
||||||
|
|
||||||
/* bottom right */
|
/* bottom right */
|
||||||
vertex_data[base + 3].position.x = right;
|
vertex_data[base + 3].position.x = right;
|
||||||
vertex_data[base + 3].position.y = bottom;
|
vertex_data[base + 3].position.y = bottom;
|
||||||
vertex_data[base + 3].position.z = 0.0f;
|
vertex_data[base + 3].position.z = 0.0f;
|
||||||
vertex_data[base + 3].color = vertex_data[base].color;
|
vertex_data[base + 3].color = vertex_data[base].color;
|
||||||
|
vertex_data[base + 3].color.a = self->alpha;
|
||||||
|
|
||||||
/* clockwise indexing */
|
/* clockwise indexing */
|
||||||
indices[idx_base] = base; /* bottom left */
|
indices[idx_base] = base; /* bottom left */
|
||||||
|
@ -914,6 +939,7 @@ setup_checker_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render,
|
||||||
ComPtr < ID3D11Buffer > index_buffer;
|
ComPtr < ID3D11Buffer > index_buffer;
|
||||||
GstD3D11TestSrcQuad *quad;
|
GstD3D11TestSrcQuad *quad;
|
||||||
gchar *ps_src;
|
gchar *ps_src;
|
||||||
|
gchar float_str_buf[G_ASCII_DTOSTR_BUF_SIZE];
|
||||||
|
|
||||||
memset (input_desc, 0, sizeof (input_desc));
|
memset (input_desc, 0, sizeof (input_desc));
|
||||||
memset (&buffer_desc, 0, sizeof (buffer_desc));
|
memset (&buffer_desc, 0, sizeof (buffer_desc));
|
||||||
|
@ -941,8 +967,10 @@ setup_checker_render (GstD3D11TestSrc * self, GstD3D11TestSrcRender * render,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_ascii_formatd (float_str_buf, G_ASCII_DTOSTR_BUF_SIZE, "%f", self->alpha);
|
||||||
|
|
||||||
ps_src = g_strdup_printf (templ_ps_checker,
|
ps_src = g_strdup_printf (templ_ps_checker,
|
||||||
self->info.width, self->info.height, checker_size);
|
self->info.width, self->info.height, checker_size, float_str_buf);
|
||||||
hr = gst_d3d11_create_pixel_shader_simple (self->device, ps_src, "main", &ps);
|
hr = gst_d3d11_create_pixel_shader_simple (self->device, ps_src, "main", &ps);
|
||||||
g_free (ps_src);
|
g_free (ps_src);
|
||||||
if (!gst_d3d11_result (hr, self->device)) {
|
if (!gst_d3d11_result (hr, self->device)) {
|
||||||
|
@ -1070,10 +1098,14 @@ enum
|
||||||
PROP_ADAPTER,
|
PROP_ADAPTER,
|
||||||
PROP_IS_LIVE,
|
PROP_IS_LIVE,
|
||||||
PROP_PATTERN,
|
PROP_PATTERN,
|
||||||
|
PROP_ALPHA,
|
||||||
|
PROP_ALPHA_MODE,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_ADAPTER -1
|
#define DEFAULT_ADAPTER -1
|
||||||
#define DEFAULT_PATTERN GST_D3D11_TEST_SRC_SMPTE
|
#define DEFAULT_PATTERN GST_D3D11_TEST_SRC_SMPTE
|
||||||
|
#define DEFAULT_ALPHA 1.0f
|
||||||
|
#define DEFAULT_ALPHA_MODE GST_D3D11_CONVERTER_ALPHA_MODE_UNSPECIFIED
|
||||||
|
|
||||||
static void gst_d3d11_test_src_dispose (GObject * object);
|
static void gst_d3d11_test_src_dispose (GObject * object);
|
||||||
static void gst_d3d11_test_src_set_property (GObject * object,
|
static void gst_d3d11_test_src_set_property (GObject * object,
|
||||||
|
@ -1132,6 +1164,33 @@ gst_d3d11_test_src_class_init (GstD3D11TestSrcClass * klass)
|
||||||
(GParamFlags) (G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
|
(GParamFlags) (G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
|
||||||
G_PARAM_STATIC_STRINGS)));
|
G_PARAM_STATIC_STRINGS)));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstD3D11TestSrc:alpha:
|
||||||
|
*
|
||||||
|
* Global alpha value to apply
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class, PROP_ALPHA,
|
||||||
|
g_param_spec_float ("alpha", "Alpha", "Global alpha value to use",
|
||||||
|
0, 1, DEFAULT_ALPHA,
|
||||||
|
(GParamFlags) (G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
|
||||||
|
G_PARAM_STATIC_STRINGS)));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstD3D11TestSrc:alpha-mode:
|
||||||
|
*
|
||||||
|
* Alpha mode to use
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class, PROP_ALPHA_MODE,
|
||||||
|
g_param_spec_enum ("alpha-mode", "Alpha Mode",
|
||||||
|
"alpha mode to use", GST_TYPE_D3D11_CONVERTER_ALPHA_MODE,
|
||||||
|
GST_D3D11_CONVERTER_ALPHA_MODE_UNSPECIFIED,
|
||||||
|
(GParamFlags) (G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
|
||||||
|
G_PARAM_STATIC_STRINGS)));
|
||||||
|
|
||||||
element_class->set_context =
|
element_class->set_context =
|
||||||
GST_DEBUG_FUNCPTR (gst_d3d11_test_src_set_context);
|
GST_DEBUG_FUNCPTR (gst_d3d11_test_src_set_context);
|
||||||
|
|
||||||
|
@ -1171,6 +1230,8 @@ gst_d3d11_test_src_init (GstD3D11TestSrc * self)
|
||||||
|
|
||||||
self->adapter_index = DEFAULT_ADAPTER;
|
self->adapter_index = DEFAULT_ADAPTER;
|
||||||
self->pattern = DEFAULT_PATTERN;
|
self->pattern = DEFAULT_PATTERN;
|
||||||
|
self->alpha = DEFAULT_ALPHA;
|
||||||
|
self->alpha_mode = DEFAULT_ALPHA_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1199,6 +1260,12 @@ gst_d3d11_test_src_set_property (GObject * object, guint prop_id,
|
||||||
case PROP_PATTERN:
|
case PROP_PATTERN:
|
||||||
self->pattern = (GstD3D11TestSrcPattern) g_value_get_enum (value);
|
self->pattern = (GstD3D11TestSrcPattern) g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_ALPHA:
|
||||||
|
self->alpha = g_value_get_float (value);
|
||||||
|
break;
|
||||||
|
case PROP_ALPHA_MODE:
|
||||||
|
self->alpha_mode = (GstD3D11ConverterAlphaMode) g_value_get_enum (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -1221,6 +1288,12 @@ gst_d3d11_test_src_get_property (GObject * object, guint prop_id,
|
||||||
case PROP_PATTERN:
|
case PROP_PATTERN:
|
||||||
g_value_set_enum (value, self->pattern);
|
g_value_set_enum (value, self->pattern);
|
||||||
break;
|
break;
|
||||||
|
case PROP_ALPHA:
|
||||||
|
g_value_set_float (value, self->alpha);
|
||||||
|
break;
|
||||||
|
case PROP_ALPHA_MODE:
|
||||||
|
g_value_set_enum (value, self->alpha_mode);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -1357,6 +1430,15 @@ gst_d3d11_test_src_setup_resource (GstD3D11TestSrc * self, GstCaps * caps)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* D2D uses premultiplied alpha */
|
||||||
|
if (self->pattern == GST_D3D11_TEST_SRC_CIRCULAR ||
|
||||||
|
self->pattern == GST_D3D11_TEST_SRC_BALL) {
|
||||||
|
g_object_set (self->converter, "src-alpha-mode",
|
||||||
|
GST_D3D11_CONVERTER_ALPHA_MODE_PREMULTIPLIED, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_set (self->converter, "dest-alpha-mode", self->alpha_mode, nullptr);
|
||||||
|
|
||||||
draw_caps = gst_video_info_to_caps (&draw_info);
|
draw_caps = gst_video_info_to_caps (&draw_info);
|
||||||
params = gst_d3d11_allocation_params_new (self->device, &draw_info,
|
params = gst_d3d11_allocation_params_new (self->device, &draw_info,
|
||||||
GST_D3D11_ALLOCATION_FLAG_DEFAULT,
|
GST_D3D11_ALLOCATION_FLAG_DEFAULT,
|
||||||
|
@ -1406,19 +1488,29 @@ gst_d3d11_test_src_setup_resource (GstD3D11TestSrc * self, GstCaps * caps)
|
||||||
goto error;
|
goto error;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_BLACK:
|
case GST_D3D11_TEST_SRC_BLACK:
|
||||||
render->clear_color[0] = &color_table[COLOR_BLACK];
|
render->static_color[0].value = color_table[COLOR_BLACK];
|
||||||
|
render->static_color[0].value.a = self->alpha;
|
||||||
|
render->static_color[0].is_valid = TRUE;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_WHITE:
|
case GST_D3D11_TEST_SRC_WHITE:
|
||||||
render->clear_color[0] = &color_table[COLOR_WHITE];
|
render->static_color[0].value = color_table[COLOR_WHITE];
|
||||||
|
render->static_color[0].value.a = self->alpha;
|
||||||
|
render->static_color[0].is_valid = TRUE;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_RED:
|
case GST_D3D11_TEST_SRC_RED:
|
||||||
render->clear_color[0] = &color_table[COLOR_RED];
|
render->static_color[0].value = color_table[COLOR_RED];
|
||||||
|
render->static_color[0].value.a = self->alpha;
|
||||||
|
render->static_color[0].is_valid = TRUE;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_GREEN:
|
case GST_D3D11_TEST_SRC_GREEN:
|
||||||
render->clear_color[0] = &color_table[COLOR_GREEN];
|
render->static_color[0].value = color_table[COLOR_GREEN];
|
||||||
|
render->static_color[0].value.a = self->alpha;
|
||||||
|
render->static_color[0].is_valid = TRUE;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_BLUE:
|
case GST_D3D11_TEST_SRC_BLUE:
|
||||||
render->clear_color[0] = &color_table[COLOR_BLUE];
|
render->static_color[0].value = color_table[COLOR_BLUE];
|
||||||
|
render->static_color[0].value.a = self->alpha;
|
||||||
|
render->static_color[0].is_valid = TRUE;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_CHECKERS1:
|
case GST_D3D11_TEST_SRC_CHECKERS1:
|
||||||
if (!setup_checker_render (self, render, 1))
|
if (!setup_checker_render (self, render, 1))
|
||||||
|
@ -1437,8 +1529,12 @@ gst_d3d11_test_src_setup_resource (GstD3D11TestSrc * self, GstCaps * caps)
|
||||||
goto error;
|
goto error;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_BLINK:
|
case GST_D3D11_TEST_SRC_BLINK:
|
||||||
render->clear_color[0] = &color_table[COLOR_BLACK];
|
render->static_color[0].value = color_table[COLOR_BLACK];
|
||||||
render->clear_color[1] = &color_table[COLOR_WHITE];
|
render->static_color[0].value.a = self->alpha;
|
||||||
|
render->static_color[0].is_valid = TRUE;
|
||||||
|
render->static_color[1].value = color_table[COLOR_WHITE];
|
||||||
|
render->static_color[1].value.a = self->alpha;
|
||||||
|
render->static_color[1].is_valid = TRUE;
|
||||||
break;
|
break;
|
||||||
case GST_D3D11_TEST_SRC_CIRCULAR:
|
case GST_D3D11_TEST_SRC_CIRCULAR:
|
||||||
case GST_D3D11_TEST_SRC_BALL:
|
case GST_D3D11_TEST_SRC_BALL:
|
||||||
|
@ -1748,11 +1844,11 @@ gst_d3d11_test_src_draw_ball (GstD3D11TestSrc * self,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
stops[0].color = D2D1::ColorF (D2D1::ColorF::White);
|
stops[0].color = D2D1::ColorF (D2D1::ColorF::White, self->alpha);
|
||||||
stops[0].position = 0.0f;
|
stops[0].position = 0.0f;
|
||||||
stops[1].color = D2D1::ColorF (D2D1::ColorF::Snow);
|
stops[1].color = D2D1::ColorF (D2D1::ColorF::Snow, self->alpha);
|
||||||
stops[1].position = 0.3f;
|
stops[1].position = 0.3f;
|
||||||
stops[2].color = D2D1::ColorF (D2D1::ColorF::Black);
|
stops[2].color = D2D1::ColorF (D2D1::ColorF::Black, self->alpha);
|
||||||
stops[2].position = 1.0f;
|
stops[2].position = 1.0f;
|
||||||
|
|
||||||
hr = d2d_target->CreateGradientStopCollection (stops, 3, D2D1_GAMMA_1_0,
|
hr = d2d_target->CreateGradientStopCollection (stops, 3, D2D1_GAMMA_1_0,
|
||||||
|
@ -1849,9 +1945,9 @@ gst_d3d11_test_src_draw_circular (GstD3D11TestSrc * self,
|
||||||
for (guint i = 0; i < G_N_ELEMENTS (stops); i++) {
|
for (guint i = 0; i < G_N_ELEMENTS (stops); i++) {
|
||||||
FLOAT diff;
|
FLOAT diff;
|
||||||
if ((i % 2) == 0)
|
if ((i % 2) == 0)
|
||||||
stops[i].color = D2D1::ColorF (D2D1::ColorF::Black);
|
stops[i].color = D2D1::ColorF (D2D1::ColorF::Black, self->alpha);
|
||||||
else
|
else
|
||||||
stops[i].color = D2D1::ColorF (D2D1::ColorF::White);
|
stops[i].color = D2D1::ColorF (D2D1::ColorF::White, self->alpha);
|
||||||
|
|
||||||
stops[i].position = position;
|
stops[i].position = position;
|
||||||
diff = position / G_N_ELEMENTS (stops) * 2;
|
diff = position / G_N_ELEMENTS (stops) * 2;
|
||||||
|
@ -1903,11 +1999,11 @@ gst_d3d11_test_src_draw_pattern (GstD3D11TestSrc * self,
|
||||||
D3D11_MAPPED_SUBRESOURCE map;
|
D3D11_MAPPED_SUBRESOURCE map;
|
||||||
UINT offsets = 0;
|
UINT offsets = 0;
|
||||||
|
|
||||||
if (render->clear_color[0]) {
|
if (render->static_color[0].is_valid) {
|
||||||
if (render->clear_color[1] && (self->n_frames % 2) == 1)
|
if (render->static_color[1].is_valid && (self->n_frames % 2) == 1)
|
||||||
context->ClearRenderTargetView (rtv, render->clear_color[1]->color);
|
context->ClearRenderTargetView (rtv, render->static_color[1].value.color);
|
||||||
else
|
else
|
||||||
context->ClearRenderTargetView (rtv, render->clear_color[0]->color);
|
context->ClearRenderTargetView (rtv, render->static_color[0].value.color);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue