if (!gst_d3d11_color_converter_convert (self->converter,
copy_input ? self->shader_resource_view : resource_view,
- copy_output ? self->render_target_view : render_view)) {
+ copy_output ? self->render_target_view : render_view, NULL, NULL)) {
GST_ERROR_OBJECT (self, "Failed to convert");
return GST_FLOW_ERROR;
gboolean
gst_d3d11_color_converter_convert (GstD3D11ColorConverter * converter,
ID3D11ShaderResourceView * srv[GST_VIDEO_MAX_PLANES],
- ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES])
+ ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES],
+ ID3D11BlendState * blend, gfloat blend_factor[4])
{
gboolean ret;
g_return_val_if_fail (rtv != NULL, FALSE);
gst_d3d11_device_lock (converter->device);
- ret = gst_d3d11_color_converter_convert_unlocked (converter, srv, rtv);
+ ret = gst_d3d11_color_converter_convert_unlocked (converter,
+ srv, rtv, blend, blend_factor);
gst_d3d11_device_unlock (converter->device);
return ret;
gboolean
gst_d3d11_color_converter_convert_unlocked (GstD3D11ColorConverter * converter,
ID3D11ShaderResourceView * srv[GST_VIDEO_MAX_PLANES],
- ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES])
+ ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES],
+ ID3D11BlendState * blend, gfloat blend_factor[4])
{
gboolean ret;
ID3D11Resource *resource;
}
ret = gst_d3d11_draw_quad_unlocked (converter->quad[0], converter->viewport,
- 1, srv, converter->num_input_view, rtv, 1, NULL);
+ 1, srv, converter->num_input_view, rtv, 1, NULL, blend, blend_factor);
if (!ret)
return FALSE;
ret = gst_d3d11_draw_quad_unlocked (converter->quad[1],
&converter->viewport[1], converter->num_output_view - 1,
srv, converter->num_input_view, &rtv[1], converter->num_output_view - 1,
- NULL);
+ NULL, blend, blend_factor);
if (!ret)
return FALSE;
gboolean gst_d3d11_color_converter_convert (GstD3D11ColorConverter * converter,
ID3D11ShaderResourceView *srv[GST_VIDEO_MAX_PLANES],
- ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES]);
+ ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES],
+ ID3D11BlendState *blend,
+ gfloat blend_factor[4]);
gboolean gst_d3d11_color_converter_convert_unlocked (GstD3D11ColorConverter * converter,
ID3D11ShaderResourceView *srv[GST_VIDEO_MAX_PLANES],
- ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES]);
+ ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES],
+ ID3D11BlendState *blend,
+ gfloat blend_factor[4]);
gboolean gst_d3d11_color_converter_update_viewport (GstD3D11ColorConverter * converter,
D3D11_VIEWPORT * viewport);
gst_d3d11_color_converter_update_src_rect (priv->converter, &rect);
if (!gst_d3d11_color_converter_convert_unlocked (priv->converter,
- srv, priv->fallback_render_target_view)) {
+ srv, priv->fallback_render_target_view, NULL, NULL)) {
GST_ERROR_OBJECT (self, "Failed to convert");
goto error;
}
gst_d3d11_color_converter_update_src_rect (priv->converter, &rect);
- if (!gst_d3d11_color_converter_convert_unlocked (priv->converter, srv, rtv)) {
+ if (!gst_d3d11_color_converter_convert_unlocked (priv->converter,
+ srv, rtv, NULL, NULL)) {
GST_ERROR_OBJECT (self, "Failed to convert");
goto error;
}
(GstD3D11CompositionOverlay *) iter->data;
ret = gst_d3d11_draw_quad_unlocked (overlay->quad,
- &compositor->viewport, 1, &overlay->srv, 1, rtv, 1, NULL);
+ &compositor->viewport, 1, &overlay->srv, 1, rtv, 1, NULL, NULL, NULL);
if (!ret)
break;
D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES], guint num_viewport,
ID3D11ShaderResourceView * srv[GST_VIDEO_MAX_PLANES], guint num_srv,
ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES], guint num_rtv,
- ID3D11DepthStencilView * dsv)
+ ID3D11DepthStencilView * dsv, ID3D11BlendState * blend,
+ gfloat blend_factor[4])
{
gboolean ret;
gst_d3d11_device_lock (quad->device);
ret = gst_d3d11_draw_quad_unlocked (quad, viewport, num_viewport,
- srv, num_srv, rtv, num_viewport, dsv);
+ srv, num_srv, rtv, num_viewport, dsv, blend, blend_factor);
gst_d3d11_device_unlock (quad->device);
return ret;
D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES], guint num_viewport,
ID3D11ShaderResourceView * srv[GST_VIDEO_MAX_PLANES], guint num_srv,
ID3D11RenderTargetView * rtv[GST_VIDEO_MAX_PLANES], guint num_rtv,
- ID3D11DepthStencilView * dsv)
+ ID3D11DepthStencilView * dsv, ID3D11BlendState * blend,
+ gfloat blend_factor[4])
{
ID3D11DeviceContext *context_handle;
UINT offsets = 0;
ID3D11ShaderResourceView *clear_view[GST_VIDEO_MAX_PLANES] = { NULL, };
+ ID3D11BlendState *blend_state = blend;
g_return_val_if_fail (quad != NULL, FALSE);
g_return_val_if_fail (viewport != NULL, FALSE);
ID3D11DeviceContext_PSSetShaderResources (context_handle, 0, num_srv, srv);
ID3D11DeviceContext_OMSetRenderTargets (context_handle, num_rtv, rtv, dsv);
+ if (!blend_state)
+ blend_state = quad->blend;
ID3D11DeviceContext_OMSetBlendState (context_handle,
- quad->blend, NULL, 0xffffffff);
+ blend_state, blend_factor, 0xffffffff);
ID3D11DeviceContext_OMSetDepthStencilState (context_handle,
quad->depth_stencil, 1);
guint num_srv,
ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES],
guint num_rtv,
- ID3D11DepthStencilView *dsv);
+ ID3D11DepthStencilView *dsv,
+ ID3D11BlendState *blend,
+ gfloat blend_factor[4]);
gboolean gst_d3d11_draw_quad_unlocked (GstD3D11Quad * quad,
D3D11_VIEWPORT viewport[GST_VIDEO_MAX_PLANES],
guint num_srv,
ID3D11RenderTargetView *rtv[GST_VIDEO_MAX_PLANES],
guint num_rtv,
- ID3D11DepthStencilView *dsv);
+ ID3D11DepthStencilView *dsv,
+ ID3D11BlendState *blend,
+ gfloat blend_factor[4]);
G_END_DECLS
}
} else {
if (!gst_d3d11_color_converter_convert_unlocked (self->converter,
- srv, &self->rtv)) {
+ srv, &self->rtv, NULL, NULL)) {
GST_ERROR_OBJECT (self, "Couldn't render to backbuffer using converter");
return GST_FLOW_ERROR;
} else {