X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmMpeg.cxx;h=301ba84f380f35571bf79d9002f6861e325c3591;hb=24394a63b18810c791af1c913e1a6fc712d3d3a0;hp=8f42f756110f76830845fc510c435346acb490ab;hpb=ca318bf3308c47a630a8df2a565cc545d3421774;p=gdcm.git diff --git a/src/gdcmMpeg.cxx b/src/gdcmMpeg.cxx index 8f42f756..301ba84f 100644 --- a/src/gdcmMpeg.cxx +++ b/src/gdcmMpeg.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmMpeg.cxx,v $ Language: C++ - Date: $Date: 2005/10/27 19:57:21 $ - Version: $Revision: 1.7 $ + Date: $Date: 2006/05/30 08:19:25 $ + Version: $Revision: 1.10 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -22,7 +22,7 @@ typedef struct { - std::ifstream InFd; + std::ifstream *InFd; } istream; extern "C" { #define GLOBAL @@ -37,41 +37,34 @@ off_t my_seek(istream *infile, off_t offset, int whence) switch(whence) { case SEEK_SET: - infile->InFd.seekg(offset, std::ios::beg); + infile->InFd->seekg(offset, std::ios::beg); break; case SEEK_END: - infile->InFd.seekg(offset, std::ios::end); + infile->InFd->seekg(offset, std::ios::end); break; case SEEK_CUR: - infile->InFd.seekg(offset, std::ios::cur); + infile->InFd->seekg(offset, std::ios::cur); break; } - return infile->InFd.tellg(); + return infile->InFd->tellg(); } ssize_t my_read(istream *infile, void *buf, size_t count) { //return fread(buf,1,count, infile->InFd); - infile->InFd.read((char*)buf, count); - return infile->InFd.gcount(); + infile->InFd->read((char*)buf, count); + return infile->InFd->gcount(); } int my_close(istream *infile) { //return fclose(infile->InFd); - infile->InFd.close(); + infile->InFd->close(); return 0; } namespace gdcm { -/** - * \brief routine for MPEG decompression - * @param fp pointer to an already open file descriptor - * 8 significant bits per pixel - * @param image_buffer to receive uncompressed pixels - * @param length length - * @return 1 on success, 0 on error - */ + static int Headers(); static void DeInitialize_Decoder() { @@ -321,13 +314,24 @@ static void Initialize_Decoder() } +/** + * \brief routine for MPEG decompression + * @param fp pointer to an already open file descriptor + * 8 significant bits per pixel + * @param image_buffer to receive uncompressed pixels + * @param length length + * @return 1 on success, 0 on error + */ bool ReadMPEGFile (std::ifstream *fp, char *image_buffer, size_t length) { -#if 1 + std::streampos mpeg_start = fp->tellg(); // the MPEG stream in our case does not start at 0 +#if 0 fp->read((char*)image_buffer, length); std::ofstream out("/tmp/etiam.mpeg"); out.write((char*)image_buffer, length); out.close(); +#else + (void)length; #endif int ret, code; @@ -370,7 +374,8 @@ bool ReadMPEGFile (std::ifstream *fp, char *image_buffer, size_t length) base.Infile = &bos; #ifdef FILESTAR //base.Infile->InFd = fopen(Main_Bitstream_Filename, "rb"); - base.Infile->InFd.open(Main_Bitstream_Filename, std::ios::binary | std::ios::in); + //base.Infile->InFd.open(Main_Bitstream_Filename, std::ios::binary | std::ios::in); + base.Infile->InFd = fp; #else base.Infile->InFd = open(Main_Bitstream_Filename,O_RDONLY|O_BINARY ); #endif @@ -410,14 +415,14 @@ bool ReadMPEGFile (std::ifstream *fp, char *image_buffer, size_t length) } /*lseek(base.Infile, 0l, SEEK_SET);*/ - ld->seek_stream(base.Infile,0l,SEEK_SET); + ld->seek_stream(base.Infile,mpeg_start,SEEK_SET); Initialize_Buffer(); } if(base.Infile!=0) { /*lseek(base.Infile, 0l, SEEK_SET);*/ - ld->seek_stream(base.Infile,0l,SEEK_SET); + ld->seek_stream(base.Infile,mpeg_start,SEEK_SET); } Initialize_Buffer(); @@ -431,7 +436,8 @@ bool ReadMPEGFile (std::ifstream *fp, char *image_buffer, size_t length) enhan.Infile = &eos; #ifdef FILESTAR //enhan.Infile->InFd = fopen(Main_Bitstream_Filename, "rb"); - enhan.Infile->InFd.open(Main_Bitstream_Filename, std::ios::binary|std::ios::in); + enhan.Infile->InFd->open(Main_Bitstream_Filename, std::ios::binary|std::ios::in); + abort(); #else enhan.Infile->InFd = open(Enhancement_Layer_Bitstream_Filename,O_RDONLY|O_BINARY); #endif