[vlc-commits] direct3d11: fix texture positioning when there is rotation
vlc/vlc-3.0 | branch: master | Steve Lhomme| Thu Feb 8 10:34:14 2018 +0100| [330ea0cce4bacaff825d9cf52e24dbd0c55b77b3] | committer: Jean-Baptiste Kempf direct3d11: fix texture positioning when there is rotation Tested with offset_test.ogv and forcing the rotation in the decoder. Fixes #19078 (cherry picked from commit 916b67b476d6df26b44050311ef79e634ecd7882) Signed-off-by: Jean-Baptiste Kempf > http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=330ea0cce4bacaff825d9cf52e24dbd0c55b77b3 --- modules/video_output/win32/direct3d11.c | 79 ++--- 1 file changed, 73 insertions(+), 6 deletions(-) diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c index 137205eeca..a4a64b396c 100644 --- a/modules/video_output/win32/direct3d11.c +++ b/modules/video_output/win32/direct3d11.c @@ -2300,14 +2300,81 @@ static void SetupQuadFlat(d3d_vertex_t *dst_data, const RECT *output, { unsigned int src_width = quad->i_width; unsigned int src_height = quad->i_height; -float MidY = (output->top + output->bottom) / 2.f; -float MidX = (output->left + output->right) / 2.f; +float MidX,MidY; float top, bottom, left, right; -top= MidY / (MidY - output->top); -bottom = -(src_height - MidY) / (output->bottom - MidY); -left = -MidX / (MidX - output->left); -right = (src_width - MidX) / (output->right - MidX); +switch (orientation) +{ +case ORIENT_ROTATED_90: /* 90° anti clockwise */ +/* right/top aligned */ +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -(src_height - MidY) / (output->bottom - MidY); +right = MidX / (MidX - output->left); +break; +case ORIENT_ROTATED_180: /* 180° */ +/* right/top aligned */ +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= (src_height - MidY) / (output->bottom - MidY); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_width - MidX) / (output->right - MidX); +break; +case ORIENT_ROTATED_270: /* 90° clockwise */ +/* right/top aligned */ +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_height - MidY) / (output->bottom - MidY); +break; +case ORIENT_ANTI_TRANSPOSED: +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -(src_height - MidY) / (output->bottom - MidY); +right = MidX / (MidX - output->left); +break; +case ORIENT_TRANSPOSED: +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_height - MidY) / (output->bottom - MidY); +break; +case ORIENT_VFLIPPED: +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= (src_height - MidY) / (output->bottom - MidY); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_width - MidX) / (output->right - MidX); +break; +case ORIENT_HFLIPPED: +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= MidY / (MidY - output->top); +bottom = -(src_height - MidY) / (output->bottom - MidY); +left = -(src_width - MidX) / (output->right - MidX); +right = MidX / (MidX - output->left); +break; +case ORIENT_NORMAL: +default: +/* left/top aligned */ +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= MidY / (MidY - output->top); +bottom = -(src_height - MidY) / (output->bottom - MidY); +left = -MidX / (MidX - output->left); +right = (src_width - MidX) / (output->right - MidX); +break; +} const float vertices_coords[4][2] = { { left, bottom }, ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] direct3d11: fix texture positioning when there is rotation
vlc | branch: master | Steve Lhomme| Thu Feb 8 10:34:14 2018 +0100| [916b67b476d6df26b44050311ef79e634ecd7882] | committer: Steve Lhomme direct3d11: fix texture positioning when there is rotation Tested with offset_test.ogv and forcing the rotation in the decoder. Fixes #19078 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=916b67b476d6df26b44050311ef79e634ecd7882 --- modules/video_output/win32/direct3d11.c | 79 ++--- 1 file changed, 73 insertions(+), 6 deletions(-) diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c index 137205eeca..a4a64b396c 100644 --- a/modules/video_output/win32/direct3d11.c +++ b/modules/video_output/win32/direct3d11.c @@ -2300,14 +2300,81 @@ static void SetupQuadFlat(d3d_vertex_t *dst_data, const RECT *output, { unsigned int src_width = quad->i_width; unsigned int src_height = quad->i_height; -float MidY = (output->top + output->bottom) / 2.f; -float MidX = (output->left + output->right) / 2.f; +float MidX,MidY; float top, bottom, left, right; -top= MidY / (MidY - output->top); -bottom = -(src_height - MidY) / (output->bottom - MidY); -left = -MidX / (MidX - output->left); -right = (src_width - MidX) / (output->right - MidX); +switch (orientation) +{ +case ORIENT_ROTATED_90: /* 90° anti clockwise */ +/* right/top aligned */ +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -(src_height - MidY) / (output->bottom - MidY); +right = MidX / (MidX - output->left); +break; +case ORIENT_ROTATED_180: /* 180° */ +/* right/top aligned */ +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= (src_height - MidY) / (output->bottom - MidY); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_width - MidX) / (output->right - MidX); +break; +case ORIENT_ROTATED_270: /* 90° clockwise */ +/* right/top aligned */ +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_height - MidY) / (output->bottom - MidY); +break; +case ORIENT_ANTI_TRANSPOSED: +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -(src_height - MidY) / (output->bottom - MidY); +right = MidX / (MidX - output->left); +break; +case ORIENT_TRANSPOSED: +MidY = (output->left + output->right) / 2.f; +MidX = (output->top + output->bottom) / 2.f; +top= (src_width - MidX) / (output->right - MidX); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_height - MidY) / (output->bottom - MidY); +break; +case ORIENT_VFLIPPED: +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= (src_height - MidY) / (output->bottom - MidY); +bottom = -MidY / (MidY - output->top); +left = -MidX / (MidX - output->left); +right = (src_width - MidX) / (output->right - MidX); +break; +case ORIENT_HFLIPPED: +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= MidY / (MidY - output->top); +bottom = -(src_height - MidY) / (output->bottom - MidY); +left = -(src_width - MidX) / (output->right - MidX); +right = MidX / (MidX - output->left); +break; +case ORIENT_NORMAL: +default: +/* left/top aligned */ +MidY = (output->top + output->bottom) / 2.f; +MidX = (output->left + output->right) / 2.f; +top= MidY / (MidY - output->top); +bottom = -(src_height - MidY) / (output->bottom - MidY); +left = -MidX / (MidX - output->left); +right = (src_width - MidX) / (output->right - MidX); +break; +} const float vertices_coords[4][2] = { { left, bottom }, ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits