Optionally display the value of several variables within the Status command.
[asterisk/asterisk.git] / channels / console_video.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2007 Luigi Rizzo
5  *
6  * See http://www.asterisk.org for more information about
7  * the Asterisk project. Please do not directly contact
8  * any of the maintainers of this project for assistance;
9  * the project provides a web site, mailing lists and IRC
10  * channels for your use.
11  *
12  * This program is free software, distributed under the terms of
13  * the GNU General Public License Version 2. See the LICENSE file
14  * at the top of the source tree.
15  */
16
17 /*
18  * Common header for console video support
19  *
20  * $Revision$
21  */
22
23 #ifndef CONSOLE_VIDEO_H
24 #define CONSOLE_VIDEO_H
25
26 #if !defined(HAVE_VIDEO_CONSOLE) || !defined(HAVE_FFMPEG)
27 #define CONSOLE_VIDEO_CMDS                                      \
28                 "console {device}"
29 #else
30
31 #include <ffmpeg/avcodec.h>
32 #ifndef OLD_FFMPEG
33 #include <ffmpeg/swscale.h>     /* requires a recent ffmpeg */
34 #endif
35
36 #define CONSOLE_VIDEO_CMDS                      \
37         "console {videodevice|videocodec"       \
38         "|video_size|bitrate|fps|qmin"          \
39         "|sendvideo|keypad"                     \
40         "|sdl_videodriver"                      \
41         "|device|startgui|stopgui"              \
42         "}"
43
44 #endif  /* HAVE_VIDEO_CONSOLE and others */
45
46 /*
47  * In many places we use buffers to store the raw frames (but not only),
48  * so here is a structure to keep all the info. data = NULL means the
49  * structure is not initialized, so the other fields are invalid.
50  * size = 0 means the buffer is not malloc'ed so we don't have to free it.
51  */
52 struct fbuf_t {         /* frame buffers, dynamically allocated */
53         uint8_t *data;  /* memory, malloced if size > 0, just reference
54                          * otherwise */
55         int     size;   /* total size in bytes */
56         int     used;   /* space used so far */
57         int     ebit;   /* bits to ignore at the end */
58         int     x;      /* origin, if necessary */
59         int     y;
60         int     w;      /* size */ 
61         int     h;
62         int     pix_fmt;
63 };
64
65 void fbuf_free(struct fbuf_t *);
66
67 /* descriptor for a grabber */
68 struct grab_desc {
69         const char *name;
70         void *(*open)(const char *name, struct fbuf_t *geom, int fps);
71         struct fbuf_t *(*read)(void *d);
72         void (*move)(void *d, int dx, int dy);
73         void *(*close)(void *d);
74 };
75
76 extern struct grab_desc *console_grabbers[];
77
78 struct video_desc;              /* opaque type for video support */
79 struct video_desc *get_video_desc(struct ast_channel *c);
80
81 /* linked by console_video.o */
82 int console_write_video(struct ast_channel *chan, struct ast_frame *f);
83 extern int console_video_formats;
84 int console_video_cli(struct video_desc *env, const char *var, int fd);
85 int console_video_config(struct video_desc **penv, const char *var, const char *val);
86 void console_video_uninit(struct video_desc *env);
87 void console_video_start(struct video_desc *env, struct ast_channel *owner);
88
89 /* console_board.c */
90
91 /* Where do we send the keyboard/keypad output */
92 enum kb_output {
93         KO_NONE,
94         KO_INPUT,       /* the local input window */
95         KO_DIALED,      /* the 'dialed number' window */
96         KO_MESSAGE,     /* the 'message' window */
97 };
98
99 enum drag_window {      /* which window are we dragging */
100         DRAG_NONE,
101         DRAG_LOCAL,     /* local video */
102         DRAG_REMOTE,    /* remote video */
103         DRAG_DIALED,    /* dialed number */
104         DRAG_INPUT,     /* input window */
105         DRAG_MESSAGE,   /* message window */
106 };
107
108 /*! \brief support for drag actions */
109 struct drag_info {
110         int             x_start;        /* last known mouse position */
111         int             y_start;
112         enum drag_window drag_window;
113 };
114 /*! \brief info related to the gui: button status, mouse coords, etc. */
115 struct board;
116 /* !\brief print a message on a board */
117 void move_message_board(struct board *b, int dy);
118 int print_message(struct board *b, const char *s);
119
120 /*! \brief return the whole text from a board */
121 const char *read_message(const struct board *b);
122
123 /*! \brief reset the board to blank */
124 int reset_board(struct board *b);
125
126 #endif /* CONSOLE_VIDEO_H */
127 /* end of file */