]> Creatis software - gdcm.git/commitdiff
ENH: IO abstract layer is finally working
authormalaterre <malaterre>
Thu, 27 Oct 2005 15:42:42 +0000 (15:42 +0000)
committermalaterre <malaterre>
Thu, 27 Oct 2005 15:42:42 +0000 (15:42 +0000)
src/gdcmmpeg2/src/mpeg2dec/global.h
src/gdcmmpeg2/src/mpeg2dec/mpeg2dec.c
src/gdcmmpeg2/src/mpeg2dec/mpeg2dec.h

index 0d592ba852fec72d86eefd80843fefb11f977bb7..363e0db1f198be6b4363d0401a8e382d3c7fffae 100644 (file)
@@ -418,20 +418,14 @@ EXTERN int broken_link;
 
 
 
-/* FIXME */
-#include <sys/types.h>
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-typedef int ssize_t;
-#endif
-
 /* layer specific variables (needed for SNR and DP scalability) */
 EXTERN struct layer_data {
   /* bit input */
-  int Infile;
-  int  (*open_stream) (char *filename);
-  off_t   (*seek_stream) (int infile, off_t offset,int whence);
-  ssize_t (*read_stream) (int infile, void *buf, size_t count);
-  int  (*close_stream) (int infile);
+  istream *Infile;
+/*  int  (*open_stream) (char *filename);*/
+  off_t   (*seek_stream) (istream *is, off_t offset,int whence);
+  ssize_t (*read_stream) (istream *is, void *buf, size_t count);
+  int  (*close_stream) (istream *is);
   unsigned char Rdbfr[2048];
   unsigned char *Rdptr;
   unsigned char Inbfr[16];
index 5211f3f702f3ae1718f9397954cd235084ee3aa2..4f156aa07452080b466ffff22147a20f70d93f28 100644 (file)
@@ -61,24 +61,40 @@ static void Print_Options();
 
 int my_open(char *filename)
 {
+  abort();
   return open(filename,O_RDONLY|O_BINARY);
 }
 
-off_t my_seek(int infile, off_t offset,int whence)
+off_t my_seek(istream *infile, off_t offset, int whence)
 {
-  return lseek(infile, offset, whence);
+#ifdef FILESTAR
+  return fseek(infile->InFd,offset, whence);
+#else
+  return lseek(infile->InFd,offset, whence);
+#endif
 }
-ssize_t my_read(int infile,void *buf,size_t count)
+ssize_t my_read(istream *infile, void *buf, size_t count)
 {
-  return read(infile,buf,count);
+#ifdef FILESTAR
+  size_t r = fread(buf,1,count, infile->InFd);
+#else
+  ssize_t r = read(infile->InFd,buf,count);
+#endif
+  printf( "%d , %d\n", count , r);
+  return r;
 }
-int my_close(int infile)
+int my_close(istream *infile)
 {
-  return close(infile);
+#ifdef FILESTAR
+  return fclose(infile->InFd);
+#else
+  return close(infile->InFd);
+#endif
 }
 
 int my_fopenr(const char *path, const char *mode, istream *os)
 {
+#if 0
   FILE *fd = fopen(path, mode);
   if(fd)
     {
@@ -87,6 +103,7 @@ int my_fopenr(const char *path, const char *mode, istream *os)
     }
   else
     os->InFd = NULL;
+#endif
   return 0;
 }
 
@@ -181,7 +198,7 @@ int argc;
 char *argv[];
 {
   int ret, code;
-  base.open_stream = my_open;
+  /*base.open_stream = my_open;*/
   base.seek_stream = my_seek;
   base.read_stream = my_read;
   base.close_stream = my_close;
@@ -200,8 +217,15 @@ char *argv[];
   /* open MPEG base layer bitstream file(s) */
   /* NOTE: this is either a base layer stream or a spatial enhancement stream */
 /*  if ((base.Infile=open(Main_Bitstream_Filename,O_RDONLY|O_BINARY))<0) */
-  base.Infile = ld->open_stream(Main_Bitstream_Filename);
-  if( base.Infile < 0 )
+  /*base.Infile = ld->open_stream(Main_Bitstream_Filename);*/
+  istream bos;
+  base.Infile = &bos;
+#ifdef FILESTAR
+  base.Infile->InFd = fopen(Main_Bitstream_Filename, "rb");
+#else
+  base.Infile->InFd = open(Main_Bitstream_Filename,O_RDONLY|O_BINARY );
+#endif
+  if( !base.Infile->InFd)
   {
     fprintf(stderr,"Base layer input file %s not found\n", Main_Bitstream_Filename);
     exit(1);
@@ -210,8 +234,8 @@ char *argv[];
 
   if(base.Infile != 0)
   {
-    Initialize_Buffer(); 
-  
+    Initialize_Buffer();
+
     if(Show_Bits(8)==0x47)
     {
       sprintf(Error_Text,"Decoder currently does not parse transport streams\n");
@@ -254,8 +278,15 @@ char *argv[];
     ld = &enhan; /* select enhancement layer context */
 
     /*if ((enhan.Infile = open(Enhancement_Layer_Bitstream_Filename,O_RDONLY|O_BINARY))<0)*/
-    enhan.Infile = ld->open_stream(Enhancement_Layer_Bitstream_Filename);
-    if (enhan.Infile<0)
+    /*enhan.Infile = ld->open_stream(Enhancement_Layer_Bitstream_Filename);*/
+    istream eos;
+    enhan.Infile = &eos;
+#ifdef FILESTAR
+    enhan.Infile->InFd = fopen(Main_Bitstream_Filename, "rb");
+#else
+    enhan.Infile->InFd = open(Enhancement_Layer_Bitstream_Filename,O_RDONLY|O_BINARY);
+#endif
+    if (enhan.Infile->InFd)
     {
       sprintf(Error_Text,"enhancment layer bitstream file %s not found\n",
         Enhancement_Layer_Bitstream_Filename);
index acca16872148904f5fc600fb397868934e8b142b..9613e479d12a4ea32890981429eaac36dd17e39c 100644 (file)
 #define MB_WEIGHT                  32
 #define MB_CLASS4                  64
 
+/* FIXME */
+#include <sys/types.h>
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+typedef int ssize_t;
+#endif
+
+
+#define FILESTAR
+
 #include <stdio.h>
 typedef struct
 {
+#ifdef FILESTAR
   FILE* InFd;
+#else
+  int InFd;
+#endif
 } istream;
+
 typedef struct
 {
   FILE* OutFd;