programs: Move icinfo out of avitools.

This commit is contained in:
Marcus Meissner 2006-03-22 13:31:54 +01:00 committed by Alexandre Julliard
parent 1aca53860a
commit 40af0c8a30
9 changed files with 18 additions and 452 deletions

4
configure vendored

File diff suppressed because one or more lines are too long

View File

@ -1682,7 +1682,6 @@ libs/wine/Makefile
libs/wpp/Makefile libs/wpp/Makefile
loader/Makefile loader/Makefile
programs/Makefile programs/Makefile
programs/avitools/Makefile
programs/clock/Makefile programs/clock/Makefile
programs/cmdlgtst/Makefile programs/cmdlgtst/Makefile
programs/control/Makefile programs/control/Makefile
@ -1690,6 +1689,7 @@ programs/eject/Makefile
programs/expand/Makefile programs/expand/Makefile
programs/explorer/Makefile programs/explorer/Makefile
programs/hh/Makefile programs/hh/Makefile
programs/icinfo/Makefile
programs/msiexec/Makefile programs/msiexec/Makefile
programs/notepad/Makefile programs/notepad/Makefile
programs/progman/Makefile programs/progman/Makefile

View File

@ -6,7 +6,6 @@ SRCDIR = @srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
SUBDIRS = \ SUBDIRS = \
avitools \
clock \ clock \
cmdlgtst \ cmdlgtst \
control \ control \
@ -14,6 +13,7 @@ SUBDIRS = \
expand \ expand \
explorer \ explorer \
hh \ hh \
icinfo \
msiexec \ msiexec \
notepad \ notepad \
progman \ progman \
@ -43,13 +43,13 @@ SUBDIRS = \
# Sub-directories to run make install into # Sub-directories to run make install into
INSTALLSUBDIRS = \ INSTALLSUBDIRS = \
avitools \
clock \ clock \
control \ control \
eject \ eject \
expand \ expand \
explorer \ explorer \
hh \ hh \
icinfo \
msiexec \ msiexec \
notepad \ notepad \
progman \ progman \

View File

@ -1,71 +0,0 @@
DLLDEFS = @DLLDEFS@
DLLFLAGS = @DLLFLAGS@
DEFS = $(DLLDEFS) $(EXTRADEFS)
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = none
PROGRAMS = aviinfo.exe aviplay.exe icinfo.exe
ALL_LIBS = $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(LIBS)
C_SRCS = \
aviinfo.c \
aviplay.c \
icinfo.c
@MAKE_RULES@
all: aviinfo.exe$(DLLEXT) aviplay.exe$(DLLEXT) icinfo.exe$(DLLEXT) aviinfo$(EXEEXT) aviplay$(EXEEXT) icinfo$(EXEEXT)
aviinfo.exe.so: aviinfo.o
$(WINEGCC) -B$(TOOLSDIR)/tools/winebuild -mwindows -o $@ aviinfo.o -L$(DLLDIR) -lavifil32 -lkernel32 $(ALL_LIBS)
aviplay.exe.so: aviplay.o
$(WINEGCC) -B$(TOOLSDIR)/tools/winebuild -mwindows -o $@ aviplay.o -L$(DLLDIR) -lavifil32 -lddraw -lkernel32 $(ALL_LIBS)
icinfo.exe.so: icinfo.o
$(WINEGCC) -B$(TOOLSDIR)/tools/winebuild -mwindows -o $@ icinfo.o -L$(DLLDIR) -lmsvfw32 -lkernel32 $(ALL_LIBS)
aviinfo.exe: aviinfo.o
$(CC) -o $@ aviinfo.o -lavifil32 $(ALL_LIBS)
aviplay.exe: aviplay.o
$(CC) -o $@ aviplay.o -lavifil32 -lddraw $(ALL_LIBS)
icinfo.exe: icinfo.o
$(CC) -o $@ icinfo.o -lmsvfw32 $(ALL_LIBS)
$(PROGRAMS:.exe=): $(WINEWRAPPER)
$(RM) $@ && $(LN_S) $(WINEWRAPPER) $@
# Rules for installation
.PHONY: install_prog install_prog.so uninstall_prog uninstall_prog.so
install_prog.so: $(PROGRAMS:%=%.so)
$(MKINSTALLDIRS) $(DESTDIR)$(dlldir)
$(INSTALL_PROGRAM) aviinfo.exe.so $(DESTDIR)$(dlldir)/aviinfo.exe.so
$(INSTALL_PROGRAM) aviplay.exe.so $(DESTDIR)$(dlldir)/aviplay.exe.so
$(INSTALL_PROGRAM) icinfo.exe.so $(DESTDIR)$(dlldir)/icinfo.exe.so
install_prog: $(PROGRAMS)
$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
$(INSTALL_PROGRAM) aviinfo.exe $(DESTDIR)$(bindir)/aviinfo.exe
$(INSTALL_PROGRAM) aviplay.exe $(DESTDIR)$(bindir)/aviplay.exe
$(INSTALL_PROGRAM) icinfo.exe $(DESTDIR)$(bindir)/icinfo.exe
uninstall_prog.so:
$(RM) $(DESTDIR)$(dlldir)/aviinfo.exe.so $(DESTDIR)$(dlldir)/aviplay.exe.so $(DESTDIR)$(dlldir)/icinfo.exe.so
uninstall_prog:
$(RM) $(DESTDIR)$(bindir)/aviinfo.exe $(DESTDIR)$(bindir)/aviplay.exe $(DESTDIR)$(bindir)/icinfo.exe
install:: install_prog$(DLLEXT)
uninstall:: uninstall_prog$(DLLEXT)
clean::
$(RM) $(PROGRAMS:.exe=)
### Dependencies:

