remove msdscap (integrated in mediastreamer2 directly)

add make setup to msx264
fix various build issues.

git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@574 3f6dc0c8-ddfe-455d-9043-3cd528dc4637
This commit is contained in:
smorlat 2009-08-17 10:40:11 +00:00
parent 0deb9d5e96
commit ee9d3921f2
17 changed files with 193 additions and 2179 deletions

View file

@ -23,9 +23,12 @@ ZIPFILE=$(shell cd $(top_builddir) && pwd)/$(PACKAGE)-win32-$(VERSION).zip
ZIP_EXCLUDED=include lib \
share/sounds/linphone/rings/synth.wav \
share/sounds/linphone/rings/tapping.wav \
share/sounds/linphone/rings/orig.wav
share/sounds/linphone/rings/orig.wav \
share/sounds/linphone/rings/sweet.wav \
share/sounds/linphone/rings/rock.wav
GTK_PREFIX=/usr/local
GTK_PREFIX=/usr
GTK_FILELIST=gtk+-2.16.2.filelist
GTK_FILELIST_PATH=$(shell cd $(top_srcdir) && pwd)/$(GTK_FILELIST)
LINPHONEDEPS_FILELIST=linphone-deps.filelist
@ -78,7 +81,9 @@ other-cherrypick:
else \
cp $$file $(INSTALLDIR_WITH_PREFIX)/$$file ;\
fi \
done
done
cp /mingw/bin/libgcc_s*.dll $(INSTALLDIR_WITH_PREFIX)/bin/.
gtk-cherrypick:
cd $(GTK_PREFIX) && \

View file

@ -2,15 +2,15 @@ Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006 Free Software Foundation, Inc.
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.
@ -67,12 +67,15 @@ The simplest way to compile this package is:
all sorts of other programs in order to regenerate files that came
with the distribution.
6. Often, you can also type `make uninstall' to remove the installed
files again.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
@ -85,7 +88,7 @@ is an example:
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
@ -97,10 +100,24 @@ architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
@ -123,7 +140,7 @@ option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
@ -135,14 +152,46 @@ find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
@ -150,7 +199,8 @@ type, such as `sun4', or a canonical name which has the form:
where SYSTEM can have one of these forms:
OS KERNEL-OS
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
@ -168,9 +218,9 @@ eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
@ -179,7 +229,7 @@ A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
@ -198,11 +248,19 @@ an Autoconf bug. Until the bug is fixed you can use this workaround:
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
@ -229,6 +287,16 @@ an Autoconf bug. Until the bug is fixed you can use this workaround:
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *Note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

View file

@ -18,4 +18,4 @@ zip:
clean-local:
rm -rf $(PACKAGE)-install
rm $(PACKAGE)-win32-$(VERSION).zip
rm -f $(PACKAGE)-win32-$(VERSION).zip

View file

@ -31,6 +31,16 @@ AC_DISABLE_STATIC
AC_PROG_LIBTOOL
AC_CONFIG_COMMANDS([libtool-hacking],[
if test "$mingw_found" = "yes" ; then
echo "Hacking libtool to work with mingw..."
sed -e 's/\*\" \$a_deplib \"\*/\*/' < ./libtool > libtool.tmp
cp -f ./libtool.tmp ./libtool
rm -f ./libtool.tmp
fi
],[mingw_found=$mingw_found])
# Checks for libraries.
PKG_CHECK_MODULES(LIBSOUP, libsoup-2.4 >= 2.4.0)

View file

@ -1,3 +1,4 @@
#include "c:/Program Files/Linphone/share/themes/Cillop/gtk-2.0/gtkrc"
include "share/themes/XLiquid_GTK-1.0.3/gtk-2.0/gtkrc"
#include "share/themes/XLiquid_GTK-1.0.3/gtk-2.0/gtkrc"
#include "share/themes/Aero-ion3.1/gtk-2.0/gtkrc"
include "share/themes/Outcrop/gtk-2.0/gtkrc"

View file

@ -5,7 +5,7 @@
./bin/libogg-0.dll
./bin/libsoup-2.4-1.dll
./bin/libtheora-0.dll
./bin/libxml2.dll
./bin/libxml2-2.dll
./bin/osip2.dll
./bin/osipparser2.dll
./bin/swscale-0.dll

View file

