[asterisk-commits] rizzo: trunk r94805 - /trunk/channels/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Dec 26 14:01:16 CST 2007


Author: rizzo
Date: Wed Dec 26 14:01:16 2007
New Revision: 94805

URL: http://svn.digium.com/view/asterisk?view=rev&rev=94805
Log:
more preparation for untangling of the various console_video stuff


Modified:
    trunk/channels/console_gui.c
    trunk/channels/console_video.c
    trunk/channels/console_video.h
    trunk/channels/vcodecs.c

Modified: trunk/channels/console_gui.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/console_gui.c?view=diff&rev=94805&r1=94804&r2=94805
==============================================================================
--- trunk/channels/console_gui.c (original)
+++ trunk/channels/console_gui.c Wed Dec 26 14:01:16 2007
@@ -4,30 +4,73 @@
  * $Revision$
  */
 
+#include "asterisk.h"
+#include "console_video.h"
+#include "asterisk/lock.h"
+#include "asterisk/frame.h"
+#include "asterisk/utils.h"	/* ast_calloc and ast_realloc */
+#include <math.h>		/* sqrt */
+
+enum kp_type { KP_NONE, KP_RECT, KP_CIRCLE };
+struct keypad_entry {
+        int c;  /* corresponding character */
+        int x0, y0, x1, y1, h;  /* arguments */
+        enum kp_type type;
+};
+
+#define GUI_BUFFER_LEN 256			/* buffer lenght used for input buffers */
+
+struct keypad_entry;	/* defined in console_gui.c */
+
+/*! \brief info related to the gui: button status, mouse coords, etc. */
+struct gui_info {
+	char			inbuf[GUI_BUFFER_LEN];	/* buffer for to-dial buffer */
+	int			inbuf_pos;	/* next free position in inbuf */
+	char			msgbuf[GUI_BUFFER_LEN];	/* buffer for text-message buffer */
+	int			msgbuf_pos;	/* next free position in msgbuf */
+	int			text_mode;	/* switch to-dial and text-message mode */
+	int			drag_mode;	/* switch phone and drag-source mode */
+	int			x_drag;		/* x coordinate where the drag starts */
+	int			y_drag;		/* y coordinate where the drag starts */
+#ifdef HAVE_SDL_TTF
+	TTF_Font                *font;          /* font to be used */ 
+#endif
+	int			outfd;		/* fd for output */
+	SDL_Surface		*keypad;	/* the pixmap for the keypad */
+	int kp_size, kp_used;
+	struct keypad_entry *kp;
+};
+
 static void cleanup_sdl(struct video_desc *env)  
 {
 	int i;
-
+	struct gui_info *gui = env->gui;
+
+    if (gui) {
 #ifdef HAVE_SDL_TTF
 	/* unload font file */ 
-	if (env->gui.font) {
-		TTF_CloseFont(env->gui.font);
-		env->gui.font = NULL; 
+	if (gui->font) {
+		TTF_CloseFont(gui->font);
+		gui->font = NULL; 
 	}
 
 	/* uninitialize SDL_ttf library */
 	if ( TTF_WasInit() )
 		TTF_Quit();
 #endif
+	if (gui->keypad)
+		SDL_FreeSurface(gui->keypad);
+	gui->keypad = NULL;
+	/* XXX free the keys entries */
+	ast_free(gui);
+	env->gui = NULL;
+    }
 
 	/* uninitialize the SDL environment */
 	for (i = 0; i < WIN_MAX; i++) {
 		if (env->win[i].bmp)
 			SDL_FreeYUVOverlay(env->win[i].bmp);
 	}
-	if (env->gui.keypad)
-		SDL_FreeSurface(env->gui.keypad);
-	env->gui.keypad = NULL;
 	SDL_Quit();
 	env->screen = NULL; /* XXX check reference */
 	bzero(env->win, sizeof(env->win));
@@ -177,7 +220,7 @@
 		f.subclass = digit;
 		ast_queue_frame(env->owner, &f);
 	} else {		/* no call, accumulate digits */
-		append_char(env->gui.inbuf, &env->gui.inbuf_pos, digit);
+		append_char(env->gui->inbuf, &env->gui->inbuf_pos, digit);
 	}
 }
 
