forked from mirrors/linphone-iphone
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:
parent
0deb9d5e96
commit
ee9d3921f2
17 changed files with 193 additions and 2179 deletions
|
|
@ -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) && \
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -18,4 +18,4 @@ zip:
|
|||
|
||||
clean-local:
|
||||
rm -rf $(PACKAGE)-install
|
||||
rm $(PACKAGE)-win32-$(VERSION).zip
|
||||
rm -f $(PACKAGE)-win32-$(VERSION).zip
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
|
|
|||
69
linphone/mediastreamer2/plugins/msx264/msx264.iss → linphone/mediastreamer2/plugins/msx264/msx264.iss.in
Executable file → Normal file
69
linphone/mediastreamer2/plugins/msx264/msx264.iss → linphone/mediastreamer2/plugins/msx264/msx264.iss.in
Executable file → Normal 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
|
||||
|
||||
|
|
@ -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{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue