annotate libvo/vo_cvidix.c @ 33672:e576232a39d5

Prevent balance from hopping. Only recalculate the balance if the balance has changed, not if just the volume has changed. Because (at least with my soundcard) not all volume values can be stored, but seem to be mapped onto a discrete value set, recalculation the balance from the volume isn't accurate enough.
author ib
date Tue, 28 Jun 2011 18:16:06 +0000
parents ddb45e9443ec
children 5d3f93051de9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
1 /*
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
2 * VIDIX-accelerated overlay on (black) background
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
3 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
4 * should work on any OS
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
5 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
6 * copyright (C) 2003 Sascha Sommer
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
7 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
8 * This file is part of MPlayer.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
9 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
10 * MPlayer is free software; you can redistribute it and/or modify
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
11 * it under the terms of the GNU General Public License as published by
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
13 * (at your option) any later version.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
14 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
15 * MPlayer is distributed in the hope that it will be useful,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
18 * GNU General Public License for more details.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
19 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
20 * You should have received a copy of the GNU General Public License along
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
21 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27768
diff changeset
23 */
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
24
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
25 #include <stdio.h>
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
26 #include <stdlib.h>
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
27 #include <string.h>
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
28 #include <math.h>
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
29 #include <errno.h>
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
30
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
31 #include "config.h"
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
32 #include "video_out.h"
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
33 #include "video_out_internal.h"
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
34 #include "aspect.h"
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
35 #include "geometry.h"
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
36
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
37 #include "mp_msg.h"
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
38
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
39 #include "vosub_vidix.h"
27079
df448e1248b2 remove now useless vidixlib.h file
ben
parents: 26755
diff changeset
40 #include "vidix/vidix.h"
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
41
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
42
25216
3aee342be929 Make vo info structs const
reimar
parents: 20110
diff changeset
43 static const vo_info_t info = {
12783
d4739143fe2e output wording
diego
parents: 12769
diff changeset
44 "console VIDIX",
11017
afdf982f0673 consolevidix -> cvidix
faust3
parents: 10979
diff changeset
45 "cvidix",
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
46 "Sascha Sommer",
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
47 ""
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
48 };
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
49
11017
afdf982f0673 consolevidix -> cvidix
faust3
parents: 10979
diff changeset
50 LIBVO_EXTERN(cvidix)
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
51
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
52 /* VIDIX related */
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
53 static char *vidix_name;
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
54 static uint32_t swidth,sheight,sformat;
13360
1f09ac7b543a center the image when screenw & height are set
faust3
parents: 13355
diff changeset
55 /// center video only when screenw & height are set
1f09ac7b543a center the image when screenw & height are set
faust3
parents: 13355
diff changeset
56 static uint32_t center=0;
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
57 static vidix_grkey_t gr_key;
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
58
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
59
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 16388
diff changeset
60 static uint32_t setup_vidix(void){
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
61 int x=vo_dx,y=vo_dy;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
62 aspect(&vo_dwidth,&vo_dheight,vo_fs ? A_ZOOM : A_NOZOOM);
13360
1f09ac7b543a center the image when screenw & height are set
faust3
parents: 13355
diff changeset
63 if(vo_fs || center){
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
64 if(vo_dwidth <= vo_screenwidth)x = (vo_screenwidth - vo_dwidth)/2;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
65 else x=0;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
66 if(vo_dheight <= vo_screenheight)y = (vo_screenheight - vo_dheight)/2;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
67 else y=0;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
68 }
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
69 if(vo_config_count)vidix_stop();
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
70 if(vidix_init(swidth, sheight, x, y, vo_dwidth, vo_dheight, sformat, 32, vo_screenwidth,vo_screenheight)){
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
71 mp_msg(MSGT_VO, MSGL_FATAL, "Can't setup VIDIX driver: %s\n", strerror(errno));
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
72 return 1;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
73 }
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
74 vidix_start();
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
75 if(vidix_grkey_support()){
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
76 vidix_grkey_get(&gr_key);
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
77 gr_key.key_op = KEYS_PUT;
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
78 if (!vo_fs && !(vo_colorkey & 0xff000000)){
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
79 gr_key.ckey.op = CKEY_TRUE;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
80 gr_key.ckey.red = (vo_colorkey & 0x00FF0000) >> 16;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
81 gr_key.ckey.green = (vo_colorkey & 0x0000FF00) >> 8;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
82 gr_key.ckey.blue = vo_colorkey & 0x000000FF;
11158
85f4534d1edb Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents: 11019
diff changeset
83 }
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
84 else gr_key.ckey.op = CKEY_FALSE;
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
85 vidix_grkey_set(&gr_key);
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
86 }
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
87 return 0;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
88 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
89
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
90 static int config(uint32_t width, uint32_t height, uint32_t d_width,uint32_t d_height, uint32_t flags, char *title, uint32_t format){
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14041
diff changeset
91 vo_fs = flags & VOFLAG_FULLSCREEN;
13360
1f09ac7b543a center the image when screenw & height are set
faust3
parents: 13355
diff changeset
92 if(!vo_config_count){
14041
928b03a98062 10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents: 13787
diff changeset
93 if(vo_screenwidth && vo_screenheight){
928b03a98062 10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents: 13787
diff changeset
94 if(!vo_geometry)center=1;
928b03a98062 10l initial patch by Oded Shimon <ods15 at ods15.dyndns.org>
faust3
parents: 13787
diff changeset
95 }
13360
1f09ac7b543a center the image when screenw & height are set
faust3
parents: 13355
diff changeset
96 }
27768
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
97 if(!vo_screenwidth){
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
98 mp_msg(MSGT_VO, MSGL_WARN, "vo_cvidix: Screen width not set (see -screenw), assuming 640 pixels.\n");
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
99 vo_screenwidth = 640;
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
100 }
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
101 if(!vo_screenheight){
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
102 mp_msg(MSGT_VO, MSGL_WARN, "vo_cvidix: Screen height not set (see -screenh), assuming 480 pixels.\n");
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
103 vo_screenheight = 480;
ffd1bd7043e6 Improve error message when screen width and height are not set.
diego
parents: 27079
diff changeset
104 }
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
105 swidth = width;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
106 sheight = height;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
107 sformat = format;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
108 vo_dwidth=d_width;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
109 vo_dheight=d_height;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
110 aspect_save_orig(width,height);
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
111 aspect_save_prescale(d_width,d_height);
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
112 aspect_save_screenres(vo_screenwidth,vo_screenheight);
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
113 if(!vo_geometry){
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
114 vo_dx=0;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
115 vo_dy=0;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
116 }
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
117 else geometry(&vo_dx, &vo_dy, &vo_dwidth, &vo_dheight,vo_screenwidth,vo_screenheight);
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
118 return setup_vidix();
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
119 }
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
120
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
121 static void check_events(void){
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
122 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
123
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
124 /* draw_osd, flip_page, draw_slice, draw_frame should be
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
125 overwritten with vidix functions (vosub_vidix.c) */
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
126 static void draw_osd(void){
11019
69daa4fb97d9 consolevidix -> cvidix
faust3
parents: 11017
diff changeset
127 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_osd!\n");
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
128 return;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
129 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
130
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
131 static void flip_page(void){
11019
69daa4fb97d9 consolevidix -> cvidix
faust3
parents: 11017
diff changeset
132 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix flip_page!\n");
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
133 return;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
134 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
135
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
136 static int draw_slice(uint8_t *src[], int stride[],int w, int h, int x, int y){
11019
69daa4fb97d9 consolevidix -> cvidix
faust3
parents: 11017
diff changeset
137 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_slice!\n");
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
138 return -1;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
139 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
140
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
141 static int draw_frame(uint8_t *src[]){
11019
69daa4fb97d9 consolevidix -> cvidix
faust3
parents: 11017
diff changeset
142 mp_msg(MSGT_VO, MSGL_FATAL, "vo_cvidix: error: didn't use vidix draw_frame!\n");
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
143 return -1;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
144 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
145
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
146 static int query_format(uint32_t format){
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 25216
diff changeset
147 return vidix_query_fourcc(format);
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
148 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
149
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
150 static void uninit(void){
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
151 if(!vo_config_count) return;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
152 vidix_term();
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32336
diff changeset
153 free(vidix_name);
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32336
diff changeset
154 vidix_name = NULL;
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
155 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
156
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
157 static int preinit(const char *arg){
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
158 if(arg)vidix_name = strdup(arg);
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
159 else {
11462
2e367138d4b5 message expanded with hint to use -v option
gabucino
parents: 11232
diff changeset
160 mp_msg(MSGT_VO, MSGL_INFO, "vo_cvidix: No vidix driver name provided, probing available ones (-v option for details)!\n");
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
161 vidix_name = NULL;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
162 }
11019
69daa4fb97d9 consolevidix -> cvidix
faust3
parents: 11017
diff changeset
163 if(vidix_preinit(vidix_name, &video_out_cvidix))return 1;
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
164 return 0;
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
165 }
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
166
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 33301
diff changeset
167 static int control(uint32_t request, void *data){
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
168 switch (request) {
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
169 case VOCTRL_QUERY_FORMAT:
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
170 return query_format(*((uint32_t*)data));
11232
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
171 case VOCTRL_FULLSCREEN:
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
172 if(vo_fs)vo_fs=0;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
173 else vo_fs=1;
147a4c50214d added aspect && geometry support
faust3
parents: 11216
diff changeset
174 setup_vidix();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
175 return VO_TRUE;
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
176 }
10979
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
177 return vidix_control(request, data);
ea4426db0db5 new vidix vo modules for textmode console and windows
faust3
parents:
diff changeset
178 }