@@ -186,7 +229,7 @@
 static void keypad_send_command(struct video_desc *env, char *command)
 {	
 	ast_log(LOG_WARNING, "keypad_send_command(%s) called\n", command);
-	ast_cli_command(env->gui.outfd, command);
+	ast_cli_command(env->gui->outfd, command);
 	return;
 }
 
@@ -228,15 +271,17 @@
  */
 static void keypad_pick_up(struct video_desc *env)
 {
+	struct gui_info *gui = env->gui;
+
 	ast_log(LOG_WARNING, "keypad_pick_up called\n");
 
 	if (env->owner) { /* someone is calling us, just answer */
 		console_do_answer(-1);
-	} else if (env->gui.inbuf_pos) { /* we have someone to call */
-		ast_cli_command(env->gui.outfd, env->gui.inbuf);
-	}
-
-	append_char(env->gui.inbuf, &env->gui.inbuf_pos, '\0'); /* clear buffer */
+	} else if (gui->inbuf_pos) { /* we have someone to call */
+		ast_cli_command(gui->outfd, gui->inbuf);
+	}
+
+	append_char(gui->inbuf, &gui->inbuf_pos, '\0'); /* clear buffer */
 }
 
 #if 0 /* still unused */
@@ -267,11 +312,12 @@
 	SDL_Surface *output = NULL;
 	SDL_Color color = {0, 0, 0};	/* text color */
 	SDL_Rect dest = {env->win[WIN_KEYPAD].rect.x + x, y};
+	struct gui_info *gui = env->gui;
 
 	/* clean surface each rewrite */