@ -1,73 +0,0 @@
/* HornetsEye - Computer Vision with Ruby
Copyright (C) 2006, 2007 Jan Wedekind
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef HORNETSEYE_COMPTR_HH
#define HORNETSEYE_COMPTR_HH
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef WIN32
#include <cassert>
#include <objbase.h>
#include "error.hh"
namespace Hornetseye {
template< class I >
class ComPtr
{
public:
ComPtr(void): m_i(NULL) {}
ComPtr( const ComPtr< I > &ptr ): m_i(ptr.get()) {
if ( m_i != NULL ) m_i->AddRef();
}
~ComPtr(void) { reset(); }
ComPtr< I > &operator=( const ComPtr< I > &other ) {
reset();
m_i = other.get();
if ( m_i != NULL ) m_i->AddRef();
return *this;
};
I **operator&(void) {
reset();
return &m_i;
}
void coCreateInstance( REFCLSID clsid, REFIID iid, const char *errorText )
throw (Error) {
reset();
COERRORMACRO( CoCreateInstance( clsid, NULL, CLSCTX_INPROC, iid,
(void **)&m_i ), Error, , errorText );
}
I *get(void) const { return m_i; }
I &operator*(void) {
assert( m_i != NULL );
return *m_i;
}
I *operator->(void) {
assert( m_i != NULL );
return m_i;
}
void reset(void) { if ( m_i != NULL ) { m_i->Release(); m_i = NULL; } }
protected:
I *m_i;
};
};
#endif
#endif

View file

@ -1,702 +0,0 @@
// This is a DirectShow interface. But maybe you'll find that it's easier to
// access the camera directly ;)
// http://www.codeguru.com/cpp/g-m/multimedia/video/article.php/c9551/
// http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2007-April/027965.html
// http://msdn2.microsoft.com/en-us/library/ms787594.aspx
// http://msdn2.microsoft.com/en-us/library/ms787867.aspx
// NullRenderer wih reference clock set to NULL
// http://www.videolan.org/
// http://git.videolan.org/gitweb.cgi?p=vlc.git;f=modules/access/dshow;hb=0.8.6
// #include <wtypes.h>
// #include <unknwn.h>
// #include <ole2.h>
// #include <limits.h>
// #include <dshow.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <windows.h>
#include <winnls.h>
#include <errors.h>
#include <initguid.h>
#include <ocidl.h>
#include <malloc.h>
#include "comptr.hh"
#include "error.hh"
#define FILTER_NAME L"HornetsEye Capture Filter"
#define PIN_NAME L"Capture"
using namespace Hornetseye;
DEFINE_GUID( CLSID_VideoInputDeviceCategory, 0x860BB310, 0x5D01,
0x11d0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86);
DEFINE_GUID( CLSID_SystemDeviceEnum, 0x62BE5D10, 0x60EB, 0x11d0,
0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 );
DEFINE_GUID( CLSID_FilterGraph, 0xe436ebb3, 0x524f, 0x11ce,
0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
DEFINE_GUID( CLSID_SampleGrabber, 0xc1f400a0, 0x3f08, 0x11d3,
0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37 );
DEFINE_GUID( CLSID_NullRenderer,0xc1f400a4, 0x3f08, 0x11d3,
0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37 );
DEFINE_GUID( CLSID_VfwCapture, 0x1b544c22, 0xfd0b, 0x11ce,
0x8c, 0x63, 0x0, 0xaa, 0x00, 0x44, 0xb5, 0x1e);
DEFINE_GUID( IID_IGraphBuilder, 0x56a868a9, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
DEFINE_GUID( IID_IBaseFilter, 0x56a86895, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_ICreateDevEnum, 0x29840822, 0x5b84, 0x11d0,
0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86 );
DEFINE_GUID( IID_IEnumFilters, 0x56a86893, 0xad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_IEnumPins, 0x56a86892, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_IMediaSample, 0x56a8689a, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_IMediaFilter, 0x56a86899, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_IPin, 0x56a86891, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_ISampleGrabber, 0x6b652fff, 0x11fe, 0x4fce,
0x92, 0xad, 0x02, 0x66, 0xb5, 0xd7, 0xc7, 0x8f );
DEFINE_GUID( IID_ISampleGrabberCB, 0x0579154a, 0x2b53, 0x4994,
0xb0, 0xd0, 0xe7, 0x73, 0x14, 0x8e, 0xff, 0x85 );
DEFINE_GUID( IID_IMediaEvent, 0x56a868b6, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_IMediaControl, 0x56a868b1, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_IMemInputPin, 0x56a8689d, 0x0ad4, 0x11ce,
0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
DEFINE_GUID( IID_IAMStreamConfig, 0xc6e13340, 0x30ac, 0x11d0,
0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56 );
DEFINE_GUID( IID_IVideoProcAmp, 0x4050560e, 0x42a7, 0x413a,
0x85, 0xc2, 0x09, 0x26, 0x9a, 0x2d, 0x0f, 0x44 );
DEFINE_GUID( MEDIATYPE_Video, 0x73646976, 0x0000, 0x0010,
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
DEFINE_GUID( MEDIASUBTYPE_I420, 0x30323449, 0x0000, 0x0010,
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
DEFINE_GUID( MEDIASUBTYPE_YV12, 0x32315659, 0x0000, 0x0010,
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
DEFINE_GUID( MEDIASUBTYPE_IYUV, 0x56555949, 0x0000, 0x0010,
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
DEFINE_GUID( MEDIASUBTYPE_YUYV, 0x56595559, 0x0000, 0x0010,
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
DEFINE_GUID( MEDIASUBTYPE_YUY2, 0x32595559, 0x0000, 0x0010,
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
DEFINE_GUID( MEDIASUBTYPE_UYVY, 0x59565955, 0x0000, 0x0010,
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
DEFINE_GUID( MEDIASUBTYPE_RGB24, 0xe436eb7d, 0x524f, 0x11ce,
0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70 );
using namespace std;
typedef LONGLONG REFERENCE_TIME;
typedef struct tagVIDEOINFOHEADER {
RECT rcSource;
RECT rcTarget;
DWORD dwBitRate;
DWORD dwBitErrorRate;
REFERENCE_TIME AvgTimePerFrame;
BITMAPINFOHEADER bmiHeader;
} VIDEOINFOHEADER;
typedef struct _AMMediaType {
GUID majortype;
GUID subtype;
BOOL bFixedSizeSamples;
BOOL bTemporalCompression;
ULONG lSampleSize;
GUID formattype;
IUnknown *pUnk;
ULONG cbFormat;
BYTE *pbFormat;
} AM_MEDIA_TYPE;
DECLARE_ENUMERATOR_(IEnumMediaTypes,AM_MEDIA_TYPE*);
typedef struct _VIDEO_STREAM_CONFIG_CAPS
{
GUID guid;
ULONG VideoStandard;
SIZE InputSize;
SIZE MinCroppingSize;
SIZE MaxCroppingSize;
int CropGranularityX;
int CropGranularityY;
int CropAlignX;
int CropAlignY;
SIZE MinOutputSize;
SIZE MaxOutputSize;
int OutputGranularityX;
int OutputGranularityY;
int StretchTapsX;
int StretchTapsY;
int ShrinkTapsX;
int ShrinkTapsY;
LONGLONG MinFrameInterval;
LONGLONG MaxFrameInterval;
LONG MinBitsPerSecond;
LONG MaxBitsPerSecond;
} VIDEO_STREAM_CONFIG_CAPS;
typedef LONGLONG REFERENCE_TIME;
typedef interface IBaseFilter IBaseFilter;
typedef interface IReferenceClock IReferenceClock;
typedef interface IFilterGraph IFilterGraph;
typedef enum _FilterState {
State_Stopped,
State_Paused,
State_Running
} FILTER_STATE;
#define MAX_FILTER_NAME 128
typedef struct _FilterInfo {
WCHAR achName[MAX_FILTER_NAME];
IFilterGraph *pGraph;
} FILTER_INFO;
typedef enum _PinDirection {
PINDIR_INPUT,
PINDIR_OUTPUT
} PIN_DIRECTION;
#define MAX_PIN_NAME 128
typedef struct _PinInfo {
IBaseFilter *pFilter;
PIN_DIRECTION dir;
WCHAR achName[MAX_PIN_NAME];
} PIN_INFO;
#define INTERFACE IPin
DECLARE_INTERFACE_(IPin,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(Connect)(THIS_ IPin*,const AM_MEDIA_TYPE*) PURE;
STDMETHOD(ReceiveConnection)(THIS_ IPin*,const AM_MEDIA_TYPE*) PURE;
STDMETHOD(Disconnect)(THIS) PURE;
STDMETHOD(ConnectedTo)(THIS_ IPin**) PURE;
STDMETHOD(ConnectionMediaType)(THIS_ AM_MEDIA_TYPE*) PURE;
STDMETHOD(QueryPinInfo)(THIS_ PIN_INFO*) PURE;
STDMETHOD(QueryDirection)(THIS_ PIN_DIRECTION*) PURE;
};
#undef INTERFACE
DECLARE_ENUMERATOR_(IEnumPins,IPin*);
typedef struct _AllocatorProperties {
long cBuffers;
long cbBuffer;
long cbAlign;
long cbPrefix;
} ALLOCATOR_PROPERTIES;
typedef LONG_PTR OAEVENT;
#define INTERFACE IMediaEvent
DECLARE_INTERFACE_(IMediaEvent,IDispatch)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(GetEventHandle)(THIS_ OAEVENT*) PURE;
STDMETHOD(GetEvent)(THIS_ long*,LONG_PTR,LONG_PTR,long) PURE;
STDMETHOD(WaitForCompletion)(THIS_ long,long*) PURE;
STDMETHOD(CancelDefaultHandling)(THIS_ long) PURE;
STDMETHOD(RestoreDefaultHandling)(THIS_ long) PURE;
STDMETHOD(FreeEventParams)(THIS_ long,LONG_PTR,LONG_PTR) PURE;
};
#undef INTERFACE
typedef long OAFilterState;
#define INTERFACE IMediaControl
DECLARE_INTERFACE_(IMediaControl,IDispatch)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(Run)(THIS) PURE;
STDMETHOD(Pause)(THIS) PURE;
STDMETHOD(Stop)(THIS) PURE;
STDMETHOD(GetState)(THIS_ LONG,OAFilterState*) PURE;
STDMETHOD(RenderFile)(THIS_ BSTR) PURE;
STDMETHOD(AddSourceFilter)(THIS_ BSTR,IDispatch**) PURE;
STDMETHOD(get_FilterCollection)(THIS_ IDispatch**) PURE;
STDMETHOD(get_RegFilterCollection)(THIS_ IDispatch**) PURE;
STDMETHOD(StopWhenReady)(THIS) PURE;
};
#undef INTERFACE
#define INTERFACE IVideoProcAmp
DECLARE_INTERFACE_(IVideoProcAmp,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
};
#undef INTERFACE
#define INTERFACE IAMStreamConfig
DECLARE_INTERFACE_(IAMStreamConfig,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(SetFormat)(THIS_ AM_MEDIA_TYPE*) PURE;
STDMETHOD(GetFormat)(THIS_ AM_MEDIA_TYPE**) PURE;
STDMETHOD(GetNumberOfCapabilities)(THIS_ int*,int*) PURE;
STDMETHOD(GetStreamCaps)(THIS_ int,AM_MEDIA_TYPE**,BYTE*) PURE;
};
#undef INTERFACE
#define INTERFACE IMediaFilter
DECLARE_INTERFACE_(IMediaFilter,IPersist)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(Stop)(THIS) PURE;
STDMETHOD(Pause)(THIS) PURE;
STDMETHOD(Run)(THIS_ REFERENCE_TIME) PURE;
STDMETHOD(GetState)(THIS_ DWORD,FILTER_STATE*) PURE;
STDMETHOD(SetSyncSource)(THIS_ IReferenceClock*) PURE;
STDMETHOD(GetSyncSource)(THIS_ IReferenceClock**) PURE;
};
#undef INTERFACE
#define INTERFACE IBaseFilter
DECLARE_INTERFACE_(IBaseFilter,IMediaFilter)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(EnumPins)(THIS_ IEnumPins**) PURE;
STDMETHOD(FindPin)(THIS_ LPCWSTR,IPin**) PURE;
STDMETHOD(QueryFilterInfo)(THIS_ FILTER_INFO*) PURE;
STDMETHOD(JoinFilterGraph)(THIS_ IFilterGraph*,LPCWSTR) PURE;
STDMETHOD(QueryVendorInfo)(THIS_ LPWSTR*) PURE;
};
#undef INTERFACE
DECLARE_ENUMERATOR_(IEnumFilters,IBaseFilter*);
// #define INTERFACE IEnumFilters
// DECLARE_INTERFACE_(IEnumFilters,IUnknown)
// {
// STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
// STDMETHOD_(ULONG,AddRef)(THIS) PURE;
// STDMETHOD_(ULONG,Release)(THIS) PURE;
// STDMETHOD(Next)(THIS_ ULONG,IBaseFilter**,ULONG*) PURE;
// STDMETHOD(Skip)(THIS_ ULONG) PURE;
// STDMETHOD(Reset)(THIS) PURE;
// STDMETHOD(Clone)(THIS_ IEnumFilters**) PURE;
// };
// #undef INTERFACE
#define INTERFACE IFilterGraph
DECLARE_INTERFACE_(IFilterGraph,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(AddFilter)(THIS_ IBaseFilter*,LPCWSTR) PURE;
STDMETHOD(RemoveFilter)(THIS_ IBaseFilter*) PURE;
STDMETHOD(EnumFilters)(THIS_ IEnumFilters**) PURE;
STDMETHOD(FindFilterByName)(THIS_ LPCWSTR,IBaseFilter**) PURE;
STDMETHOD(ConnectDirect)(THIS_ IPin*,IPin*,const AM_MEDIA_TYPE*) PURE;
STDMETHOD(Reconnect)(THIS_ IPin*) PURE;
STDMETHOD(Disconnect)(THIS_ IPin*) PURE;
STDMETHOD(SetDefaultSyncSource)(THIS) PURE;
};
#undef INTERFACE
#define INTERFACE IGraphBuilder
DECLARE_INTERFACE_(IGraphBuilder,IFilterGraph)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(Connect)(THIS_ IPin*,IPin*) PURE;
STDMETHOD(Render)(THIS_ IPin*) PURE;
STDMETHOD(RenderFile)(THIS_ LPCWSTR,LPCWSTR) PURE;
STDMETHOD(AddSourceFilter)(THIS_ LPCWSTR,LPCWSTR,IBaseFilter**) PURE;
STDMETHOD(SetLogFile)(THIS_ DWORD_PTR) PURE;
STDMETHOD(Abort)(THIS) PURE;
STDMETHOD(ShouldOperationContinue)(THIS) PURE;
};
#undef INTERFACE
#define INTERFACE ICreateDevEnum
DECLARE_INTERFACE_(ICreateDevEnum,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(CreateClassEnumerator)(THIS_ REFIID,IEnumMoniker**,DWORD) PURE;
};
#undef INTERFACE
#define INTERFACE IMediaSample
DECLARE_INTERFACE_(IMediaSample,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
};
#undef INTERFACE
#define INTERFACE IMemAllocator
DECLARE_INTERFACE_(IMemAllocator,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(SetProperties)(THIS_ ALLOCATOR_PROPERTIES*,ALLOCATOR_PROPERTIES*) PURE;
STDMETHOD(GetProperties)(THIS_ ALLOCATOR_PROPERTIES*) PURE;
STDMETHOD(Commit)(THIS) PURE;
STDMETHOD(Decommit)(THIS) PURE;
STDMETHOD(GetBuffer)(THIS_ IMediaSample **,REFERENCE_TIME*,REFERENCE_TIME*,DWORD) PURE;
STDMETHOD(ReleaseBuffer)(THIS_ IMediaSample*) PURE;
};
#undef INTERFACE
#define INTERFACE IMemInputPin
DECLARE_INTERFACE_(IMemInputPin,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(GetAllocator)(THIS_ IMemAllocator**) PURE;
STDMETHOD(NotifyAllocator)(THIS_ IMemAllocator*,BOOL) PURE;
STDMETHOD(GetAllocatorRequirements)(THIS_ ALLOCATOR_PROPERTIES*) PURE;
STDMETHOD(Receive)(THIS_ IMediaSample*) PURE;
STDMETHOD(ReceiveMultiple)(THIS_ IMediaSample**,LONG,LONG*) PURE;
STDMETHOD(ReceiveCanBlock)(THIS) PURE;
};
#undef INTERFACE
#define INTERFACE ISampleGrabberCB
DECLARE_INTERFACE_(ISampleGrabberCB,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(SampleCB)(THIS_ double,IMediaSample*) PURE;
STDMETHOD(BufferCB)(THIS_ double,BYTE*,long) PURE;
};
#undef INTERFACE
#define INTERFACE ISampleGrabber
DECLARE_INTERFACE_(ISampleGrabber,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(SetOneShot)(THIS_ BOOL) PURE;
STDMETHOD(SetMediaType)(THIS_ const AM_MEDIA_TYPE*) PURE;
STDMETHOD(GetConnectedMediaType)(THIS_ AM_MEDIA_TYPE*) PURE;
STDMETHOD(SetBufferSamples)(THIS_ BOOL) PURE;
STDMETHOD(GetCurrentBuffer)(THIS_ long*,long*) PURE;
STDMETHOD(GetCurrentSample)(THIS_ IMediaSample**) PURE;
STDMETHOD(SetCallBack)(THIS_ ISampleGrabberCB *,long) PURE;
};
#undef INTERFACE
ComPtr< IPin > getPin( IBaseFilter *filter, PIN_DIRECTION direction, int num )
{
ComPtr< IPin > retVal;
ComPtr< IEnumPins > enumPins;
COERRORMACRO( filter->EnumPins( &enumPins ), Error, ,
"Error getting pin enumerator" );
ULONG found;
ComPtr< IPin > pin;
while ( enumPins->Next( 1, &pin, &found ) == S_OK ) {
PIN_DIRECTION pinDirection = (PIN_DIRECTION)( -1 );
pin->QueryDirection( &pinDirection );
if ( pinDirection == direction ) {
if ( num == 0 ) {
retVal = pin;
break;
};
num--;
};
};
return retVal;
}
class Callback: public ISampleGrabberCB
{
public:
Callback(void);
virtual ~Callback(void);
STDMETHODIMP QueryInterface( REFIID riid, void **ppv );
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP SampleCB(double,IMediaSample*);
STDMETHODIMP BufferCB(double,BYTE*,long);
protected:
long m_refCount;
};
Callback::Callback(void): m_refCount(1)
{
#ifndef NDEBUG
cerr << "Callback::Callback" << endl;
#endif
}
Callback::~Callback(void)
{
#ifndef NDEBUG
cerr << "Callback::~Callback" << endl;
#endif
}
STDMETHODIMP Callback::QueryInterface(REFIID riid, void **ppv)
{
#ifndef NDEBUG
cerr << "Callback::QueryInterface" << endl;
#endif
HRESULT retval;
if ( ppv == NULL ) return E_POINTER;
/*
if ( riid == IID_IUnknown ) {
*ppv = static_cast< IUnknown * >( this );
AddRef();
retval = S_OK;
} else if ( riid == IID_ISampleGrabberCB ) {
*ppv = static_cast< ISampleGrabberCB * >( this );
AddRef();
retval = S_OK;
} else */ {
#ifndef NDEBUG
cerr << setbase( 16 ) << setfill('0')
<< "DEFINE_GUID( ..., 0x" << setw(8) << (int)riid.Data1 << ", 0x"
<< setw(4) << (int)riid.Data2 << "," << endl
<< " 0x"
<< setw(4) << (int)riid.Data3 << ", 0x" << setw(2)
<< (int)riid.Data4[0] << ", 0x"
<< (int)riid.Data4[1] << ", 0x"
<< (int)riid.Data4[2] << ", 0x"
<< (int)riid.Data4[3] << ", 0x"
<< (int)riid.Data4[4] << ", 0x"
<< (int)riid.Data4[5] << ", 0x"
<< (int)riid.Data4[6] << ", 0x"
<< (int)riid.Data4[7] << " ) ?" << endl
<< setfill( ' ' ) << setw( 0 ) << setbase( 10 );
#endif
retval = E_NOINTERFACE;
};
return retval;
};
STDMETHODIMP_(ULONG) Callback::AddRef(void)
{
#ifndef NDEBUG
cerr << "Callback::AddRef" << endl;
#endif
m_refCount++;
return m_refCount;
}
STDMETHODIMP_(ULONG) Callback::Release(void)
{
#ifndef NDEBUG
cerr << "Callback::Release" << endl;
#endif
if ( !InterlockedDecrement( &m_refCount ) ) delete this;
return m_refCount;
}
STDMETHODIMP Callback::SampleCB( double, IMediaSample * )
{
#ifndef NDEBUG
cerr << "Callback::SampleCB" << endl;
#endif
return S_OK;
}
STDMETHODIMP Callback::BufferCB( double, BYTE *, long )
{
#ifndef NDEBUG
cerr << "Callback::BufferCB" << endl;
#endif
return E_NOTIMPL;
}
using namespace std;
int main(void)
{
int retVal = 0;
bool initialized = false;
Callback *callback = NULL;
try {
COERRORMACRO( CoInitialize(NULL), Error, , "CoInitialize failed" );
initialized = true;
ComPtr< IGraphBuilder > graphBuilder;
graphBuilder.coCreateInstance( CLSID_FilterGraph, IID_IGraphBuilder,
"Could not create graph builder "
"interface" );
cerr << "graphBuilder is " << graphBuilder.get() << endl;
ComPtr< ICreateDevEnum > createDevEnum;
createDevEnum.coCreateInstance( CLSID_SystemDeviceEnum,
IID_ICreateDevEnum, "Could not create "
"device enumerator" );
ComPtr< IEnumMoniker > enumMoniker;
COERRORMACRO( createDevEnum->CreateClassEnumerator
( CLSID_VideoInputDeviceCategory, &enumMoniker, 0 ), Error, ,
"Error requesting moniker enumerator" );
createDevEnum.reset();
COERRORMACRO( enumMoniker->Reset(), Error, ,
"Error resetting moniker enumerator" );
int index = 0;
ComPtr< IMoniker > moniker;
for ( int i=0; i<=index; i++ ) {
ULONG fetched = 0;
COERRORMACRO( enumMoniker->Next( 1, &moniker, &fetched ), Error, ,
"Error fetching next moniker" );
};
enumMoniker.reset();
ComPtr< IBaseFilter > source;
COERRORMACRO( moniker->BindToObject( 0, 0, IID_IBaseFilter,
(void **)&source ), Error, ,
"Error binding moniker to base filter" );
moniker.reset();
COERRORMACRO( graphBuilder->AddFilter( source.get(), L"Source" ),
Error, , "Error adding camera source to filter graph" );
ComPtr< IPin > sourceOut = getPin( source.get(), PINDIR_OUTPUT, 0 );
ERRORMACRO( sourceOut.get() != NULL, Error, ,
"Error getting output pin of camera source" );
ComPtr< IAMStreamConfig > streamConfig;
COERRORMACRO( sourceOut->
QueryInterface( IID_IAMStreamConfig,
(void **)&streamConfig ),
Error, , "Error requesting stream configuration API" );
int count, size;
COERRORMACRO( streamConfig->GetNumberOfCapabilities( &count, &size ),
Error, , "Error getting number of capabilities" );
bool ok = false;
for ( int i=0; i<count; i++ ) {
VIDEO_STREAM_CONFIG_CAPS videoConfig;
AM_MEDIA_TYPE *mediaType;
COERRORMACRO( streamConfig->GetStreamCaps( i, &mediaType,
(BYTE *)&videoConfig ),
Error, , "Error getting stream capabilities" );
if ( mediaType->majortype == MEDIATYPE_Video &&
mediaType->cbFormat != 0 ) {
VIDEOINFOHEADER *infoHeader = (VIDEOINFOHEADER*)mediaType->pbFormat;
// TODO: choose format here !!!
cerr << "Setting format " << infoHeader->bmiHeader.biWidth
<< "x" << infoHeader->bmiHeader.biHeight << endl;
streamConfig->SetFormat( mediaType );
ok = true;
};
if ( mediaType->cbFormat != 0 )
CoTaskMemFree( (PVOID)mediaType->pbFormat );
if ( mediaType->pUnk != NULL ) mediaType->pUnk->Release();
CoTaskMemFree( (PVOID)mediaType );
if ( ok )
break;
};
streamConfig.reset();
ERRORMACRO( ok, Error, , "Could not find any video format" );
ComPtr< IBaseFilter > grabberBase;
COERRORMACRO( CoCreateInstance( CLSID_SampleGrabber, NULL,
CLSCTX_INPROC, IID_IBaseFilter,
(void **)&grabberBase ),
Error, , "Error creating sample grabber" );
COERRORMACRO( graphBuilder->AddFilter( grabberBase.get(), L"Grabber" ),
Error, , "Error adding sample grabber to filter graph" );
ComPtr< ISampleGrabber > sampleGrabber;
COERRORMACRO( grabberBase->QueryInterface( IID_ISampleGrabber,
(void **)&sampleGrabber ),
Error, , "Error requesting sample grabber interface" );
COERRORMACRO( sampleGrabber->SetOneShot( FALSE ), Error, ,
"Error disabling one-shot mode" );
COERRORMACRO( sampleGrabber->SetBufferSamples( TRUE ), Error, ,
"Error enabling buffer sampling" );
callback = new Callback;
COERRORMACRO( sampleGrabber->SetCallBack( callback, 0 ), Error, ,
"Error setting callback interface for grabbing" );
ComPtr< IPin > grabberIn = getPin( grabberBase.get(), PINDIR_INPUT, 0 );
ERRORMACRO( grabberIn.get() != NULL, Error, ,
"Error getting input of sample grabber" );
ComPtr< IPin > grabberOut = getPin( grabberBase.get(), PINDIR_OUTPUT, 0 );
ERRORMACRO( grabberOut.get() != NULL, Error, ,
"Error getting output of sample grabber" );
ComPtr< IBaseFilter > nullRenderer;
COERRORMACRO( CoCreateInstance( CLSID_NullRenderer, NULL,
CLSCTX_INPROC, IID_IBaseFilter,
(void **)&nullRenderer ),
Error, , "Error creating Null Renderer" );
COERRORMACRO( graphBuilder->AddFilter( nullRenderer.get(), L"Sink" ),
Error, , "Error adding null renderer to filter graph" );
ComPtr< IPin > nullIn = getPin( nullRenderer.get(), PINDIR_INPUT, 0 );
cerr << endl << "Attempting to connect" << endl;
COERRORMACRO( graphBuilder->Connect( sourceOut.get(), grabberIn.get() ),
Error, , "Error connecting source to sample grabber" );
COERRORMACRO( graphBuilder->Connect( grabberOut.get(), nullIn.get() ),
Error, , "Error connecting sample grabber to sink" );
cerr << "Success!!!!!!!!!!!!!!!!!!!!!" << endl;
ComPtr< IMediaControl > mediaControl;
COERRORMACRO( graphBuilder->QueryInterface( IID_IMediaControl,
(void **)&mediaControl ),
Error, , "Error requesting media control interface" );
COERRORMACRO( mediaControl->Run(), Error, , "Error running graph" );
ComPtr< IMediaEvent > mediaEvent;
COERRORMACRO( graphBuilder->QueryInterface( IID_IMediaEvent,
(void **)&mediaEvent ),
Error, , "Error requesting event interface" );
cin.get();
mediaControl->Stop();
long evCode = 0;
mediaEvent->WaitForCompletion( INFINITE, &evCode );
// sourceOut.reset();
// sinkIn.reset();
// source.reset();
} catch ( Error &e ) {
cerr << e.what() << endl;
retVal = 1;
};
if ( callback != NULL ) callback->Release();
if ( initialized ) CoUninitialize();
return retVal;
}
static void ms_dshow_detect(MSWebCamManager *obj);
static MSWebCamDesc ms_dshow_cam_desc={
"Directshow capture",
&ms_dshow_detect,
NULL,
&ms_dshow_create_reader,
NULL
};
static void ms_dshow_detect(MSWebCamManager *obj){
int i;
MSWebCam *cam;
}
extern "C" void libmsdscap_init(void){
ms_web_cam_desc_register(&ms_dshow_cam_desc);
}

