Mercurial > mplayer.hg
annotate libvo/vo_mpegpes.c @ 7492:5465cbd5c5ef
Modern versions of OpenSSH listen on localhost to forward the X11 connection
(X11UseLocalhost defaults to yes). The following patch permits to consider
as non local any DISPLAY environment which port is greater or equal to 10
else mplayer tries a local optimization on a distant X server which doesn't
work.
patch by Denis.Ducamp@groar.org
author | arpi |
---|---|
date | Mon, 23 Sep 2002 21:17:30 +0000 |
parents | eca7dbad0166 |
children | e6b46875e1b9 |
rev | line source |
---|---|
5059 | 1 // Don't change for DVB card, it must be 2048 |
1876 | 2 #define PES_MAX_SIZE 2048 |
5059 | 3 |
1876 | 4 /* |
5 * Based on: | |
6 * | |
7 * test_av.c - Test program for new API | |
8 * | |
9 * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> | |
10 * & Marcus Metzler <marcus@convergence.de> | |
11 * for convergence integrated media GmbH | |
12 * | |
13 * libav - MPEG-PS multiplexer, part of ffmpeg | |
14 * Copyright Gerard Lantau (see http://ffmpeg.sf.net) | |
15 * | |
16 */ | |
1871 | 17 |
6239 | 18 #include "config.h" |
1871 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #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
|
22 #include <errno.h> |
1876 | 23 #include <sys/types.h> |
24 #include <sys/stat.h> | |
25 #include <fcntl.h> | |
6239 | 26 #include <unistd.h> |
1876 | 27 |
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
|
28 #include "mp_msg.h" |
2727 | 29 |
1876 | 30 #ifdef HAVE_DVB |
31 | |
2066
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
32 #include <sys/poll.h> |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
33 |
1876 | 34 #include <sys/ioctl.h> |
35 #include <stdio.h> | |
36 #include <time.h> | |
37 | |
38 #include <ost/dmx.h> | |
39 #include <ost/frontend.h> | |
40 #include <ost/sec.h> | |
41 #include <ost/video.h> | |
42 #include <ost/audio.h> | |
43 | |
44 #endif | |
45 | |
1871 | 46 #include "config.h" |
47 #include "video_out.h" | |
48 #include "video_out_internal.h" | |
49 | |
50 LIBVO_EXTERN (mpegpes) | |
51 | |
1872 | 52 int vo_mpegpes_fd=-1; |
1876 | 53 int vo_mpegpes_fd2=-1; |
1872 | 54 |
1871 | 55 static vo_info_t vo_info = |
56 { | |
1876 | 57 #ifdef HAVE_DVB |
58 "Mpeg-PES to DVB card", | |
59 #else | |
1871 | 60 "Mpeg-PES file", |
1876 | 61 #endif |
62 "mpegpes", | |
1871 | 63 "A'rpi", |
64 "" | |
65 }; | |
66 | |
67 static uint32_t | |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6273
diff
changeset
|
68 config(uint32_t s_width, uint32_t s_height, uint32_t width, uint32_t height, uint32_t fullscreen, char *title, uint32_t format) |
1871 | 69 { |
1876 | 70 #ifdef HAVE_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
|
71 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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 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
|
77 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
|
78 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
|
79 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
|
80 } |
93de400ad48e
libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents:
5844
diff
changeset
|
81 #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
|
82 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
|
83 } |
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 |
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 static uint32_t preinit(const char *arg){ |
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 #ifdef HAVE_DVB |
1876 | 87 //|O_NONBLOCK |
88 if((vo_mpegpes_fd = open("/dev/ost/video",O_RDWR)) < 0){ | |
89 perror("DVB VIDEO DEVICE: "); | |
90 return -1; | |
91 } | |
92 if((vo_mpegpes_fd2 = open("/dev/ost/audio",O_RDWR|O_NONBLOCK)) < 0){ | |
93 perror("DVB AUDIO DEVICE: "); | |
94 return -1; | |
95 } | |
96 if ( (ioctl(vo_mpegpes_fd,VIDEO_SET_BLANK, false) < 0)){ | |
97 perror("DVB VIDEO SET BLANK: "); | |
98 return -1; | |
99 } | |
100 if ( (ioctl(vo_mpegpes_fd,VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY) < 0)){ | |
101 perror("DVB VIDEO SELECT SOURCE: "); | |
102 return -1; | |
103 } | |
104 #if 1 | |
105 if ( (ioctl(vo_mpegpes_fd2,AUDIO_SELECT_SOURCE, AUDIO_SOURCE_MEMORY) < 0)){ | |
106 perror("DVB AUDIO SELECT SOURCE: "); | |
107 return -1; | |
108 } | |
109 if ( (ioctl(vo_mpegpes_fd2,AUDIO_PLAY) < 0)){ | |
110 perror("DVB AUDIO PLAY: "); | |
111 return -1; | |
112 } | |
113 #else | |
114 if ( (ioctl(vo_mpegpes_fd2,AUDIO_STOP,0) < 0)){ | |
115 perror("DVB AUDIO STOP: "); | |
116 return -1; | |
117 } | |
118 #endif | |
119 if ( (ioctl(vo_mpegpes_fd,VIDEO_PLAY) < 0)){ | |
120 perror("DVB VIDEO PLAY: "); | |
121 return -1; | |
122 } | |
6273 | 123 if ( (ioctl(vo_mpegpes_fd2,AUDIO_SET_AV_SYNC, true) < 0)){ |
1876 | 124 perror("DVB AUDIO SET AV SYNC: "); |
125 return -1; | |
126 } | |
127 if ( (ioctl(vo_mpegpes_fd2,AUDIO_SET_MUTE, false) < 0)){ | |
128 perror("DVB AUDIO SET MUTE: "); | |
129 return -1; | |
130 } | |
131 | |
132 #else | |
5881 | 133 vo_mpegpes_fd=open("grab.mpg",O_WRONLY|O_CREAT,0666); |
1872 | 134 if(vo_mpegpes_fd<0){ |
135 perror("vo_mpegpes"); | |
136 return -1; | |
137 } | |
1876 | 138 #endif |
1871 | 139 return 0; |
140 } | |
141 | |
142 static const vo_info_t* | |
143 get_info(void) | |
144 { | |
145 return &vo_info; | |
146 } | |
147 | |
148 static void draw_osd(void) | |
149 { | |
150 } | |
151 | |
1876 | 152 |
1872 | 153 static void my_write(unsigned char* data,int len){ |
2066
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
154 #ifdef HAVE_DVB |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
155 #define NFD 2 |
1876 | 156 struct pollfd pfd[NFD]; |
157 | |
158 // printf("write %d bytes \n",len); | |
159 | |
160 pfd[0].fd = vo_mpegpes_fd; | |
161 pfd[0].events = POLLOUT; | |
162 | |
163 pfd[1].fd = vo_mpegpes_fd2; | |
164 pfd[1].events = POLLOUT; | |
165 | |
1872 | 166 while(len>0){ |
1876 | 167 if (poll(pfd,NFD,1)){ |
168 if (pfd[0].revents & POLLOUT){ | |
169 int ret=write(vo_mpegpes_fd,data,len); | |
170 // printf("ret=%d \n",ret); | |
171 if(ret<=0){ | |
172 perror("write"); | |
173 usleep(0); | |
174 } else { | |
175 len-=ret; data+=ret; | |
176 } | |
177 } else usleep(1000); | |
178 } | |
1872 | 179 } |
2066
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
180 |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
181 #else |
2b14cad013b7
using poll() only for DVB card - not required for file write
arpi
parents:
1986
diff
changeset
|
182 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
|
183 #endif |
1872 | 184 } |
1871 | 185 |
1876 | 186 static unsigned char pes_header[PES_MAX_SIZE]; |
187 | |
2706 | 188 void send_pes_packet(unsigned char* data,int len,int id,int timestamp){ |
4306 | 189 int ptslen=timestamp?5:1; |
1876 | 190 |
4306 | 191 // startcode: |
1876 | 192 pes_header[0]=pes_header[1]=0; |
193 pes_header[2]=id>>8; pes_header[3]=id&255; | |
194 | |
4306 | 195 while(len>0){ |
196 int payload_size=len; // data + PTS | |
197 if(6+ptslen+payload_size>PES_MAX_SIZE) payload_size=PES_MAX_SIZE-(6+ptslen); | |
1876 | 198 |
199 // construct PES header: (code from ffmpeg's libav) | |
200 // packetsize: | |
4306 | 201 pes_header[4]=(ptslen+payload_size)>>8; |
202 pes_header[5]=(ptslen+payload_size)&255; | |
203 | |
204 if(ptslen==5){ | |
205 int x; | |
1876 | 206 // presentation time stamp: |
207 x=(0x02 << 4) | (((timestamp >> 30) & 0x07) << 1) | 1; | |
208 pes_header[6]=x; | |
209 x=((((timestamp >> 15) & 0x7fff) << 1) | 1); | |
210 pes_header[7]=x>>8; pes_header[8]=x&255; | |
211 x=((((timestamp) & 0x7fff) << 1) | 1); | |
212 pes_header[9]=x>>8; pes_header[10]=x&255; | |
4306 | 213 } else { |
214 // stuffing and header bits: | |
215 pes_header[6]=0x0f; | |
216 } | |
217 | |
218 memcpy(&pes_header[6+ptslen],data,payload_size); | |
219 my_write(pes_header,6+ptslen+payload_size); | |
1876 | 220 |
221 len-=payload_size; data+=payload_size; | |
4306 | 222 ptslen=1; // store PTS only once, at first packet! |
1876 | 223 } |
224 | |
225 // printf("PES: draw frame! pts=%d size=%d \n",timestamp,len); | |
226 | |
227 } | |
228 | |
4299
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
229 void send_lpcm_packet(unsigned char* data,int len,int id,unsigned int timestamp,int freq_id){ |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
230 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
231 int ptslen=timestamp?5:0; |
2706 | 232 |
4306 | 233 // startcode: |
2706 | 234 pes_header[0]=pes_header[1]=0; |
235 pes_header[2]=1; pes_header[3]=0xBD; | |
236 | |
237 while(len>=4){ | |
238 int payload_size; | |
239 | |
240 payload_size=PES_MAX_SIZE-6-20; // max possible data len | |
241 if(payload_size>len) payload_size=len; | |
242 payload_size&=(~3); // align! | |
243 | |
244 //if(6+payload_size>PES_MAX_SIZE) payload_size=PES_MAX_SIZE-6; | |
245 | |
246 // packetsize: | |
4299
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
247 pes_header[4]=(payload_size+3+ptslen+7)>>8; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
248 pes_header[5]=(payload_size+3+ptslen+7)&255; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
249 |
2706 | 250 // stuffing: |
251 pes_header[6]=0x81; | |
252 pes_header[7]=0x80; | |
4299
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
253 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
254 // hdrlen: |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
255 pes_header[8]=ptslen; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
256 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
257 if(ptslen){ |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
258 int x; |
2706 | 259 // presentation time stamp: |
260 x=(0x02 << 4) | (((timestamp >> 30) & 0x07) << 1) | 1; | |
261 pes_header[9]=x; | |
262 x=((((timestamp >> 15) & 0x7fff) << 1) | 1); | |
263 pes_header[10]=x>>8; pes_header[11]=x&255; | |
264 x=((((timestamp) & 0x7fff) << 1) | 1); | |
265 pes_header[12]=x>>8; pes_header[13]=x&255; | |
4299
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
266 } |
2706 | 267 |
4299
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
268 // ============ LPCM header: (7 bytes) ================= |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
269 // Info by mocm@convergence.de |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
270 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
271 // ID: |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
272 pes_header[ptslen+9]=id; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
273 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
274 // number of frames: |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
275 pes_header[ptslen+10]=0x07; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
276 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
277 // first acces unit pointer, i.e. start of audio frame: |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
278 pes_header[ptslen+11]=0x00; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
279 pes_header[ptslen+12]=0x04; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
280 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
281 // audio emphasis on-off 1 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
282 // audio mute on-off 1 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
283 // reserved 1 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
284 // audio frame number 5 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
285 pes_header[ptslen+13]=0x0C; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
286 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
287 // quantization word length 2 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
288 // audio sampling frequency (48khz = 0, 96khz = 1) 2 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
289 // reserved 1 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
290 // number of audio channels - 1 (e.g. stereo = 1) 3 bit |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
291 pes_header[ptslen+14]=1|(freq_id<<4); |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
292 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
293 // dynamic range control (0x80 if off) |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
294 pes_header[ptslen+15]=0x80; |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
295 |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
296 memcpy(&pes_header[6+3+ptslen+7],data,payload_size); |
8e157167cee5
LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents:
2727
diff
changeset
|
297 my_write(pes_header,6+3+ptslen+7+payload_size); |
2706 | 298 |
299 len-=payload_size; data+=payload_size; | |
4306 | 300 ptslen=0; // store PTS only once, at first packet! |
2706 | 301 } |
302 | |
303 // printf("PES: draw frame! pts=%d size=%d \n",timestamp,len); | |
304 | |
305 } | |
306 | |
307 | |
1871 | 308 static uint32_t draw_frame(uint8_t * src[]) |
309 { | |
1872 | 310 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
|
311 send_pes_packet(p->data,p->size,p->id,(p->timestamp>0)?p->timestamp:vo_pts); // video data |
1871 | 312 return 0; |
313 } | |
314 | |
1935 | 315 static void flip_page (void) |
316 { | |
317 } | |
318 | |
319 static uint32_t draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x0,int y0) | |
320 { | |
321 return 0; | |
322 } | |
323 | |
324 | |
1871 | 325 static uint32_t |
326 query_format(uint32_t format) | |
327 { | |
5566 | 328 if(format==IMGFMT_MPEGPES) return 3|VFCAP_TIMER; |
1871 | 329 return 0; |
330 } | |
331 | |
332 static void | |
333 uninit(void) | |
334 { | |
1876 | 335 if(vo_mpegpes_fd>=0){ close(vo_mpegpes_fd);vo_mpegpes_fd=-1;} |
336 if(vo_mpegpes_fd2>=0){ close(vo_mpegpes_fd2);vo_mpegpes_fd2=-1;} | |
1871 | 337 } |
338 | |
339 | |
340 static void check_events(void) | |
341 { | |
342 } | |
343 | |
4596 | 344 static uint32_t control(uint32_t request, void *data, ...) |
4352 | 345 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
346 switch (request) { |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
347 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
348 return query_format(*((uint32_t*)data)); |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
349 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
350 return VO_NOTIMPL; |
4352 | 351 } |