1 /***************************************************************************** 2 * control.h : vout internal control 3 ***************************************************************************** 4 * Copyright (C) 2009-2010 Laurent Aimar 5 * $Id: 04a66e9fb47d26ba40374fc39ca890f5c93b82e1 $ 6 * 7 * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org> 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU Lesser General Public License as published by 11 * the Free Software Foundation; either version 2.1 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public License 20 * along with this program; if not, write to the Free Software Foundation, 21 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 22 *****************************************************************************/ 23 24 #ifndef LIBVLC_VOUT_INTERNAL_CONTROL_H 25 #define LIBVLC_VOUT_INTERNAL_CONTROL_H 26 27 #include <vlc_vout_window.h> 28 #include <vlc_viewpoint.h> 29 30 /* */ 31 enum { 32 VOUT_CONTROL_INIT, 33 VOUT_CONTROL_CLEAN, 34 VOUT_CONTROL_REINIT, /* cfg */ 35 VOUT_CONTROL_CANCEL, 36 37 #if 0 38 /* */ 39 VOUT_CONTROL_START, 40 VOUT_CONTROL_STOP, 41 #endif 42 VOUT_CONTROL_SUBPICTURE, /* subpicture */ 43 VOUT_CONTROL_FLUSH_SUBPICTURE, /* integer */ 44 VOUT_CONTROL_OSD_TITLE, /* string */ 45 VOUT_CONTROL_CHANGE_FILTERS, /* string */ 46 VOUT_CONTROL_CHANGE_INTERLACE, /* boolean */ 47 VOUT_CONTROL_CHANGE_SUB_SOURCES, /* string */ 48 VOUT_CONTROL_CHANGE_SUB_FILTERS, /* string */ 49 VOUT_CONTROL_CHANGE_SUB_MARGIN, /* integer */ 50 51 VOUT_CONTROL_PAUSE, 52 VOUT_CONTROL_FLUSH, /* time */ 53 VOUT_CONTROL_STEP, /* time_ptr */ 54 55 VOUT_CONTROL_FULLSCREEN, /* bool */ 56 VOUT_CONTROL_WINDOW_STATE, /* unsigned */ 57 VOUT_CONTROL_WINDOW_MOUSE, /* window_mouse */ 58 VOUT_CONTROL_DISPLAY_FILLED, /* bool */ 59 VOUT_CONTROL_ZOOM, /* pair */ 60 61 VOUT_CONTROL_ASPECT_RATIO, /* pair */ 62 VOUT_CONTROL_CROP_BORDER, /* border */ 63 VOUT_CONTROL_CROP_RATIO, /* pair */ 64 VOUT_CONTROL_CROP_WINDOW, /* window */ 65 VOUT_CONTROL_VIEWPOINT, /* viewpoint */ 66 }; 67 68 typedef struct { 69 int type; 70 71 union { 72 bool boolean; 73 mtime_t time; 74 mtime_t *time_ptr; 75 char *string; 76 int integer; 77 struct { 78 int a; 79 int b; 80 } pair; 81 struct { 82 bool is_on; 83 mtime_t date; 84 } pause; 85 struct { 86 int channel; 87 char *string; 88 } message; 89 struct { 90 unsigned left; 91 unsigned top; 92 unsigned right; 93 unsigned bottom; 94 } border; 95 struct { 96 unsigned x; 97 unsigned y; 98 unsigned width; 99 unsigned height; 100 } window; 101 vout_window_mouse_event_t window_mouse; 102 const vout_configuration_t *cfg; 103 subpicture_t *subpicture; 104 vlc_viewpoint_t viewpoint; 105 } u; 106 } vout_control_cmd_t; 107 108 void vout_control_cmd_Init(vout_control_cmd_t *, int type); 109 void vout_control_cmd_Clean(vout_control_cmd_t *); 110 111 typedef struct { 112 vlc_mutex_t lock; 113 vlc_cond_t wait_request; 114 vlc_cond_t wait_acknowledge; 115 116 /* */ 117 bool is_dead; 118 bool can_sleep; 119 bool is_processing; 120 DECL_ARRAY(vout_control_cmd_t) cmd; 121 } vout_control_t; 122 123 /* */ 124 void vout_control_Init(vout_control_t *); 125 void vout_control_Clean(vout_control_t *); 126 127 /* controls outside of the vout thread */ 128 void vout_control_WaitEmpty(vout_control_t *); 129 130 void vout_control_Push(vout_control_t *, vout_control_cmd_t *); 131 void vout_control_PushVoid(vout_control_t *, int type); 132 void vout_control_PushBool(vout_control_t *, int type, bool boolean); 133 void vout_control_PushInteger(vout_control_t *, int type, int integer); 134 void vout_control_PushTime(vout_control_t *, int type, mtime_t time); 135 void vout_control_PushMessage(vout_control_t *, int type, int channel, const char *string); 136 void vout_control_PushPair(vout_control_t *, int type, int a, int b); 137 void vout_control_PushString(vout_control_t *, int type, const char *string); 138 void vout_control_Wake(vout_control_t *); 139 140 /* control inside of the vout thread */ 141 int vout_control_Pop(vout_control_t *, vout_control_cmd_t *, mtime_t deadline); 142 void vout_control_Dead(vout_control_t *); 143 144 #endif 145