comparison libvo/vosub_vidix.c @ 4014:cb7c183816f8

Looks working ;)
author nick
date Sun, 06 Jan 2002 19:21:10 +0000
parents 625b61fd11fb
children 8b8569b255d0
comparison
equal deleted inserted replaced
4013:625b61fd11fb 4014:cb7c183816f8
1
1 /* 2 /*
2 * vosub_vidix.c 3 * vosub_vidix.c
3 * 4 *
4 * Copyright (C) Nick Kurshev <nickols_k@mail.ru> - 2002 5 * Copyright (C) Nick Kurshev <nickols_k@mail.ru> - 2002
5 * 6 *
121 printf("vosub_vidix: vidix driver can't downscale image\n"); 122 printf("vosub_vidix: vidix driver can't downscale image\n");
122 return -1; 123 return -1;
123 } 124 }
124 image_width = src_width; 125 image_width = src_width;
125 image_height = src_height; 126 image_height = src_height;
127 src_format = format;
126 memset(&vidix_play,0,sizeof(vidix_playback_t)); 128 memset(&vidix_play,0,sizeof(vidix_playback_t));
127 vidix_play.fourcc = format; 129 vidix_play.fourcc = format;
128 vidix_play.capability = vidix_cap.flags; /* every ;) */ 130 vidix_play.capability = vidix_cap.flags; /* every ;) */
129 vidix_play.blend_factor = 0; /* for now */ 131 vidix_play.blend_factor = 0; /* for now */
130 vidix_play.src.x = vidix_play.src.y = 0; 132 vidix_play.src.x = vidix_play.src.y = 0;
165 167
166 uint32_t vidix_draw_slice_420(uint8_t *image[], int stride[], int w,int h,int x,int y) 168 uint32_t vidix_draw_slice_420(uint8_t *image[], int stride[], int w,int h,int x,int y)
167 { 169 {
168 uint8_t *src; 170 uint8_t *src;
169 uint8_t *dest; 171 uint8_t *dest;
170 unsigned bespitch; 172 unsigned bespitch,apitch;
171 int i; 173 int i;
172 174 apitch = vidix_play.dest.pitch.y-1;
173 bespitch = (vidix_play.dest.w + (vidix_play.dest.pitch.y-1)) & ~(vidix_play.dest.pitch.y-1); 175 bespitch = (w + apitch) & ~apitch;
174 176
175 dest = vidix_mem + frames[next_frame] + vidix_play.offset.y; 177 dest = vidix_mem + frames[next_frame] + vidix_play.offset.y;
176 dest += bespitch*y + x; 178 dest += bespitch*y + x;
177 src = image[0]; 179 src = image[0];
178 for(i=0;i<h;i++){ 180 for(i=0;i<h;i++){
179 memcpy(dest,src,w); 181 memcpy(dest,src,w);
180 src+=stride[0]; 182 src+=stride[0];
181 dest += bespitch; 183 dest += bespitch;
182 } 184 }
183 185
184 w/=2;h/=2;x/=2;y/=2; 186 apitch = vidix_play.dest.pitch.v-1;
185 187 bespitch = (w + apitch) & ~apitch;
186 bespitch = (vidix_play.dest.w + (vidix_play.dest.pitch.u-1)) & ~(vidix_play.dest.pitch.u-1); 188 dest = vidix_mem + frames[next_frame] + vidix_play.offset.v;
189 dest += (bespitch*y + x)/2;
190 src = image[1];
191 for(i=0;i<h/2;i++){
192 memcpy(dest,src,w/2);
193 src+=stride[1];
194 dest+=bespitch/2;
195 }
196 apitch = vidix_play.dest.pitch.u-1;
197 bespitch = (w + apitch) & ~apitch;
187 198
188 dest = vidix_mem + frames[next_frame] + vidix_play.offset.u; 199 dest = vidix_mem + frames[next_frame] + vidix_play.offset.u;
189 dest += bespitch*y + x; 200 dest += (bespitch*y + x)/2;
190 src = image[1];
191 for(i=0;i<h;i++){
192 memcpy(dest,src,w);
193 src+=stride[1];
194 dest+=bespitch;
195 }
196
197 bespitch = (vidix_play.dest.w + (vidix_play.dest.pitch.v-1)) & ~(vidix_play.dest.pitch.v-1);
198
199 dest = vidix_mem + frames[next_frame] + vidix_play.offset.v;
200 dest += bespitch*y + x;
201 src = image[2]; 201 src = image[2];
202 for(i=0;i<h;i++){ 202 for(i=0;i<h/2;i++){
203 memcpy(dest,src,w); 203 memcpy(dest,src,w/2);
204 src+=stride[2]; 204 src+=stride[2];
205 dest += bespitch; 205 dest += bespitch/2;
206 } 206 }
207 return 0; 207 return 0;
208 } 208 }
209 209
210 uint32_t vidix_draw_slice_422(uint8_t *image[], int stride[], int w,int h,int x,int y) 210 uint32_t vidix_draw_slice_422(uint8_t *image[], int stride[], int w,int h,int x,int y)
211 { 211 {
212 uint8_t *src; 212 uint8_t *src;
213 uint8_t *dest; 213 uint8_t *dest;
214 unsigned bespitch; 214 unsigned bespitch,apitch;
215 int i; 215 int i;
216 216 apitch = vidix_play.dest.pitch.y-1;
217 bespitch = (vidix_play.dest.w + (vidix_play.dest.pitch.y-1)) & ~(vidix_play.dest.pitch.y-1); 217 bespitch = (w*2 + apitch) & ~apitch;
218
219 dest = vidix_mem + frames[next_frame] + vidix_play.offset.y; 218 dest = vidix_mem + frames[next_frame] + vidix_play.offset.y;
220 dest += bespitch*y + x; 219 dest += bespitch*y + x;
221 src = image[0]; 220 src = image[0];
222 for(i=0;i<h;i++){ 221 for(i=0;i<h;i++){
223 memcpy(dest,src,w*2); 222 memcpy(dest,src,w*2);