View file

@ -1,23 +0,0 @@
/* HornetsEye - Computer Vision with Ruby
Copyright (C) 2006, 2007 Jan Wedekind
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "error.hh"
using namespace std;
namespace Hornetseye {
string Error::temp;
};

View file

@ -1,133 +0,0 @@
/* HornetsEye - Computer Vision with Ruby
Copyright (C) 2006, 2007 Jan Wedekind
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef HORNETSEYE_ERROR_HH
#define HORNETSEYE_ERROR_HH
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <exception>
#include <sstream>
#include <string>
#ifdef WIN32
#include <stdio.h>
#include <windef.h>
#include <wchar.h>
#include <winsock.h>
#endif
namespace Hornetseye {
/** Exception class deriving from std::exception.
This class provides a syntax similar to output-streams for convenience.
For compability with other libraries it is inheriting the class
\c std::exception.
Here is an example how to use an instance of this class in C++:
\include exceptiontest/exceptiontest.cc
Exception-handling also can be done using the macro \c ERRORMACRO:
\include exceptiontest/macrotest.cc
Mind that the macro uses a variable with the name \c _e. Make sure, that
you don't use this variable-name in any of the macro-arguments!
Ruby already comes with exception classes:
\include exceptiontest/exceptiontest.rb
@date Mon Aug 23 14:37:05 UTC 2004 */
class Error: public std::exception
{
public:
/// Constructor.
Error(void) {}
/// Copy constructor.
Error( Error &e ): std::exception( e )
{ m_message << e.m_message.str(); }
/// Destructor.
virtual ~Error(void) throw() {}
///
template< typename T >
std::ostream &operator<<( const T &t )
{ m_message << t; return m_message; }
/** Interface for manipulators.
Manipulators such as \c std::endl and \c std::hex use these
functions in constructs like "Error e; e << std::endl".
For more information, see the iomanip header. */
std::ostream &operator<<( std::ostream& (*__pf)( std::ostream&) )
{ (*__pf)( m_message ); return m_message; }
/// Returns error message (not thread safe).
virtual const char* what(void) const throw() {
temp = m_message.str();
return temp.c_str();
return NULL;
}
protected:
/// Memory-stream containing the error message.
std::ostringstream m_message;
/** Temporary to do null-termination.
The method \c what() requires a null-terminated string. */
static std::string temp;
};
};
#define ERRORMACRO( condition, class, params, message ) \
if ( !( condition ) ) { \
class _e params; \
_e << message; \
throw _e; \
};
#ifdef WIN32
#define COERRORMACRO( condition, class, params, message ) \
{ \
HRESULT _hr = condition; \
if ( FAILED( _hr ) ) { \
class _e params; \
_e << message; \
TCHAR *_msg; \
if ( FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | \
FORMAT_MESSAGE_FROM_SYSTEM, 0, _hr, 0, \
(LPTSTR)&_msg, 0, NULL ) != 0 ) { \
_e << ": " << _msg; \
LocalFree( _msg ); \
}; \
throw _e; \
}; \
};
#define W32ERRORMACRO( condition, class, params, message ) \
{ \
if ( !( condition ) ) { \
class _e params; \
_e << message; \
TCHAR *_msg; \
DWORD _errCode = GetLastError(); \
if ( FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | \
FORMAT_MESSAGE_FROM_SYSTEM, 0, _errCode, 0, \
(LPTSTR)&_msg, 0, NULL ) != 0 ) { \
_e << ": " << _msg; \
LocalFree( _msg ); \
}; \
throw _e; \
}; \
};
#endif
#endif

