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

Reply via email to