Mercurial > mplayer.hg
annotate libvo/vo_mpegpes.c @ 36815:4c44fdd14655
Fix issue with Win32 GUI default preferences.
Don't (mis)use option variables to set defaults (and then don't use
them when actually setting the defaults in the preferences dialog).
Set them directly (and correctly) instead, and use proper symbolic
constants.
author | ib |
---|---|
date | Sun, 23 Feb 2014 19:33:46 +0000 |
parents | 5d3f93051de9 |
children |
rev | line source |
---|---|
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
1 /* |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
2 * based on: test_av.c - test program for new API |
1876 | 3 * |
4 * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> | |
5 * & Marcus Metzler <marcus@convergence.de> | |
6 * for convergence integrated media GmbH | |
7 * | |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
8 * MPEG-PS multiplexer, part of FFmpeg |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
9 * Copyright Gerard Lantau (see http://ffmpeg.org) |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
10 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
11 * This file is part of MPlayer. |
1876 | 12 * |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
13 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
14 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
15 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
16 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
17 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
18 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
21 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
22 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
23 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
24 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27431
diff
changeset
|
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
1876 | 26 */ |
1871 | 27 |
6239 | 28 #include "config.h" |
1871 | 29 #include <stdio.h> |
30 #include <stdlib.h> | |
31 #include <string.h> | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
32 #include <errno.h> |
1876 | 33 #include <sys/types.h> |
34 #include <sys/stat.h> | |
35 #include <fcntl.h> | |
6239 | 36 #include <unistd.h> |
1876 | 37 |
5877
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
38 #include "mp_msg.h" |
27369
8598536ca4f5
Set HAVE_DVB in configure when HAVE_DVB_HEAD is defined
diego
parents:
27368
diff
changeset
|
39 |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
40 #ifdef CONFIG_DVB |
8594 | 41 #define true 1 |
42 #define false 0 | |
27431
bb738b9ea7c4
Use '#include <poll.h>' instead of '#include <sys/poll.h>'.
diego
parents:
27430
diff
changeset
|
43 #include <poll.h> |
8594 | 44 |
45 #include <sys/ioctl.h> | |
46 #include <stdio.h> | |
47 #include <time.h> | |
48 | |
49 #include <linux/dvb/dmx.h> | |
50 #include <linux/dvb/frontend.h> | |
51 #include <linux/dvb/video.h> | |
52 #include <linux/dvb/audio.h> | |
53 #endif | |
1876 | 54 |
1871 | 55 #include "config.h" |
56 #include "video_out.h" | |
36517 | 57 #define NO_DRAW_SLICE |
1871 | 58 #include "video_out_internal.h" |
19148
3b839a8d297a
simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents:
16171
diff
changeset
|
59 #include "libmpdemux/mpeg_packetizer.h" |
1871 | 60 |
1872 | 61 int vo_mpegpes_fd=-1; |
32070 | 62 extern int ao_mpegpes_fd; |
1872 | 63 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
64 static const vo_info_t info = |
1871 | 65 { |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
66 #ifdef CONFIG_DVB |
27368 | 67 "MPEG-PES to DVB card", |
1876 | 68 #else |
27368 | 69 "MPEG-PES file", |
1876 | 70 #endif |
71 "mpegpes", | |
1871 | 72 "A'rpi", |
73 "" | |
74 }; | |
75 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
76 const LIBVO_EXTERN (mpegpes) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7860
diff
changeset
|
77 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
78 static int |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13048
diff
changeset
|
79 config(uint32_t s_width, uint32_t s_height, uint32_t width, uint32_t height, uint32_t flags, char *title, uint32_t format) |
1871 | 80 { |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
81 #ifdef CONFIG_DVB |
5877
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
82 switch(s_height){ |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
83 case 288: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
84 case 576: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
85 case 240: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
86 case 480: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
87 break; |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
88 default: |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
89 mp_msg(MSGT_VO,MSGL_ERR,"DVB: height=%d not supported (try 240/480 (ntsc) or 288/576 (pal)\n",s_height); |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
90 return -1; |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
91 } |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
92 #endif |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
93 return 0; |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
94 } |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
95 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
96 static int preinit(const char *arg){ |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
97 #ifdef CONFIG_DVB |
25558
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
98 int card = -1; |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
99 char vo_file[30], ao_file[30], *tmp; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
100 |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
101 if(arg != NULL){ |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
102 if((tmp = strstr(arg, "card=")) != NULL) { |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
103 card = atoi(&tmp[5]); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
104 if((card < 1) || (card > 4)) { |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
105 mp_msg(MSGT_VO, MSGL_ERR, "DVB card number must be between 1 and 4\n"); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
106 return -1; |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
107 } |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
108 card--; |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
109 arg = NULL; |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
110 } |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
111 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
112 |
7672
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
113 if(!arg){ |
1876 | 114 //|O_NONBLOCK |
25558
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
115 //search the first usable card |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
116 if(card==-1) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
117 int n; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
118 for(n=0; n<4; n++) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
119 sprintf(vo_file, "/dev/dvb/adapter%d/video0", n); |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
120 if(access(vo_file, F_OK | W_OK)==0) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
121 card = n; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
122 break; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
123 } |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
124 } |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
125 } |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
126 if(card==-1) { |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
127 mp_msg(MSGT_VO,MSGL_INFO, "Couldn't find a usable dvb video device, exiting\n"); |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
128 return -1; |
634dfaa85718
when :card isn't specified by the user search the first available card
nicodvb
parents:
25220
diff
changeset
|
129 } |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
130 mp_msg(MSGT_VO,MSGL_INFO, "Opening /dev/dvb/adapter%d/video0+audio0\n", card); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
131 sprintf(vo_file, "/dev/dvb/adapter%d/video0", card); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
132 sprintf(ao_file, "/dev/dvb/adapter%d/audio0", card); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
133 if((vo_mpegpes_fd = open(vo_file,O_RDWR)) < 0){ |
8594 | 134 perror("DVB VIDEO DEVICE: "); |
135 return -1; | |
136 } | |
1876 | 137 if ( (ioctl(vo_mpegpes_fd,VIDEO_SET_BLANK, false) < 0)){ |
138 perror("DVB VIDEO SET BLANK: "); | |
139 return -1; | |
140 } | |
141 if ( (ioctl(vo_mpegpes_fd,VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY) < 0)){ | |
142 perror("DVB VIDEO SELECT SOURCE: "); | |
143 return -1; | |
144 } | |
145 if ( (ioctl(vo_mpegpes_fd,VIDEO_PLAY) < 0)){ | |
146 perror("DVB VIDEO PLAY: "); | |
147 return -1; | |
148 } | |
7672
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
149 return 0; |
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
150 } |
e6b46875e1b9
- fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents:
7124
diff
changeset
|
151 #endif |
13048
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
152 arg = (arg ? arg : "grab.mpg"); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
153 mp_msg(MSGT_VO,MSGL_INFO, "Saving PES stream to %s\n", arg); |
2f150c190f7a
user can select dvb card number to use (V3 api only)
nicodvb
parents:
8917
diff
changeset
|
154 vo_mpegpes_fd=open(arg,O_WRONLY|O_CREAT,0666); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
155 if(vo_mpegpes_fd<0){ |
1872 | 156 perror("vo_mpegpes"); |
157 return -1; | |
158 } | |
1871 | 159 return 0; |
160 } | |
161 | |
162 | |
163 static void draw_osd(void) | |
164 { | |
165 } | |
166 | |
1876 | 167 |
31428 | 168 static int my_write(const unsigned char* data,int len){ |
19153 | 169 int orig_len = len; |
27430
8bc08d1b115d
100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents:
27369
diff
changeset
|
170 #ifdef CONFIG_DVB |
2066
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
171 #define NFD 2 |
1876 | 172 struct pollfd pfd[NFD]; |
173 | |
174 // printf("write %d bytes \n",len); | |
175 | |
176 pfd[0].fd = vo_mpegpes_fd; | |
177 pfd[0].events = POLLOUT; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
178 |
32070 | 179 pfd[1].fd = ao_mpegpes_fd; |
1876 | 180 pfd[1].events = POLLOUT; |
181 | |
1872 | 182 while(len>0){ |
1876 | 183 if (poll(pfd,NFD,1)){ |
184 if (pfd[0].revents & POLLOUT){ | |
185 int ret=write(vo_mpegpes_fd,data,len); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28446
diff
changeset
|
186 // printf("ret=%d \n",ret); |
1876 | 187 if(ret<=0){ |
188 perror("write"); | |
189 usleep(0); | |
190 } else { | |
191 len-=ret; data+=ret; | |
192 } | |
193 } else usleep(1000); | |
194 } | |
1872 | 195 } |
2066
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
196 |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
197 #else |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
198 write(vo_mpegpes_fd,data,len); // write to file |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
199 #endif |
19150 | 200 return orig_len; |
1872 | 201 } |
1871 | 202 |
30556
358ac046eccc
libvo: Mark functions not used outside of their files as static.
diego
parents:
29263
diff
changeset
|
203 static void send_pes_packet(unsigned char* data, int len, int id, int timestamp) |
358ac046eccc
libvo: Mark functions not used outside of their files as static.
diego
parents:
29263
diff
changeset
|
204 { |
19148
3b839a8d297a
simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents:
16171
diff
changeset
|
205 send_mpeg_pes_packet (data, len, id, timestamp, 1, my_write); |
1876 | 206 } |
207 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
208 static int draw_frame(uint8_t * src[]) |
1871 | 209 { |
1872 | 210 vo_mpegpes_t *p=(vo_mpegpes_t *)src[0]; |
5877
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
211 send_pes_packet(p->data,p->size,p->id,(p->timestamp>0)?p->timestamp:vo_pts); // video data |
1871 | 212 return 0; |
213 } | |
214 | |
1935 | 215 static void flip_page (void) |
216 { | |
217 } | |
218 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
219 static int |
1871 | 220 query_format(uint32_t format) |
221 { | |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13048
diff
changeset
|
222 if(format==IMGFMT_MPEGPES) return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_TIMER; |
1871 | 223 return 0; |
224 } | |
225 | |
226 static void | |
227 uninit(void) | |
228 { | |
32070 | 229 if(ao_mpegpes_fd >= 0 && ao_mpegpes_fd != vo_mpegpes_fd) close(ao_mpegpes_fd); |
33709 | 230 ao_mpegpes_fd = -1; |
1876 | 231 if(vo_mpegpes_fd>=0){ close(vo_mpegpes_fd);vo_mpegpes_fd=-1;} |
1871 | 232 } |
233 | |
234 | |
235 static void check_events(void) | |
236 { | |
237 } | |
238 | |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
32070
diff
changeset
|
239 static int control(uint32_t request, void *data) |
4352 | 240 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
241 switch (request) { |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
242 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
243 return query_format(*((uint32_t*)data)); |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
244 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
245 return VO_NOTIMPL; |
4352 | 246 } |