-	SDL_BlitSurface(env->gui.keypad, NULL, env->screen, &env->win[WIN_KEYPAD].rect);
-
-	output = TTF_RenderText_Solid(env->gui.font, text, color);
+	SDL_BlitSurface(gui->keypad, NULL, env->screen, &env->win[WIN_KEYPAD].rect);
+
+	output = TTF_RenderText_Solid(gui->font, text, color);
 	if (output == NULL) {
 		ast_log(LOG_WARNING, "Cannot render text on gui - %s\n", TTF_GetError());
 		return 1;
@@ -279,7 +325,7 @@
 
 	SDL_BlitSurface(output, NULL, env->screen, &dest);
 	
-	SDL_UpdateRects(env->gui.keypad, 1, &env->win[WIN_KEYPAD].rect);
+	SDL_UpdateRects(gui->keypad, 1, &env->win[WIN_KEYPAD].rect);
 	SDL_FreeSurface(output);
 	return 0;	/* success */
 #endif
@@ -300,8 +346,12 @@
 {
 	uint8_t index = KEY_OUT_OF_KEYPAD;	/* the key or region of the display we clicked on */
 
+#if 0
+	ast_log(LOG_WARNING, "event %d %d have %d/%d regions at %p\n",
+		button.x, button.y, env->gui->kp_used, env->gui->kp_size, env->gui->kp);
+#endif
 	/* for each click we come back in normal mode */
-	env->gui.text_mode = 0;
+	env->gui->text_mode = 0;
 
 	/* define keypad boundary */
 	if (button.x < env->in.rem_dpy.w)
@@ -310,11 +360,11 @@
 		index = KEY_LOC_DPY; /* click on local video */
 	else if (button.y > env->out.keypad_dpy.h)
 		index = KEY_OUT_OF_KEYPAD; /* click outside the keypad */
-	else if (env->gui.kp) {
+	else if (env->gui->kp) {
 		int i;
-		for (i = 0; i < env->gui.kp_used; i++) {
-			if (kp_match_area(&env->gui.kp[i], button.x - env->in.rem_dpy.w, button.y)) {
-				index = env->gui.kp[i].c;
+		for (i = 0; i < env->gui->kp_used; i++) {
+			if (kp_match_area(&env->gui->kp[i], button.x - env->in.rem_dpy.w, button.y)) {
+				index = env->gui->kp[i].c;
 				break;
 			}
 		}
@@ -347,7 +397,7 @@
 		break;
 	case KEY_WRITEMESSAGE:
 		/* goes in text-mode */
-		env->gui.text_mode = 1;
+		env->gui->text_mode = 1;
 		break;
 
 
@@ -358,9 +408,9 @@
 			if (index == KEY_LOC_DPY) {
 				/* store points where the drag start
 				* and switch in drag mode */
-				env->gui.x_drag = button.x;
-				env->gui.y_drag = button.y;
-				env->gui.drag_mode = 1;
+				env->gui->x_drag = button.x;
+				env->gui->y_drag = button.y;
+				env->gui->drag_mode = 1;
 			}
 			break;
 		} else {
@@ -394,20 +444,20 @@
  */
 static void handle_keyboard_input(struct video_desc *env, SDLKey key)
 {
-	if (env->gui.text_mode) {
+	if (env->gui->text_mode) {
 		/* append in the text-message buffer */
 		if (key == SDLK_RETURN) {
 			/* send the text message and return in normal mode */
-			env->gui.text_mode = 0;
+			env->gui->text_mode = 0;
 			keypad_send_command(env, "send text");
 		} else {
 			/* accumulate the key in the message buffer */
-			append_char(env->gui.msgbuf, &env->gui.msgbuf_pos, key);
+			append_char(env->gui->msgbuf, &env->gui->msgbuf_pos, key);
 		}
 	}
 	else {
 		/* append in the dial buffer */
-		append_char(env->gui.inbuf, &env->gui.inbuf_pos, key);
+		append_char(env->gui->inbuf, &env->gui->inbuf_pos, key);
 	}
 
 	return;
@@ -445,11 +495,11 @@
 
 	/* move the origin */
 #define POLARITY -1		/* +1 or -1 depending on the desired direction */
-	new_x = x + POLARITY*move_accel(x_final_drag - env->gui.x_drag) * 3;
-	new_y = y + POLARITY*move_accel(y_final_drag - env->gui.y_drag) * 3;
+	new_x = x + POLARITY*move_accel(x_final_drag - env->gui->x_drag) * 3;
+	new_y = y + POLARITY*move_accel(y_final_drag - env->gui->y_drag) * 3;
 #undef POLARITY
-	env->gui.x_drag = x_final_drag;	/* update origin */
-	env->gui.y_drag = y_final_drag;
+	env->gui->x_drag = x_final_drag;	/* update origin */
+	env->gui->y_drag = y_final_drag;
 
 	/* check boundary and let the source to grab from the new points */
 	env->out.loc_src.x = boundary_checks(new_x, env->out.screen_width - env->out.loc_src.w);
@@ -483,16 +533,16 @@
 				handle_keyboard_input(env, ev[i].key.keysym.sym);
 				break;
 			case SDL_MOUSEMOTION:
-				if (env->gui.drag_mode != 0)
+				if (env->gui->drag_mode != 0)
 					move_capture_source(env, ev[i].motion.x, ev[i].motion.y);
 				break;
 			case SDL_MOUSEBUTTONDOWN:
 				handle_button_event(env, ev[i].button);
 				break;
 			case SDL_MOUSEBUTTONUP:
-				if (env->gui.drag_mode != 0) {
+				if (env->gui->drag_mode != 0) {
 					move_capture_source(env, ev[i].button.x, ev[i].button.y);
-					env->gui.drag_mode = 0;
+					env->gui->drag_mode = 0;
 				}
 				break;
 			}
@@ -529,43 +579,50 @@
 
 /* TODO: consistency checks, check for bpp, widht and height */
 /* Init the mask image used to grab the action. */
-static int gui_init(struct video_desc *env)
-{
+static struct gui_info *gui_init(struct video_desc *env)
+{
+	struct gui_info *gui = ast_calloc(1, sizeof(*gui));
+
+	if (gui == NULL)
+		return NULL;
 	/* initialize keypad status */
-	env->gui.text_mode = 0;
-	env->gui.drag_mode = 0;
+	gui->text_mode = 0;
+	gui->drag_mode = 0;
 
 	/* initialize grab coordinates */
 	env->out.loc_src.x = 0;
 	env->out.loc_src.y = 0;
 
 	/* initialize keyboard buffer */
-	append_char(env->gui.inbuf, &env->gui.inbuf_pos, '\0');
-	append_char(env->gui.msgbuf, &env->gui.msgbuf_pos, '\0');
+	append_char(gui->inbuf, &gui->inbuf_pos, '\0');
+	append_char(gui->msgbuf, &gui->msgbuf_pos, '\0');
 
 #ifdef HAVE_SDL_TTF
 	/* Initialize SDL_ttf library and load font */
 	if (TTF_Init() == -1) {
 		ast_log(LOG_WARNING, "Unable to init SDL_ttf, no output available\n");
-		return -1;
+		goto error;
 	}
 
 #define GUI_FONTSIZE 28
-	env->gui.font = TTF_OpenFont( env->keypad_font, GUI_FONTSIZE);
-	if (!env->gui.font) {
+	gui->font = TTF_OpenFont( env->keypad_font, GUI_FONTSIZE);
+	if (!gui->font) {
 		ast_log(LOG_WARNING, "Unable to load font %s, no output available\n", env->keypad_font);
-		return -1;
+		goto error;
 	}
 	ast_log(LOG_WARNING, "Loaded font %s\n", env->keypad_font);
 #endif
 
-	env->gui.outfd = open ("/dev/null", O_WRONLY);	/* discard output, temporary */
-	if ( env->gui.outfd < 0 ) {
+	gui->outfd = open ("/dev/null", O_WRONLY);	/* discard output, temporary */
+	if (gui->outfd < 0) {
 		ast_log(LOG_WARNING, "Unable output fd\n");
-		return -1;
-	}
-
-	return 0;
+		goto error;
+	}
+	return gui;
+
+error:
+	ast_free(gui);
+	return NULL;
 }
 
 /* setup an sdl overlay and associated info, return 0 on success, != 0 on error */
@@ -590,14 +647,14 @@
 	void *p = NULL;
 	off_t l = 0;
 
-	if (env->gui.keypad)
+	if (env->gui->keypad)
 		return;
-	env->gui.keypad = get_keypad(env->keypad_file);
-	if (!env->gui.keypad)
+	env->gui->keypad = get_keypad(env->keypad_file);
+	if (!env->gui->keypad)
 		return;
 
-	env->out.keypad_dpy.w = env->gui.keypad->w;
-	env->out.keypad_dpy.h = env->gui.keypad->h;
+	env->out.keypad_dpy.w = env->gui->keypad->w;
+	env->out.keypad_dpy.h = env->gui->keypad->h;
 	/*
 	 * If the keypad image has a comment field, try to read
 	 * the button location from there. The block must be
@@ -631,7 +688,7 @@
 		for (s = p; s < e - 20 ; s++) {
 			if (!memcmp(s, region, reg_len)) { /* keyword found */
 				/* reset previous entries */
-				keypad_cfg_read(&env->gui, "reset");
+				keypad_cfg_read(env->gui, "reset");
 				break;
 			}
 		}
@@ -652,7 +709,7 @@
 				break;
 			if (*s1 == '>')	/* skip => */
 				s1++;
-			keypad_cfg_read(&env->gui, ast_skip_blanks(s1));
+			keypad_cfg_read(env->gui, ast_skip_blanks(s1));
 			/* now wait for a newline */
 			s1 = s;
 			while (s1 < e - 20 && !index("\r\n", *s1) && *s1 < 128)
@@ -686,9 +743,17 @@
 	 * - on the left, the remote video;
 	 * - on the center, the keypad
 	 * - on the right, the local video
+	 * We need to read in the skin for the keypad before creating the main
+	 * SDL window, because the size is only known here.
 	 */
 
-	keypad_setup(env);
+	env->gui = gui_init(env);
+	ast_log(LOG_WARNING, "gui_init returned %p\n", env->gui);
+	if (env->gui) {
+		keypad_setup(env);
+		ast_log(LOG_WARNING, "keypad_setup returned %p %d\n",
+			env->gui->keypad, env->gui->kp_used);
+	}
 #define BORDER	5	/* border around our windows */
 	maxw = env->in.rem_dpy.w + env->out.loc_dpy.w + env->out.keypad_dpy.w;
 	maxh = MAX( MAX(env->in.rem_dpy.h, env->out.loc_dpy.h), env->out.keypad_dpy.h);
@@ -712,13 +777,13 @@
 	/* display the skin, but do not free it as we need it later to
 	 * restore text areas and maybe sliders too.
 	 */
-	if (env->gui.keypad) {
+	if (env->gui && env->gui->keypad) {
 		struct SDL_Rect *dest = &env->win[WIN_KEYPAD].rect;
 		dest->x = 2*BORDER + env->in.rem_dpy.w;
 		dest->y = BORDER;
-		dest->w = env->gui.keypad->w;
-		dest->h = env->gui.keypad->h;
-		SDL_BlitSurface(env->gui.keypad, NULL, env->screen, dest);
+		dest->w = env->gui->keypad->w;
+		dest->h = env->gui->keypad->h;
+		SDL_BlitSurface(env->gui->keypad, NULL, env->screen, dest);
 		SDL_UpdateRects(env->screen, 1, dest);
 	}
 	env->in.dec_in_cur = &env->in.dec_in[0];
@@ -765,15 +830,6 @@
 	return ret;
 }
 
-/*
- * read a keypad entry line in the format
- *	reset
- *	token circle xc yc diameter
- *	token circle xc yc x1 y1 h	# ellipse, main diameter and height
- *	token rect x0 y0 x1 y1 h	# rectangle with main side and eight
- * token is the token to be returned, either a character or a symbol
- * as KEY_* above
- */
 struct _s_k { const char *s; int k; };
 static struct _s_k gui_key_map[] = {
 	{"PICK_UP",	KEY_PICK_UP },
@@ -789,11 +845,23 @@
         {"GUI_CLOSE",	KEY_GUI_CLOSE },
         {NULL, 0 } };
 
+/*! \brief read a keypad entry line in the format
+ *	reset
+ *	token circle xc yc diameter
+ *	token circle xc yc x1 y1 h	# ellipse, main diameter and height
+ *	token rect x0 y0 x1 y1 h	# rectangle with main side and eight
+ * token is the token to be returned, either a character or a symbol
+ * as KEY_* above
+ * Return 1 on success, 0 on error.
+ */
 static int keypad_cfg_read(struct gui_info *gui, const char *val)
 {
 	struct keypad_entry e;
 	char s1[16], s2[16];
 	int i, ret = 0;
+
+	if (gui == NULL || val == NULL)
+		return 0;
 
 	bzero(&e, sizeof(e));
 	i = sscanf(val, "%14s %14s %d %d %d %d %d",
@@ -876,5 +944,6 @@
 	if (gui->kp_size == gui->kp_used)
 		return 0;
 	gui->kp[gui->kp_used++] = e;
+	ast_log(LOG_WARNING, "now %d regions\n", gui->kp_used);
 	return 1;
 }

Modified: trunk/channels/console_video.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/console_video.c?view=diff&rev=94805&r1=94804&r2=94805
==============================================================================
--- trunk/channels/console_video.c (original)
+++ trunk/channels/console_video.c Wed Dec 26 14:01:16 2007
@@ -22,7 +22,6 @@
 
 #include "asterisk.h"
 #include <sys/ioctl.h>
-#include <math.h>	/* sqrt */
 #include "asterisk/cli.h"
 #include "asterisk/file.h"
 #include "asterisk/channel.h"
@@ -250,43 +249,6 @@
 	struct fbuf_t rem_dpy;	/* display remote image, no buffer (it is in win[WIN_REMOTE].bmp) */
 };
 
-/* our representation of a displayed window. SDL can only do one main
- * window so we map everything within that one
- */
-enum { WIN_LOCAL, WIN_REMOTE, WIN_KEYPAD, WIN_MAX };
-
-struct display_window	{
-	SDL_Overlay             *bmp;
-	SDL_Rect		rect;	/* loc. of images */
-};
-
-#define GUI_BUFFER_LEN 256			/* buffer lenght used for input buffers */
-
-enum kp_type { KP_NONE, KP_RECT, KP_CIRCLE };
-struct keypad_entry {
-	int c;	/* corresponding character */
-	int x0, y0, x1, y1, h;	/* arguments */
-	enum kp_type type;
-};
-
-/*! \brief info related to the gui: button status, mouse coords, etc. */
-struct gui_info {
-	char			inbuf[GUI_BUFFER_LEN];	/* buffer for to-dial buffer */
-	int			inbuf_pos;	/* next free position in inbuf */
-	char			msgbuf[GUI_BUFFER_LEN];	/* buffer for text-message buffer */
-	int			msgbuf_pos;	/* next free position in msgbuf */
-	int			text_mode;	/* switch to-dial and text-message mode */
-	int			drag_mode;	/* switch phone and drag-source mode */
-	int			x_drag;		/* x coordinate where the drag starts */
-	int			y_drag;		/* y coordinate where the drag starts */
-#ifdef HAVE_SDL_TTF
-	TTF_Font                *font;          /* font to be used */ 
-#endif
-	int			outfd;		/* fd for output */
-	SDL_Surface		*keypad;	/* the pixmap for the keypad */
-	int kp_size, kp_used;
-	struct keypad_entry *kp;
-};
 
 /*
  * The overall descriptor, with room for config info, video source and
@@ -302,11 +264,10 @@
 	struct video_in_desc	in;		/* remote video descriptor */
 	struct video_out_desc	out;		/* local video descriptor */
 
-	struct gui_info		gui;
+	struct gui_info		*gui;
 
 	/* support for display. */
 	int                     sdl_ok;
-	int			gui_ok;
 	SDL_Surface             *screen;	/* the main window */
 	char			keypad_file[256];	/* image for the keypad */
 	char                    keypad_font[256];       /* font for the keypad */
@@ -1147,10 +1108,6 @@
 		sdl_setup(env);
 		if (env->sdl_ok)
 			ast_mutex_init(&env->in.dec_in_lock);
-		/* TODO, segfault if not X display present */
-		env->gui_ok = !gui_init(env);
-		if (!env->gui_ok)
-			ast_log(LOG_WARNING, "cannot init console gui\n");
 	}
 	if (!ast_strlen_zero(save_display))
 		setenv("DISPLAY", save_display, 1);
@@ -1190,7 +1147,7 @@
 		/* manage keypad events */
 		/* XXX here we should always check for events,
 		* otherwise the drag will not work */ 
-		if (env->gui_ok)
+		if (env->gui)
 			eventhandler(env);
  
 		/* sleep for a while */
@@ -1447,7 +1404,7 @@
 	CV_F("local_size", video_geom(&env->out.loc_dpy, val));
 	CV_F("remote_size", video_geom(&env->in.rem_dpy, val));
 	CV_STR("keypad", env->keypad_file);
-	CV_F("region", keypad_cfg_read(&env->gui, val));
+	CV_F("region", keypad_cfg_read(env->gui, val));
 	CV_STR("keypad_font", env->keypad_font);
 	CV_STR("sdl_videodriver", env->sdl_videodriver);
 	CV_UINT("fps", env->out.fps);

Modified: trunk/channels/console_video.h
URL: http://svn.digium.com/view/asterisk/trunk/channels/console_video.h?view=diff&rev=94805&r1=94804&r2=94805
==============================================================================
--- trunk/channels/console_video.h (original)
+++ trunk/channels/console_video.h Wed Dec 26 14:01:16 2007
@@ -20,8 +20,55 @@
  * $Revision$
  */
 
+#ifndef CONSOLE_VIDEO_H
+#define CONSOLE_VIDEO_H
+
+#if !defined(HAVE_VIDEO_CONSOLE) || !defined(HAVE_FFMPEG) || !defined(HAVE_SDL)
+#define CONSOLE_VIDEO_CMDS					\
+		"console {device}"
+#else
+
+#ifdef HAVE_X11
+#include <X11/Xlib.h>           /* this should be conditional */
+#endif
+        
+#include <ffmpeg/avcodec.h>
+#ifndef OLD_FFMPEG
+#include <ffmpeg/swscale.h>     /* requires a recent ffmpeg */
+#endif
+
+#include <SDL/SDL.h>
+#ifdef HAVE_SDL_IMAGE
+#include <SDL/SDL_image.h>      /* for loading images */
+#endif
+#ifdef HAVE_SDL_TTF
+#include <SDL/SDL_ttf.h>        /* render text on sdl surfaces */
+#endif
+
+/* our representation of a displayed window. SDL can only do one main
+ * window so we map everything within that one
+ */
+enum { WIN_LOCAL, WIN_REMOTE, WIN_KEYPAD, WIN_MAX };
+/* our representation of a displayed window. SDL can only do one main
+ * window so we map everything within that one
+ */
+struct display_window   {   
+	SDL_Overlay	*bmp;
+	SDL_Rect	rect;	/* location of the window */
+};
+
+
+#define CONSOLE_VIDEO_CMDS                              \
+        "console {videodevice|videocodec|sendvideo"     \
+        "|video_size|bitrate|fps|qmin"                  \
+        "|keypad|keypad_mask|keypad_entry"              \
+	"|sdl_videodriver"				\
+        "|device"					\
+	"}"
+
+#endif	/* HAVE_VIDEO_CONSOLE and others */
+
 struct video_desc;		/* opaque type for video support */
-
 struct video_desc *get_video_desc(struct ast_channel *c);
 
 /* linked by console_video.o */
@@ -32,18 +79,5 @@
 void console_video_uninit(struct video_desc *env);
 void console_video_start(struct video_desc *env, struct ast_channel *owner);
 
-#ifdef HAVE_VIDEO_CONSOLE
-#define CONSOLE_VIDEO_CMDS                              \
-        "console {videodevice|videocodec|sendvideo"     \
-        "|video_size|bitrate|fps|qmin"                  \
-        "|keypad|keypad_mask|keypad_entry"              \
-	"|sdl_videodriver"				\
-        "|device"					\
-	"}"
-
-#else
-#define CONSOLE_VIDEO_CMDS					\
-		"console {device}"
-#endif
-
+#endif /* CONSOLE_VIDEO_H */
 /* end of file */

Modified: trunk/channels/vcodecs.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/vcodecs.c?view=diff&rev=94805&r1=94804&r2=94805
==============================================================================
--- trunk/channels/vcodecs.c (original)
+++ trunk/channels/vcodecs.c Wed Dec 26 14:01:16 2007
@@ -3,6 +3,14 @@
  * $Revision$
  */
 
+#include "asterisk.h"
+#include "console_video.h"
+#include "asterisk/frame.h"
+
+struct video_out_desc;
+struct video_in_desc;
+struct fbuf_t;
+
 /*
  * Each codec is defined by a number of callbacks
  */
@@ -13,6 +21,7 @@
 typedef int (*encoder_encode_f)(struct video_out_desc *v);
 
 /*! \brief encapsulate the bistream in RTP frames */
+/* struct fbuf_t, int mtu, struct ast_frame **tail */
 typedef struct ast_frame *(*encoder_encap_f)(struct video_out_desc *out,
 		struct ast_frame **tail);
 
@@ -953,7 +962,7 @@
 	uint32_t	ast_format;	/* 0 is a terminator */
 	enum CodecID	codec;
 	enum { CM_RD = 1, CM_WR = 2, CM_RDWR = 3 } rw;  /* read or write or both ? */
-	struct video_codec_desc *codec_desc;
+	//struct video_codec_desc *codec_desc;
 };
 
 static struct _cm video_formats[] = {




More information about the asterisk-commits mailing list