Update of /cvsroot/freevo/freevo/WIP/Thomas/mplayer-patches
In directory sc8-pr-cvs1:/tmp/cvs-serv2951
Modified Files:
mplayer_timeshift2.patch
Added Files:
mplayer_timeshift3.patch
Log Message:
--- NEW FILE: mplayer_timeshift3.patch ---
diff -Naur ./libmpdemux/Makefile ../main2/libmpdemux/Makefile
--- ./libmpdemux/Makefile 2003-06-09 02:24:22.000000000 +0200
+++ ../main2/libmpdemux/Makefile 2003-06-16 23:44:50.000000000 +0200
@@ -31,6 +31,8 @@
endif
+SRCS += timeshift.c
+
OBJS = $(SRCS:.c=.o)
OBJS += $(CPLUSPLUSSRCS:.cpp=.o)
INCLUDE = -I../loader $(CSS_INC) $(EXTRA_INC)
diff -Naur ./libmpdemux/open.c ../main2/libmpdemux/open.c
--- ./libmpdemux/open.c 2003-05-17 14:24:01.000000000 +0200
+++ ../main2/libmpdemux/open.c 2003-06-16 23:45:02.000000000 +0200
@@ -75,7 +75,9 @@
#include "dvbin.h"
#endif
-
+#ifdef HAVE_TIMESHIFT
+stream_t* timeshift_open(char* url);
+#endif
// Define function about auth the libsmbclient library
// FIXME: I really do not not is this function is properly working
@@ -115,7 +117,8 @@
#endif
-// Open a new stream (stdin/file/vcd/url)
+
+ // Open a new stream (stdin/file/vcd/url)
stream_t* open_stream(char* filename,char** options, int* file_format){
stream_t* stream=NULL;
@@ -127,6 +130,9 @@
return NULL;
}
+if(filename && strncmp("timeshift://",filename,12) == 0)
+ return timeshift_open(filename+12);
+
// for opening of vcds in bincue files
if(strncmp("cue://",filename,6) == 0){
int ret,ret2;
diff -Naur ./libmpdemux/stream.c ../main2/libmpdemux/stream.c
--- ./libmpdemux/stream.c 2003-06-16 22:45:17.000000000 +0200
+++ ../main2/libmpdemux/stream.c 2003-06-16 23:44:56.000000000 +0200
@@ -45,6 +45,12 @@
void dvd_close(dvd_priv_t *d);
#endif
+#ifdef HAVE_TIMESHIFT
+int timeshift_read(stream_t *s, void* buffer, int size);
+int timeshift_seek(stream_t *s, int offset, int whence);
+void timeshift_close(stream_t *s);
+#endif
+
#ifdef LIBSMBCLIENT
#include "libsmbclient.h"
#endif
@@ -169,6 +175,11 @@
int len;
if (/*s->fd == NULL ||*/ s->eof) { s->buf_pos = s->buf_len = 0; return 0; }
switch(s->type){
+#ifdef HAVE_TIMESHIFT
+ case STREAMTYPE_TIMESHIFT:
+ len=timeshift_read(s,s->buffer,STREAM_BUFFER_SIZE);
+ break;
+#endif
#ifdef LIBSMBCLIENT
case STREAMTYPE_SMB:
len=smbc_read(s->fd,s->buffer,STREAM_BUFFER_SIZE);
@@ -235,6 +246,7 @@
switch(s->type){
case STREAMTYPE_SMB:
+ case STREAMTYPE_TIMESHIFT:
case STREAMTYPE_STREAM:
#ifdef _LARGEFILE_SOURCE
newpos=pos&(~((long long)STREAM_BUFFER_SIZE-1));break;
@@ -273,6 +285,14 @@
if(newpos==0 || newpos!=s->pos){
switch(s->type){
+#ifdef HAVE_TIMESHIFT
+ case STREAMTYPE_TIMESHIFT:
+ {
+ int shiftpos = timeshift_seek(s,newpos,SEEK_SET);
+ s->pos = shiftpos ;
+ }
+ break;
+#endif
#ifdef LIBSMBCLIENT
case STREAMTYPE_SMB:
s->pos=newpos; // real seek
@@ -411,6 +431,11 @@
}
#endif
switch(s->type) {
+#ifdef HAVE_TIMESHIFT
+ case STREAMTYPE_TIMESHIFT:
+ timeshift_close(s);
+ break;
+#endif
#ifdef LIBSMBCLIENT
case STREAMTYPE_SMB:
smbc_close(s->fd);
diff -Naur ./libmpdemux/stream.h ../main2/libmpdemux/stream.h
--- ./libmpdemux/stream.h 2003-05-17 14:24:01.000000000 +0200
+++ ../main2/libmpdemux/stream.h 2003-06-16 23:44:56.000000000 +0200
@@ -19,6 +19,9 @@
#define STREAMTYPE_SMB 11 // smb:// url, using libsmbclient (samba)
#define STREAMTYPE_VCDBINCUE 12 // vcd directly from bin/cue files
#define STREAMTYPE_DVB 13
+#define STREAMTYPE_TIMESHIFT 42 // Timeshift for Freevo
+
+#define HAVE_TIMESHIFT
#define STREAM_BUFFER_SIZE 2048
Index: mplayer_timeshift2.patch
===================================================================
RCS file: /cvsroot/freevo/freevo/WIP/Thomas/mplayer-patches/mplayer_timeshift2.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mplayer_timeshift2.patch 9 Jun 2003 21:28:13 -0000 1.1
--- mplayer_timeshift2.patch 16 Jun 2003 21:21:42 -0000 1.2
***************
*** 1,5 ****
diff -Naur ./libmpdemux/Makefile ../main2/libmpdemux/Makefile
--- ./libmpdemux/Makefile 2003-06-09 02:24:22.000000000 +0200
! +++ ../main2/libmpdemux/Makefile 2003-06-09 22:57:35.000000000 +0200
@@ -31,6 +31,8 @@
endif
--- 1,5 ----
diff -Naur ./libmpdemux/Makefile ../main2/libmpdemux/Makefile
--- ./libmpdemux/Makefile 2003-06-09 02:24:22.000000000 +0200
! +++ ../main2/libmpdemux/Makefile 2003-06-16 23:44:50.000000000 +0200
@@ -31,6 +31,8 @@
endif
***************
*** 13,17 ****
diff -Naur ./libmpdemux/open.c ../main2/libmpdemux/open.c
--- ./libmpdemux/open.c 2003-05-17 14:24:01.000000000 +0200
! +++ ../main2/libmpdemux/open.c 2003-06-09 22:57:03.000000000 +0200
@@ -75,7 +75,9 @@
#include "dvbin.h"
--- 13,17 ----
diff -Naur ./libmpdemux/open.c ../main2/libmpdemux/open.c
--- ./libmpdemux/open.c 2003-05-17 14:24:01.000000000 +0200
! +++ ../main2/libmpdemux/open.c 2003-06-16 23:45:02.000000000 +0200
@@ -75,7 +75,9 @@
#include "dvbin.h"
***************
*** 46,52 ****
int ret,ret2;
diff -Naur ./libmpdemux/stream.c ../main2/libmpdemux/stream.c
! --- ./libmpdemux/stream.c 2003-06-03 19:43:49.000000000 +0200
! +++ ../main2/libmpdemux/stream.c 2003-06-09 22:57:04.000000000 +0200
! @@ -38,6 +38,12 @@
void dvd_close(dvd_priv_t *d);
#endif
--- 46,52 ----
int ret,ret2;
diff -Naur ./libmpdemux/stream.c ../main2/libmpdemux/stream.c
! --- ./libmpdemux/stream.c 2003-06-16 22:45:17.000000000 +0200
! +++ ../main2/libmpdemux/stream.c 2003-06-16 23:44:56.000000000 +0200
! @@ -45,6 +45,12 @@
void dvd_close(dvd_priv_t *d);
#endif
***************
*** 61,65 ****
#include "libsmbclient.h"
#endif
! @@ -162,6 +168,11 @@
int len;
if (/*s->fd == NULL ||*/ s->eof) { s->buf_pos = s->buf_len = 0; return 0; }
--- 61,65 ----
#include "libsmbclient.h"
#endif
! @@ -169,6 +175,11 @@
int len;
if (/*s->fd == NULL ||*/ s->eof) { s->buf_pos = s->buf_len = 0; return 0; }
***************
*** 73,77 ****
case STREAMTYPE_SMB:
len=smbc_read(s->fd,s->buffer,STREAM_BUFFER_SIZE);
! @@ -228,6 +239,7 @@
switch(s->type){
--- 73,77 ----
case STREAMTYPE_SMB:
len=smbc_read(s->fd,s->buffer,STREAM_BUFFER_SIZE);
! @@ -235,6 +246,7 @@
switch(s->type){
***************
*** 81,85 ****
#ifdef _LARGEFILE_SOURCE
newpos=pos&(~((long long)STREAM_BUFFER_SIZE-1));break;
! @@ -266,6 +278,14 @@
if(newpos==0 || newpos!=s->pos){
--- 81,85 ----
#ifdef _LARGEFILE_SOURCE
newpos=pos&(~((long long)STREAM_BUFFER_SIZE-1));break;
! @@ -273,6 +285,14 @@
if(newpos==0 || newpos!=s->pos){
***************
*** 96,100 ****
case STREAMTYPE_SMB:
s->pos=newpos; // real seek
! @@ -396,6 +416,11 @@
}
#endif
--- 96,100 ----
case STREAMTYPE_SMB:
s->pos=newpos; // real seek
! @@ -411,6 +431,11 @@
}
#endif
***************
*** 110,114 ****
diff -Naur ./libmpdemux/stream.h ../main2/libmpdemux/stream.h
--- ./libmpdemux/stream.h 2003-05-17 14:24:01.000000000 +0200
! +++ ../main2/libmpdemux/stream.h 2003-06-09 22:57:07.000000000 +0200
@@ -19,6 +19,9 @@
#define STREAMTYPE_SMB 11 // smb:// url, using libsmbclient (samba)
--- 110,114 ----
diff -Naur ./libmpdemux/stream.h ../main2/libmpdemux/stream.h
--- ./libmpdemux/stream.h 2003-05-17 14:24:01.000000000 +0200
! +++ ../main2/libmpdemux/stream.h 2003-06-16 23:44:56.000000000 +0200
@@ -19,6 +19,9 @@
#define STREAMTYPE_SMB 11 // smb:// url, using libsmbclient (samba)
***************
*** 121,309 ****
#define STREAM_BUFFER_SIZE 2048
- diff -Naur ./libmpdemux/timeshift.c ../main2/libmpdemux/timeshift.c
- --- ./libmpdemux/timeshift.c 1970-01-01 01:00:00.000000000 +0100
- +++ ../main2/libmpdemux/timeshift.c 2003-06-09 22:57:04.000000000 +0200
- @@ -0,0 +1,183 @@
- +#include <stdlib.h>
- +#include <fcntl.h>
- +#include <stdarg.h>
- +#include <errno.h>
- +#include <netdb.h>
- +#include <unistd.h>
- +#include <string.h>
- +#include <sys/ioctl.h>
- +#include <sys/types.h>
- +#include <sys/stat.h>
- +#include <unistd.h>
- +#include <sys/mman.h>
- +#include <fcntl.h>
- +#include <stdio.h>
- +
- +#include "../version.h"
- +#include "stream.h"
- +#include "network.h"
- +
- +#define OVERRUN_DELTA 1
- +#define SEEK_END_OFFSET 1000000
- +
- +typedef struct tagHeaderInfo
- +{
- + char freevots[12] ;
- + int file_size ;
- + int file_size2 ;
- + int header_size ;
- + int header_size2 ;
- + int data_size ;
- + int data_size2 ;
- + int writepointer ;
- + int writepointer2 ;
- + char reserved[20] ;
- +} HEADERINFO ;
- +
- +stream_t* timeshift_open(char* url)
- +{
- + int fd = 0;
- + caddr_t pointer ;
- + stream_t* s = NULL ;
- + fd = open( url, O_RDONLY ) ;
- + if ( fd <= 0 ) return NULL ;
- + /* read header */
- + HEADERINFO header ;
- + read( fd, &header, sizeof( header ) ) ;
- + if (strcmp( header.freevots, "freevots") == 0)
- + {
- + pointer = mmap( 0, header.file_size, PROT_READ, MAP_SHARED, fd, 0 ) ;
- + printf( "\nopen_timeshift: %s\n", url ) ;
- + s = new_stream((int)pointer,STREAMTYPE_TIMESHIFT) ;
- + }
- + else
- + {
- + printf( "\nopen_timeshift failed: %s\n", url ) ;
- + }
- + close( fd ) ;
- + return s;
- +}
- +
- +int timeshift_read(stream_t* s,void *buffer,int size)
- +{
- + int readsize ;
- + int maxpos ;
- + int waititerations ;
- + HEADERINFO * pHeader ;
- + pHeader = (HEADERINFO*) s->fd ;
- + readsize = 0 ;
- + if ( msync( (void*)s->fd, pHeader->file_size, MS_SYNC ) == -1 )
- + {
- + fprintf( stderr, "Error in msync.\n" ) ;
- + }
- + waititerations = 0 ;
- + /* Wait until size bytes are available */
- + while ( ((s->pos)+size) > pHeader->writepointer)
- + {
- + /* That's a Buffer Underrun Condition */
- + usleep( 500 * 1000 ) ;
- + if ( msync( (void*)s->fd, pHeader->file_size, MS_SYNC ) == -1 )
- + {
- + fprintf( stderr, "Error in msync.\n" ) ;
- + }
- + if ( ++waititerations > 10 )
- + {
- + fprintf( stderr, "Buffer Underrun WP: %d / RP: %d\n", pHeader->writepointer,
s->pos ) ;
- + break ;
- + }
- + }
- +
- + /* Detect a Buffer Overrun Condition */
- + if (( pHeader->writepointer - s->pos ) <= OVERRUN_DELTA )
- + {
- + fprintf( stderr, "Buffer Overrun: fd = %d, Pos = %d, WP = %i \n",
- + s->fd, s->pos, pHeader->writepointer ) ;
- + }
- + /* find maximum readpos. It's either writepos or datasize. */
- + if ( s->pos%pHeader->data_size > pHeader->writepointer%pHeader->data_size )
- + {
- + maxpos = pHeader->data_size ;
- + }
- + else
- + {
- + maxpos = pHeader->writepointer % pHeader->data_size ;
- + }
- + if ( size > maxpos - (s->pos % pHeader->data_size) )
- + {
- + size = maxpos - (s->pos % pHeader->data_size) ;
- + }
- + memcpy( buffer, (void*) s->fd + sizeof( HEADERINFO ) + (s->pos %
pHeader->data_size), size ) ;
- + /* Adjust readpointer and wrap if necessary */
- + //s->pos += size ;
- + // fprintf( stderr, "\nrp: %d / wp: %d\n", (s->pos % pHeader->data_size),
pHeader->writepointer ) ;
- + return size ;
- +}
- +
- +void timeshift_close(stream_t* s)
- +{
- + HEADERINFO * pHeader = (HEADERINFO*)(s->fd);
- + // munmap();
- +}
- +
- +int timeshift_lseek(stream_t* s, off_t offset, int whence)
- +{
- + HEADERINFO * pHeader ;
- + pHeader = (HEADERINFO*)(s->fd) ;
- + int maxoffset = pHeader->writepointer ;
- + int minoffset = maxoffset - pHeader->data_size ;
- + if ( minoffset < 0 ) minoffset = 0 ;
- + maxoffset -= SEEK_END_OFFSET;
- + int readpointer ;
- + if ( msync( (void*)s->fd, pHeader->file_size, MS_SYNC ) == -1 )
- + {
- + fprintf( stderr, "Error in msync.\n" ) ;
- + return -1 ;
- + }
- + switch ( whence )
- + {
- + case SEEK_SET:
- + readpointer = offset ;
- + if ( readpointer > maxoffset )
- + readpointer = maxoffset ;
- + if ( readpointer < minoffset )
- + readpointer = minoffset ;
- + return readpointer ;
- + break ;
- + }
- + return offset ;
- +}
- +
- +int timeshift_seek(stream_t* s,int offset,int whence)
- +{
- + HEADERINFO * pHeader ;
- + pHeader = (HEADERINFO*)(s->fd) ;
- + int maxoffset = pHeader->writepointer ;
- + int minoffset = maxoffset - pHeader->data_size ;
- + if ( minoffset < 0 ) minoffset = 0 ;
- + maxoffset -= SEEK_END_OFFSET;
- + int readpointer ;
- + if ( msync( (void*)s->fd, pHeader->file_size, MS_SYNC ) == -1 )
- + {
- + fprintf( stderr, "Error in msync.\n" ) ;
- + return -1 ;
- + }
- + switch ( whence )
- + {
- + case SEEK_SET:
- + readpointer = offset ;
- + if ( readpointer > maxoffset )
- + readpointer = maxoffset ;
- + if ( readpointer < minoffset )
- + readpointer = minoffset ;
- + return readpointer ;
- + break ;
- + case SEEK_CUR:
- + readpointer = ( readpointer + offset ) % pHeader->data_size ;
- + break ;
- + case SEEK_END:
- + /* Positioning beyond End = Position behind writepointer */
- + readpointer = ( pHeader->writepointer + offset ) % pHeader->data_size ;
- + break ;
- + }
- + return offset ;
- +}
--- 121,122 ----
-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
Freevo-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog