annotate libvo/vo_mpegpes.c @ 20752:0617c67ad68f

Fix code that cuts audio data if the filters produce too much. It incorrectly used the channel count and sample size values from the decoder even though the filters can change those.
author uau
date Tue, 07 Nov 2006 23:16:55 +0000
parents 3f2de7ba8aa0
children 3aee342be929
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
1 /*
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
2 * Based on:
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
3 *
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
4 * test_av.c - Test program for new API
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
5 *
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
6 * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
7 * & Marcus Metzler <marcus@convergence.de>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
8 * for convergence integrated media GmbH
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
9 *
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
10 * libav - MPEG-PS multiplexer, part of ffmpeg
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
11 * Copyright Gerard Lantau (see http://ffmpeg.sf.net)
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
12 *
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
13 */
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
14
6239
22cf38f95151 warning fix (write()/close() require unistd.h)
pl
parents: 5881
diff changeset
15 #include "config.h"
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
16 #include <stdio.h>
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
17 #include <stdlib.h>
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
18 #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
19 #include <errno.h>
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
20 #include <sys/types.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
21 #include <sys/stat.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
22 #include <fcntl.h>
6239
22cf38f95151 warning fix (write()/close() require unistd.h)
pl
parents: 5881
diff changeset
23 #include <unistd.h>
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
24
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
25 #include "mp_msg.h"
8594
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
26 #ifdef HAVE_DVB_HEAD
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
27 #define HAVE_DVB 1
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
28 #endif
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
29 #ifdef HAVE_DVB
8594
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
30 #ifndef HAVE_DVB_HEAD
2066
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
31 #include <sys/poll.h>
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
32
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
33 #include <sys/ioctl.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
34 #include <stdio.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
35 #include <time.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
36
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
37 #include <ost/dmx.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
38 #include <ost/frontend.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
39 #include <ost/sec.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
40 #include <ost/video.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
41 #include <ost/audio.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
42
8594
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
43 #else
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
44 #define true 1
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
45 #define false 0
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
46 #include <sys/poll.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
47
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
48 #include <sys/ioctl.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
49 #include <stdio.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
50 #include <time.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
51
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
52 #include <linux/dvb/dmx.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
53 #include <linux/dvb/frontend.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
54 #include <linux/dvb/video.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
55 #include <linux/dvb/audio.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
56 #endif
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
57 #endif
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
58
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
59 #include "config.h"
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
60 #include "video_out.h"
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
61 #include "video_out_internal.h"
19148
3b839a8d297a simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents: 16171
diff changeset
62 #include "libmpdemux/mpeg_packetizer.h"
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
63
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
64 int vo_mpegpes_fd=-1;
19184
3f2de7ba8aa0 split the incestous intercourse between ao_mpegpes and vo_mpegpes; now the devices can be used separately
nicodvb
parents: 19163
diff changeset
65 extern int vo_mpegpes_fd2;
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
66
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7860
diff changeset
67 static vo_info_t info =
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
68 {
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
69 #ifdef HAVE_DVB
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
70 "Mpeg-PES to DVB card",
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
71 #else
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
72 "Mpeg-PES file",
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
73 #endif
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
74 "mpegpes",
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
75 "A'rpi",
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
76 ""
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
77 };
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
78
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7860
diff changeset
79 LIBVO_EXTERN (mpegpes)
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7860
diff changeset
80
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
81 static int
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13048
diff changeset
82 config(uint32_t s_width, uint32_t s_height, uint32_t width, uint32_t height, uint32_t flags, char *title, uint32_t format)
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
83 {
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
84 #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
85 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
86 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
87 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
88 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
89 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
90 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
91 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
92 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
93 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
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 #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
96 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
97 }
93de400ad48e libfame code removed (use -vop fame/-vop lavc), init code moved to preinit, height checks added to config()
arpi
parents: 5844
diff changeset
98
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
99 static int preinit(const char *arg){
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
100 #ifdef HAVE_DVB
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
101 int card = 0;
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
102 char vo_file[30], ao_file[30], *tmp;
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
103
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
104 if(arg != NULL){
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
105 if((tmp = strstr(arg, "card=")) != NULL) {
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
106 card = atoi(&tmp[5]);
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
107 if((card < 1) || (card > 4)) {
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
108 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
109 return -1;
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 card--;
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
112 arg = NULL;
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
113 }
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
114 }
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
115
7672
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
116 if(!arg){
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
117 //|O_NONBLOCK
8594
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
118 #ifndef HAVE_DVB_HEAD
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
119 mp_msg(MSGT_VO,MSGL_INFO, "Opening /dev/ost/video+audio\n");
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
120 sprintf(vo_file, "/dev/ost/video");
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
121 sprintf(ao_file, "/dev/ost/audio");
8594
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
122 #else
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
123 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
124 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
125 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
126 #endif
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
127 if((vo_mpegpes_fd = open(vo_file,O_RDWR)) < 0){
8594
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
128 perror("DVB VIDEO DEVICE: ");
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
129 return -1;
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
130 }
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
131 if ( (ioctl(vo_mpegpes_fd,VIDEO_SET_BLANK, false) < 0)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
132 perror("DVB VIDEO SET BLANK: ");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
133 return -1;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
134 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
135 if ( (ioctl(vo_mpegpes_fd,VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY) < 0)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
136 perror("DVB VIDEO SELECT SOURCE: ");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
137 return -1;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
138 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
139 if ( (ioctl(vo_mpegpes_fd,VIDEO_PLAY) < 0)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
140 perror("DVB VIDEO PLAY: ");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
141 return -1;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
142 }
7672
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
143 return 0;
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
144 }
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
145 #endif
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
146 arg = (arg ? arg : "grab.mpg");
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
147 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
148 vo_mpegpes_fd=open(arg,O_WRONLY|O_CREAT,0666);
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
149 if(vo_mpegpes_fd<0){
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
150 perror("vo_mpegpes");
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
151 return -1;
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
152 }
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
153 return 0;
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
154 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
155
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
156
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
157 static void draw_osd(void)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
158 {
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
159 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
160
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
161
19150
8f2b737e2a70 my_write() must return the bytes written
nicodvb
parents: 19148
diff changeset
162 static int my_write(unsigned char* data,int len){
19153
8df0a51b0e37 fix compilation if DVB is not defined
ben
parents: 19150
diff changeset
163 int orig_len = len;
2066
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
164 #ifdef HAVE_DVB
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
165 #define NFD 2
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
166 struct pollfd pfd[NFD];
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
167
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
168 // printf("write %d bytes \n",len);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
169
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
170 pfd[0].fd = vo_mpegpes_fd;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
171 pfd[0].events = POLLOUT;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
172
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
173 pfd[1].fd = vo_mpegpes_fd2;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
174 pfd[1].events = POLLOUT;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
175
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
176 while(len>0){
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
177 if (poll(pfd,NFD,1)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
178 if (pfd[0].revents & POLLOUT){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
179 int ret=write(vo_mpegpes_fd,data,len);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
180 // printf("ret=%d \n",ret);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
181 if(ret<=0){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
182 perror("write");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
183 usleep(0);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
184 } else {
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
185 len-=ret; data+=ret;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
186 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
187 } else usleep(1000);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
188 }
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
189 }
2066
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
190
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
191 #else
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
192 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
193 #endif
19150
8f2b737e2a70 my_write() must return the bytes written
nicodvb
parents: 19148
diff changeset
194 return orig_len;
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
195 }
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
196
2706
3066369adb32 audio packet writting added
arpi
parents: 2496
diff changeset
197 void send_pes_packet(unsigned char* data,int len,int id,int timestamp){
19148
3b839a8d297a simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents: 16171
diff changeset
198 send_mpeg_pes_packet (data, len, id, timestamp, 1, my_write);
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
199 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
200
4299
8e157167cee5 LPCM write code rewritten, thanks to Marcus at mocm@convergence.de
arpi
parents: 2727
diff changeset
201 void send_lpcm_packet(unsigned char* data,int len,int id,unsigned int timestamp,int freq_id){
19161
049c74156629 reuse send_mpeg_lpcm_packet() instead of the old packetizer
nicodvb
parents: 19153
diff changeset
202 send_mpeg_lpcm_packet(data, len, id, timestamp, freq_id, my_write);
2706
3066369adb32 audio packet writting added
arpi
parents: 2496
diff changeset
203 }
3066369adb32 audio packet writting added
arpi
parents: 2496
diff changeset
204
3066369adb32 audio packet writting added
arpi
parents: 2496
diff changeset
205
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
206 static int draw_frame(uint8_t * src[])
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
207 {
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
208 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
209 send_pes_packet(p->data,p->size,p->id,(p->timestamp>0)?p->timestamp:vo_pts); // video data
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
210 return 0;
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
211 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
212
1935
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
213 static void flip_page (void)
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
214 {
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
215 }
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
216
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
217 static int draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x0,int y0)
1935
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
218 {
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
219 return 0;
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
220 }
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
221
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
222
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
223 static int
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
224 query_format(uint32_t format)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
225 {
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13048
diff changeset
226 if(format==IMGFMT_MPEGPES) return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_TIMER;
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
227 return 0;
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
228 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
229
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
230 static void
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
231 uninit(void)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
232 {
7672
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
233 if(vo_mpegpes_fd2>=0 && vo_mpegpes_fd2!=vo_mpegpes_fd) close(vo_mpegpes_fd2);
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
234 vo_mpegpes_fd2=-1;
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
235 if(vo_mpegpes_fd>=0){ close(vo_mpegpes_fd);vo_mpegpes_fd=-1;}
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
236 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
237
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
238
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
239 static void check_events(void)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
240 {
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
241 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
242
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
243 static int control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4341
diff changeset
244 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
245 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
246 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
247 return query_format(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
248 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
249 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4341
diff changeset
250 }