X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=avi2swf%2Fvideoreader_avifile.cc;h=0cd2599beafaa788f4dc8933a3847633b50ef4d2;hb=d6b5ebb01904d445f6ed9e00a54ca5e1e6c800cd;hp=825d12a4ec7562144165053459ccb76f46f07f9c;hpb=d40beabc5e8751ea4d43b12e1f1b338e719de2b4;p=swftools.git diff --git a/avi2swf/videoreader_avifile.cc b/avi2swf/videoreader_avifile.cc index 825d12a..0cd2599 100644 --- a/avi2swf/videoreader_avifile.cc +++ b/avi2swf/videoreader_avifile.cc @@ -19,14 +19,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include +#include +#include #include "../config.h" -extern "C" { -#include "../lib/args.h" -} -#include "v2swf.h" -#include "../lib/q.h" - #undef HAVE_CONFIG_H #ifdef HAVE_VERSION_H @@ -53,8 +50,20 @@ extern "C" { #define Bpp bpp #endif +#ifdef HAVE_SIGNAL_H +#ifdef HAVE_PTHREAD_H +#include +#include +#define DO_SIGNALS +#endif +#endif + +#include "../lib/q.h" #include "videoreader.h" +static int shutdown_avi2swf = 0; +static int verbose = 0; + typedef struct _videoreader_avifile_internal { IAviReadFile* player; @@ -63,6 +72,7 @@ typedef struct _videoreader_avifile_internal int do_audio; int do_video; int eof; + int flip; int frame; int soundbits; ringbuffer_t audio_buffer; @@ -138,8 +148,7 @@ static int videoreader_avifile_getimage(videoreader_t* v, void*buffer) img = img2; } - - frameno++; + v->frame++; i->frame++; unsigned char*data = img->Data(); int bpp = img->Bpp(); @@ -148,7 +157,7 @@ static int videoreader_avifile_getimage(videoreader_t* v, void*buffer) for(y=0;yheight;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); @@ -187,6 +196,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); } @@ -199,13 +215,13 @@ int videoreader_avifile_open(videoreader_t* v, char* filename) memset(i, 0, sizeof(videoreader_avifile_internal)); memset(v, 0, sizeof(videoreader_t)); v->getsamples = videoreader_avifile_getsamples; - v->getinfo = videoreader_avifile_getinfo; v->close = videoreader_avifile_close; v->eof = videoreader_avifile_eof; v->getimage = videoreader_avifile_getimage; v->getsamples = videoreader_avifile_getsamples; v->setparameter = videoreader_avifile_setparameter; v->internal = i; + v->frame = 0; i->do_video = 1; i->do_audio = 1; @@ -253,7 +269,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 @@ -274,11 +290,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(); } @@ -292,7 +308,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