annotate libvo/vo_mpegpes.c @ 35394:7bad316da87a

stream ftp: Pass full buffer size to snprintf Previously the buffer size was always passed as one less than the underlying buffer's size. This is not using the underlying buffer to its full potential according to the C99 standard. The last byte of the buffers were never used. No vulnerabilities should have been caused by this mistake because the strings stored in the buffers were zero terminated at all times. Neither were out-of-array writes nor reads possible.
author al
date Mon, 26 Nov 2012 23:36:00 +0000
parents d7d180520491
children 5d3f93051de9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
3 *
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
4 * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
5 * & Marcus Metzler <marcus@convergence.de>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
6 * for convergence integrated media GmbH
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
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
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
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
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
26 */
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
27
6239
22cf38f95151 warning fix (write()/close() require unistd.h)
pl
parents: 5881
diff changeset
28 #include "config.h"
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
29 #include <stdio.h>
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
30 #include <stdlib.h>
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
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
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
33 #include <sys/types.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
34 #include <sys/stat.h>
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
35 #include <fcntl.h>
6239
22cf38f95151 warning fix (write()/close() require unistd.h)
pl
parents: 5881
diff changeset
36 #include <unistd.h>
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
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
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
41 #define true 1
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
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
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
44
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
45 #include <sys/ioctl.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
46 #include <stdio.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
47 #include <time.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
48
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
49 #include <linux/dvb/dmx.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
50 #include <linux/dvb/frontend.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
51 #include <linux/dvb/video.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
52 #include <linux/dvb/audio.h>
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
53 #endif
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
54
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
55 #include "config.h"
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
56 #include "video_out.h"
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
57 #include "video_out_internal.h"
19148
3b839a8d297a simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents: 16171
diff changeset
58 #include "libmpdemux/mpeg_packetizer.h"
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
59
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
60 int vo_mpegpes_fd=-1;
32070
acb0f1b02040 Rename vo_mpegpes_fd2 variable to ao_mpegpes_fd.
diego
parents: 31428
diff changeset
61 extern int ao_mpegpes_fd;
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
62
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
63 static const vo_info_t info =
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
64 {
27430
8bc08d1b115d 100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents: 27369
diff changeset
65 #ifdef CONFIG_DVB
27368
a50cc6945dfd cosmetics: typo fixes
diego
parents: 25558
diff changeset
66 "MPEG-PES to DVB card",
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
67 #else
27368
a50cc6945dfd cosmetics: typo fixes
diego
parents: 25558
diff changeset
68 "MPEG-PES file",
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
69 #endif
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
70 "mpegpes",
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
71 "A'rpi",
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
72 ""
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
73 };
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
74
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
75 const LIBVO_EXTERN (mpegpes)
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7860
diff changeset
76
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
77 static int
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13048
diff changeset
78 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
79 {
27430
8bc08d1b115d 100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents: 27369
diff changeset
80 #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
81 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
82 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
83 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
84 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
85 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
86 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
87 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
88 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
89 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
90 }
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 #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
92 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
93 }
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
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
95 static int preinit(const char *arg){
27430
8bc08d1b115d 100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents: 27369
diff changeset
96 #ifdef CONFIG_DVB
25558
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
97 int card = -1;
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
98 char vo_file[30], ao_file[30], *tmp;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
99
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
100 if(arg != NULL){
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
101 if((tmp = strstr(arg, "card=")) != NULL) {
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
102 card = atoi(&tmp[5]);
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
103 if((card < 1) || (card > 4)) {
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
104 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
105 return -1;
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
106 }
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
107 card--;
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
108 arg = NULL;
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
109 }
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
110 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
111
7672
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
112 if(!arg){
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
113 //|O_NONBLOCK
25558
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
114 //search the first usable card
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
115 if(card==-1) {
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
116 int n;
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
117 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
118 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
119 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
120 card = n;
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
121 break;
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
122 }
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 if(card==-1) {
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
126 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
127 return -1;
634dfaa85718 when :card isn't specified by the user search the first available card
nicodvb
parents: 25220
diff changeset
128 }
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
129 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
130 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
131 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
132 if((vo_mpegpes_fd = open(vo_file,O_RDWR)) < 0){
8594
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
133 perror("DVB VIDEO DEVICE: ");
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
134 return -1;
00326905484b DVB-HEAD (aka. NEWSTRUCT) detection & support
arpi
parents: 8148
diff changeset
135 }
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
136 if ( (ioctl(vo_mpegpes_fd,VIDEO_SET_BLANK, false) < 0)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
137 perror("DVB VIDEO SET BLANK: ");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
138 return -1;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
139 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
140 if ( (ioctl(vo_mpegpes_fd,VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY) < 0)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
141 perror("DVB VIDEO SELECT SOURCE: ");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
142 return -1;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
143 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
144 if ( (ioctl(vo_mpegpes_fd,VIDEO_PLAY) < 0)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
145 perror("DVB VIDEO PLAY: ");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
146 return -1;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
147 }
7672
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
148 return 0;
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
149 }
e6b46875e1b9 - fixed a 10l bug: setting PTS flag even if no PTS stored
arpi
parents: 7124
diff changeset
150 #endif
13048
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
151 arg = (arg ? arg : "grab.mpg");
2f150c190f7a user can select dvb card number to use (V3 api only)
nicodvb
parents: 8917
diff changeset
152 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
153 vo_mpegpes_fd=open(arg,O_WRONLY|O_CREAT,0666);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
154 if(vo_mpegpes_fd<0){
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
155 perror("vo_mpegpes");
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
156 return -1;
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
157 }
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
158 return 0;
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
159 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
160
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
161
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
162 static void draw_osd(void)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
163 {
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
164 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
165
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
166
31428
68c60d07cdbc Mark data parameter of my_write function as const.
diego
parents: 30776
diff changeset
167 static int my_write(const unsigned char* data,int len){
19153
8df0a51b0e37 fix compilation if DVB is not defined
ben
parents: 19150
diff changeset
168 int orig_len = len;
27430
8bc08d1b115d 100l: Rename missed preprocessor directives from a HAVE_ prefix to CONFIG_.
diego
parents: 27369
diff changeset
169 #ifdef CONFIG_DVB
2066
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
170 #define NFD 2
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
171 struct pollfd pfd[NFD];
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
172
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
173 // printf("write %d bytes \n",len);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
174
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
175 pfd[0].fd = vo_mpegpes_fd;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
176 pfd[0].events = POLLOUT;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
177
32070
acb0f1b02040 Rename vo_mpegpes_fd2 variable to ao_mpegpes_fd.
diego
parents: 31428
diff changeset
178 pfd[1].fd = ao_mpegpes_fd;
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
179 pfd[1].events = POLLOUT;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
180
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
181 while(len>0){
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
182 if (poll(pfd,NFD,1)){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
183 if (pfd[0].revents & POLLOUT){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
184 int ret=write(vo_mpegpes_fd,data,len);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28446
diff changeset
185 // printf("ret=%d \n",ret);
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
186 if(ret<=0){
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
187 perror("write");
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
188 usleep(0);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
189 } else {
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
190 len-=ret; data+=ret;
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
191 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
192 } else usleep(1000);
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
193 }
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
194 }
2066
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
195
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
196 #else
2b14cad013b7 using poll() only for DVB card - not required for file write
arpi
parents: 1986
diff changeset
197 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
198 #endif
19150
8f2b737e2a70 my_write() must return the bytes written
nicodvb
parents: 19148
diff changeset
199 return orig_len;
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
200 }
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
201
30556
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
202 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
203 {
19148
3b839a8d297a simplified mpeg packetizer used by hw mpeg decoders/vo - first round
nicodvb
parents: 16171
diff changeset
204 send_mpeg_pes_packet (data, len, id, timestamp, 1, my_write);
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
205 }
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
206
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
207 static int draw_frame(uint8_t * src[])
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
208 {
1872
2fe0e11bab3c file writer implemented
arpi
parents: 1871
diff changeset
209 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
210 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
211 return 0;
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
212 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
213
1935
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
214 static void flip_page (void)
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 }
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
217
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
218 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
219 {
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
220 return 0;
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
fcd39f3b13d4 YV12 support (using libavcodec for mpeg1-I encoding)
arpi
parents: 1876
diff changeset
223
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
224 static int
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
225 query_format(uint32_t format)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
226 {
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13048
diff changeset
227 if(format==IMGFMT_MPEGPES) return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_TIMER;
1871
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
228 return 0;
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
229 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
230
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
231 static void
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
232 uninit(void)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
233 {
32070
acb0f1b02040 Rename vo_mpegpes_fd2 variable to ao_mpegpes_fd.
diego
parents: 31428
diff changeset
234 if(ao_mpegpes_fd >= 0 && ao_mpegpes_fd != vo_mpegpes_fd) close(ao_mpegpes_fd);
33709
d7d180520491 Cosmetics: Fix strange space placement.
reimar
parents: 33305
diff changeset
235 ao_mpegpes_fd = -1;
1876
220475b1676a PS multiplexing fixed
arpi
parents: 1872
diff changeset
236 if(vo_mpegpes_fd>=0){ close(vo_mpegpes_fd);vo_mpegpes_fd=-1;}
1871
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
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
240 static void check_events(void)
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
241 {
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
242 }
cb5dde69354b Mpeg PES added
arpi
parents:
diff changeset
243
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 32070
diff changeset
244 static int control(uint32_t request, void *data)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4341
diff changeset
245 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
246 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
247 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
248 return query_format(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
249 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
250 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4341
diff changeset
251 }