Mercurial > mplayer.hg
annotate libvo/vo_dxr2.c @ 14145:9c47f90ad94a
fix leak with -fixed-vo, allow concatenating
author | reimar |
---|---|
date | Sun, 12 Dec 2004 15:17:53 +0000 |
parents | 85e503ddf65f |
children | fd51fd1ff231 |
rev | line source |
---|---|
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
2 #include "fastmemcpy.h" |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
3 #include <stdio.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
4 #include <stdlib.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
5 #include <string.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
6 #include <unistd.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
7 #include <sys/ioctl.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
8 #include <sys/stat.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
9 #include <sys/types.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
10 #include <fcntl.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
11 #include <stdio.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
12 #include <time.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
13 #include <errno.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
14 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
15 #include "config.h" |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
16 #include "video_out.h" |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
17 #include "video_out_internal.h" |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
18 #include "mp_msg.h" |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
8148
diff
changeset
|
19 #include "m_option.h" |
7970 | 20 #include "sub.h" |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
21 |
6181 | 22 #ifdef X11_FULLSCREEN |
23 #include "x11_common.h" | |
24 #endif | |
25 | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
26 #include <dxr2ioctl.h> |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
27 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
28 |
6181 | 29 extern char *get_path(char *filename); |
30 | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
31 extern float monitor_aspect; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
32 extern float movie_aspect; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
33 |
6074
10a30eebafaf
Applied patch from Tobias Diedrich <ranma@gmx.at>, added volume setting
albeu
parents:
6070
diff
changeset
|
34 int dxr2_fd = -1; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
35 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
36 static int movie_w,movie_h; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
37 static int playing = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
38 static int last_freq_id = -1; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
39 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
40 // vo device used to blank the screen for the overlay init |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
41 static vo_functions_t* sub_vo = NULL; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
42 |
6181 | 43 static uint8_t* sub_img = NULL; |
44 static int sub_x,sub_y,sub_w,sub_h; | |
45 static int sub_x_off,sub_y_off; | |
46 static int sub_config_count; | |
47 static int aspect; | |
7970 | 48 static int sub_vo_win = 0; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
49 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
50 static int use_ol = 1; |
6181 | 51 static int ol_ratio = 1000; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
52 static char *norm = NULL; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
53 static char *ucode = NULL; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
54 static int ar_mode = DXR2_ASPECTRATIOMODE_LETTERBOX; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
55 static int mv_mode = DXR2_MACROVISION_OFF; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
56 static int _75ire_mode = DXR2_75IRE_OFF; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
57 static int bw_mode = DXR2_BLACKWHITE_OFF; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
58 static int interlaced_mode = DXR2_INTERLACED_ON; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
59 static int pixel_mode = DXR2_PIXEL_CCIR601; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
60 static int iec958_mode = DXR2_IEC958_DECODED; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
61 static int mute_mode = DXR2_AUDIO_MUTE_OFF; |
6181 | 62 static int ignore_cache = 0; |
63 static int update_cache = 0; | |
7970 | 64 static int olw_cor = 0, olh_cor = 0,olx_cor = 0, oly_cor = 0; |
65 static int ol_osd = 0; | |
7981 | 66 static int ck_rmin = 0x40; |
67 static int ck_rmax = 0xFF; | |
68 static int ck_r = 0xFF; | |
69 static int ck_gmin = 0x00; | |
70 static int ck_gmax = 0x20; | |
71 static int ck_g = 0; | |
72 static int ck_bmin = 0x40; | |
73 static int ck_bmax = 0xFF; | |
74 static int ck_b = 0xFF; | |
8063
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
75 static int cr_left = 0, cr_right = 0; |
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
76 static int cr_top = 55, cr_bot = 300; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
77 |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
8148
diff
changeset
|
78 m_option_t dxr2_opts[] = { |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
79 { "overlay", &use_ol, CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
80 { "nooverlay", &use_ol, CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
6181 | 81 { "overlay-ratio", &ol_ratio, CONF_TYPE_INT, CONF_RANGE, 1, 2500, NULL }, |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
82 { "ucode", &ucode, CONF_TYPE_STRING,0, 0, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
83 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
84 { "norm", &norm, CONF_TYPE_STRING,0, 0, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
85 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
86 { "ar-mode",&ar_mode, CONF_TYPE_INT, CONF_RANGE,0,2,NULL }, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
87 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
88 { "macrovision",&mv_mode,CONF_TYPE_INT,CONF_RANGE,0,3, NULL }, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
89 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
90 { "75ire",&_75ire_mode,CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
91 { "no75ire",&_75ire_mode,CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
92 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
93 { "bw",&bw_mode,CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
94 { "color",&bw_mode,CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
95 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
96 { "interlaced",&interlaced_mode,CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
97 { "nointerlaced",&interlaced_mode,CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
98 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
99 { "square-pixel",&pixel_mode,CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
100 { "ccir601-pixel",&pixel_mode,CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
101 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
102 { "iec958-encoded",&iec958_mode,CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
103 { "iec958-decoded",&iec958_mode,CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
104 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
105 { "mute", &mute_mode,CONF_TYPE_FLAG, 0, 1, 0, NULL}, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
106 { "nomute",&mute_mode,CONF_TYPE_FLAG, 0, 0, 1, NULL}, |
6181 | 107 |
108 { "ignore-cache",&ignore_cache,CONF_TYPE_FLAG, 0, 0, 1, NULL}, | |
109 { "update-cache",&update_cache,CONF_TYPE_FLAG, 0, 0, 1, NULL}, | |
7970 | 110 |
111 { "olh-cor", &olh_cor, CONF_TYPE_INT, CONF_RANGE, -20, 20, NULL}, | |
112 { "olw-cor", &olw_cor, CONF_TYPE_INT, CONF_RANGE, -20, 20, NULL}, | |
113 { "olx-cor", &olx_cor, CONF_TYPE_INT, CONF_RANGE, -20, 20, NULL}, | |
114 { "oly-cor", &oly_cor, CONF_TYPE_INT, CONF_RANGE, -20, 20, NULL}, | |
115 | |
116 { "ol-osd", &ol_osd, CONF_TYPE_FLAG, 0, 0, 1, NULL}, | |
117 { "nool-osd", &ol_osd, CONF_TYPE_FLAG, 0, 1, 0, NULL}, | |
7981 | 118 |
119 { "ck-rmin", &ck_rmin, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
120 { "ck-rmax", &ck_rmax, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
121 { "ck-r", &ck_r, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
122 { "ck-gmin", &ck_gmin, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
123 { "ck-gmax", &ck_gmax, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
124 { "ck-g", &ck_g, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
125 { "ck-bmin", &ck_bmin, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
126 { "ck-bmax", &ck_bmax, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
127 { "ck-b", &ck_b, CONF_TYPE_INT, CONF_RANGE, 0, 0xFF, NULL}, | |
8063
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
128 { "cr-left", &cr_left, CONF_TYPE_INT, CONF_RANGE, 0, 500, NULL}, |
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
129 { "cr-right", &cr_right, CONF_TYPE_INT, CONF_RANGE, 0, 500, NULL}, |
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
130 { "cr-top", &cr_top, CONF_TYPE_INT, CONF_RANGE, 0, 500, NULL}, |
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
131 { "cr-bot", &cr_bot, CONF_TYPE_INT, CONF_RANGE, 0, 500, NULL}, |
7981 | 132 |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
133 { NULL,NULL, 0, 0, 0, 0, NULL} |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
134 }; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
135 |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8115
diff
changeset
|
136 static vo_info_t info = { |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
137 "DXR2 video out", |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
138 "dxr2", |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
139 "Alban Bedel <albeu@free.fr> and Tobias Diedrich <ranma@gmx.at>", |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
140 "" |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
141 }; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
142 |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8115
diff
changeset
|
143 LIBVO_EXTERN (dxr2) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8115
diff
changeset
|
144 |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
145 static char *ucodesearchpath[] = { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
146 "/usr/local/lib/dxr2/dvd12.ux", |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
147 "/usr/lib/dxr2/dvd12.ux", |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
148 "/usr/src/dvd12.ux", |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
149 NULL, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
150 }; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
151 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
152 #define BUF_SIZE 2048 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
153 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
154 static unsigned char dxr2buf[BUF_SIZE]; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
155 static unsigned int dxr2bufpos = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
156 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
157 static void write_dxr2(void *data, int len) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
158 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
159 int w = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
160 while (len>0) if ((dxr2bufpos+len) <= BUF_SIZE) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
161 memcpy(dxr2buf+dxr2bufpos, data, len); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
162 dxr2bufpos+=len; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
163 len=0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
164 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
165 int copylen=BUF_SIZE-dxr2bufpos; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
166 if(copylen > 0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
167 memcpy(dxr2buf+dxr2bufpos, data, copylen); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
168 dxr2bufpos += copylen; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
169 data+=copylen; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
170 len-=copylen; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
171 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
172 w = write(dxr2_fd, dxr2buf, BUF_SIZE); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
173 if(w < 0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
174 mp_msg(MSGT_VO,MSGL_WARN,"DXR2 : write failed : %s \n",strerror(errno)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
175 dxr2bufpos = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
176 break; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
177 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
178 dxr2bufpos -= w; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
179 if(dxr2bufpos) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
180 memmove(dxr2buf,dxr2buf + w,dxr2bufpos); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
181 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
182 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
183 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
184 static void flush_dxr2() |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
185 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
186 int w; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
187 while (dxr2bufpos) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
188 w = write(dxr2_fd, dxr2buf, dxr2bufpos); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
189 if(w < 0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
190 mp_msg(MSGT_VO,MSGL_WARN,"DXR2 : write failed %s \n",strerror(errno)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
191 dxr2bufpos = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
192 break; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
193 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
194 dxr2bufpos -= w; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
195 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
196 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
197 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
198 #define PACK_MAX_SIZE 2048 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
199 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
200 static unsigned char pack[PACK_MAX_SIZE]; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
201 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
202 static unsigned char mpg_header[]={ |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
203 0x00, 0x00, 0x01, 0xba, 0x44, 0x00, 0x04, 0x00, |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
204 0x04, 0x01, 0x01, 0x86, 0xa3, 0xf8 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
205 }; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
206 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
207 static unsigned char mpg_eof[]={ |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
208 0x00, 0x00, 0x01, 0xb9 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
209 }; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
210 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
211 static void dxr2_send_header(void) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
212 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
213 write_dxr2(&mpg_header, sizeof(mpg_header)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
214 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
215 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
216 static void dxr2_send_eof(void) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
217 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
218 write_dxr2(&mpg_eof, sizeof(mpg_eof)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
219 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
220 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
221 void dxr2_send_packet(unsigned char* data,int len,int id,int timestamp) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
222 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
223 int ptslen=5; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
224 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
225 if(dxr2_fd < 0) { |
6074
10a30eebafaf
Applied patch from Tobias Diedrich <ranma@gmx.at>, added volume setting
albeu
parents:
6070
diff
changeset
|
226 mp_msg(MSGT_VO,MSGL_ERR,"DXR2 fd is not valid\n"); |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
227 return; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
228 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
229 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
230 mp_msg(MSGT_VO,MSGL_DBG2,"DXR2 packet : 0x%x => %d \n",id,timestamp); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
231 dxr2_send_header(); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
232 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
233 // startcode: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
234 pack[0]=pack[1]=0;pack[2]=0x01; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
235 // stream id |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
236 pack[3]=id; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
237 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
238 while(len>0){ |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
239 int payload_size=len; // data + PTS |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
240 if(9+ptslen+payload_size>PACK_MAX_SIZE) payload_size=PACK_MAX_SIZE-(6+ptslen); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
241 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
242 // construct PES header: (code from ffmpeg's libav) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
243 // packetsize: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
244 pack[4]=(3+ptslen+payload_size)>>8; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
245 pack[5]=(3+ptslen+payload_size)&255; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
246 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
247 pack[6]=0x81; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
248 if(ptslen){ |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
249 int x; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
250 pack[7]=0x80; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
251 pack[8]=ptslen; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
252 // presentation time stamp: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
253 x=(0x02 << 4) | (((timestamp >> 30) & 0x07) << 1) | 1; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
254 pack[9]=x; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
255 x=((((timestamp >> 15) & 0x7fff) << 1) | 1); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
256 pack[10]=x>>8; pack[11]=x&255; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
257 x=((((timestamp) & 0x7fff) << 1) | 1); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
258 pack[12]=x>>8; pack[13]=x&255; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
259 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
260 pack[7]=0x00; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
261 pack[8]=0x00; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
262 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
263 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
264 write_dxr2(pack, 9+ptslen); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
265 write_dxr2(data, payload_size); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
266 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
267 len-=payload_size; data+=payload_size; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
268 ptslen=0; // store PTS only once, at first packet! |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
269 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
270 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
271 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
272 void dxr2_send_lpcm_packet(unsigned char* data,int len,int id,unsigned int timestamp,int freq_id) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
273 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
274 int arg; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
275 int ptslen=5; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
276 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
277 if(dxr2_fd < 0) { |
6074
10a30eebafaf
Applied patch from Tobias Diedrich <ranma@gmx.at>, added volume setting
albeu
parents:
6070
diff
changeset
|
278 mp_msg(MSGT_VO,MSGL_ERR,"DXR2 fd is not valid\n"); |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
279 return; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
280 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
281 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
282 if(last_freq_id != freq_id) { |
6074
10a30eebafaf
Applied patch from Tobias Diedrich <ranma@gmx.at>, added volume setting
albeu
parents:
6070
diff
changeset
|
283 ioctl(dxr2_fd, DXR2_IOC_SET_AUDIO_SAMPLE_FREQUENCY, &freq_id); |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
284 last_freq_id = freq_id; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
285 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
286 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
287 if (((int) timestamp)<0) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
288 timestamp=0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
289 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
290 mp_msg(MSGT_VO,MSGL_DBG2,"dxr2_send_lpcm_packet(timestamp=%d)\n", timestamp); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
291 // startcode: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
292 pack[0]=pack[1]=0;pack[2]=0x01; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
293 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
294 // stream id |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
295 pack[3]=0xBD; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
296 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
297 while(len>=4){ |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
298 int payload_size; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
299 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
300 payload_size=PACK_MAX_SIZE-6-3-ptslen-7; // max possible data len |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
301 if(payload_size>len) payload_size=len; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
302 payload_size&=(~3); // align! |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
303 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
304 // packetsize: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
305 pack[4]=(payload_size+3+ptslen+7)>>8; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
306 pack[5]=(payload_size+3+ptslen+7)&255; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
307 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
308 // stuffing: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
309 pack[6]=0x81; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
310 // pack[7]=0x00; //0x80 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
311 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
312 // hdrlen: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
313 pack[8]=ptslen; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
314 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
315 if(ptslen){ |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
316 int x; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
317 pack[7]=0x80; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
318 // presentation time stamp: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
319 x=(0x02 << 4) | (((timestamp >> 30) & 0x07) << 1) | 1; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
320 pack[9]=x; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
321 x=((((timestamp >> 15) & 0x7fff) << 1) | 1); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
322 pack[10]=x>>8; pack[11]=x&255; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
323 x=((((timestamp) & 0x7fff) << 1) | 1); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
324 pack[12]=x>>8; pack[13]=x&255; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
325 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
326 pack[7]=0x00; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
327 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
328 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
329 // ============ LPCM header: (7 bytes) ================= |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
330 // Info by mocm@convergence.de |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
331 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
332 // ID: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
333 pack[ptslen+9]=id; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
334 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
335 // number of frames: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
336 pack[ptslen+10]=0x07; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
337 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
338 // first acces unit pointer, i.e. start of audio frame: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
339 pack[ptslen+11]=0x00; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
340 pack[ptslen+12]=0x04; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
341 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
342 // audio emphasis on-off 1 bit |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
343 // audio mute on-off 1 bit |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
344 // reserved 1 bit |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
345 // audio frame number 5 bit |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
346 pack[ptslen+13]=0x0C; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
347 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
348 // quantization word length 2 bit |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
349 // audio sampling frequency (48khz = 0, 96khz = 1) 2 bit |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
350 // reserved 1 bit |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
351 // number of audio channels - 1 (e.g. stereo = 1) 3 bit |
6074
10a30eebafaf
Applied patch from Tobias Diedrich <ranma@gmx.at>, added volume setting
albeu
parents:
6070
diff
changeset
|
352 pack[ptslen+14]=1; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
353 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
354 // dynamic range control (0x80 if off) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
355 pack[ptslen+15]=0x80; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
356 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
357 write_dxr2(pack, 6+3+ptslen+7); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
358 write_dxr2(data, payload_size); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
359 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
360 len-=payload_size; data+=payload_size; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
361 timestamp+=90000/4*payload_size/48000; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
362 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
363 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
364 |
6111
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
365 void dxr2_send_sub_packet(unsigned char* data,int len,int id,unsigned int timestamp) { |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
366 int ptslen=5; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
367 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
368 if(dxr2_fd < 0) { |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
369 mp_msg(MSGT_VO,MSGL_ERR,"DXR2 fd is not valid\n"); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
370 return; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
371 } |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
372 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
373 if (((int) timestamp)<0) |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
374 timestamp=0; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
375 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
376 mp_msg(MSGT_VO,MSGL_DBG2,"dxr2_send_sub_packet(timestamp=%d)\n", timestamp); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
377 // startcode: |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
378 pack[0]=pack[1]=0;pack[2]=0x01; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
379 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
380 // stream id |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
381 pack[3]=0xBD; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
382 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
383 while(len>=4){ |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
384 int payload_size= PACK_MAX_SIZE-(7+ptslen+3); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
385 if(payload_size>len) payload_size= len; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
386 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
387 pack[4]=(3+ptslen+1+payload_size)>>8; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
388 pack[5]=(3+ptslen+1+payload_size)&255; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
389 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
390 pack[6]=0x81; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
391 if(ptslen){ |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
392 int x; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
393 pack[7]=0x80; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
394 pack[8]=ptslen; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
395 // presentation time stamp: |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
396 x=(0x02 << 4) | (((timestamp >> 30) & 0x07) << 1) | 1; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
397 pack[9]=x; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
398 x=((((timestamp >> 15) & 0x7fff) << 1) | 1); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
399 pack[10]=x>>8; pack[11]=x&255; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
400 x=((((timestamp) & 0x7fff) << 1) | 1); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
401 pack[12]=x>>8; pack[13]=x&255; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
402 } else { |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
403 pack[7]=0x00; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
404 pack[8]=0x00; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
405 } |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
406 pack[ptslen+9] = id; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
407 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
408 write_dxr2(pack,7+ptslen+3); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
409 write_dxr2(data,payload_size); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
410 len -= payload_size; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
411 data += payload_size; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
412 ptslen = 0; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
413 } |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
414 } |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
415 |
6181 | 416 static int dxr2_set_vga_params(dxr2_vgaParams_t* vga,int detect) { |
417 // Init the overlay, don't ask me how it work ;-) | |
418 dxr2_sixArg_t oc; | |
419 dxr2_oneArg_t om; | |
420 dxr2_twoArg_t win; | |
421 dxr2_fourArg_t crop; | |
422 | |
8063
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
423 crop.arg1= cr_left; |
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
424 crop.arg2= cr_right; |
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
425 crop.arg3 = cr_top; |
4c7ef4aeb88b
Overlay cropping options. Patch by Mark <CompGuy284 at attbi dot com> extanded
albeu
parents:
7981
diff
changeset
|
426 crop.arg4 = cr_bot; |
6181 | 427 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_CROPPING, &crop); |
428 | |
429 oc.arg1 = 0x40; | |
430 oc.arg2 = 0xff; | |
431 oc.arg3 = 0x40; | |
432 oc.arg4 = 0xff; | |
433 oc.arg5 = 0x40; | |
434 oc.arg6 = 0xff; | |
435 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_COLOUR, &oc); | |
436 | |
437 om.arg = ol_ratio; | |
438 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_RATIO,&om); | |
439 | |
440 win.arg1 = 100; | |
441 win.arg2 = 3; | |
442 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_POSITION,&win); | |
443 | |
444 win.arg1 = vo_screenwidth; | |
445 win.arg2 = vo_screenheight; | |
446 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_DIMENSION,&win); | |
447 | |
7981 | 448 om.arg = 0; |
6181 | 449 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_IN_DELAY,&om); |
450 | |
451 if(detect) { | |
452 // First we need a white screen | |
453 uint8_t* img = malloc(vo_screenwidth*vo_screenheight*3); | |
454 uint8_t* src[] = { img, NULL, NULL }; | |
7970 | 455 int stride[] = { vo_screenwidth * 3 , 0, 0 }; |
6181 | 456 int cc = vo_config_count; |
457 | |
458 memset(img,255,vo_screenwidth*vo_screenheight*3); | |
459 vo_config_count = sub_config_count; | |
460 if(sub_vo->config(vo_screenwidth,vo_screenheight,vo_screenwidth,vo_screenheight, | |
7253 | 461 VOFLAG_FULLSCREEN ,"DXR2 sub vo",IMGFMT_BGR24) != 0) { |
6181 | 462 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] sub vo config failed => No overlay\n"); |
463 sub_vo->uninit(); | |
464 sub_vo = NULL; | |
465 use_ol = 0; | |
466 vo_config_count = cc; | |
467 return 0; | |
468 } | |
7970 | 469 sub_vo->draw_slice(src,stride,vo_screenwidth,vo_screenheight,0,0); |
6181 | 470 sub_vo->flip_page(); |
471 free(img); | |
472 sub_config_count++; | |
473 vo_config_count = cc; | |
474 | |
475 om.arg = DXR2_OVERLAY_WINDOW_COLOUR_KEY; | |
476 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_MODE,&om); | |
477 | |
478 vga->xScreen = vo_screenwidth; | |
479 vga->yScreen = vo_screenheight; | |
480 vga->hOffWinKey = 100; | |
481 vga->vOffWinKey = 3; | |
482 ioctl(dxr2_fd, DXR2_IOC_CALCULATE_VGA_PARAMETERS, vga); | |
483 } | |
484 ioctl(dxr2_fd, DXR2_IOC_SET_VGA_PARAMETERS,vga); | |
485 | |
486 return 1; | |
487 } | |
488 | |
489 static int dxr2_save_vga_params(dxr2_vgaParams_t* vga,char* name) { | |
490 struct stat s; | |
491 char* p = get_path("dxr2_cache"); | |
492 int p_len = strlen(p), name_len = strlen(name); | |
493 char cache_path[p_len + name_len + 2]; | |
494 int ret; | |
495 FILE* fd; | |
496 | |
497 if(stat(p,&s) !=0) { | |
498 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] No vga cache dir found (%s)\n",strerror(errno)); | |
499 if(errno == EACCES) { | |
500 free(p); | |
501 return 0; | |
502 } | |
503 // Try to create the dir | |
504 if(mkdir(p,S_IRWXU) != 0) { | |
505 mp_msg(MSGT_VO,MSGL_ERR,"VO: [dxr2] Unable to create vga cache dir %s (%s)\n",p,strerror(errno)); | |
506 free(p); | |
507 return 0; | |
508 } | |
509 } | |
510 sprintf(cache_path,"%s/%s",p,name); | |
511 free(p); | |
512 fd = fopen(cache_path,"w"); | |
513 if(fd == NULL) { | |
514 mp_msg(MSGT_VO,MSGL_ERR,"VO: [dxr2] Unable to open cache file %s for writing (%s)\n",cache_path,strerror(errno)); | |
515 return 0; | |
516 } | |
517 | |
7970 | 518 ret = fprintf(fd,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", |
6181 | 519 vga->hOffWinKey, |
520 vga->vOffWinKey, | |
521 vga->xScreen, | |
522 vga->yScreen, | |
523 vga->hsyncPol, | |
524 vga->vsyncPol, | |
525 vga->blankStart, | |
526 vga->blankWidth, | |
527 vga->hOffset, | |
528 vga->vOffset, | |
7970 | 529 vga->ratio, |
530 olx_cor, | |
531 oly_cor, | |
532 olw_cor, | |
533 olh_cor); | |
6181 | 534 |
535 fclose(fd); | |
7970 | 536 return ret >= 11 ? 1 : 0; |
6181 | 537 } |
538 | |
539 static int dxr2_load_vga_params(dxr2_vgaParams_t* vga,char* name) { | |
540 char* p = get_path("dxr2_cache"); | |
541 int p_len = strlen(p), name_len = strlen(name); | |
542 char cache_path[p_len + name_len + 2]; | |
543 int ret; | |
8115 | 544 int xc,yc,wc,hc; |
6181 | 545 FILE* fd; |
546 | |
547 sprintf(cache_path,"%s/%s",p,name); | |
548 free(p); | |
549 | |
550 fd = fopen(cache_path,"r"); | |
551 if(fd == NULL) { | |
552 mp_msg(MSGT_VO,MSGL_ERR,"VO: [dxr2] Unable to open cache file %s for reading (%s)\n",cache_path,strerror(errno)); | |
553 return 0; | |
554 } | |
7970 | 555 ret = fscanf(fd, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", |
6181 | 556 &vga->hOffWinKey, |
557 &vga->vOffWinKey, | |
558 &vga->xScreen, | |
559 &vga->yScreen, | |
560 &vga->hsyncPol, | |
561 &vga->vsyncPol, | |
562 &vga->blankStart, | |
563 &vga->blankWidth, | |
564 &vga->hOffset, | |
565 &vga->vOffset, | |
7970 | 566 &vga->ratio, |
8115 | 567 &xc, |
568 &yc, | |
569 &wc, | |
570 &hc); | |
6181 | 571 |
572 fclose(fd); | |
8115 | 573 if(ret > 11 && !olx_cor) olx_cor = xc; |
574 if(ret > 12 && !oly_cor) oly_cor = yc; | |
575 if(ret > 13 && !olw_cor) olw_cor = wc; | |
576 if(ret > 14 && !olh_cor) olh_cor = hc; | |
7970 | 577 return ret >= 11 ? 1 : 0; |
6181 | 578 } |
579 | |
580 static int dxr2_setup_vga_params(void) { | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8115
diff
changeset
|
581 const vo_info_t* vi = sub_vo->info; |
6181 | 582 dxr2_vgaParams_t vga; |
583 | |
584 int loaded = dxr2_load_vga_params(&vga,(char*)vi->short_name); | |
585 if(!dxr2_set_vga_params(&vga,(update_cache || ignore_cache) ? 1 : !loaded )) | |
586 return 0; | |
587 if(!loaded || update_cache) | |
588 dxr2_save_vga_params(&vga,(char*)vi->short_name); | |
589 return 1; | |
590 } | |
591 | |
592 static void dxr2_set_overlay_window(void) { | |
593 uint8_t* src[] = { sub_img, NULL, NULL }; | |
7970 | 594 int stride[] = { movie_w * 3 , 0, 0 }; |
6181 | 595 dxr2_twoArg_t win; |
596 int redisp = 0; | |
597 int cc = vo_config_count; | |
598 vo_config_count = sub_config_count; | |
7970 | 599 sub_vo->draw_slice(src,stride,movie_w,movie_h,0,0); |
6181 | 600 sub_vo->flip_page(); |
601 vo_config_count = cc; | |
602 | |
7970 | 603 |
604 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] setting overlay with correction x=%d y=%d w=%d h=%d\n",olx_cor,oly_cor, olw_cor,olh_cor); | |
605 | |
606 // Sub vo isn't a windowed one, fill in the needed stuff | |
607 if(!sub_vo_win) { | |
608 if(vo_fs) { | |
609 vo_dwidth = vo_screenwidth; | |
610 vo_dheight = vo_screenheight; | |
611 vo_dx = vo_dy = 0; | |
612 } else { | |
613 vo_dwidth = movie_w; | |
614 vo_dheight = movie_h; | |
615 vo_dx = (vo_screenwidth - vo_dwidth) / 2; | |
616 vo_dy = (vo_screenheight - vo_dheight) / 2; | |
617 } | |
618 } | |
619 | |
6181 | 620 if(sub_w != vo_dwidth || sub_h != vo_dheight) { |
621 int new_aspect = ((1<<16)*vo_dwidth + vo_dheight/2)/vo_dheight; | |
622 sub_w = vo_dwidth; | |
623 sub_h = vo_dheight; | |
624 if(new_aspect > aspect) | |
625 sub_w = (sub_h*aspect + (1<<15))>>16; | |
626 else | |
627 sub_h = ((sub_w<<16) + (aspect>>1)) /aspect; | |
7970 | 628 sub_w += olw_cor; |
629 sub_h += olh_cor; | |
6181 | 630 sub_x_off = (vo_dwidth-sub_w) / 2; |
631 sub_y_off = (vo_dheight-sub_h) / 2; | |
632 sub_x = -vo_dx; // Be sure to also replace the overlay | |
633 win.arg1 = sub_w; | |
634 win.arg2 = sub_h; | |
635 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] set win size w=%d h=%d and offset x=%d y=%d \n",win.arg1,win.arg2,sub_x_off,sub_y_off); | |
636 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_DIMENSION, &win); | |
637 } | |
638 | |
639 if(vo_dx != sub_x || vo_dy != sub_y) { | |
7970 | 640 sub_x = vo_dx + olx_cor + sub_x_off; |
641 sub_y = vo_dy + oly_cor + sub_y_off; | |
642 win.arg1 = (sub_x > 0 ? sub_x : 0); | |
643 win.arg2 = (sub_y > 0 ? sub_y : 0); | |
6181 | 644 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] set pos x=%d y=%d \n",win.arg1,win.arg2); |
645 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_POSITION,&win); | |
646 } | |
647 | |
648 } | |
649 | |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6817
diff
changeset
|
650 static uint32_t config(uint32_t s_width, uint32_t s_height, uint32_t width, uint32_t height, uint32_t flags, char *title, uint32_t format) |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
651 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
652 int arg; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
653 dxr2_threeArg_t arg3; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
654 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
655 if(dxr2_fd < 0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
656 mp_msg(MSGT_VO,MSGL_ERR,"DXR2 fd is not valid\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
657 return VO_ERROR; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
658 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
659 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
660 if(playing) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
661 dxr2_send_eof(); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
662 flush_dxr2(); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
663 ioctl(dxr2_fd, DXR2_IOC_STOP, NULL); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
664 playing = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
665 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
666 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
667 last_freq_id = -1; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
668 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
669 // Video stream setup |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
670 arg3.arg1 = DXR2_STREAM_VIDEO; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
671 arg3.arg2 = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
672 ioctl(dxr2_fd, DXR2_IOC_SELECT_STREAM, &arg3); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
673 if (vo_fps > 28) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
674 arg3.arg1 = DXR2_SRC_VIDEO_FREQ_30; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
675 else arg3.arg1 = DXR2_SRC_VIDEO_FREQ_25; |
6181 | 676 arg3.arg2 = s_width; |
677 arg3.arg3 = s_height; | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
678 ioctl(dxr2_fd, DXR2_IOC_SET_SOURCE_VIDEO_FORMAT, &arg3); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
679 arg = DXR2_BITSTREAM_TYPE_MPEG_VOB; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
680 ioctl(dxr2_fd, DXR2_IOC_SET_BITSTREAM_TYPE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
681 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
682 // Aspect ratio |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
683 if (1.76 <= movie_aspect && movie_aspect <= 1.80) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
684 arg = DXR2_ASPECTRATIO_16_9; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
685 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] source aspect ratio 16:9\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
686 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
687 arg = DXR2_ASPECTRATIO_4_3; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
688 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] source aspect ratio 4:3\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
689 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
690 ioctl(dxr2_fd, DXR2_IOC_SET_SOURCE_ASPECT_RATIO, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
691 if (1.76 <= monitor_aspect && monitor_aspect <=1.80) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
692 arg = DXR2_ASPECTRATIO_16_9; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
693 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] monitor aspect ratio 16:9\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
694 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
695 arg = DXR2_ASPECTRATIO_4_3; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
696 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] monitor aspect ratio 4:3\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
697 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
698 ioctl(dxr2_fd, DXR2_IOC_SET_OUTPUT_ASPECT_RATIO, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
699 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
700 arg = ar_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
701 ioctl(dxr2_fd, DXR2_IOC_SET_ASPECT_RATIO_MODE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
702 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
703 // TV setup |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
704 arg = mv_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
705 ioctl(dxr2_fd, DXR2_IOC_SET_TV_MACROVISION_MODE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
706 arg = _75ire_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
707 ioctl(dxr2_fd, DXR2_IOC_SET_TV_75IRE_MODE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
708 arg = bw_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
709 ioctl(dxr2_fd, DXR2_IOC_SET_TV_BLACKWHITE_MODE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
710 arg = interlaced_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
711 ioctl(dxr2_fd, DXR2_IOC_SET_TV_INTERLACED_MODE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
712 arg = pixel_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
713 ioctl(dxr2_fd, DXR2_IOC_SET_TV_PIXEL_MODE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
714 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
715 if (norm) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
716 if (strcmp(norm, "ntsc")==0) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
717 arg = DXR2_OUTPUTFORMAT_NTSC; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
718 else if (strcmp(norm, "pal")==0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
719 if (vo_fps > 28) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
720 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] you want pal, but we play at 30 fps, selecting pal60 instead\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
721 arg = DXR2_OUTPUTFORMAT_PAL_60; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
722 norm="pal60"; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
723 } else arg = DXR2_OUTPUTFORMAT_PAL_BDGHI; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
724 } else if (strcmp(norm, "pal60")==0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
725 if (vo_fps > 28) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
726 arg = DXR2_OUTPUTFORMAT_PAL_60; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
727 else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
728 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] you want pal60, but we play at 25 fps, selecting pal instead\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
729 arg = DXR2_OUTPUTFORMAT_PAL_BDGHI; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
730 norm="pal"; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
731 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
732 } else if (strcmp(norm, "palm")==0) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
733 arg = DXR2_OUTPUTFORMAT_PAL_M; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
734 else if (strcmp(norm, "paln")==0) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
735 arg = DXR2_OUTPUTFORMAT_PAL_N; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
736 else if (strcmp(norm, "palnc")==0) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
737 arg = DXR2_OUTPUTFORMAT_PAL_Nc; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
738 else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
739 mp_msg(MSGT_VO,MSGL_WARN,"[dxr2] invalid norm %s\n", norm); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
740 mp_msg(MSGT_VO,MSGL_WARN,"Valid values are ntsc,pal,pal60,palm,paln,palnc\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
741 mp_msg(MSGT_VO,MSGL_WARN,"Using ntsc\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
742 norm="ntsc"; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
743 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
744 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
745 if (vo_fps > 28) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
746 arg = DXR2_OUTPUTFORMAT_NTSC; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
747 norm="ntsc"; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
748 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
749 arg = DXR2_OUTPUTFORMAT_PAL_BDGHI; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
750 norm="pal"; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
751 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
752 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
753 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] output norm set to %s\n", norm); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
754 ioctl(dxr2_fd, DXR2_IOC_SET_TV_OUTPUT_FORMAT, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
755 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
756 // Subtitles |
6111
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
757 |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
758 arg = DXR2_SUBPICTURE_ON; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
759 ioctl(dxr2_fd,DXR2_IOC_ENABLE_SUBPICTURE,&arg); |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
760 arg3.arg1 = DXR2_STREAM_SUBPICTURE; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
761 arg3.arg2 = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
762 ioctl(dxr2_fd, DXR2_IOC_SELECT_STREAM, &arg3); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
763 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
764 // Audio |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
765 arg = iec958_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
766 ioctl(dxr2_fd, DXR2_IOC_IEC958_OUTPUT_MODE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
767 arg = DXR2_AUDIO_WIDTH_16; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
768 ioctl(dxr2_fd, DXR2_IOC_SET_AUDIO_DATA_WIDTH, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
769 arg = DXR2_AUDIO_FREQ_48; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
770 ioctl(dxr2_fd, DXR2_IOC_SET_AUDIO_SAMPLE_FREQUENCY, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
771 arg3.arg1 = DXR2_STREAM_AUDIO_LPCM; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
772 arg3.arg2 = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
773 ioctl(dxr2_fd, DXR2_IOC_SELECT_STREAM, &arg3); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
774 arg = 19; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
775 ioctl(dxr2_fd, DXR2_IOC_SET_AUDIO_VOLUME, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
776 arg = mute_mode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
777 ioctl(dxr2_fd, DXR2_IOC_AUDIO_MUTE, &arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
778 |
7970 | 779 movie_w = width; |
780 movie_h = height; | |
7981 | 781 //vo_fs = flags & VOFLAG_FULLSCREEN ? 1 : 0; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
782 // Overlay |
6181 | 783 while(use_ol) { |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
784 dxr2_twoArg_t win; |
6181 | 785 dxr2_oneArg_t om; |
786 int cc = vo_config_count; | |
787 vo_config_count = sub_config_count; | |
7970 | 788 // Load or detect the overlay stuff |
6181 | 789 if(!dxr2_setup_vga_params()) { |
790 sub_vo->uninit(); | |
791 sub_vo = NULL; | |
792 vo_config_count = cc; | |
793 break; | |
794 } | |
7970 | 795 // Does the sub vo support the x11 stuff |
796 // Fix me : test the other x11 vo's and enable them | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8115
diff
changeset
|
797 if(strcmp(sub_vo->info->short_name,"x11") == 0) |
7970 | 798 sub_vo_win = 1; |
799 else | |
800 sub_vo_win = 0; | |
801 | |
802 // No window and no osd => we don't need any subdriver | |
803 if(!sub_vo_win && !ol_osd) { | |
6181 | 804 sub_vo->uninit(); |
805 sub_vo = NULL; | |
806 } | |
807 | |
808 while(sub_vo) { | |
809 dxr2_sixArg_t oc; | |
810 int i,sub_flags = VOFLAG_SWSCALE | (flags & VOFLAG_FULLSCREEN); | |
811 if(sub_vo->config(width,height,width,height,sub_flags, | |
7253 | 812 "MPlayer DXR2 render",IMGFMT_BGR24) != 0) { |
6181 | 813 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] sub vo config failed => No X11 window\n"); |
814 sub_vo->uninit(); | |
815 sub_vo = NULL; | |
816 break; | |
817 } | |
818 sub_config_count++; | |
819 | |
820 // Feel free to try some other other color and report your results | |
7981 | 821 oc.arg1 = ck_rmin; |
822 oc.arg2 = ck_rmax; | |
823 oc.arg3 = ck_gmin; | |
824 oc.arg4 = ck_gmax; | |
825 oc.arg5 = ck_bmin; | |
826 oc.arg6 = ck_bmax; | |
6181 | 827 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_COLOUR, &oc); |
828 | |
829 om.arg = DXR2_OVERLAY_WINDOW_COLOUR_KEY; | |
830 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_MODE,&om); | |
831 sub_img = malloc(width*height*3); | |
832 for(i = 0 ; i < width*height*3 ; i += 3) { | |
7981 | 833 sub_img[i] = ck_b; |
834 sub_img[i+1] = ck_g; | |
835 sub_img[i+2] = ck_r; | |
6181 | 836 } |
837 aspect = ((1<<16)*width + height/2)/height; | |
838 sub_w = sub_h = 0; | |
839 dxr2_set_overlay_window(); | |
840 break; | |
841 } | |
842 vo_config_count = cc; | |
843 if(!sub_vo) { // Fallback on non windowed overlay | |
7981 | 844 vo_fs = flags & VOFLAG_FULLSCREEN ? 1 : 0; |
6181 | 845 om.arg = DXR2_OVERLAY_WINDOW_KEY; |
846 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_MODE,&om); | |
847 win.arg1 = flags & VOFLAG_FULLSCREEN ? vo_screenwidth : width; | |
848 win.arg2 = flags & VOFLAG_FULLSCREEN ? vo_screenheight : height; | |
849 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_DIMENSION, &win); | |
850 win.arg1 = (vo_screenwidth - win.arg1) / 2; | |
851 win.arg2 = (vo_screenheight - win.arg2) / 2; | |
852 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_POSITION,&win); | |
853 } | |
854 break; | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
855 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
856 |
11542 | 857 if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); |
858 | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
859 // start playing |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
860 if(ioctl(dxr2_fd, DXR2_IOC_PLAY, NULL) == 0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
861 playing = 1; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
862 return 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
863 } else |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
864 return VO_ERROR; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
865 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
866 |
7970 | 867 static void clear_alpha(int x0,int y0, int w,int h) { |
868 uint8_t* src[] = { sub_img , NULL, NULL }; | |
869 int stride[] = { movie_w * 3, 0, 0 }; | |
870 | |
871 sub_vo->draw_slice(src,stride,w,h,x0,y0); | |
872 } | |
873 | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
874 static void draw_osd(void) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
875 { |
7970 | 876 if(sub_vo && ol_osd) { |
877 vo_remove_text(movie_w,movie_h,clear_alpha); | |
878 sub_vo->draw_osd(); | |
879 } | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
880 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
881 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
882 static uint32_t draw_frame(uint8_t * src[]) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
883 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
884 vo_mpegpes_t *p=(vo_mpegpes_t *)src[0]; |
6111
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
885 if(p->id == 0x1E0) {// Video |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
886 dxr2_send_packet(p->data, p->size, p->id, p->timestamp); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
887 } else if(p->id == 0x20) // Subtitles |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
888 dxr2_send_sub_packet(p->data, p->size, p->id, p->timestamp); |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
889 return 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
890 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
891 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
892 static void flip_page (void) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
893 { |
7981 | 894 if(sub_vo && ol_osd && vo_osd_changed_flag) |
7970 | 895 sub_vo->flip_page(); |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
896 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
897 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
898 static uint32_t draw_slice( uint8_t *srcimg[], int stride[], int w, int h, int x0, int y0 ) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
899 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
900 return 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
901 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
902 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
903 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
904 static uint32_t query_format(uint32_t format) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
905 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
906 if (format==IMGFMT_MPEGPES) |
6074
10a30eebafaf
Applied patch from Tobias Diedrich <ranma@gmx.at>, added volume setting
albeu
parents:
6070
diff
changeset
|
907 return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_TIMER|VFCAP_SPU; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
908 return 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
909 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
910 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
911 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
912 static void uninit(void) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
913 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
914 mp_msg(MSGT_VO,MSGL_DBG2, "VO: [dxr2] Uninitializing\n" ); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
915 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
916 if (dxr2_fd > 0) { |
6111
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
917 if(playing) { |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
918 dxr2_send_eof(); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
919 flush_dxr2(); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
920 playing = 0; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
921 } |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
922 close(dxr2_fd); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
923 dxr2_fd = -1; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
924 } |
6181 | 925 if(sub_img) { |
926 free(sub_img); | |
927 sub_img = NULL; | |
928 } | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
929 if(sub_vo) { |
6181 | 930 int cc = vo_config_count; |
931 vo_config_count = sub_config_count; | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
932 sub_vo->uninit(); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
933 sub_vo = NULL; |
6181 | 934 vo_config_count = cc; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
935 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
936 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
937 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
938 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
939 static void check_events(void) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
940 { |
6181 | 941 // I'd like to have this done in an x11 independent way |
942 // It's because of this that we are limited to vo_x11 for windowed overlay :-( | |
943 #ifdef X11_FULLSCREEN | |
7970 | 944 if(sub_vo && sub_vo_win) { |
6181 | 945 int e=vo_x11_check_events(mDisplay); |
946 if ( !(e&VO_EVENT_RESIZE) && !(e&VO_EVENT_EXPOSE) ) return; | |
947 XSetBackground(mDisplay, vo_gc, 0); | |
948 XClearWindow(mDisplay, vo_window); | |
949 dxr2_set_overlay_window(); | |
950 } | |
951 #endif | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
952 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
953 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
954 static uint32_t preinit(const char *arg) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
955 int uCodeFD = -1; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
956 int uCodeSize; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
957 dxr2_uCode_t* uCode; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
958 dxr2_fourArg_t crop; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
959 int n=0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
960 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
961 sub_vo = NULL; |
6181 | 962 sub_config_count = 0; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
963 if(use_ol) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
964 if (arg) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
965 for(n = 0 ; video_out_drivers[n] != NULL ; n++) { |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8115
diff
changeset
|
966 const vo_info_t* vi = video_out_drivers[n]->info; |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
967 if(!vi) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
968 continue; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
969 if(strcasecmp(arg,vi->short_name) == 0) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
970 break; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
971 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
972 sub_vo = video_out_drivers[n]; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
973 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
974 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] We need a sub driver to initialize the overlay\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
975 use_ol = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
976 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
977 } |
6070 | 978 |
979 if(!sub_vo) { | |
980 if(use_ol) | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
981 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] Sub driver '%s' not found => no overlay\n",arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
982 use_ol = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
983 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
984 if(sub_vo->preinit(NULL) != 0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
985 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] Sub vo %s preinit failed => no overlay\n",arg); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
986 sub_vo = NULL; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
987 use_ol = 0; |
7981 | 988 } else { |
989 uint32_t fmt = IMGFMT_BGR24; | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
990 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] Sub vo %s inited\n",arg); |
7981 | 991 if(sub_vo->control(VOCTRL_QUERY_FORMAT,&fmt) <= 0) { |
992 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] Sub vo %s doesn't support BGR24 => no overlay\n",arg); | |
993 sub_vo->uninit(); | |
994 sub_vo = NULL; | |
995 use_ol = 0; | |
996 } | |
997 } | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
998 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
999 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1000 dxr2_fd = open( "/dev/dxr2", O_WRONLY); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1001 if( dxr2_fd < 0 ) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1002 mp_msg(MSGT_VO,MSGL_V, "VO: [dxr2] Error opening /dev/dxr2 for writing!\n" ); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1003 return VO_ERROR; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1004 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1005 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1006 if(ucode) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1007 uCodeFD = open(ucode, O_RDONLY); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1008 else for (n=0; ucodesearchpath[n] != NULL; n++) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1009 mp_msg(MSGT_VO,MSGL_V,"VO: [dxr2] Looking for microcode in %s... ", |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1010 ucodesearchpath[n]); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1011 if ((uCodeFD = open(ucodesearchpath[n], O_RDONLY))>0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1012 mp_msg(MSGT_VO,MSGL_V,"ok\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1013 break; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1014 } else { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1015 mp_msg(MSGT_VO,MSGL_V,"failed (%s)\n", strerror(errno)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1016 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1017 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1018 if (uCodeFD < 0) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1019 mp_msg(MSGT_VO,MSGL_ERR,"VO: [dxr2] Could not open microcode\n"); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1020 return VO_ERROR; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1021 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1022 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1023 uCodeSize = lseek(uCodeFD, 0, SEEK_END); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1024 if ((uCode = malloc(uCodeSize + 4)) == NULL) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1025 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1026 mp_msg(MSGT_VO,MSGL_FATAL,"VO: [dxr2] Could not allocate memory for uCode: %s\n", strerror(errno)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1027 return VO_ERROR; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1028 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1029 lseek(uCodeFD, 0, SEEK_SET); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1030 if (read(uCodeFD, uCode+4, uCodeSize) != uCodeSize) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1031 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1032 mp_msg(MSGT_VO,MSGL_ERR,"VO: [dxr2] Could not read uCode uCode: %s\n", strerror(errno)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1033 return VO_ERROR; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1034 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1035 close(uCodeFD); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1036 uCode->uCodeLength = uCodeSize; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1037 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1038 // upload ucode |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1039 ioctl(dxr2_fd, DXR2_IOC_INIT_ZIVADS, uCode); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1040 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1041 // reset card |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1042 ioctl(dxr2_fd, DXR2_IOC_RESET, NULL); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1043 playing = 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1044 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1045 if(!use_ol) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1046 crop.arg1=0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1047 crop.arg2=0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1048 crop.arg3=0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1049 crop.arg4=0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1050 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_CROPPING, &crop); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1051 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1052 return 0; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1053 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1054 |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1055 static uint32_t control(uint32_t request, void *data, ...) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1056 { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1057 switch (request) { |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1058 case VOCTRL_QUERY_FORMAT: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1059 return query_format(*((uint32_t*)data)); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1060 case VOCTRL_PAUSE: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1061 ioctl(dxr2_fd,DXR2_IOC_PAUSE, NULL); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1062 return VO_TRUE; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1063 case VOCTRL_RESUME: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1064 ioctl(dxr2_fd, DXR2_IOC_PLAY, NULL); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1065 return VO_TRUE; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1066 case VOCTRL_RESET: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1067 flush_dxr2(); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1068 ioctl(dxr2_fd, DXR2_IOC_PLAY, NULL); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1069 return VO_TRUE; |
11542 | 1070 case VOCTRL_ONTOP: |
1071 vo_x11_ontop(); | |
1072 return VO_TRUE; | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1073 case VOCTRL_FULLSCREEN: |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1074 if(!use_ol) |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1075 return VO_NOTIMPL; |
7970 | 1076 else if(sub_vo) { |
1077 int r = sub_vo->control(VOCTRL_FULLSCREEN,0); | |
1078 if(r == VO_TRUE && !sub_vo_win) | |
1079 dxr2_set_overlay_window(); | |
1080 return r; | |
1081 } else { | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1082 dxr2_twoArg_t win; |
6181 | 1083 vo_fs = !vo_fs; |
1084 win.arg1 = vo_fs ? vo_screenwidth : movie_w; | |
1085 win.arg2 = vo_fs ? vo_screenheight : movie_h; | |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1086 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_DIMENSION, &win); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1087 win.arg1 = (vo_screenwidth - win.arg1) / 2; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1088 win.arg2 = (vo_screenheight - win.arg2) / 2; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1089 ioctl(dxr2_fd, DXR2_IOC_SET_OVERLAY_POSITION,&win); |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1090 return VO_TRUE; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1091 } |
6111
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
1092 case VOCTRL_SET_SPU_PALETTE: { |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
1093 if(ioctl(dxr2_fd,DXR2_IOC_SET_SUBPICTURE_PALETTE,data) < 0) { |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
1094 mp_msg(MSGT_VO,MSGL_WARN,"VO: [dxr2] SPU palette loading failed\n"); |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
1095 return VO_ERROR; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
1096 } |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
1097 return VO_TRUE; |
582960ab7cc7
Workaround the bug in x11 vo's (if it's one) wich let a window in the way
albeu
parents:
6074
diff
changeset
|
1098 } |
6069
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1099 } |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1100 return VO_NOTIMPL; |
8e88e92fe331
Initial support for dxr2. Based on patch from Tobias Diedrich <ranma@gmx.at>.
albeu
parents:
diff
changeset
|
1101 } |