X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmodules%2Fkino%2Ffilehandler.cc;h=d0915c9bb9bdbe6fe926b59dbbf4044aaa5ee1d0;hb=6f8293d53fc21742d9d43f94f0e590e1bfcb8ee0;hp=dc57a300bbba4ede385af57746eb3f1a7a317f08;hpb=7261f622acf6477b5b39ddd677111ca433cd7cd9;p=mlt diff --git a/src/modules/kino/filehandler.cc b/src/modules/kino/filehandler.cc index dc57a300..d0915c9b 100644 --- a/src/modules/kino/filehandler.cc +++ b/src/modules/kino/filehandler.cc @@ -17,13 +17,11 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "config.h" - extern "C" { #include } -#include +#include #include #include #include @@ -41,6 +39,8 @@ using std::setfill; #include #include #include +#include +#include // libdv header files #ifdef HAVE_LIBDV @@ -115,6 +115,10 @@ FileHandler::FileHandler() : done( false ), autoSplit( false ), maxFrameCount( 9 framesWritten( 0 ), filename( "" ) { /* empty body */ + timeStamp = 0; + everyNthFrame = 0; + framesToSkip = 0; + maxFileSize = 0; } @@ -336,6 +340,7 @@ bool FileHandler::WriteFrame( const Frame& frame ) RawHandler::RawHandler() : fd( -1 ) { extension = ".dv"; + numBlocks = 0; } @@ -404,7 +409,8 @@ bool RawHandler::Open( const char *s ) return false; if ( read( fd, data, 4 ) < 0 ) return false; - lseek( fd, 0, SEEK_SET ); + if ( lseek( fd, 0, SEEK_SET ) < 0 ) + return false; numBlocks = ( ( data[ 3 ] & 0x80 ) == 0 ) ? 250 : 300; filename = s; return true; @@ -436,6 +442,7 @@ AVIHandler::AVIHandler( int format ) : avi( NULL ), aviFormat( format ), isOpenD extension = ".avi"; for ( int c = 0; c < 4; c++ ) audioChannels[ c ] = NULL; + memset( &dvinfo, 0, sizeof( dvinfo ) ); } @@ -503,14 +510,14 @@ bool AVIHandler::Create( const string& filename ) case AVI_DV1_FORMAT: fail_null( avi = new AVI1File ); - if ( avi->Create( filename.c_str() ) == false ) + if ( !avi || avi->Create( filename.c_str() ) == false ) return false; //avi->Init( videoInfo.isPAL ? AVI_PAL : AVI_NTSC, audioInfo.frequency, AVI_LARGE_INDEX ); break; case AVI_DV2_FORMAT: fail_null( avi = new AVI2File ); - if ( avi->Create( filename.c_str() ) == false ) + if ( !avi || avi->Create( filename.c_str() ) == false ) return false; //if ( GetOpenDML() ) //avi->Init( videoInfo.isPAL ? AVI_PAL : AVI_NTSC, audioInfo.frequency, @@ -697,6 +704,19 @@ bool AVIHandler::GetOpenDML() const #define DV_AUDIO_MAX_SAMPLES 1944 #endif +// Missing fourcc's in libquicktime (allows compilation) +#ifndef QUICKTIME_DV_AVID +#define QUICKTIME_DV_AVID "AVdv" +#endif + +#ifndef QUICKTIME_DV_AVID_A +#define QUICKTIME_DV_AVID_A "dvcp" +#endif + +#ifndef QUICKTIME_DVCPRO +#define QUICKTIME_DVCPRO "dvpp" +#endif + QtHandler::QtHandler() : fd( NULL ) { extension = ".mov"; @@ -843,7 +863,7 @@ int QtHandler::Close() off_t QtHandler::GetFileSize() { struct stat file_status; - fstat( fileno( fd->stream ), &file_status ); + stat( filename.c_str(), &file_status ); return file_status.st_size; } @@ -858,7 +878,7 @@ bool QtHandler::Open( const char *s ) { Init(); - fd = quicktime_open( ( char * ) s, 1, 0 ); + fd = quicktime_open( s, 1, 0 ); if ( fd == NULL ) { fprintf( stderr, "Error opening: %s\n", s ); @@ -875,7 +895,8 @@ bool QtHandler::Open( const char *s ) char * fcc = quicktime_video_compressor( fd, 0 ); if ( strncmp( fcc, QUICKTIME_DV, 4 ) != 0 && strncmp( fcc, QUICKTIME_DV_AVID, 4 ) != 0 && - strncmp( fcc, QUICKTIME_DV_AVID_A, 4 ) != 0 ) + strncmp( fcc, QUICKTIME_DV_AVID_A, 4 ) != 0 && + strncmp( fcc, QUICKTIME_DVCPRO, 4 ) != 0 ) { Close(); return false;