added checking for vfw, cleaned up avifile checks.
[swftools.git] / avi2swf / videoreader_vfw.cc
index ec05d13..d605cf7 100644 (file)
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
+#include "videoreader.h"
 #ifdef WIN32
 #include <windows.h>
 #include <vfw.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include "videoreader.h"
 
 typedef struct _videoreader_vfw_internal { 
     //video:
@@ -162,12 +162,12 @@ int videoreader_vfw_getimage(videoreader_t* vr, void*buffer)
     bi = (LPBITMAPINFOHEADER)AVIStreamGetFrame(i->getframe, i->video_pos);
        
     i->video_pos++;
+    vr->frame++;
 
     if(!bi) {
        fprintf(stderr, "AVIStreamGetFrame failed\n");
        return 0;
     }
-    printf("%dx%d:%d\n", bi->biWidth, bi->biHeight, bi->biBitCount);
     
     if(!bitmap_to_rgba(bi, buffer, i->width, i->height)) {
        fprintf(stderr, "couldn't convert bitmap to RGBA.\n");
@@ -279,28 +279,37 @@ int videoreader_vfw_open(videoreader_t* vr, char* filename)
            /* video stream */
 
            BITMAPINFOHEADER bitmap;
-           LONG size = sizeof(i->bitmap);
+           LONG size = sizeof(bitmap);
            AVIStreamReadFormat(stream, 0, &bitmap, &size);
 
-           if(i->bitmap.biCompression == 0/*RGB*/) {
+           if(1) {
                i->bitmap = bitmap;
                i->vs = stream;
                i->width = bitmap.biWidth;
                i->height = bitmap.biHeight;
+           } else {
+               fprintf(stderr, "Ignoring video stream: %dx%d compression=%d planes=%d\n", 
+                       bitmap.biWidth, bitmap.biHeight,
+                       bitmap.biCompression,bitmap.biPlanes);
            }
         }
         else if (streaminfo.fccType == streamtypeAUDIO) {
            /* audio stream */
 
            WAVEFORMATEX waveformat;
-           LONG size = sizeof(i->waveformat);
+           LONG size = sizeof(waveformat);
            AVIStreamReadFormat(stream, 0, &waveformat, &size);
 
-           if(i->waveformat.wBitsPerSample == 16 || i->waveformat.wBitsPerSample == 8) {
+           if(waveformat.wBitsPerSample == 16 || 
+              waveformat.wBitsPerSample == 8 ||
+              waveformat.wBitsPerSample == 1
+              ) {
                i->waveformat = waveformat;
                i->as = stream;
-               i->channels = i->waveformat.nChannels;
-               i->samplerate = i->waveformat.nSamplesPerSec;
+               i->channels = waveformat.nChannels;
+               i->samplerate = waveformat.nSamplesPerSec;
+           } else {
+               fprintf(stderr, "Ignoring audio stream: bitspersample=%d\n", waveformat.wBitsPerSample);
            }
         }
        t++;
@@ -322,6 +331,7 @@ int videoreader_vfw_open(videoreader_t* vr, char* filename)
     
     i->getframe = AVIStreamGetFrameOpen(i->vs, 0);
     if(!i->getframe) {
+       fprintf(stderr, "Couldn't initialize AVIStream for %s- codec missing?\n", filename);
        return -1;
     }