Mercurial > mplayer.hg
annotate libvo/vo_dxr3.c @ 3455:921a78c7b4aa
limit get_space return <= MAX_OUTBURST, whilst always an exact number of fragments
author | steve |
---|---|
date | Tue, 11 Dec 2001 09:23:57 +0000 |
parents | 5cb7caab5536 |
children | 6fef049b8fe4 |
rev | line source |
---|---|
2645 | 1 /* |
2 * vo_dxr3.c - DXR3/H+ video out | |
3 * | |
4 * Copyright (C) 2001 David Holm <dholm@iname.com> | |
5 * | |
6 */ | |
7 | |
8 #include "fastmemcpy.h" | |
9 #include <stdio.h> | |
10 #include <stdlib.h> | |
11 #include <string.h> | |
2921 | 12 #include <unistd.h> |
13 #include <linux/em8300.h> | |
14 #include <sys/ioctl.h> | |
15 #include <sys/stat.h> | |
16 #include <sys/types.h> | |
17 #include <fcntl.h> | |
2645 | 18 #include <stdio.h> |
19 #include <time.h> | |
20 | |
21 #include "config.h" | |
22 #include "video_out.h" | |
23 #include "video_out_internal.h" | |
3432 | 24 #ifdef USE_MP1E |
3333
5c6cdf5490f0
Minor typo fix (which I thought I commited yesterday)
mswitch
parents:
3329
diff
changeset
|
25 #include "../libmp1e/libmp1e.h" |
3432 | 26 #endif |
2645 | 27 |
2866
4f6190ab52e7
Added a temporary fix to the DXR3 win32 codec playback, win32 codecs might prove to play back an unscaled image!
mswitch
parents:
2770
diff
changeset
|
28 #include "../postproc/rgb2rgb.h" |
2645 | 29 #ifdef HAVE_MMX |
30 #include "mmx.h" | |
31 #endif | |
32 | |
33 LIBVO_EXTERN (dxr3) | |
34 | |
3432 | 35 #ifdef USE_MP1E |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
36 rte_context *mp1e_context = NULL; |
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
37 rte_codec *mp1e_codec = NULL; |
3201 | 38 rte_buffer mp1e_buffer; |
3432 | 39 #endif |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
40 struct { uint16_t Y,U,V; } YUV_s; |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
41 #define RGBTOY(R,G,B) (uint16_t)( (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 ) |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
42 #define RGBTOU(R,G,B) (uint16_t)( -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128 ) |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
43 #define RGBTOV(R,G,B) (uint16_t)( (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 ) |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
44 #define RGBTOYUV(R,G,B) YUV_s.Y = RGBTOY(R,G,B); \ |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
45 YUV_s.U = RGBTOU(R,G,B); \ |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
46 YUV_s.V = RGBTOV(R,G,B); |
2645 | 47 |
3201 | 48 static unsigned char *picture_data[3]; |
49 static unsigned int picture_linesize[3]; | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
50 |
2770 | 51 static int v_width,v_height; |
2866
4f6190ab52e7
Added a temporary fix to the DXR3 win32 codec playback, win32 codecs might prove to play back an unscaled image!
mswitch
parents:
2770
diff
changeset
|
52 static int s_width,s_height; |
3201 | 53 static int c_width,c_height; |
2645 | 54 static int s_pos_x,s_pos_y; |
55 static int d_pos_x,d_pos_y; | |
56 static int osd_w,osd_h; | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
57 |
2770 | 58 static int img_format = 0; |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
59 |
2921 | 60 static int fd_control = -1; |
61 static int fd_video = -1; | |
62 static int fd_spu = -1; | |
63 static int ioval = 0; | |
2645 | 64 |
65 static vo_info_t vo_info = | |
66 { | |
67 "DXR3/H+ video out", | |
68 "dxr3", | |
69 "David Holm <dholm@iname.com>", | |
70 "" | |
71 }; | |
72 | |
3432 | 73 #ifdef USE_MP1E |
3201 | 74 void write_dxr3( rte_context* context, void* data, size_t size, void* user_data ) |
75 { | |
76 write( fd_video, data, size ); | |
77 } | |
3432 | 78 #endif |
3201 | 79 |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
80 static uint32_t init(uint32_t scr_width, uint32_t scr_height, uint32_t width, uint32_t height, uint32_t fullscreen, char *title, uint32_t format) |
2645 | 81 { |
2921 | 82 fd_control = open( "/dev/em8300", O_WRONLY ); |
83 if( fd_control < 1 ) | |
2645 | 84 { |
2921 | 85 printf( "VO: [dxr3] Error opening /dev/em8300 for writing!\n" ); |
86 return -1; | |
87 } | |
88 fd_video = open( "/dev/em8300_mv", O_WRONLY ); | |
89 if( fd_video < 0 ) | |
90 { | |
91 printf( "VO: [dxr3] Error opening /dev/em8300_mv for writing!\n" ); | |
92 return -1; | |
93 } | |
94 else printf( "VO: [dxr3] Opened /dev/em8300_mv\n" ); | |
95 fd_spu = open( "/dev/em8300_sp", O_WRONLY ); | |
96 if( fd_spu < 0 ) | |
97 { | |
98 printf( "VO: [dxr3] Error opening /dev/em8300_sp for writing!\n" ); | |
99 return -1; | |
2645 | 100 } |
101 | |
2770 | 102 /* Subpic code isn't working yet, don't set to ON |
103 unless you are really sure what you are doing */ | |
2921 | 104 ioval = EM8300_SPUMODE_OFF; |
105 if( ioctl( fd_control, EM8300_IOCTL_SET_SPUMODE, &ioval ) < 0 ) | |
106 { | |
107 printf( "VO: [dxr3] Unable to set subpicture mode!\n" ); | |
108 return -1; | |
109 } | |
110 | |
111 ioval = EM8300_PLAYMODE_PLAY; | |
2968 | 112 if( ioctl( fd_control, EM8300_IOCTL_SET_PLAYMODE, &ioval ) < 0 ) |
2921 | 113 printf( "VO: [dxr3] Unable to set playmode!\n" ); |
114 | |
115 close( fd_control ); | |
2645 | 116 |
117 img_format = format; | |
2770 | 118 v_width = width; |
119 v_height = height; | |
3201 | 120 s_width = scr_width; |
121 s_height = scr_height; | |
2921 | 122 |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
123 if( format == IMGFMT_YV12 || format == IMGFMT_YUY2 || format == IMGFMT_BGR24 ) |
2645 | 124 { |
3432 | 125 #ifdef USE_MP1E |
2645 | 126 int size; |
3201 | 127 enum rte_frame_rate frame_rate; |
2645 | 128 |
3201 | 129 if( !rte_init() ) |
2968 | 130 { |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
131 printf( "VO: [dxr3] Unable to initialize MP1E!\n" ); |
3201 | 132 return -1; |
133 } | |
134 | |
2645 | 135 if(width<=352 && height<=288){ |
3201 | 136 c_width=352; |
137 c_height=288; | |
2645 | 138 } else |
139 if(width<=352 && height<=576){ | |
3201 | 140 c_width=352; |
141 c_height=576; | |
2645 | 142 } else |
143 if(width<=480 && height<=576){ | |
3201 | 144 c_width=480; |
145 c_height=576; | |
2645 | 146 } else |
147 if(width<=544 && height<=576){ | |
3201 | 148 c_width=544; |
149 c_height=576; | |
2645 | 150 } else { |
3201 | 151 c_width=704; |
152 c_height=576; | |
2645 | 153 } |
3201 | 154 |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
155 mp1e_context = rte_context_new( c_width, c_height, NULL ); |
3201 | 156 rte_set_verbosity( mp1e_context, 0 ); |
157 | |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
158 printf( "VO: [dxr3] %dx%d => %dx%d\n", v_width, v_height, c_width, c_height ); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
159 |
3201 | 160 if( !mp1e_context ) |
161 { | |
162 printf( "VO: [dxr3] Unable to create context!\n" ); | |
163 return -1; | |
164 } | |
165 | |
166 if( !rte_set_format( mp1e_context, "mpeg1" ) ) | |
167 { | |
168 printf( "VO: [dxr3] Unable to set format\n" ); | |
169 return -1; | |
170 } | |
171 | |
172 rte_set_mode( mp1e_context, RTE_VIDEO ); | |
173 mp1e_codec = rte_codec_set( mp1e_context, RTE_STREAM_VIDEO, 0, "mpeg1-video" ); | |
2866
4f6190ab52e7
Added a temporary fix to the DXR3 win32 codec playback, win32 codecs might prove to play back an unscaled image!
mswitch
parents:
2770
diff
changeset
|
174 |
3201 | 175 if( vo_fps < 24.0 ) frame_rate = RTE_RATE_1; |
176 else if( vo_fps < 25.0 ) frame_rate = RTE_RATE_2; | |
177 else if( vo_fps < 29.97 ) frame_rate = RTE_RATE_3; | |
178 else if( vo_fps < 30.0 ) frame_rate = RTE_RATE_4; | |
179 else if( vo_fps < 50.0 ) frame_rate = RTE_RATE_5; | |
180 else if( vo_fps < 59.97 ) frame_rate = RTE_RATE_6; | |
181 else if( vo_fps < 60.0 ) frame_rate = RTE_RATE_7; | |
182 else if( vo_fps > 60.0 ) frame_rate = RTE_RATE_8; | |
183 else frame_rate = RTE_RATE_NORATE; | |
184 | |
185 if( !rte_set_video_parameters( mp1e_context, RTE_YUV420, mp1e_context->width, | |
186 mp1e_context->height, frame_rate, | |
187 3e6, "I" ) ) | |
188 { | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
189 printf( "VO: [dxr3] Unable to set mp1e context!\n" ); |
3201 | 190 rte_context_destroy( mp1e_context ); |
191 return -1; | |
192 } | |
193 | |
194 rte_set_input( mp1e_context, RTE_VIDEO, RTE_PUSH, TRUE, NULL, NULL, NULL ); | |
3208 | 195 rte_set_output( mp1e_context, (void*)write_dxr3, NULL, NULL ); |
3201 | 196 |
197 if( !rte_init_context( mp1e_context ) ) | |
198 { | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
199 printf( "VO: [dxr3] Unable to init mp1e context!\n" ); |
3201 | 200 rte_context_delete( mp1e_context ); |
201 return -1; | |
202 } | |
203 | |
2866
4f6190ab52e7
Added a temporary fix to the DXR3 win32 codec playback, win32 codecs might prove to play back an unscaled image!
mswitch
parents:
2770
diff
changeset
|
204 osd_w=scr_width; |
3201 | 205 d_pos_x=(c_width-(int)scr_width)/2; |
3208 | 206 if(d_pos_x<0) |
207 { | |
208 s_pos_x=-d_pos_x;d_pos_x=0; | |
209 osd_w=c_width; | |
2645 | 210 } else s_pos_x=0; |
211 | |
2866
4f6190ab52e7
Added a temporary fix to the DXR3 win32 codec playback, win32 codecs might prove to play back an unscaled image!
mswitch
parents:
2770
diff
changeset
|
212 osd_h=scr_height; |
3201 | 213 d_pos_y=(c_height-(int)scr_height)/2; |
3208 | 214 if(d_pos_y<0) |
215 { | |
216 s_pos_y=-d_pos_y;d_pos_y=0; | |
217 osd_h=c_height; | |
2645 | 218 } else s_pos_y=0; |
219 | |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
220 printf("VO: [dxr3] Position mapping: %d;%d => %d;%d\n",s_pos_x,s_pos_y,d_pos_x,d_pos_y); |
3201 | 221 |
222 size = c_width*c_height; | |
223 | |
224 picture_data[0] = malloc((size * 3)/2); | |
225 picture_data[1] = picture_data[0] + size; | |
226 picture_data[2] = picture_data[1] + size / 4; | |
227 picture_linesize[0] = c_width; | |
228 picture_linesize[1] = c_width / 2; | |
229 picture_linesize[2] = c_width / 2; | |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
230 |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
231 // Set the border colorwou |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
232 RGBTOYUV(0,0,0) |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
233 memset( picture_data[0], YUV_s.Y, picture_linesize[0]*c_height ); |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
234 memset( picture_data[1], YUV_s.U, picture_linesize[1]*(c_height/2) ); |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
235 memset( picture_data[2], YUV_s.V, picture_linesize[2]*(c_height/2) ); |
3201 | 236 |
237 if( !rte_start_encoding( mp1e_context ) ) | |
2968 | 238 { |
3201 | 239 printf( "VO: [dxr3] Unable to start mp1e encoding!\n" ); |
240 uninit(); | |
241 return -1; | |
242 } | |
2770 | 243 |
244 return 0; | |
3432 | 245 #endif |
246 return -1; | |
2770 | 247 } |
2645 | 248 else if(format==IMGFMT_MPEGPES) |
249 { | |
2921 | 250 printf( "VO: [dxr3] Format: MPEG-PES (no conversion needed)\n" ); |
2645 | 251 return 0; |
252 } | |
253 | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
254 printf( "VO: [dxr3] Format: Unsuppomp1ed\n" ); |
2645 | 255 return -1; |
256 } | |
257 | |
2866
4f6190ab52e7
Added a temporary fix to the DXR3 win32 codec playback, win32 codecs might prove to play back an unscaled image!
mswitch
parents:
2770
diff
changeset
|
258 static const vo_info_t* get_info(void) |
2645 | 259 { |
260 return &vo_info; | |
261 } | |
262 | |
2866
4f6190ab52e7
Added a temporary fix to the DXR3 win32 codec playback, win32 codecs might prove to play back an unscaled image!
mswitch
parents:
2770
diff
changeset
|
263 static void draw_alpha(int x0, int y0, int w, int h, unsigned char* src, unsigned char *srca, int srcstride) |
2645 | 264 { |
265 } | |
266 | |
267 static void draw_osd(void) | |
268 { | |
269 } | |
270 | |
271 static uint32_t draw_frame(uint8_t * src[]) | |
272 { | |
273 if( img_format == IMGFMT_MPEGPES ) | |
274 { | |
2770 | 275 int data_left; |
2645 | 276 vo_mpegpes_t *p=(vo_mpegpes_t *)src[0]; |
3201 | 277 |
2645 | 278 data_left = p->size; |
279 while( data_left ) | |
2921 | 280 data_left -= write( fd_video, &((unsigned char*)p->data)[p->size-data_left], data_left ); |
281 | |
2645 | 282 return 0; |
283 } | |
3432 | 284 #ifdef USE_MP1E |
3208 | 285 else if( img_format == IMGFMT_YUY2 ) |
286 { | |
287 int w=v_width,h=v_height; | |
288 unsigned char *s,*dY,*dU,*dV; | |
289 | |
290 if(d_pos_x+w>picture_linesize[0]) w=picture_linesize[0]-d_pos_x; | |
291 if(d_pos_y+h>c_height) h=c_height-d_pos_y; | |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
292 |
3208 | 293 s = src[0]+s_pos_x+s_pos_y*(w*2); |
294 dY = picture_data[0]+d_pos_x+d_pos_y*picture_linesize[0]; | |
295 dU = picture_data[1]+(d_pos_x/2)+(d_pos_y/2)*picture_linesize[1]; | |
296 dV = picture_data[2]+(d_pos_x/2)+(d_pos_y/2)*picture_linesize[2]; | |
297 | |
298 yuy2toyv12( s, dY, dU, dV, w, h, picture_linesize[0], picture_linesize[1], w*2 ); | |
299 | |
300 mp1e_buffer.data = picture_data[0]; | |
301 mp1e_buffer.time = vo_pts/90000.0; | |
302 mp1e_buffer.user_data = NULL; | |
303 rte_push_video_buffer( mp1e_context, &mp1e_buffer ); | |
304 return 0; | |
305 } | |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
306 else if( img_format == IMGFMT_BGR24 ) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
307 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
308 int x,y,w=v_width,h=v_height; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
309 unsigned char *s,*dY,*dU,*dV; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
310 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
311 if(d_pos_x+w>picture_linesize[0]) w=picture_linesize[0]-d_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
312 if(d_pos_y+h>c_height) h=c_height-d_pos_y; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
313 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
314 s = src[0]+s_pos_y*(w*3); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
315 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
316 dY = picture_data[0]+d_pos_y*picture_linesize[0]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
317 dU = picture_data[1]+(d_pos_y/2)*picture_linesize[1]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
318 dV = picture_data[2]+(d_pos_y/2)*picture_linesize[2]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
319 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
320 for(y=0;y<h;y++) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
321 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
322 dY+=d_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
323 dU+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
324 dV+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
325 s+=s_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
326 for(x=0;x<w;x+=4) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
327 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
328 RGBTOYUV(s[2],s[1],s[0]); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
329 s+=3; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
330 *dY = YUV_s.Y;dY++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
331 // The chrominance is shifted, ppl will have to settle with b&w for now ;) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
332 // *dU = YUV_s.U;dU++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
333 // *dV = YUV_s.V;dV++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
334 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
335 *dY = RGBTOY(s[2],s[1],s[0]);dY++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
336 s+=3; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
337 *dY = RGBTOY(s[2],s[1],s[0]);dY++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
338 s+=3; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
339 *dY = RGBTOY(s[2],s[1],s[0]);dY++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
340 s+=3; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
341 } |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
342 dY+=d_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
343 dU+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
344 dV+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
345 s+=s_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
346 } |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
347 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
348 mp1e_buffer.data = picture_data[0]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
349 mp1e_buffer.time = vo_pts/90000.0; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
350 mp1e_buffer.user_data = NULL; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
351 rte_push_video_buffer( mp1e_context, &mp1e_buffer ); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
352 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
353 return 0; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
354 } |
3432 | 355 #endif |
2645 | 356 return -1; |
357 } | |
358 | |
359 static void flip_page (void) | |
360 { | |
3432 | 361 #ifdef USE_MP1E |
3201 | 362 if( img_format == IMGFMT_YV12 ) |
363 { | |
364 mp1e_buffer.data = picture_data[0]; | |
365 mp1e_buffer.time = vo_pts/90000.0; | |
366 mp1e_buffer.user_data = NULL; | |
367 rte_push_video_buffer( mp1e_context, &mp1e_buffer ); | |
368 } | |
3432 | 369 #endif |
2645 | 370 } |
371 | |
372 static uint32_t draw_slice( uint8_t *srcimg[], int stride[], int w, int h, int x0, int y0 ) | |
373 { | |
374 if( img_format == IMGFMT_YV12 ) | |
3201 | 375 { |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
376 int y; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
377 unsigned char *s,*s1; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
378 unsigned char *d,*d1; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
379 |
2645 | 380 x0+=d_pos_x; |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
381 y0+=d_pos_y; |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
382 |
3201 | 383 if(x0+w>picture_linesize[0]) w=picture_linesize[0]-x0; |
384 if(y0+h>c_height) h=c_height-y0; | |
2645 | 385 |
386 s=srcimg[0]+s_pos_x+s_pos_y*stride[0]; | |
3201 | 387 d=picture_data[0]+x0+y0*picture_linesize[0]; |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
388 for(y=0;y<h;y++) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
389 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
390 memcpy(d,s,w); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
391 s+=stride[0]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
392 d+=picture_linesize[0]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
393 } |
2645 | 394 |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
395 w/=2;h/=2;x0/=2;y0/=2; |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
396 |
3208 | 397 s=srcimg[1]+s_pos_x+s_pos_y*stride[1]; |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
398 d=picture_data[1]+x0+y0*picture_linesize[1]; |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
399 s1=srcimg[2]+s_pos_x+s_pos_y*stride[2]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
400 d1=picture_data[2]+x0+y0*picture_linesize[2]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
401 for(y=0;y<h;y++) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
402 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
403 memcpy(d,s,w); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
404 memcpy(d1,s1,w); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
405 s+=stride[1];s1+=stride[2]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
406 d+=picture_linesize[1];d1+=picture_linesize[2]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
407 } |
2645 | 408 |
409 return 0; | |
410 } | |
411 | |
412 return -1; | |
413 } | |
414 | |
415 | |
416 static uint32_t | |
417 query_format(uint32_t format) | |
418 { | |
3432 | 419 if(format==IMGFMT_MPEGPES) return 0x2|0x4; |
420 #ifdef USE_MP1E | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
421 if(format==IMGFMT_YV12) return 0x1|0x4; |
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
422 if(format==IMGFMT_YUY2) return 0x1|0x4; |
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
423 if(format==IMGFMT_BGR24) { printf( "VO: [dxr3] WARNING\tExperimental output, black&white only and very slow\n\t(will be inproved later, this format is rarely used)\n" ); return 0x1|0x4; } |
3374 | 424 else printf( "VO: [dxr3] Format unsupported, mail dholm@iname.com\n" ); |
3432 | 425 #else |
426 else printf( "VO: [dxr3] You have disabled libmp1e support, you won't be able to play this format!\n" ); | |
427 #endif | |
2645 | 428 return 0; |
429 } | |
430 | |
3208 | 431 static void uninit(void) |
2645 | 432 { |
2968 | 433 printf( "VO: [dxr3] Uninitializing\n" ); |
3201 | 434 if( picture_data[0] ) free(picture_data[0]); |
435 if( fd_video ) close(fd_video); | |
436 if( fd_spu ) close(fd_spu); | |
2645 | 437 } |
438 | |
439 | |
440 static void check_events(void) | |
441 { | |
442 } | |
443 |