View file

@ -1,125 +0,0 @@
[Project]
FileName=libmsdscap.dev
Name=libmsdscap
UnitCount=4
PchHead=-1
PchSource=-1
Ver=3
IsCpp=1
ProfilesCount=2
ProfileIndex=0
Folders=
[Unit1]
FileName=error.hh
CompileCpp=1
Folder=libmsdscap
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit2]
FileName=comptr.hh
CompileCpp=1
Folder=libmsdscap
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit3]
FileName=mdscap.cc
CompileCpp=1
Folder=libmsdscap
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit4]
FileName=error.cc
CompileCpp=1
Folder=libmsdscap
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNrOnRebuild=0
AutoIncBuildNrOnCompile=0
[Profile1]
ProfileName=MingW 3.4.2
Type=3
ObjFiles=
Includes=../../include;../../../oRTP/include
Libs=../../build/win32native/;../../../oRTP/build/win32native
ResourceIncludes=
MakeIncludes=
Compiler=_@@_
CppCompiler=-DBUILDING_DLL=1_@@_-DORTP_INET6_@@_-ggdb -02_@@_-Wall_@@_
Linker=--no-export-all-symbols_@@_--add-stdcall-alias_@@_-lole32_@@_-loleaut32_@@_-lwinmm_@@_-luuid_@@_-lmediastreamer2_@@_-lortp_@@_
PreprocDefines=
CompilerSettings=0000000001001000000000
Icon=
ExeOutput=
ObjectOutput=Output\MingW
OverrideOutput=0
OverrideOutputName=libmsdscap.dll
HostApplication=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
compilerType=0
[Profile2]
ProfileName=Visual C++ 2005
Type=3
ObjFiles=
Includes=
Libs=
ResourceIncludes=
MakeIncludes=
Compiler=/DBUILDING_DLL=1
CppCompiler=/DBUILDING_DLL=1
Linker=
PreprocDefines=
CompilerSettings=000000000000010000000000000000000000
Icon=
ExeOutput=Output\Visual C++ 2005
ObjectOutput=Objects\Visual C++ 2005
OverrideOutput=0
OverrideOutputName=
HostApplication=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=1
compilerType=1

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@ Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007, 2008 Free Software Foundation, Inc.
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
@ -159,7 +159,7 @@ Particular systems
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae"
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
@ -174,6 +174,16 @@ and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
@ -189,7 +199,8 @@ type, such as `sun4', or a canonical name which has the form:
where SYSTEM can have one of these forms:
OS KERNEL-OS
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't

View file

@ -5,19 +5,44 @@ SUBDIRS=src
INSTALLDIR=$(shell cd $(top_builddir) && pwd)/$(PACKAGE)-install
INSTALLDIR_WITH_PREFIX=$(INSTALLDIR)/$(prefix)
ZIPFILE=$(shell cd $(top_builddir) && pwd)/$(PACKAGE)-win32-$(VERSION).zip
ZIP_EXCLUDED=include
ISS_SCRIPT=msx264.iss
ISS_SCRIPT_PATH=$(shell cd $(top_srcdir) && pwd)/$(ISS_SCRIPT)
#path to Inno Setup 5 compiler
ISCC=/c/Program\ Files/Inno\ Setup\ 5/ISCC.exe
PACKAGE_WIN32_FILELIST=$(PACKAGE)-win32.filelist
setup.exe: zip
cd $(INSTALLDIR_WITH_PREFIX) && \
rm -f $(PACKAGE_WIN32_FILELIST) && \
for file in `find` ; do \
if ! test -d $$file ; then \
echo "Source: $$file; Destdir: {app}\\`dirname $$file`; Flags: ignoreversion" \
>> $(PACKAGE_WIN32_FILELIST) ;\
fi \
done
cp $(ISS_SCRIPT) $(INSTALLDIR_WITH_PREFIX)/.
cd $(INSTALLDIR_WITH_PREFIX) && \
$(ISCC) $(ISS_SCRIPT)
mv $(INSTALLDIR_WITH_PREFIX)/Output/setup.exe $(PACKAGE)-$(VERSION)-setup.exe
rm -rf $(INSTALLDIR_WITH_PREFIX)/Output
rm -f $(INSTALLDIR_WITH_PREFIX)/$(PACKAGE_WIN32_FILELIST)
rm -f $(INSTALLDIR_WITH_PREFIX)/$(ISS_SCRIPT)
zip:
rm -f $(ZIPFILE)
rm -rf $(INSTALLDIR)
mkdir -p $(INSTALLDIR)
make install DESTDIR=$(INSTALLDIR)
cp -f $(top_srcdir)/README $(INSTALLDIR_WITH_PREFIX)/.
cp -f $(top_srcdir)/COPYING $(INSTALLDIR_WITH_PREFIX)/.
cd $(INSTALLDIR)/$(prefix) && rm -rf $(ZIP_EXCLUDED) && \
zip -r $(ZIPFILE) *
clean-local:
-rm -rf $(PACKAGE)-install
-rm -f $(PACKAGE)-win32-$(VERSION).zip

View file

@ -29,12 +29,15 @@ esac
AM_CONDITIONAL(BUILD_WIN32, test x$mingw_found = xyes)
AC_CONFIG_COMMANDS([libtool-hacking],[
if test "$mingw_found" = "yes" ; then
AC_MSG_NOTICE([Hacking libtool to work with mingw...])
sed -e 's/\*\" \$a_deplib \"\*/\*/' < ./libtool > libtool.tmp
cp -f ./libtool.tmp ./libtool
rm -f ./libtool.tmp
fi
],[mingw_found=$mingw_found])
CFLAGS="$CFLAGS -Wall"
@ -157,4 +160,5 @@ AC_SUBST(RELEASE)
AC_OUTPUT(
Makefile
src/Makefile
msx264.iss
)

View file

@ -1,35 +1,34 @@
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
AppName=msx264
AppVerName=msx264 version 1.1.7., an H.264 plugin for linphone.
AppPublisher=linphone.org
AppPublisherURL=http://www.linphone.org
AppSupportURL=http://www.linphone.org
AppUpdatesURL=http://www.linphone.org
DefaultDirName={pf}\Linphone
DefaultGroupName=Linphone
LicenseFile=COPYING
InfoBeforeFile=README
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "libmsx264.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
;Name: "{group}\Linphone"; Filename: "{app}\linphone-wx.exe" ; WorkingDir: "{app}"
;Name: "{userdesktop}\Linphone"; Filename: "{app}\linphone-wx.exe"; WorkingDir: "{app}" ; Tasks: desktopicon
[Run]
;Filename: "{app}\linphone-wx.exe"; Description: "{cm:LaunchProgram,Linphone}"; WorkingDir: "{app}" ; Flags: nowait postinstall skipifsilent
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
AppName=msx264
AppVerName=msx264 version @VERSION@ , an H.264 plugin for linphone.
AppPublisher=linphone.org
AppPublisherURL=http://www.linphone.org
AppSupportURL=http://www.linphone.org
AppUpdatesURL=http://www.linphone.org
DefaultDirName={pf}\Linphone
DefaultGroupName=Linphone
LicenseFile=COPYING
InfoBeforeFile=README
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
#include "msx264-win32.filelist"
[Icons]
;Name: "{group}\Linphone"; Filename: "{app}\linphone-wx.exe" ; WorkingDir: "{app}"
;Name: "{userdesktop}\Linphone"; Filename: "{app}\linphone-wx.exe"; WorkingDir: "{app}" ; Tasks: desktopicon
[Run]
;Filename: "{app}\linphone-wx.exe"; Description: "{cm:LaunchProgram,Linphone}"; WorkingDir: "{app}" ; Flags: nowait postinstall skipifsilent

View file

@ -264,7 +264,8 @@ int ms_load_plugins(const char *dir){
char szDirPath[1024];
char szPluginFile[1024];
BOOL fFinished = FALSE;
const char *tmp=getenv("DEBUG");
BOOL debug=(tmp!=NULL && atoi(tmp)==1);
snprintf(szDirPath, sizeof(szDirPath), "%s", dir);
// Start searching for .dll files in the current directory.
@ -283,7 +284,7 @@ int ms_load_plugins(const char *dir){
/* load library */
HINSTANCE os_handle;
UINT em;
em = SetErrorMode (SEM_FAILCRITICALERRORS);
if (!debug) em = SetErrorMode (SEM_FAILCRITICALERRORS);
snprintf(szPluginFile, sizeof(szPluginFile), "%s\\%s", szDirPath, FileData.cFileName);
os_handle = LoadLibraryEx (szPluginFile, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
@ -292,7 +293,7 @@ int ms_load_plugins(const char *dir){
ms_warning("Fail to load plugin %s: error %i",szPluginFile,GetLastError());
os_handle = LoadLibraryEx (szPluginFile, NULL, 0);
}
SetErrorMode (em);
if (!debug) SetErrorMode (em);
if (os_handle==NULL)
ms_warning("Fail to load plugin %s", szPluginFile);
else{