Mercurial > mplayer.hg
annotate libvo/vo_dxr3.c @ 3630:f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
author | mswitch |
---|---|
date | Thu, 20 Dec 2001 08:02:38 +0000 |
parents | a9d1ee93d1c9 |
children | 64ee21b3bd09 |
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; |
2645 | 53 static int s_pos_x,s_pos_y; |
54 static int d_pos_x,d_pos_y; | |
55 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
|
56 |
2770 | 57 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
|
58 |
2921 | 59 static int fd_control = -1; |
60 static int fd_video = -1; | |
61 static int fd_spu = -1; | |
62 static int ioval = 0; | |
2645 | 63 |
64 static vo_info_t vo_info = | |
65 { | |
66 "DXR3/H+ video out", | |
67 "dxr3", | |
68 "David Holm <dholm@iname.com>", | |
69 "" | |
70 }; | |
71 | |
3432 | 72 #ifdef USE_MP1E |
3201 | 73 void write_dxr3( rte_context* context, void* data, size_t size, void* user_data ) |
74 { | |
3630
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
75 if(ioctl(fd_video,EM8300_IOCTL_VIDEO_SETPTS,&vo_pts) < 0) |
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
76 printf( "VO: [dxr3] Unable to set pts\n" ); |
3201 | 77 write( fd_video, data, size ); |
78 } | |
3432 | 79 #endif |
3201 | 80 |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
81 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 | 82 { |
2921 | 83 fd_control = open( "/dev/em8300", O_WRONLY ); |
84 if( fd_control < 1 ) | |
2645 | 85 { |
2921 | 86 printf( "VO: [dxr3] Error opening /dev/em8300 for writing!\n" ); |
87 return -1; | |
88 } | |
89 fd_video = open( "/dev/em8300_mv", O_WRONLY ); | |
90 if( fd_video < 0 ) | |
91 { | |
92 printf( "VO: [dxr3] Error opening /dev/em8300_mv for writing!\n" ); | |
93 return -1; | |
94 } | |
95 else printf( "VO: [dxr3] Opened /dev/em8300_mv\n" ); | |
96 fd_spu = open( "/dev/em8300_sp", O_WRONLY ); | |
97 if( fd_spu < 0 ) | |
98 { | |
99 printf( "VO: [dxr3] Error opening /dev/em8300_sp for writing!\n" ); | |
100 return -1; | |
2645 | 101 } |
102 | |
2770 | 103 /* Subpic code isn't working yet, don't set to ON |
104 unless you are really sure what you are doing */ | |
2921 | 105 ioval = EM8300_SPUMODE_OFF; |
106 if( ioctl( fd_control, EM8300_IOCTL_SET_SPUMODE, &ioval ) < 0 ) | |
107 { | |
108 printf( "VO: [dxr3] Unable to set subpicture mode!\n" ); | |
109 return -1; | |
110 } | |
111 | |
112 ioval = EM8300_PLAYMODE_PLAY; | |
2968 | 113 if( ioctl( fd_control, EM8300_IOCTL_SET_PLAYMODE, &ioval ) < 0 ) |
2921 | 114 printf( "VO: [dxr3] Unable to set playmode!\n" ); |
115 | |
116 close( fd_control ); | |
2645 | 117 |
118 img_format = format; | |
2770 | 119 v_width = width; |
120 v_height = height; | |
3201 | 121 s_width = scr_width; |
122 s_height = scr_height; | |
2921 | 123 |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
124 if( format == IMGFMT_YV12 || format == IMGFMT_YUY2 || format == IMGFMT_BGR24 ) |
2645 | 125 { |
3432 | 126 #ifdef USE_MP1E |
2645 | 127 int size; |
3201 | 128 enum rte_frame_rate frame_rate; |
3630
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
129 enum rte_pixformat pixel_format; |
2645 | 130 |
3201 | 131 if( !rte_init() ) |
2968 | 132 { |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
133 printf( "VO: [dxr3] Unable to initialize MP1E!\n" ); |
3201 | 134 return -1; |
135 } | |
136 | |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
137 s_width = (scr_width+15)/16; s_width*=16; |
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
138 s_height = (scr_height+15)/16; s_height*=16; |
3201 | 139 |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
140 mp1e_context = rte_context_new( s_width, s_height, NULL ); |
3201 | 141 rte_set_verbosity( mp1e_context, 0 ); |
142 | |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
143 printf( "VO: [dxr3] %dx%d => %dx%d\n", v_width, v_height, s_width, s_height ); |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
144 |
3201 | 145 if( !mp1e_context ) |
146 { | |
147 printf( "VO: [dxr3] Unable to create context!\n" ); | |
148 return -1; | |
149 } | |
150 | |
151 if( !rte_set_format( mp1e_context, "mpeg1" ) ) | |
152 { | |
153 printf( "VO: [dxr3] Unable to set format\n" ); | |
154 return -1; | |
155 } | |
156 | |
157 rte_set_mode( mp1e_context, RTE_VIDEO ); | |
158 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
|
159 |
3201 | 160 if( vo_fps < 24.0 ) frame_rate = RTE_RATE_1; |
161 else if( vo_fps < 25.0 ) frame_rate = RTE_RATE_2; | |
162 else if( vo_fps < 29.97 ) frame_rate = RTE_RATE_3; | |
163 else if( vo_fps < 30.0 ) frame_rate = RTE_RATE_4; | |
164 else if( vo_fps < 50.0 ) frame_rate = RTE_RATE_5; | |
165 else if( vo_fps < 59.97 ) frame_rate = RTE_RATE_6; | |
166 else if( vo_fps < 60.0 ) frame_rate = RTE_RATE_7; | |
167 else if( vo_fps > 60.0 ) frame_rate = RTE_RATE_8; | |
168 else frame_rate = RTE_RATE_NORATE; | |
169 | |
3630
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
170 if( format == IMGFMT_YUY2 ) |
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
171 pixel_format = RTE_YUYV; |
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
172 else |
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
173 pixel_format = RTE_YUV420; |
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
174 if( !rte_set_video_parameters( mp1e_context, pixel_format, mp1e_context->width, |
3201 | 175 mp1e_context->height, frame_rate, |
176 3e6, "I" ) ) | |
177 { | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
178 printf( "VO: [dxr3] Unable to set mp1e context!\n" ); |
3201 | 179 rte_context_destroy( mp1e_context ); |
180 return -1; | |
181 } | |
182 | |
183 rte_set_input( mp1e_context, RTE_VIDEO, RTE_PUSH, TRUE, NULL, NULL, NULL ); | |
3208 | 184 rte_set_output( mp1e_context, (void*)write_dxr3, NULL, NULL ); |
3201 | 185 |
186 if( !rte_init_context( mp1e_context ) ) | |
187 { | |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
188 printf( "VO: [dxr3] Unable to init mp1e context!\n" ); |
3201 | 189 rte_context_delete( mp1e_context ); |
190 return -1; | |
191 } | |
192 | |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
193 osd_w=s_width; |
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
194 d_pos_x=(s_width-v_width)/2; |
3208 | 195 if(d_pos_x<0) |
196 { | |
197 s_pos_x=-d_pos_x;d_pos_x=0; | |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
198 osd_w=s_width; |
2645 | 199 } else s_pos_x=0; |
200 | |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
201 osd_h=s_height; |
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
202 d_pos_y=(s_height-v_height)/2; |
3208 | 203 if(d_pos_y<0) |
204 { | |
205 s_pos_y=-d_pos_y;d_pos_y=0; | |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
206 osd_h=s_height; |
2645 | 207 } else s_pos_y=0; |
208 | |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
209 printf("VO: [dxr3] Position mapping: %d;%d => %d;%d\n",s_pos_x,s_pos_y,d_pos_x,d_pos_y); |
3201 | 210 |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
211 size = s_width*s_height; |
3201 | 212 |
213 picture_data[0] = malloc((size * 3)/2); | |
214 picture_data[1] = picture_data[0] + size; | |
215 picture_data[2] = picture_data[1] + size / 4; | |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
216 picture_linesize[0] = s_width; |
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
217 picture_linesize[1] = s_width / 2; |
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
218 picture_linesize[2] = s_width / 2; |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
219 |
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
220 // 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
|
221 RGBTOYUV(0,0,0) |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
222 memset( picture_data[0], YUV_s.Y, picture_linesize[0]*s_height ); |
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
223 memset( picture_data[1], YUV_s.U, picture_linesize[1]*(s_height/2) ); |
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
224 memset( picture_data[2], YUV_s.V, picture_linesize[2]*(s_height/2) ); |
3201 | 225 |
226 if( !rte_start_encoding( mp1e_context ) ) | |
2968 | 227 { |
3201 | 228 printf( "VO: [dxr3] Unable to start mp1e encoding!\n" ); |
229 uninit(); | |
230 return -1; | |
231 } | |
2770 | 232 |
233 return 0; | |
3432 | 234 #endif |
235 return -1; | |
2770 | 236 } |
2645 | 237 else if(format==IMGFMT_MPEGPES) |
238 { | |
2921 | 239 printf( "VO: [dxr3] Format: MPEG-PES (no conversion needed)\n" ); |
2645 | 240 return 0; |
241 } | |
242 | |
3614 | 243 printf( "VO: [dxr3] Format: Unsupported\n" ); |
2645 | 244 return -1; |
245 } | |
246 | |
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
|
247 static const vo_info_t* get_info(void) |
2645 | 248 { |
249 return &vo_info; | |
250 } | |
251 | |
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
|
252 static void draw_alpha(int x0, int y0, int w, int h, unsigned char* src, unsigned char *srca, int srcstride) |
2645 | 253 { |
254 } | |
255 | |
256 static void draw_osd(void) | |
257 { | |
258 } | |
259 | |
260 static uint32_t draw_frame(uint8_t * src[]) | |
261 { | |
262 if( img_format == IMGFMT_MPEGPES ) | |
263 { | |
2770 | 264 int data_left; |
2645 | 265 vo_mpegpes_t *p=(vo_mpegpes_t *)src[0]; |
3201 | 266 |
3621 | 267 if(ioctl(fd_video,EM8300_IOCTL_VIDEO_SETPTS,&p->timestamp) < 0) |
268 printf( "VO: [dxr3] Unable to set pts\n" ); | |
2645 | 269 data_left = p->size; |
270 while( data_left ) | |
2921 | 271 data_left -= write( fd_video, &((unsigned char*)p->data)[p->size-data_left], data_left ); |
272 | |
2645 | 273 return 0; |
274 } | |
3432 | 275 #ifdef USE_MP1E |
3208 | 276 else if( img_format == IMGFMT_YUY2 ) |
277 { | |
3630
f24527fc1b79
Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents:
3629
diff
changeset
|
278 mp1e_buffer.data = src[0]; |
3208 | 279 mp1e_buffer.time = vo_pts/90000.0; |
280 mp1e_buffer.user_data = NULL; | |
281 rte_push_video_buffer( mp1e_context, &mp1e_buffer ); | |
282 return 0; | |
283 } | |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
284 else if( img_format == IMGFMT_BGR24 ) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
285 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
286 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
|
287 unsigned char *s,*dY,*dU,*dV; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
288 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
289 if(d_pos_x+w>picture_linesize[0]) w=picture_linesize[0]-d_pos_x; |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
290 if(d_pos_y+h>s_height) h=s_height-d_pos_y; |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
291 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
292 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
|
293 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
294 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
|
295 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
|
296 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
|
297 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
298 for(y=0;y<h;y++) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
299 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
300 dY+=d_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
301 dU+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
302 dV+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
303 s+=s_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
304 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
|
305 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
306 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
|
307 s+=3; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
308 *dY = YUV_s.Y;dY++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
309 // 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
|
310 // *dU = YUV_s.U;dU++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
311 // *dV = YUV_s.V;dV++; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
312 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
313 *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
|
314 s+=3; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
315 *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
|
316 s+=3; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
317 *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
|
318 s+=3; |
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 dY+=d_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
321 dU+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
322 dV+=d_pos_x/4; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
323 s+=s_pos_x; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
324 } |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
325 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
326 mp1e_buffer.data = picture_data[0]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
327 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
|
328 mp1e_buffer.user_data = NULL; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
329 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
|
330 |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
331 return 0; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
332 } |
3432 | 333 #endif |
2645 | 334 return -1; |
335 } | |
336 | |
337 static void flip_page (void) | |
338 { | |
3432 | 339 #ifdef USE_MP1E |
3201 | 340 if( img_format == IMGFMT_YV12 ) |
341 { | |
342 mp1e_buffer.data = picture_data[0]; | |
343 mp1e_buffer.time = vo_pts/90000.0; | |
344 mp1e_buffer.user_data = NULL; | |
345 rte_push_video_buffer( mp1e_context, &mp1e_buffer ); | |
346 } | |
3432 | 347 #endif |
2645 | 348 } |
349 | |
350 static uint32_t draw_slice( uint8_t *srcimg[], int stride[], int w, int h, int x0, int y0 ) | |
351 { | |
352 if( img_format == IMGFMT_YV12 ) | |
3201 | 353 { |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
354 int y; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
355 unsigned char *s,*s1; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
356 unsigned char *d,*d1; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
357 |
2645 | 358 x0+=d_pos_x; |
3232
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
359 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
|
360 |
3201 | 361 if(x0+w>picture_linesize[0]) w=picture_linesize[0]-x0; |
3629
a9d1ee93d1c9
Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents:
3621
diff
changeset
|
362 if(y0+h>s_height) h=s_height-y0; |
2645 | 363 |
364 s=srcimg[0]+s_pos_x+s_pos_y*stride[0]; | |
3201 | 365 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
|
366 for(y=0;y<h;y++) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
367 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
368 memcpy(d,s,w); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
369 s+=stride[0]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
370 d+=picture_linesize[0]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
371 } |
2645 | 372 |
3218
8ba06b63f873
Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents:
3208
diff
changeset
|
373 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
|
374 |
3208 | 375 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
|
376 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
|
377 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
|
378 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
|
379 for(y=0;y<h;y++) |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
380 { |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
381 memcpy(d,s,w); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
382 memcpy(d1,s1,w); |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
383 s+=stride[1];s1+=stride[2]; |
d037e1201721
Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents:
3218
diff
changeset
|
384 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
|
385 } |
2645 | 386 |
387 return 0; | |
388 } | |
389 | |
390 return -1; | |
391 } | |
392 | |
393 | |
394 static uint32_t | |
395 query_format(uint32_t format) | |
396 { | |
3614 | 397 if(format==IMGFMT_MPEGPES) return 1|256; |
3432 | 398 #ifdef USE_MP1E |
3329
529a001496c2
Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents:
3232
diff
changeset
|
399 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
|
400 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
|
401 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 | 402 else printf( "VO: [dxr3] Format unsupported, mail dholm@iname.com\n" ); |
3432 | 403 #else |
404 else printf( "VO: [dxr3] You have disabled libmp1e support, you won't be able to play this format!\n" ); | |
405 #endif | |
2645 | 406 return 0; |
407 } | |
408 | |
3208 | 409 static void uninit(void) |
2645 | 410 { |
2968 | 411 printf( "VO: [dxr3] Uninitializing\n" ); |
3201 | 412 if( picture_data[0] ) free(picture_data[0]); |
413 if( fd_video ) close(fd_video); | |
414 if( fd_spu ) close(fd_spu); | |
2645 | 415 } |
416 | |
417 | |
418 static void check_events(void) | |
419 { | |
420 } | |
421 |