added codec query.
[swftools.git] / avi2swf / videoreader_avifile.cc
index 781beee..42e6b72 100644 (file)
@@ -24,6 +24,8 @@
 #include <memory.h>
 #include "../config.h"
 
+#ifdef HAVE_AVIFILE
+
 #undef HAVE_CONFIG_H
 
 #ifdef HAVE_VERSION_H
@@ -63,7 +65,6 @@
 
 static int shutdown_avi2swf = 0;
 static int verbose = 0;
-static int flip = 0;
 
 typedef struct _videoreader_avifile_internal
 {
@@ -73,6 +74,7 @@ typedef struct _videoreader_avifile_internal
     int do_audio;
     int do_video;
     int eof;
+    int flip;
     int frame;
     int soundbits;
     ringbuffer_t audio_buffer;
@@ -157,7 +159,7 @@ static int videoreader_avifile_getimage(videoreader_t* v, void*buffer)
        for(y=0;y<v->height;y++) {
            unsigned char*from,*to;
            to = &((unsigned char*)buffer)[y*v->width*4];
-           if(flip)
+           if(i->flip)
                from = img->At(v->height-y-1);
            else
                from = img->At(y);
@@ -196,6 +198,13 @@ static void videoreader_avifile_close(videoreader_t* v)
 }
 static void videoreader_avifile_setparameter(videoreader_t*v, char*name, char*value)
 {
+    videoreader_avifile_internal*i = (videoreader_avifile_internal*)v->internal;
+    if(!strcmp(name, "verbose")) {
+       verbose = atoi(value);
+    }
+    if(!strcmp(name, "flip")) {
+       i->flip = atoi(value);
+    }
     if(verbose) {
        printf("videoreader_setparameter(%s, %s)\n", name, value);fflush(stdout);
     }
@@ -203,6 +212,10 @@ static void videoreader_avifile_setparameter(videoreader_t*v, char*name, char*va
 
 int videoreader_avifile_open(videoreader_t* v, char* filename)
 {
+    if(!filename) {
+       /* codec query */
+       return 0;
+    }
     videoreader_avifile_internal* i;
     i = (videoreader_avifile_internal*)malloc(sizeof(videoreader_avifile_internal));
     memset(i, 0, sizeof(videoreader_avifile_internal));
@@ -245,7 +258,7 @@ int videoreader_avifile_open(videoreader_t* v, char* filename)
 
     if(!i->do_video && !i->do_audio) {
        printf("File has neither audio nor video streams.(?)\n");
-       return 0;
+       return -1;
     }
 
 #ifndef VERSION6
@@ -262,7 +275,7 @@ int videoreader_avifile_open(videoreader_t* v, char* filename)
     v->height = head.dwHeight;
     dwMicroSecPerFrame = head.dwMicroSecPerFrame;
     samplesperframe = astream->GetEndPos()/astream->GetEndTime()*head.dwMicroSecPerFrame/1000000;
-    v->rate = (int)(astream->GetEndPos()/astream->GetEndTime());
+    v->samplerate = (int)(astream->GetEndPos()/astream->GetEndTime());
     v->fps = 1000000.0/dwMicroSecPerFrame;
     i->soundbits = 16;
 #else
@@ -283,11 +296,11 @@ int videoreader_avifile_open(videoreader_t* v, char* filename)
        audioinfo = i->astream->GetStreamInfo();
 
        v->channels = wave.nChannels;
-       v->rate = wave.nSamplesPerSec;
+       v->samplerate = wave.nSamplesPerSec;
        i->soundbits = wave.wBitsPerSample;
 
-       if(v->channels==0 || v->rate==0 || i->soundbits==0 || wave.wFormatTag!=1) {
-           v->rate = audioinfo->GetAudioSamplesPerSec();
+       if(v->channels==0 || v->samplerate==0 || i->soundbits==0 || wave.wFormatTag!=1) {
+           v->samplerate = audioinfo->GetAudioSamplesPerSec();
            v->channels = audioinfo->GetAudioChannels();
            i->soundbits = audioinfo->GetAudioBitsPerSample();
        }
@@ -301,7 +314,7 @@ int videoreader_avifile_open(videoreader_t* v, char* filename)
            i->do_audio = 0;
            i->soundbits = 0;
            v->channels = 0;
-           v->rate = 0;
+           v->samplerate = 0;
        }
     }
 #endif
@@ -316,6 +329,15 @@ int videoreader_avifile_open(videoreader_t* v, char* filename)
 #endif
     }
 
-    return 1;
+    return 0;
+}
+
+#else  //HAVE_AVIFILE
+
+
+int videoreader_avifile_open(videoreader_t* v, char* filename)
+{
+    return -1;
 }
 
+#endif //HAVE_AVIFILE