mirror of
https://code.videolan.org/videolan/vlc
synced 2024-10-03 01:31:53 +02:00
libvlc: add the possibility to flip the rendered textures
Only supported by the D3D11 renderer for now.
This commit is contained in:
parent
c28d1e024a
commit
553f6091c0
@ -82,6 +82,7 @@ public:
|
||||
render_cfg->colorspace = libvlc_video_colorspace_BT709;
|
||||
render_cfg->primaries = libvlc_video_primaries_BT709;
|
||||
render_cfg->transfer = libvlc_video_transfer_func_SRGB;
|
||||
render_cfg->orientation = libvlc_video_orient_top_left;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -426,6 +426,7 @@ static bool UpdateOutput_cb( void *opaque, const libvlc_video_render_cfg_t *cfg,
|
||||
out->colorspace = libvlc_video_colorspace_BT709;
|
||||
out->primaries = libvlc_video_primaries_BT709;
|
||||
out->transfer = libvlc_video_transfer_func_SRGB;
|
||||
out->orientation = libvlc_video_orient_top_left;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -141,6 +141,7 @@ static bool Resize(struct render_context *ctx, unsigned width, unsigned height,
|
||||
out->colorspace = libvlc_video_colorspace_BT709;
|
||||
out->primaries = libvlc_video_primaries_BT709;
|
||||
out->transfer = libvlc_video_transfer_func_SRGB;
|
||||
out->orientation = libvlc_video_orient_top_left;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -155,6 +155,7 @@ public:
|
||||
render_cfg->colorspace = libvlc_video_colorspace_BT709;
|
||||
render_cfg->primaries = libvlc_video_primaries_BT709;
|
||||
render_cfg->transfer = libvlc_video_transfer_func_SRGB;
|
||||
render_cfg->orientation = libvlc_video_orient_top_left;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -600,6 +600,8 @@ typedef struct libvlc_video_output_cfg_t
|
||||
libvlc_video_color_primaries_t primaries;
|
||||
/** video transfer function */
|
||||
libvlc_video_transfer_func_t transfer;
|
||||
/** video surface orientation */
|
||||
libvlc_video_orient_t orientation;
|
||||
} libvlc_video_output_cfg_t;
|
||||
|
||||
/**
|
||||
|
@ -98,6 +98,7 @@ static void Resize(vlc_gl_t * gl, unsigned w, unsigned h)
|
||||
assert(render_cfg.colorspace == libvlc_video_colorspace_BT709);
|
||||
assert(render_cfg.primaries == libvlc_video_primaries_BT709);
|
||||
assert(render_cfg.transfer == libvlc_video_transfer_func_SRGB);
|
||||
assert(render_cfg.orientation == libvlc_video_orient_top_left);
|
||||
sys->width = w;
|
||||
sys->height = h;
|
||||
}
|
||||
|
@ -43,6 +43,7 @@ typedef struct {
|
||||
bool b_full_range;
|
||||
unsigned luminance_peak;
|
||||
const d3d_format_t *pixelFormat;
|
||||
video_orientation_t orientation;
|
||||
} display_info_t;
|
||||
|
||||
/* structures passed to the pixel shader */
|
||||
|
@ -216,6 +216,7 @@ static int UpdateDisplayFormat(vout_display_t *vd, const video_format_t *fmt)
|
||||
new_display.transfer = (video_transfer_func_t) out.transfer;
|
||||
new_display.primaries = (video_color_primaries_t) out.primaries;
|
||||
new_display.b_full_range = out.full_range;
|
||||
new_display.orientation = (video_orientation_t) out.orientation;
|
||||
|
||||
/* guestimate the display peak luminance */
|
||||
switch (new_display.transfer)
|
||||
@ -238,7 +239,8 @@ static int UpdateDisplayFormat(vout_display_t *vd, const video_format_t *fmt)
|
||||
sys->display.color != new_display.color ||
|
||||
sys->display.transfer != new_display.transfer ||
|
||||
sys->display.primaries != new_display.primaries ||
|
||||
sys->display.b_full_range != new_display.b_full_range ))
|
||||
sys->display.b_full_range != new_display.b_full_range ||
|
||||
sys->display.orientation != new_display.orientation ))
|
||||
{
|
||||
sys->display = new_display;
|
||||
/* TODO release the pixel shaders if the format changed */
|
||||
@ -275,7 +277,7 @@ static void UpdateSize(vout_display_t *vd)
|
||||
d3d11_device_lock( sys->d3d_dev );
|
||||
|
||||
D3D11_UpdateQuadPosition(vd, sys->d3d_dev, &sys->picQuad, &source_rect,
|
||||
video_format_GetTransform(vd->source->orientation, ORIENT_NORMAL));
|
||||
video_format_GetTransform(vd->source->orientation, sys->display.orientation));
|
||||
|
||||
D3D11_UpdateViewpoint( vd, sys->d3d_dev, &sys->picQuad, &vd->cfg->viewpoint,
|
||||
(float) vd->cfg->display.width / vd->cfg->display.height );
|
||||
@ -1068,7 +1070,7 @@ static int Direct3D11CreateFormatResources(vout_display_t *vd, const video_forma
|
||||
source_rect.top = fmt->i_y_offset;
|
||||
source_rect.bottom = fmt->i_y_offset + fmt->i_visible_height;
|
||||
if (!D3D11_UpdateQuadPosition(vd, sys->d3d_dev, &sys->picQuad, &source_rect,
|
||||
video_format_GetTransform(vd->source->orientation, ORIENT_NORMAL)))
|
||||
video_format_GetTransform(vd->source->orientation, sys->display.orientation)))
|
||||
{
|
||||
msg_Err(vd, "Could not set quad picture position.");
|
||||
return VLC_EGENERIC;
|
||||
@ -1410,7 +1412,8 @@ static int Direct3D11MapSubpicture(vout_display_t *vd, int *subpicture_region_co
|
||||
output.top = r->fmt.i_y_offset;
|
||||
output.bottom = r->fmt.i_y_offset + r->fmt.i_visible_height;
|
||||
|
||||
D3D11_UpdateQuadPosition(vd, sys->d3d_dev, quad, &output, TRANSFORM_IDENTITY);
|
||||
D3D11_UpdateQuadPosition(vd, sys->d3d_dev, quad, &output,
|
||||
video_format_GetTransform(ORIENT_NORMAL, sys->display.orientation));
|
||||
|
||||
RECT spuViewport;
|
||||
spuViewport.left = (FLOAT) r->i_x * sys->area.place.width / subpicture->i_original_picture_width;
|
||||
|
@ -1753,6 +1753,7 @@ static bool LocalSwapchainUpdateOutput( void *opaque, const libvlc_video_render_
|
||||
out->colorspace = libvlc_video_colorspace_BT709;
|
||||
out->primaries = libvlc_video_primaries_BT709;
|
||||
out->transfer = libvlc_video_transfer_func_SRGB;
|
||||
out->orientation = libvlc_video_orient_top_left;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -449,6 +449,7 @@ void DXGI_SwapchainUpdateOutput( dxgi_swapchain *display, libvlc_video_output_cf
|
||||
out->colorspace = (libvlc_video_color_space_t) display->colorspace->color;
|
||||
out->primaries = (libvlc_video_color_primaries_t) display->colorspace->primaries;
|
||||
out->transfer = (libvlc_video_transfer_func_t) display->colorspace->transfer;
|
||||
out->orientation = libvlc_video_orient_top_left;
|
||||
}
|
||||
|
||||
bool DXGI_UpdateSwapChain( dxgi_swapchain *display, IDXGIAdapter *dxgiadapter,
|
||||
|
Loading…
Reference in New Issue
Block a user