9 #include <linux/dvb/video.h>
20 int main(int argc, char **argv)
25 printf("usage: %s <iframe>\n", *argv);
29 int f = open(argv[1], O_RDONLY);
37 int fd = open("/dev/dvb/adapter0/video0", O_WRONLY|O_NONBLOCK);
41 perror("/dev/dvb/adapter0/video0");
49 int seq_end_avail = 0;
50 unsigned char pes_header[] = { 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x80, 0x00, 0x00 };
51 unsigned char seq_end[] = { 0x00, 0x00, 0x01, 0xB7 };
52 unsigned char iframe[s.st_size];
53 unsigned char stuffing[8192];
54 memset(stuffing, 0, 8192);
55 read(f, iframe, s.st_size);
56 ioctl(fd, VIDEO_SET_STREAMTYPE, 0); // set to mpeg2
57 c(ioctl(fd, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
58 c(ioctl(fd, VIDEO_PLAY));
59 c(ioctl(fd, VIDEO_CONTINUE));
60 c(ioctl(fd, VIDEO_CLEAR_BUFFER));
61 while(pos <= (s.st_size-4) && !(seq_end_avail = (!iframe[pos] && !iframe[pos+1] && iframe[pos+2] == 1 && iframe[pos+3] == 0xB7)))
63 if ((iframe[3] >> 4) != 0xE) // no pes header
64 write(fd, pes_header, sizeof(pes_header));
66 iframe[4] = iframe[5] = 0x00;
68 write(fd, iframe, s.st_size);
70 write(fd, seq_end, sizeof(seq_end));
71 write(fd, stuffing, 8192);
73 c(ioctl(fd, VIDEO_STOP, 0));
74 c(ioctl(fd, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_DEMUX));