]> git.sesse.net Git - mlt/blobdiff - src/modules/kino/filehandler.cc
Avoid unnecessary compilation when running "./configure; make; make install" multiple...
[mlt] / src / modules / kino / filehandler.cc
index dc57a300bbba4ede385af57746eb3f1a7a317f08..d0915c9bb9bdbe6fe926b59dbbf4044aaa5ee1d0 100644 (file)
 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
 
-#include "config.h"
-
 extern "C" {
 #include <framework/mlt_frame.h>
 }
 
-#include <string>
+#include <cstring>
 #include <iostream>
 #include <sstream>
 #include <iomanip>
@@ -41,6 +39,8 @@ using std::setfill;
 #include <assert.h>
 #include <time.h>
 #include <sys/time.h>
+#include <string.h>
+#include <stdlib.h>
 
 // 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;