[vlc-devel] [PATCH 03/15] opengl: handle the viewpoint changes when rendering
Rémi Denis-Courmont
remi at remlab.net
Sat Nov 5 07:32:39 CET 2016
Le perjantaina 4. marraskuuta 2016, 18.08.46 EET Steve Lhomme a écrit :
> ---
> modules/video_output/gl.c | 6 ++++++
> modules/video_output/opengl.c | 23 ++++++++++++++++++++---
> modules/video_output/opengl.h | 3 +++
> 3 files changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/modules/video_output/gl.c b/modules/video_output/gl.c
> index 082aa78..34988c0 100644
> --- a/modules/video_output/gl.c
> +++ b/modules/video_output/gl.c
> @@ -249,6 +249,12 @@ static int Control (vout_display_t *vd, int query,
> va_list ap) vlc_gl_ReleaseCurrent (sys->gl);
> return VLC_SUCCESS;
> }
> + case VOUT_DISPLAY_CHANGE_VIEWPOINT:
> + {
> + const vout_display_cfg_t *p_cfg = va_arg (ap, const
> vout_display_cfg_t *); + vout_display_opengl_SetViewpoint(sys->vgl,
> &p_cfg->viewpoint); + return VLC_SUCCESS;
> + }
> default:
> msg_Err (vd, "Unknown request %d", query);
> }
> diff --git a/modules/video_output/opengl.c b/modules/video_output/opengl.c
> index b79bb13..aee96bd 100644
> --- a/modules/video_output/opengl.c
> +++ b/modules/video_output/opengl.c
> @@ -205,6 +205,7 @@ struct vout_display_opengl_t {
> /* View point */
> float f_teta;
> float f_phi;
> + float f_roll;
> float f_zoom;
> };
>
> @@ -692,9 +693,12 @@ vout_display_opengl_t
> *vout_display_opengl_New(video_format_t *fmt, if (vgl->fmt.projection_mode
> == PROJECTION_MODE_EQUIRECTANGULAR
> || vgl->fmt.projection_mode ==
> || PROJECTION_MODE_CUBEMAP_LAYOUT_STANDARD)
>
> {
> - vgl->f_teta = vgl->fmt.f_pose_roll_degrees / 180. * M_PI;
> - vgl->f_phi = vgl->fmt.f_pose_yaw_degrees / 180. * M_PI;
> - vgl->f_teta -= M_PI/2;
> + vlc_viewpoint_t viewpoint = {
> + .f_yaw = (float) vgl->fmt.f_pose_yaw_degrees / 180. * M_PI,
> + .f_pitch = (float) vgl->fmt.f_pose_pitch_degrees / 180. *
> M_PI, + .f_roll = (float) vgl->fmt.f_pose_roll_degrees / 180.
> * M_PI, + };
> + vout_display_opengl_SetViewpoint( vgl, &viewpoint );
> }
More useless upconversion and downconversion to/from double and below too.
>
> /* */
> @@ -777,6 +781,19 @@ void vout_display_opengl_Delete(vout_display_opengl_t
> *vgl) free(vgl);
> }
>
> +void vout_display_opengl_SetViewpoint(vout_display_opengl_t *vgl, const
> vlc_viewpoint_t *p_viewpoint) +{
> + vgl->f_teta = p_viewpoint->f_yaw - M_PI / 2;
> + if (vgl->f_teta < -M_PI)
> + vgl->f_teta = M_PI;
> + vgl->f_phi = p_viewpoint->f_pitch;
> + if (vgl->f_phi < -M_PI / 2)
> + vgl->f_phi = -M_PI / 2;
> + vgl->f_roll = p_viewpoint->f_roll;
> + if (vgl->f_roll < -M_PI / 2)
> + vgl->f_roll = -M_PI / 2;
> +}
> +
> picture_pool_t *vout_display_opengl_GetPool(vout_display_opengl_t *vgl,
> unsigned requested_count) {
> if (vgl->pool)
> diff --git a/modules/video_output/opengl.h b/modules/video_output/opengl.h
> index 4ae9400..2096309 100644
> --- a/modules/video_output/opengl.h
> +++ b/modules/video_output/opengl.h
> @@ -32,6 +32,7 @@
> #include <vlc_common.h>
> #include <vlc_picture_pool.h>
> #include <vlc_opengl.h>
> +#include <vlc_vout.h>
>
> /* Change USE_OPENGL_ES value to set the OpenGL ES version (1, 2) you want
> to use * A value of 0 will activate normal OpenGL */
> @@ -96,6 +97,8 @@ void vout_display_opengl_Delete(vout_display_opengl_t
> *vgl);
>
> picture_pool_t *vout_display_opengl_GetPool(vout_display_opengl_t *vgl,
> unsigned);
>
> +void vout_display_opengl_SetViewpoint(vout_display_opengl_t *vgl, const
> vlc_viewpoint_t*); +
> int vout_display_opengl_Prepare(vout_display_opengl_t *vgl,
> picture_t *picture, subpicture_t
> *subpicture); int vout_display_opengl_Display(vout_display_opengl_t *vgl,
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list