annotate libvo/vo_dxr3.c @ 4006:f473505a2744

preliminary config interface dual syncengine
author mswitch
date Sun, 06 Jan 2002 15:15:17 +0000
parents 7c07bc1e0a81
children 5a1558a521fb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
1 /*
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
2 * vo_dxr3.c - DXR3/H+ video out
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
3 *
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
4 * Copyright (C) 2001 David Holm <dholm@iname.com>
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
5 *
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
6 */
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
7
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
8 #include "fastmemcpy.h"
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
9 #include <stdio.h>
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
10 #include <stdlib.h>
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
11 #include <string.h>
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
12 #include <unistd.h>
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
13 #include <linux/em8300.h>
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
14 #include <sys/ioctl.h>
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
15 #include <sys/stat.h>
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
16 #include <sys/types.h>
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
17 #include <fcntl.h>
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
18 #include <stdio.h>
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
19 #include <time.h>
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
20
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
21 #include "config.h"
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
22 #include "video_out.h"
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
23 #include "video_out_internal.h"
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
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
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
26 #endif
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
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
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
29 #ifdef HAVE_MMX
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
30 #include "mmx.h"
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
31 #endif
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
32
3639
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
33 #include "aspect.h"
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
34
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
35 LIBVO_EXTERN (dxr3)
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
36
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
37 #ifdef USE_MP1E
3329
529a001496c2 Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents: 3232
diff changeset
38 rte_context *mp1e_context = NULL;
529a001496c2 Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents: 3232
diff changeset
39 rte_codec *mp1e_codec = NULL;
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
40 rte_buffer mp1e_buffer;
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
41 #endif
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
42
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
43 static unsigned char *picture_data[3];
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
44 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
45
2770
b9732eaa82d9 DXR3 beta2 patch by David Holm.
atmos4
parents: 2732
diff changeset
46 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
47 static int s_width,s_height;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
48 static int s_pos_x,s_pos_y;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
49 static int d_pos_x,d_pos_y;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
50 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
51
2770
b9732eaa82d9 DXR3 beta2 patch by David Holm.
atmos4
parents: 2732
diff changeset
52 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
53
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
54 static int fd_control = -1;
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
55 static int fd_video = -1;
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
56 static int fd_spu = -1;
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
57 static int ioval = 0;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
58
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
59 struct {
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
60 int se_version;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
61 } conf_s;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
62
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
63 static vo_info_t vo_info =
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
64 {
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
65 "DXR3/H+ video out",
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
66 "dxr3",
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
67 "David Holm <dholm@iname.com>",
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
68 ""
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
69 };
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
70
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
71 #ifdef USE_MP1E
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
72 void write_dxr3( rte_context* context, void* data, size_t size, void* user_data )
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
73 {
4005
7c07bc1e0a81 Fixes to sync code
mswitch
parents: 3861
diff changeset
74 size_t data_left = size;
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
75 if(!conf_s.se_version) if(ioctl(fd_video,EM8300_IOCTL_VIDEO_SETPTS,&vo_pts) < 0)
3828
063e5b0065a4 Brand new sync core, uses hw sync for everything.
mswitch
parents: 3759
diff changeset
76 printf( "VO: [dxr3] Unable to set pts\n" );
4005
7c07bc1e0a81 Fixes to sync code
mswitch
parents: 3861
diff changeset
77 while( data_left )
7c07bc1e0a81 Fixes to sync code
mswitch
parents: 3861
diff changeset
78 data_left -= write( fd_video, (void*) data+(size-data_left), data_left );
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
79 }
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
80 #endif
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
81
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
82 void parseconfig( )
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
83 {
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
84 conf_s.se_version = 0;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
85 if(vo_subdevice == NULL) return;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
86 conf_s.se_version = 1;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
87 }
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
88
3218
8ba06b63f873 Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents: 3208
diff changeset
89 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
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
90 {
3639
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
91 int tmp1,tmp2;
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
92
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
93 parseconfig();
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
94 fd_control = open( "/dev/em8300", O_WRONLY );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
95 if( fd_control < 1 )
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
96 {
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
97 printf( "VO: [dxr3] Error opening /dev/em8300 for writing!\n" );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
98 return -1;
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
99 }
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
100 fd_video = open( "/dev/em8300_mv", O_WRONLY );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
101 if( fd_video < 0 )
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
102 {
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
103 printf( "VO: [dxr3] Error opening /dev/em8300_mv for writing!\n" );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
104 return -1;
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
105 }
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
106 else printf( "VO: [dxr3] Opened /dev/em8300_mv\n" );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
107 fd_spu = open( "/dev/em8300_sp", O_WRONLY );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
108 if( fd_spu < 0 )
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
109 {
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
110 printf( "VO: [dxr3] Error opening /dev/em8300_sp for writing!\n" );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
111 return -1;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
112 }
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
113
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
114 if(!conf_s.se_version)
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
115 printf( "VO: [dxr3] Using hardware sync\n" );
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
116 else
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
117 printf( "VO: [dxr3] Using software sync\n" );
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
118
2770
b9732eaa82d9 DXR3 beta2 patch by David Holm.
atmos4
parents: 2732
diff changeset
119 /* Subpic code isn't working yet, don't set to ON
b9732eaa82d9 DXR3 beta2 patch by David Holm.
atmos4
parents: 2732
diff changeset
120 unless you are really sure what you are doing */
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
121 ioval = EM8300_SPUMODE_OFF;
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
122 if( ioctl( fd_control, EM8300_IOCTL_SET_SPUMODE, &ioval ) < 0 )
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
123 {
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
124 printf( "VO: [dxr3] Unable to set subpicture mode!\n" );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
125 return -1;
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
126 }
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
127
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
128 ioval = EM8300_PLAYMODE_PLAY;
2968
9989497ab31e Minor fixes by David.
atmos4
parents: 2921
diff changeset
129 if( ioctl( fd_control, EM8300_IOCTL_SET_PLAYMODE, &ioval ) < 0 )
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
130 printf( "VO: [dxr3] Unable to set playmode!\n" );
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
131
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
132 img_format = format;
3861
f832811cf89a Some last minute changes to accomodate for anamorphic 1.85:1 and 2.35:1 movies... Needs more work, but this is good enough for now.
mswitch
parents: 3828
diff changeset
133 v_width = scr_width;
f832811cf89a Some last minute changes to accomodate for anamorphic 1.85:1 and 2.35:1 movies... Needs more work, but this is good enough for now.
mswitch
parents: 3828
diff changeset
134 v_height = scr_height;
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
135
3861
f832811cf89a Some last minute changes to accomodate for anamorphic 1.85:1 and 2.35:1 movies... Needs more work, but this is good enough for now.
mswitch
parents: 3828
diff changeset
136 s_width = (v_width+15)/16; s_width*=16;
f832811cf89a Some last minute changes to accomodate for anamorphic 1.85:1 and 2.35:1 movies... Needs more work, but this is good enough for now.
mswitch
parents: 3828
diff changeset
137 s_height = (v_height+15)/16; s_height*=16;
3639
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
138
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
139 /* Try to figure out whether to use ws output or not */
3861
f832811cf89a Some last minute changes to accomodate for anamorphic 1.85:1 and 2.35:1 movies... Needs more work, but this is good enough for now.
mswitch
parents: 3828
diff changeset
140 tmp1 = abs(height - ((width/4)*3));
f832811cf89a Some last minute changes to accomodate for anamorphic 1.85:1 and 2.35:1 movies... Needs more work, but this is good enough for now.
mswitch
parents: 3828
diff changeset
141 tmp2 = abs(height - (int)(width/2.35));
3639
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
142 if(tmp1 < tmp2)
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
143 {
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
144 tmp1 = EM8300_ASPECTRATIO_4_3;
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
145 printf( "VO: [dxr3] Setting aspect ratio to 4:3\n" );
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
146 }
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
147 else
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
148 {
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
149 tmp1 = EM8300_ASPECTRATIO_16_9;
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
150 printf( "VO: [dxr3] Setting aspect ratio to 16:9\n" );
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
151 }
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
152 ioctl(fd_control,EM8300_IOCTL_SET_ASPECTRATIO,&tmp1);
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
153 close(fd_control);
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
154
3232
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
155 if( format == IMGFMT_YV12 || format == IMGFMT_YUY2 || format == IMGFMT_BGR24 )
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
156 {
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
157 #ifdef USE_MP1E
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
158 int size;
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
159 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
160 enum rte_pixformat pixel_format;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
161
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
162 if( !rte_init() )
2968
9989497ab31e Minor fixes by David.
atmos4
parents: 2921
diff changeset
163 {
3329
529a001496c2 Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents: 3232
diff changeset
164 printf( "VO: [dxr3] Unable to initialize MP1E!\n" );
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
165 return -1;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
166 }
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
167
3629
a9d1ee93d1c9 Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents: 3621
diff changeset
168 mp1e_context = rte_context_new( s_width, s_height, NULL );
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
169 rte_set_verbosity( mp1e_context, 0 );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
170
3629
a9d1ee93d1c9 Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents: 3621
diff changeset
171 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
172
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
173 if( !mp1e_context )
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
174 {
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
175 printf( "VO: [dxr3] Unable to create context!\n" );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
176 return -1;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
177 }
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
178
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
179 if( !rte_set_format( mp1e_context, "mpeg1" ) )
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
180 {
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
181 printf( "VO: [dxr3] Unable to set format\n" );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
182 return -1;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
183 }
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
184
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
185 rte_set_mode( mp1e_context, RTE_VIDEO );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
186 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
187
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
188 if( vo_fps < 24.0 ) frame_rate = RTE_RATE_1;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
189 else if( vo_fps < 25.0 ) frame_rate = RTE_RATE_2;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
190 else if( vo_fps < 29.97 ) frame_rate = RTE_RATE_3;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
191 else if( vo_fps < 30.0 ) frame_rate = RTE_RATE_4;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
192 else if( vo_fps < 50.0 ) frame_rate = RTE_RATE_5;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
193 else if( vo_fps < 59.97 ) frame_rate = RTE_RATE_6;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
194 else if( vo_fps < 60.0 ) frame_rate = RTE_RATE_7;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
195 else if( vo_fps > 60.0 ) frame_rate = RTE_RATE_8;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
196 else frame_rate = RTE_RATE_NORATE;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
197
3630
f24527fc1b79 Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents: 3629
diff changeset
198 if( format == IMGFMT_YUY2 )
f24527fc1b79 Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents: 3629
diff changeset
199 pixel_format = RTE_YUYV;
f24527fc1b79 Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents: 3629
diff changeset
200 else
f24527fc1b79 Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents: 3629
diff changeset
201 pixel_format = RTE_YUV420;
f24527fc1b79 Removed conversion for yuy2, libmp1e supports this format, no need to cnovert it...
mswitch
parents: 3629
diff changeset
202 if( !rte_set_video_parameters( mp1e_context, pixel_format, mp1e_context->width,
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
203 mp1e_context->height, frame_rate,
3828
063e5b0065a4 Brand new sync core, uses hw sync for everything.
mswitch
parents: 3759
diff changeset
204 3e6, "I" ) )
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
205 {
3329
529a001496c2 Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents: 3232
diff changeset
206 printf( "VO: [dxr3] Unable to set mp1e context!\n" );
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
207 rte_context_destroy( mp1e_context );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
208 return -1;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
209 }
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
210
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
211 rte_set_input( mp1e_context, RTE_VIDEO, RTE_PUSH, TRUE, NULL, NULL, NULL );
3208
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
212 rte_set_output( mp1e_context, (void*)write_dxr3, NULL, NULL );
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
213
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
214 if( !rte_init_context( mp1e_context ) )
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
215 {
3329
529a001496c2 Switched from rte which caused alot of problems for some users to libmp1e.
mswitch
parents: 3232
diff changeset
216 printf( "VO: [dxr3] Unable to init mp1e context!\n" );
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
217 rte_context_delete( mp1e_context );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
218 return -1;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
219 }
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
220
3629
a9d1ee93d1c9 Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents: 3621
diff changeset
221 osd_w=s_width;
a9d1ee93d1c9 Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents: 3621
diff changeset
222 d_pos_x=(s_width-v_width)/2;
3208
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
223 if(d_pos_x<0)
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
224 {
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
225 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
226 osd_w=s_width;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
227 } else s_pos_x=0;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
228
3629
a9d1ee93d1c9 Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents: 3621
diff changeset
229 osd_h=s_height;
a9d1ee93d1c9 Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents: 3621
diff changeset
230 d_pos_y=(s_height-v_height)/2;
3208
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
231 if(d_pos_y<0)
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
232 {
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
233 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
234 osd_h=s_height;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
235 } else s_pos_y=0;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
236
3218
8ba06b63f873 Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents: 3208
diff changeset
237 printf("VO: [dxr3] Position mapping: %d;%d => %d;%d\n",s_pos_x,s_pos_y,d_pos_x,d_pos_y);
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
238
3629
a9d1ee93d1c9 Removed some old libavcodec code which would cause inproper scaling of some movies...
mswitch
parents: 3621
diff changeset
239 size = s_width*s_height;
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
240
3759
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
241 if( format == IMGFMT_YUY2 )
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
242 {
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
243 picture_data[0] = NULL;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
244 picture_linesize[0] = s_width * 2;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
245 }
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
246 else
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
247 {
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
248 picture_data[0] = malloc((size * 3)/2);
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
249 picture_data[1] = picture_data[0] + size;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
250 picture_data[2] = picture_data[1] + size / 4;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
251 picture_linesize[0] = s_width;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
252 picture_linesize[1] = s_width / 2;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
253 picture_linesize[2] = s_width / 2;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
254 }
3218
8ba06b63f873 Fix green borders -> black borders, patch from D. Holm, also small fix to dxr3 ao.
atmos4
parents: 3208
diff changeset
255
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
256
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
257 if( !rte_start_encoding( mp1e_context ) )
2968
9989497ab31e Minor fixes by David.
atmos4
parents: 2921
diff changeset
258 {
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
259 printf( "VO: [dxr3] Unable to start mp1e encoding!\n" );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
260 uninit();
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
261 return -1;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
262 }
2770
b9732eaa82d9 DXR3 beta2 patch by David Holm.
atmos4
parents: 2732
diff changeset
263
3639
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
264 if(format == IMGFMT_BGR24) yuv2rgb_init(24, MODE_BGR);
2770
b9732eaa82d9 DXR3 beta2 patch by David Holm.
atmos4
parents: 2732
diff changeset
265 return 0;
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
266 #endif
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
267 return -1;
2770
b9732eaa82d9 DXR3 beta2 patch by David Holm.
atmos4
parents: 2732
diff changeset
268 }
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
269 else if(format==IMGFMT_MPEGPES)
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
270 {
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
271 printf( "VO: [dxr3] Format: MPEG-PES (no conversion needed)\n" );
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
272 return 0;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
273 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
274
3614
6fef049b8fe4 Fix glitchy mpeg playback
mswitch
parents: 3432
diff changeset
275 printf( "VO: [dxr3] Format: Unsupported\n" );
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
276 return -1;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
277 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
278
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
279 static const vo_info_t* get_info(void)
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
280 {
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
281 return &vo_info;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
282 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
283
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
284 static void draw_alpha(int x0, int y0, int w, int h, unsigned char* src, unsigned char *srca, int srcstride)
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
285 {
3759
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
286 switch(img_format)
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
287 {
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
288 case IMGFMT_BGR24:
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
289 case IMGFMT_YV12:
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
290 vo_draw_alpha_yv12(w,h,src,srca,srcstride,picture_data[0]+(x0+d_pos_x)+(y0+d_pos_y)*picture_linesize[0],picture_linesize[0]);
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
291 break;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
292 case IMGFMT_YUY2:
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
293 vo_draw_alpha_yuy2(w,h,src,srca,srcstride,picture_data[0]+(x0+d_pos_x)*2+(y0+d_pos_y)*picture_linesize[0],picture_linesize[0]);
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
294 break;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
295 }
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
296 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
297
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
298 static void draw_osd(void)
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
299 {
3759
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
300 vo_draw_text(osd_w,osd_h,draw_alpha);
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
301 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
302
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
303 static uint32_t draw_frame(uint8_t * src[])
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
304 {
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
305 if( img_format == IMGFMT_MPEGPES )
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
306 {
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
307 vo_mpegpes_t *p=(vo_mpegpes_t *)src[0];
4005
7c07bc1e0a81 Fixes to sync code
mswitch
parents: 3861
diff changeset
308 size_t data_left = p->size;
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
309
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
310 if(!conf_s.se_version) if(ioctl(fd_video,EM8300_IOCTL_VIDEO_SETPTS,&vo_pts) < 0)
3828
063e5b0065a4 Brand new sync core, uses hw sync for everything.
mswitch
parents: 3759
diff changeset
311 printf( "VO: [dxr3] Unable to set pts\n" );
4005
7c07bc1e0a81 Fixes to sync code
mswitch
parents: 3861
diff changeset
312
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
313 while( data_left )
4005
7c07bc1e0a81 Fixes to sync code
mswitch
parents: 3861
diff changeset
314 data_left -= write( fd_video, (void*) p->data+(p->size-data_left), data_left );
2921
ee37c7fc3022 dxr3-patch4 by David Holm
arpi
parents: 2866
diff changeset
315
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
316 return 0;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
317 }
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
318 #ifdef USE_MP1E
3208
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
319 else if( img_format == IMGFMT_YUY2 )
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
320 {
3759
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
321 picture_data[0] = src[0];
3208
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
322 return 0;
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
323 }
3232
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
324 else if( img_format == IMGFMT_BGR24 )
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 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
327 unsigned char *s,*dY,*dU,*dV;
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
328
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
329 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
330 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
331
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
332 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
333
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
334 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
335 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
336 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
337
3639
64ee21b3bd09 Modified the sync code once again, commented out hardware pts sync (I'll likely burn in hell before understanding how to get this bastard to sync well)
mswitch
parents: 3630
diff changeset
338 rgb24toyv12(s,dY,dU,dV,w,h,picture_linesize[0],picture_linesize[1],v_width*3);
3232
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
339
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
340 mp1e_buffer.data = picture_data[0];
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
341 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
342 mp1e_buffer.user_data = NULL;
3759
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
343 vo_draw_text(osd_w,osd_h,draw_alpha);
3232
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
344 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
345
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
346 return 0;
d037e1201721 Added support for codecs that supports BGR24 (some opensource codecs and vivo)
mswitch
parents: 3218
diff changeset
347 }
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
348 #endif
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
349 return -1;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
350 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
351
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
352 static void flip_page (void)
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
353 {
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
354 #ifdef USE_MP1E
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
355 if( img_format == IMGFMT_YV12 )
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
356 {
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
357 mp1e_buffer.data = picture_data[0];
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
358 mp1e_buffer.time = vo_pts/90000.0;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
359 mp1e_buffer.user_data = NULL;
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
360 rte_push_video_buffer( mp1e_context, &mp1e_buffer );
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
361 }
3759
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
362 else if( img_format == IMGFMT_YUY2 )
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
363 {
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
364 mp1e_buffer.data = picture_data[0];
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
365 mp1e_buffer.time = vo_pts/90000.0;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
366 mp1e_buffer.user_data = NULL;
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
367 rte_push_video_buffer( mp1e_context, &mp1e_buffer );
a5f9c19f734f osd support, not for mpegpes
mswitch
parents: 3661
diff changeset
368 }
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
369 #endif
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
370 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
371
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
372 static uint32_t draw_slice( uint8_t *srcimg[], int stride[], int w, int h, int x0, int y0 )
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
373 {
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
374 if( img_format == IMGFMT_YV12 )
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
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
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
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
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
383 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
384 if(y0+h>s_height) h=s_height-y0;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
385
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
386 s=srcimg[0]+s_pos_x+s_pos_y*stride[0];
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
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
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
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
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
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
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
408
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
409 return 0;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
410 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
411
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
412 return -1;
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
413 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
414
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
415
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
416 static uint32_t
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
417 query_format(uint32_t format)
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
418 {
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
419 uint32_t flag = 0;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
420 if(format==IMGFMT_MPEGPES) flag = 0x2|0x4;
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
421 #ifdef USE_MP1E
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
422 if(format==IMGFMT_YV12) flag = 0x1|0x4;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
423 if(format==IMGFMT_YUY2) flag = 0x1|0x4;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
424 if(format==IMGFMT_BGR24) flag = 0x1|0x4;
3374
c49a9b272c44 fixed typo
alex
parents: 3333
diff changeset
425 else printf( "VO: [dxr3] Format unsupported, mail dholm@iname.com\n" );
3432
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
426 #else
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
427 else printf( "VO: [dxr3] You have disabled libmp1e support, you won't be able to play this format!\n" );
5cb7caab5536 MP1E configure patch by D. Holm.
atmos4
parents: 3387
diff changeset
428 #endif
4006
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
429 if(!conf_s.se_version && flag) flag |= 256;
f473505a2744 preliminary config interface
mswitch
parents: 4005
diff changeset
430 return flag;
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
431 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
432
3208
98a587aaf505 Support for YV12 with DXR3, patch by D. Holm.
atmos4
parents: 3201
diff changeset
433 static void uninit(void)
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
434 {
2968
9989497ab31e Minor fixes by David.
atmos4
parents: 2921
diff changeset
435 printf( "VO: [dxr3] Uninitializing\n" );
3201
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
436 if( picture_data[0] ) free(picture_data[0]);
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
437 if( fd_video ) close(fd_video);
039a973b3dda Newest DXR3 patch (improved 1.0rc2) by David Holm.
atmos4
parents: 3186
diff changeset
438 if( fd_spu ) close(fd_spu);
2645
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
439 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
440
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
441
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
442 static void check_events(void)
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
443 {
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
444 }
9d8d69fc517c ao_dxr3 by David Holm <dholm@telia.com>
arpi
parents:
diff changeset
445