mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02:00
dropped several unused functions in libdvbmpeg
This commit is contained in:
parent
6c9c6ca77f
commit
8850e63da5
1
HISTORY
1
HISTORY
@ -1,6 +1,7 @@
|
||||
VDR Plugin 'streamdev' Revision History
|
||||
---------------------------------------
|
||||
|
||||
- dropped several unused functions in libdvbmpeg
|
||||
- restricted VTP command RENR to liemikuutio patch < 1.32. Build fails with
|
||||
newer versions of this patch (thanks to Ville Skyttä)
|
||||
- updated outdated COPYING file and FSF address (thanks to Ville Skyttä)
|
||||
|
@ -1876,528 +1876,3 @@ int write_ps_header(uint8_t *buf,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define MAX_BASE 80
|
||||
#define MAX_PATH 256
|
||||
#define MAX_EXT 10
|
||||
|
||||
int break_up_filename(char *name, char *base_name, char *path, char *ext)
|
||||
{
|
||||
int l,i,sstop,sstart;
|
||||
|
||||
l = strlen(name);
|
||||
sstop = l;
|
||||
sstart = -1;
|
||||
for( i= l-1; i >= 0; i--){
|
||||
if (sstop == l && name[i] == '.') sstop = i;
|
||||
if (sstart<0 && name[i] == '/') sstart = i+1;
|
||||
}
|
||||
if (sstart < 0) sstart = 0;
|
||||
if (sstop-sstart < MAX_BASE){
|
||||
strncpy(base_name, name+sstart, sstop-sstart);
|
||||
base_name[sstop-sstart]=0;
|
||||
if(sstart > 0){
|
||||
if( l - sstop + sstart < MAX_PATH){
|
||||
strncpy(path, name, sstart);
|
||||
path[sstart] = 0;
|
||||
} else {
|
||||
fprintf(stderr,"PATH too long\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
} else {
|
||||
strcpy(path, "./");
|
||||
}
|
||||
|
||||
if(sstop < l){
|
||||
if( l - sstop -1 < MAX_EXT){
|
||||
strncpy(ext, name+sstop+1, l-sstop-1);
|
||||
ext[l-sstop-1]=0;
|
||||
} else {
|
||||
fprintf(stderr,"Extension too long\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
} else {
|
||||
strcpy(ext, "");
|
||||
}
|
||||
|
||||
} else {
|
||||
fprintf(stderr,"Name too long\n");
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
printf("%d %d\n",sstart, sstop);
|
||||
printf("%s %d\n",name, strlen(name));
|
||||
printf("%s %d\n",base_name, strlen(base_name));
|
||||
printf("%s %d\n",path,strlen(path));
|
||||
printf("%s %d\n",ext,strlen(ext));
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int seek_mpg_start(uint8_t *buf, int size)
|
||||
{
|
||||
int found = 0;
|
||||
int c=0;
|
||||
int seq = 0;
|
||||
int mpeg = 0;
|
||||
int mark = 0;
|
||||
|
||||
while ( !seq ){
|
||||
while (found != 4){
|
||||
switch (found) {
|
||||
case 0:
|
||||
if ( buf[c] == 0x00 ) found++;
|
||||
c++;
|
||||
break;
|
||||
case 1:
|
||||
if ( buf[c] == 0x00 ) found++;
|
||||
else found = 0;
|
||||
c++;
|
||||
break;
|
||||
case 2:
|
||||
if ( buf[c] == 0x01 ) found++;
|
||||
else found = 0;
|
||||
if ( buf[c] == 0x00 ) found = 2;
|
||||
c++;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if ( (buf[c] & 0xe0) == 0xe0 ) found++;
|
||||
else found = 0;
|
||||
c++;
|
||||
break;
|
||||
}
|
||||
if (c >= size) return -1;
|
||||
}
|
||||
|
||||
if (found == 4){
|
||||
mark = c-4;
|
||||
c+=2;
|
||||
if (c >= size) return -1;
|
||||
|
||||
if ( (buf[c] & 0xC0) == 0x80 ){
|
||||
mpeg = 2;
|
||||
c += 2;
|
||||
if (c >= size) return -1;
|
||||
c += buf[c]+1;
|
||||
if (c >= size) return -1;
|
||||
} else {
|
||||
mpeg = 1;
|
||||
while( buf[c] == 0xFF ) {
|
||||
c++;
|
||||
if (c >= size) return -1;
|
||||
}
|
||||
if ( (buf[c] & 0xC0) == 0x40) c+=2;
|
||||
if (c >= size) return -1;
|
||||
if ( (buf[c] & 0x30) ){
|
||||
if ( (buf[c] & 0x30) == 0x20) c+=5;
|
||||
else c+=10;
|
||||
} else c++;
|
||||
if (c >= size) return -1;
|
||||
}
|
||||
|
||||
if ( buf[c] == 0x00 &&
|
||||
buf[c+1] == 0x00 &&
|
||||
buf[c+2] == 0x01 &&
|
||||
buf[c+3] == 0xB3 )
|
||||
seq = 1;
|
||||
}
|
||||
found = 0;
|
||||
}
|
||||
|
||||
return size-mark;
|
||||
}
|
||||
|
||||
|
||||
void write_mpg(int fstart, uint64_t length, int fdin, int fdout)
|
||||
{
|
||||
// uint8_t mpeg_end[4] = { 0x00, 0x00, 0x01, 0xB9 };
|
||||
uint8_t *buf;
|
||||
uint64_t l=0;
|
||||
uint64_t count = 0;
|
||||
struct stat sb;
|
||||
int buf_size;
|
||||
|
||||
fstat (fdout, &sb);
|
||||
buf_size = sb.st_blksize;
|
||||
|
||||
buf = (uint8_t *) alloca (buf_size + sizeof (int));
|
||||
|
||||
lseek(fdin, fstart, SEEK_SET);
|
||||
|
||||
while ( count < length && (l = read(fdin,buf,buf_size)) >= 0){
|
||||
if (l > 0) count+=l;
|
||||
write(fdout,buf,l);
|
||||
printf("written %02.2f%%\r",(100.*count)/length);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
//write( fdout, mpeg_end, 4);
|
||||
}
|
||||
|
||||
|
||||
#define CHECKBUF (1024*1024)
|
||||
#define ONE_GIG (1024UL*1024UL*1024UL)
|
||||
void split_mpg(char *name, uint64_t size)
|
||||
{
|
||||
char base_name[MAX_BASE];
|
||||
char path[MAX_PATH];
|
||||
char ext[MAX_EXT];
|
||||
char new_name[256];
|
||||
uint8_t buf[CHECKBUF];
|
||||
int fdin;
|
||||
int fdout;
|
||||
uint64_t length = 0;
|
||||
uint64_t last;
|
||||
int i;
|
||||
int mark, csize;
|
||||
struct stat sb;
|
||||
|
||||
if (break_up_filename(name,base_name,path,ext) < 0) exit(1);
|
||||
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if ( (fdin = open(name, O_RDONLY)) < 0){
|
||||
#else
|
||||
if ( (fdin = open(name, O_RDONLY|O_LARGEFILE)) < 0){
|
||||
#endif
|
||||
fprintf(stderr,"Can't open %s\n",name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fstat (fdin, &sb);
|
||||
|
||||
length = sb.st_size;
|
||||
if ( length < ONE_GIG )
|
||||
printf("Filelength = %2.2f MB\n", length/1024./1024.);
|
||||
else
|
||||
printf("Filelength = %2.2f GB\n", length/1024./1024./1024.);
|
||||
|
||||
if ( length < size ) length = size;
|
||||
|
||||
printf("Splitting %s into Files with size <= %2.2f MB\n",name,
|
||||
size/1024./1024.);
|
||||
|
||||
csize = CHECKBUF;
|
||||
read(fdin, buf, csize);
|
||||
if ( (mark = seek_mpg_start(buf,csize)) < 0){
|
||||
fprintf(stderr,"Couldn't find sequence header\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
last = csize-mark;
|
||||
|
||||
for ( i = 0 ; i < length/size; i++){
|
||||
csize = CHECKBUF;
|
||||
|
||||
if (csize > length-last) csize = length-last;
|
||||
lseek(fdin, last+size-csize, SEEK_SET);
|
||||
read(fdin, buf, csize);
|
||||
if ( (mark = seek_mpg_start(buf,csize)) < 0){
|
||||
fprintf(stderr,"Couldn't find sequence header\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sprintf(new_name,"%s-%03d.%s",base_name,i,ext);
|
||||
printf("writing %s\n",new_name);
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
|
||||
#else
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|
||||
|O_LARGEFILE,
|
||||
#endif
|
||||
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
|
||||
S_IROTH|S_IWOTH)) < 0){
|
||||
fprintf(stderr,"Can't open %s\n",new_name);
|
||||
exit(1);
|
||||
}
|
||||
write_mpg(last, size-mark, fdin, fdout);
|
||||
last = last + size - mark;
|
||||
}
|
||||
sprintf(new_name,"%s-%03d.%s",base_name,i,ext);
|
||||
printf("writing %s\n",new_name);
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
|
||||
#else
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|
||||
|O_LARGEFILE,
|
||||
#endif
|
||||
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
|
||||
S_IROTH|S_IWOTH)) < 0){
|
||||
fprintf(stderr,"Can't open %s\n",new_name);
|
||||
exit(1);
|
||||
}
|
||||
write_mpg(last, length-last, fdin, fdout);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void cut_mpg(char *name, uint64_t size)
|
||||
{
|
||||
char base_name[MAX_BASE];
|
||||
char path[MAX_PATH];
|
||||
char ext[MAX_EXT];
|
||||
char new_name[256];
|
||||
uint8_t buf[CHECKBUF];
|
||||
int fdin;
|
||||
int fdout;
|
||||
uint64_t length = 0;
|
||||
uint64_t last;
|
||||
int mark, csize;
|
||||
struct stat sb;
|
||||
|
||||
if (break_up_filename(name,base_name,path,ext) < 0) exit(1);
|
||||
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if ( (fdin = open(name, O_RDONLY)) < 0){
|
||||
#else
|
||||
if ( (fdin = open(name, O_RDONLY|O_LARGEFILE)) < 0){
|
||||
#endif
|
||||
fprintf(stderr,"Can't open %s\n",name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fstat (fdin, &sb);
|
||||
|
||||
length = sb.st_size;
|
||||
if ( length < ONE_GIG )
|
||||
printf("Filelength = %2.2f MB\n", length/1024./1024.);
|
||||
else
|
||||
printf("Filelength = %2.2f GB\n", length/1024./1024./1024.);
|
||||
|
||||
if ( length < size ) length = size;
|
||||
|
||||
printf("Splitting %s into 2 Files with length %.2f MB and %.2f MB\n",
|
||||
name, size/1024./1024., (length-size)/1024./1024.);
|
||||
|
||||
csize = CHECKBUF;
|
||||
read(fdin, buf, csize);
|
||||
if ( (mark = seek_mpg_start(buf,csize)) < 0){
|
||||
fprintf(stderr,"Couldn't find sequence header\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
last = csize-mark;
|
||||
|
||||
if (csize > length-last) csize = length-last;
|
||||
lseek(fdin, last+size-csize, SEEK_SET);
|
||||
read(fdin, buf, csize);
|
||||
if ( (mark = seek_mpg_start(buf,csize)) < 0){
|
||||
fprintf(stderr,"Couldn't find sequence header\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sprintf(new_name,"%s-1.%s",base_name,ext);
|
||||
printf("writing %s\n",new_name);
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
|
||||
#else
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|
||||
|O_LARGEFILE,
|
||||
#endif
|
||||
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
|
||||
S_IROTH|S_IWOTH)) < 0){
|
||||
fprintf(stderr,"Can't open %s\n",new_name);
|
||||
exit(1);
|
||||
}
|
||||
write_mpg(last, size-mark, fdin, fdout);
|
||||
last = last + size - mark;
|
||||
|
||||
sprintf(new_name,"%s-2.%s",base_name,ext);
|
||||
printf("writing %s\n",new_name);
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC,
|
||||
#else
|
||||
if ( (fdout = open(new_name,O_WRONLY|O_CREAT|O_TRUNC
|
||||
|O_LARGEFILE,
|
||||
#endif
|
||||
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|
|
||||
S_IROTH|S_IWOTH)) < 0){
|
||||
fprintf(stderr,"Can't open %s\n",new_name);
|
||||
exit(1);
|
||||
}
|
||||
write_mpg(last, length-last, fdin, fdout);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void write_all (int fd, const char *data, int length)
|
||||
{
|
||||
int r;
|
||||
|
||||
while (length) {
|
||||
if ((r = write(fd, data, length)) > 0) {
|
||||
data += r;
|
||||
length -= r;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void read_all (int fd, char *data, int length)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while(1) {
|
||||
if( read(fd, data+c, 1) == 1) {
|
||||
c++;
|
||||
if(data[c-1] == '\n') {
|
||||
data[c] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fprintf (stderr, "Error reading socket\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *url2host (char *url, char **name, uint32_t *ip, uint32_t *port)
|
||||
{
|
||||
char *murl;
|
||||
struct hostent *hoste;
|
||||
struct in_addr haddr;
|
||||
int found_ip = 1;
|
||||
|
||||
if (!(strncmp(url, "http://", 7)))
|
||||
url += 7;
|
||||
|
||||
*name = strdup(url);
|
||||
if (!(*name)) {
|
||||
*name = NULL;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
murl = url;
|
||||
while (*murl && *murl != ':' && *murl != '/') {
|
||||
if ((*murl < '0' || *murl > '9') && *murl != '.')
|
||||
found_ip = 0;
|
||||
murl++;
|
||||
}
|
||||
|
||||
(*name)[murl - url] = 0;
|
||||
if (found_ip) {
|
||||
if ((*ip = inet_addr(*name)) == INADDR_NONE)
|
||||
return (NULL);
|
||||
} else {
|
||||
if (!(hoste = gethostbyname(*name)))
|
||||
return (NULL);
|
||||
memcpy (&haddr, hoste->h_addr, sizeof(haddr));
|
||||
*ip = haddr.s_addr;
|
||||
}
|
||||
|
||||
if (!*murl || *murl == '/') {
|
||||
*port = 80;
|
||||
return (murl);
|
||||
}
|
||||
*port = atoi(++murl);
|
||||
|
||||
while (*murl && *murl != '/')
|
||||
murl++;
|
||||
return (murl);
|
||||
}
|
||||
|
||||
#define ACCEPT "Accept: video/mpeg, video/x-mpegurl, */*\r\n"
|
||||
|
||||
int http_open (char *url)
|
||||
{
|
||||
char purl[1024], *host, req[1024], *sptr;
|
||||
uint32_t ip;
|
||||
uint32_t port;
|
||||
int sock;
|
||||
int reloc, relocnum = 0;
|
||||
struct sockaddr_in server;
|
||||
int mfd;
|
||||
|
||||
strncpy (purl, url, 1023);
|
||||
purl[1023] = '\0';
|
||||
|
||||
do {
|
||||
host = NULL;
|
||||
strcpy (req, "GET ");
|
||||
if (!(sptr = url2host(purl, &host, &ip, &port))) {
|
||||
fprintf (stderr, "Unknown host\n");
|
||||
exit (1);
|
||||
}
|
||||
strcat (req, sptr);
|
||||
sprintf (req + strlen(req),
|
||||
" HTTP/1.0\r\nUser-Agent: %s/%s\r\n",
|
||||
"whatever", "you want");
|
||||
if (host) {
|
||||
sprintf(req + strlen(req),
|
||||
"Host: %s:%u\r\n", host, port);
|
||||
free (host);
|
||||
}
|
||||
|
||||
strcat (req, ACCEPT);
|
||||
strcat (req, "\r\n");
|
||||
|
||||
server.sin_port = htons(port);
|
||||
server.sin_family = AF_INET;
|
||||
server.sin_addr.s_addr = ip;
|
||||
|
||||
if ((sock = socket(PF_INET, SOCK_STREAM, 6)) < 0) {
|
||||
perror ("socket");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (connect(sock, (struct sockaddr *)&server,
|
||||
sizeof(server))) {
|
||||
perror ("connect");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
write_all (sock, req, strlen(req));
|
||||
if (!(mfd = fileno(fdopen(sock, "rb")))) {
|
||||
perror ("open");
|
||||
exit (1);
|
||||
}
|
||||
reloc = 0;
|
||||
purl[0] = '\0';
|
||||
read_all (mfd, req, 1023);
|
||||
if ((sptr = strchr(req, ' '))) {
|
||||
switch (sptr[1]) {
|
||||
case '2':
|
||||
break;
|
||||
case '3':
|
||||
reloc = 1;
|
||||
default:
|
||||
fprintf (stderr, "HTTP req failed:%s",
|
||||
sptr+1);
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
do {
|
||||
read_all (mfd,req, 1023);
|
||||
if (!strncmp(req, "Location:", 9))
|
||||
strncpy (purl, req+10, 1023);
|
||||
} while (req[0] != '\r' && req[0] != '\n');
|
||||
} while (reloc && purl[0] && relocnum++ < 3);
|
||||
if (reloc) {
|
||||
fprintf (stderr, "Too many HTTP relocations.\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
return sock;
|
||||
}
|
||||
|
||||
extern int errno;
|
||||
const char * strerrno (void)
|
||||
{
|
||||
return strerror(errno);
|
||||
}
|
||||
|
@ -387,16 +387,7 @@ extern "C" {
|
||||
uint8_t buffer2_scale,
|
||||
uint32_t buffer2_size);
|
||||
|
||||
|
||||
int seek_mpg_start(uint8_t *buf, int size);
|
||||
|
||||
|
||||
void split_mpg(char *name, uint64_t size);
|
||||
void cut_mpg(char *name, uint64_t size);
|
||||
int http_open (char *url);
|
||||
ssize_t save_read(int fd, void *buf, size_t count);
|
||||
|
||||
const char * strerrno(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
Loading…
Reference in New Issue
Block a user