View File

@ -1,129 +0,0 @@
/*
* Copyright 1999 Marcus Meissner
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include "windef.h"
#include "windows.h"
#include "mmsystem.h"
#include "vfw.h"
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show)
{
unsigned int n;
HRESULT hres;
PAVIFILE avif;
PAVISTREAM vids,auds;
AVIFILEINFO afi;
AVISTREAMINFO asi;
AVIFileInit();
if (GetFileAttributes(cmdline) == INVALID_FILE_ATTRIBUTES) {
fprintf(stderr,"Usage: aviinfo <avifilename>\n");
exit(1);
}
hres = AVIFileOpen(&avif,cmdline,OF_READ,NULL);
if (hres) {
fprintf(stderr,"AVIFileOpen: 0x%08lx\n",hres);
exit(1);
}
hres = AVIFileInfo(avif,&afi,sizeof(afi));
if (hres) {
fprintf(stderr,"AVIFileInfo: 0x%08lx\n",hres);
exit(1);
}
fprintf(stderr,"AVI File Info:\n");
fprintf(stderr,"\tdwMaxBytesPerSec: %ld\n",afi.dwMaxBytesPerSec);
#define FF(x) if (afi.dwFlags & AVIFILEINFO_##x) fprintf(stderr,#x",");
fprintf(stderr,"\tdwFlags: 0x%lx (",afi.dwFlags);
FF(HASINDEX);FF(MUSTUSEINDEX);FF(ISINTERLEAVED);FF(WASCAPTUREFILE);
FF(COPYRIGHTED);
fprintf(stderr,")\n");
#undef FF
#define FF(x) if (afi.dwCaps & AVIFILECAPS_##x) fprintf(stderr,#x",");
fprintf(stderr,"\tdwCaps: 0x%lx (",afi.dwCaps);
FF(CANREAD);FF(CANWRITE);FF(ALLKEYFRAMES);FF(NOCOMPRESSION);
fprintf(stderr,")\n");
#undef FF
fprintf(stderr,"\tdwStreams: %ld\n",afi.dwStreams);
fprintf(stderr,"\tdwSuggestedBufferSize: %ld\n",afi.dwSuggestedBufferSize);
fprintf(stderr,"\tdwWidth: %ld\n",afi.dwWidth);
fprintf(stderr,"\tdwHeight: %ld\n",afi.dwHeight);
fprintf(stderr,"\tdwScale: %ld\n",afi.dwScale);
fprintf(stderr,"\tdwRate: %ld\n",afi.dwRate);
fprintf(stderr,"\tdwLength: %ld\n",afi.dwLength);
fprintf(stderr,"\tdwEditCount: %ld\n",afi.dwEditCount);
fprintf(stderr,"\tszFileType: %s\n",afi.szFileType);
for (n = 0;n<afi.dwStreams;n++) {
char buf[5];
PAVISTREAM ast;
hres = AVIFileGetStream(avif,&ast,0,n);
if (hres) {
fprintf(stderr,"AVIFileGetStream %d: 0x%08lx\n",n,hres);
exit(1);
}
hres = AVIStreamInfo(ast,&asi,sizeof(asi));
if (hres) {
fprintf(stderr,"AVIStreamInfo %d: 0x%08lx\n",n,hres);
exit(1);
}
fprintf(stderr,"Stream %d:\n",n);
buf[4]='\0';memcpy(buf,&(asi.fccType),4);
fprintf(stderr,"\tfccType: %s\n",buf);
memcpy(buf,&(asi.fccHandler),4);
fprintf(stderr,"\tfccHandler: %s\n",buf);
fprintf(stderr,"\tdwFlags: 0x%08lx\n",asi.dwFlags);
fprintf(stderr,"\tdwCaps: 0x%08lx\n",asi.dwCaps);
fprintf(stderr,"\twPriority: %d\n",asi.wPriority);
fprintf(stderr,"\twLanguage: %d\n",asi.wLanguage);
fprintf(stderr,"\tdwScale: %ld\n",asi.dwScale);
fprintf(stderr,"\tdwRate: %ld\n",asi.dwRate);
fprintf(stderr,"\tdwStart: %ld\n",asi.dwStart);
fprintf(stderr,"\tdwLength: %ld\n",asi.dwLength);
fprintf(stderr,"\tdwInitialFrames: %ld\n",asi.dwInitialFrames);
fprintf(stderr,"\tdwSuggestedBufferSize: %ld\n",asi.dwSuggestedBufferSize);
fprintf(stderr,"\tdwQuality: %ld\n",asi.dwQuality);
fprintf(stderr,"\tdwSampleSize: %ld\n",asi.dwSampleSize);
fprintf(stderr,"\tdwEditCount: %ld\n",asi.dwEditCount);
fprintf(stderr,"\tdwFormatChangeCount: %ld\n",asi.dwFormatChangeCount);
fprintf(stderr,"\tszName: %s\n",asi.szName);
switch (asi.fccType) {
case streamtypeVIDEO:
vids = ast;
break;
case streamtypeAUDIO:
auds = ast;
break;
default: {
char type[5];
type[4]='\0';memcpy(type,&(asi.fccType),4);
fprintf(stderr,"Unhandled streamtype %s\n",type);
break;
}
}
AVIStreamRelease(ast);
}
AVIFileRelease(avif);
AVIFileExit();
return 0;
}

View File

@ -1,245 +0,0 @@
/*
* Very simple AVIPLAYER
*
* Copyright 1999 Marcus Meissner
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Status:
* - plays .avi streams, video only
* - requires Microsoft avifil32.dll and builtin msvfw32.dll.
*
* Todo:
* - audio support (including synchronization etc)
* - replace DirectDraw by a 'normal' window, including dithering, controls
* etc.
*
* Bugs:
* - no time scheduling, video plays too fast using DirectDraw/XF86DGA
* - requires DirectDraw with all disadvantages.
*/
#include <stdio.h>
#include <time.h>
#include <assert.h>
#include <string.h>
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
#include "windows.h"
#include "wingdi.h"
#include "mmsystem.h"
#include "ddraw.h"
#include "vfw.h"
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show)
{
int bytesline,i,n,pos;
time_t tstart,tend;
LONG cnt;
BITMAPINFOHEADER *bmi;
HRESULT hres;
PAVIFILE avif;
PAVISTREAM vids=NULL,auds=NULL;
AVIFILEINFO afi;
AVISTREAMINFO asi;
PGETFRAME vidgetframe=NULL;
LPDIRECTDRAW ddraw;
DDSURFACEDESC dsdesc;
LPDIRECTDRAWSURFACE dsurf;
LPDIRECTDRAWPALETTE dpal;
PALETTEENTRY palent[256];
AVIFileInit();
if (GetFileAttributes(cmdline) == INVALID_FILE_ATTRIBUTES) {
fprintf(stderr,"Usage: aviplay <avifilename>\n");
exit(1);
}
hres = AVIFileOpen(&avif,cmdline,OF_READ,NULL);
if (hres) {
fprintf(stderr,"AVIFileOpen: 0x%08lx\n",hres);
exit(1);
}
hres = AVIFileInfo(avif,&afi,sizeof(afi));
if (hres) {
fprintf(stderr,"AVIFileInfo: 0x%08lx\n",hres);
exit(1);
}
for (n=0;n<afi.dwStreams;n++) {
char buf[5];
PAVISTREAM ast;
hres = AVIFileGetStream(avif,&ast,0,n);
if (hres) {
fprintf(stderr,"AVIFileGetStream %d: 0x%08lx\n",n,hres);
exit(1);
}
hres = AVIStreamInfo(ast,&asi,sizeof(asi));
if (hres) {
fprintf(stderr,"AVIStreamInfo %d: 0x%08lx\n",n,hres);
exit(1);
}
fprintf(stderr,"[Stream %d: ",n);
buf[4]='\0';memcpy(buf,&(asi.fccType),4);
fprintf(stderr,"%s.",buf);
buf[4]='\0';memcpy(buf,&(asi.fccHandler),4);
fprintf(stderr,"%s, %s]\n",buf,asi.szName);
switch (asi.fccType) {
case streamtypeVIDEO:
vids = ast;
break;
case streamtypeAUDIO:
auds = ast;
break;
default: {
char type[5];
type[4]='\0';memcpy(type,&(asi.fccType),4);
fprintf(stderr,"Unhandled streamtype %s\n",type);
AVIStreamRelease(ast);
break;
}
}
}
/********************* begin video setup ***********************************/
if (!vids) {
fprintf(stderr,"No video stream found. Good Bye.\n");
exit(0);
}
cnt = sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);
bmi = HeapAlloc(GetProcessHeap(),0,cnt);
hres = AVIStreamReadFormat(vids,0,bmi,&cnt);
if (hres) {
fprintf(stderr,"AVIStreamReadFormat vids: 0x%08lx\n",hres);
exit(1);
}
vidgetframe = NULL;
bmi->biCompression = 0; /* we want it in raw form, uncompressed */
/* recalculate the image size */
bmi->biSizeImage = ((bmi->biWidth*bmi->biBitCount+31)&~0x1f)*bmi->biPlanes*bmi->biHeight/8;
bytesline = ((bmi->biWidth*bmi->biBitCount+31)&~0x1f)*bmi->biPlanes/8;
vidgetframe = AVIStreamGetFrameOpen(vids,bmi);
if (!vidgetframe) {
fprintf(stderr,"AVIStreamGetFrameOpen: failed\n");
exit(1);
}
/********************* end video setup ***********************************/
/********************* begin display setup *******************************/
hres = DirectDrawCreate(NULL,&ddraw,NULL);
if (hres) {
fprintf(stderr,"DirectDrawCreate: 0x%08lx\n",hres);
exit(1);
}
hres = IDirectDraw_SetDisplayMode(ddraw,bmi->biWidth,bmi->biHeight,bmi->biBitCount);
if (hres) {
fprintf(stderr,"ddraw.SetDisplayMode: 0x%08lx (change resolution!)\n",hres);
exit(1);
}
dsdesc.dwSize=sizeof(dsdesc);
dsdesc.dwFlags = DDSD_CAPS;
dsdesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
hres = IDirectDraw_CreateSurface(ddraw,&dsdesc,&dsurf,NULL);
if (hres) {
fprintf(stderr,"ddraw.CreateSurface: 0x%08lx\n",hres);
exit(1);
}
if (bmi->biBitCount==8) {
RGBQUAD *rgb = (RGBQUAD*)(bmi+1);
int i;
hres = IDirectDraw_CreatePalette(ddraw,DDPCAPS_8BIT,NULL,&dpal,NULL);
if (hres) {
fprintf(stderr,"ddraw.CreateSurface: 0x%08lx\n",hres);
exit(1);
}
IDirectDrawSurface_SetPalette(dsurf,dpal);
for (i=0;i<bmi->biClrUsed;i++) {
palent[i].peRed = rgb[i].rgbRed;
palent[i].peBlue = rgb[i].rgbBlue;
palent[i].peGreen = rgb[i].rgbGreen;
}
IDirectDrawPalette_SetEntries(dpal,0,0,bmi->biClrUsed,palent);
} else
dpal = NULL;
/********************* end display setup *******************************/
tstart = time(NULL);
pos = 0;
while (1) {
LPVOID decodedframe;
LPBITMAPINFOHEADER lpbmi;
LPVOID decodedbits;
/* video stuff */
if (!(decodedframe=AVIStreamGetFrame(vidgetframe,pos++)))
break;
lpbmi = (LPBITMAPINFOHEADER)decodedframe;
decodedbits = (LPVOID)(((DWORD)decodedframe)+lpbmi->biSize);
if (lpbmi->biBitCount == 8) {
/* can't detect palette change that way I think */
RGBQUAD *rgb = (RGBQUAD*)(lpbmi+1);
int i,palchanged;
/* skip used colorentries. */
decodedbits=(char*)decodedbits+bmi->biClrUsed*sizeof(RGBQUAD);
palchanged = 0;
for (i=0;i<bmi->biClrUsed;i++) {
if ( (palent[i].peRed != rgb[i].rgbRed) ||
(palent[i].peBlue != rgb[i].rgbBlue) ||
(palent[i].peGreen != rgb[i].rgbGreen)
) {
palchanged = 1;
break;
}
}
if (palchanged) {
for (i=0;i<bmi->biClrUsed;i++) {
palent[i].peRed = rgb[i].rgbRed;
palent[i].peBlue = rgb[i].rgbBlue;
palent[i].peGreen = rgb[i].rgbGreen;
}
IDirectDrawPalette_SetEntries(dpal,0,0,bmi->biClrUsed,palent);
}
}
dsdesc.dwSize = sizeof(dsdesc);
hres = IDirectDrawSurface_Lock(dsurf,NULL,&dsdesc,DDLOCK_WRITEONLY,0);
if (hres) {
fprintf(stderr,"dsurf.Lock: 0x%08lx\n",hres);
exit(1);
}
/* Argh. AVIs are upside down. */
for (i=0;i<dsdesc.dwHeight;i++) {
memcpy( (char *)dsdesc.lpSurface+(i*dsdesc.u1.lPitch),
(char *)decodedbits+bytesline*(dsdesc.dwHeight-i-1),
bytesline
);
}
IDirectDrawSurface_Unlock(dsurf,dsdesc.lpSurface);
}
tend = time(NULL);
AVIStreamGetFrameClose(vidgetframe);
IDirectDrawSurface_Release(dsurf);
IDirectDraw_RestoreDisplayMode(ddraw);
IDirectDraw_Release(ddraw);
if (vids) AVIStreamRelease(vids);
if (auds) AVIStreamRelease(auds);
fprintf(stderr,"%d frames at %g frames/s\n",pos,pos*1.0/(tend-tstart));
AVIFileRelease(avif);
AVIFileExit();
return 0;
}

View File

@ -1,4 +1,2 @@
Makefile Makefile
aviinfo
aviplay
icinfo icinfo

View File

@ -0,0 +1,13 @@
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = icinfo.exe
APPMODE = -mwindows
IMPORTS = msvfw32 kernel32
C_SRCS = icinfo.c
@MAKE_PROG_RULES@
### Dependencies: