dshowdecwrapper: Remove dependency on ATL

This fixes compiling with Visual C++ Express
that doesn't include ATL.

https://bugzilla.gnome.org/show_bug.cgi?id=677223
This commit is contained in:
Raimo Järvi 2014-12-15 22:24:26 -05:00 committed by Tim-Philipp Müller
parent 0fc55436b3
commit 96ea75d75a
5 changed files with 42 additions and 32 deletions

View file

@ -869,11 +869,11 @@ gst_dshowaudiodec_setup_graph (GstDshowAudioDec * adec, GstCaps *caps)
GstCaps *outcaps = NULL; GstCaps *outcaps = NULL;
AM_MEDIA_TYPE *output_mediatype = NULL; AM_MEDIA_TYPE *output_mediatype = NULL;
AM_MEDIA_TYPE *input_mediatype = NULL; AM_MEDIA_TYPE *input_mediatype = NULL;
CComPtr<IPin> output_pin = NULL; IPinPtr output_pin = NULL;
CComPtr<IPin> input_pin = NULL; IPinPtr input_pin = NULL;
const AudioCodecEntry *codec_entry = klass->entry; const AudioCodecEntry *codec_entry = klass->entry;
CComQIPtr<IBaseFilter> srcfilter; IBaseFilterPtr srcfilter;
CComQIPtr<IBaseFilter> sinkfilter; IBaseFilterPtr sinkfilter;
GstAudioInfo audio_info; GstAudioInfo audio_info;
input_mediatype = dshowaudiodec_set_input_format (adec, caps); input_mediatype = dshowaudiodec_set_input_format (adec, caps);
@ -972,8 +972,8 @@ end:
static gboolean static gboolean
gst_dshowaudiodec_get_filter_settings (GstDshowAudioDec * adec) gst_dshowaudiodec_get_filter_settings (GstDshowAudioDec * adec)
{ {
CComPtr<IPin> output_pin; IPinPtr output_pin;
CComPtr<IEnumMediaTypes> enum_mediatypes; IEnumMediaTypesPtr enum_mediatypes;
HRESULT hres; HRESULT hres;
ULONG fetched; ULONG fetched;
BOOL ret = FALSE; BOOL ret = FALSE;
@ -1018,13 +1018,13 @@ gst_dshowaudiodec_create_graph_and_filters (GstDshowAudioDec * adec)
HRESULT hres; HRESULT hres;
GstDshowAudioDecClass *klass = GstDshowAudioDecClass *klass =
(GstDshowAudioDecClass *) G_OBJECT_GET_CLASS (adec); (GstDshowAudioDecClass *) G_OBJECT_GET_CLASS (adec);
CComQIPtr<IBaseFilter> srcfilter; IBaseFilterPtr srcfilter;
CComQIPtr<IBaseFilter> sinkfilter; IBaseFilterPtr sinkfilter;
GUID insubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (klass->entry->format); GUID insubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (klass->entry->format);
GUID outsubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (WAVE_FORMAT_PCM); GUID outsubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (WAVE_FORMAT_PCM);
/* create the filter graph manager object */ /* create the filter graph manager object */
hres = adec->filtergraph.CoCreateInstance ( hres = adec->filtergraph.CreateInstance (
CLSID_FilterGraph, NULL, CLSCTX_INPROC); CLSID_FilterGraph, NULL, CLSCTX_INPROC);
if (FAILED (hres)) { if (FAILED (hres)) {
GST_ELEMENT_ERROR (adec, STREAM, FAILED, GST_ELEMENT_ERROR (adec, STREAM, FAILED,
@ -1112,7 +1112,7 @@ gst_dshowaudiodec_destroy_graph_and_filters (GstDshowAudioDec * adec)
if (adec->fakesrc) { if (adec->fakesrc) {
if (adec->filtergraph) { if (adec->filtergraph) {
CComQIPtr<IBaseFilter> filter = adec->fakesrc; IBaseFilterPtr filter = adec->fakesrc;
adec->filtergraph->RemoveFilter(filter); adec->filtergraph->RemoveFilter(filter);
} }
adec->fakesrc->Release(); adec->fakesrc->Release();
@ -1125,7 +1125,7 @@ gst_dshowaudiodec_destroy_graph_and_filters (GstDshowAudioDec * adec)
} }
if (adec->fakesink) { if (adec->fakesink) {
if (adec->filtergraph) { if (adec->filtergraph) {
CComQIPtr<IBaseFilter> filter = adec->fakesink; IBaseFilterPtr filter = adec->fakesink;
adec->filtergraph->RemoveFilter(filter); adec->filtergraph->RemoveFilter(filter);
} }
@ -1163,7 +1163,7 @@ dshow_adec_register (GstPlugin * plugin)
hr = CoInitialize(0); hr = CoInitialize(0);
for (i = 0; i < sizeof (audio_dec_codecs) / sizeof (AudioCodecEntry); i++) { for (i = 0; i < sizeof (audio_dec_codecs) / sizeof (AudioCodecEntry); i++) {
GType type; GType type;
CComPtr<IBaseFilter> filter; IBaseFilterPtr filter;
GUID insubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (audio_dec_codecs[i].format); GUID insubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (audio_dec_codecs[i].format);
GUID outsubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (WAVE_FORMAT_PCM); GUID outsubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (WAVE_FORMAT_PCM);

View file

@ -47,8 +47,6 @@
#ifndef __GST_DSHOWAUDIODEC_H__ #ifndef __GST_DSHOWAUDIODEC_H__
#define __GST_DSHOWAUDIODEC_H__ #define __GST_DSHOWAUDIODEC_H__
#include <atlbase.h>
#include <gst/gst.h> #include <gst/gst.h>
#include "gstdshowutil.h" #include "gstdshowutil.h"
#include "gstdshowfakesrc.h" #include "gstdshowfakesrc.h"
@ -88,11 +86,11 @@ struct _GstDshowAudioDec
FakeSrc *fakesrc; FakeSrc *fakesrc;
AudioFakeSink *fakesink; AudioFakeSink *fakesink;
CComPtr<IBaseFilter> decfilter; IBaseFilterPtr decfilter;
/* graph manager interfaces */ /* graph manager interfaces */
CComPtr<IMediaFilter> mediafilter; IMediaFilterPtr mediafilter;
CComPtr<IFilterGraph> filtergraph; IFilterGraphPtr filtergraph;
/* true when dshow graph is setup */ /* true when dshow graph is setup */
gboolean setup; gboolean setup;

View file

@ -19,18 +19,19 @@
* Boston, MA 02110-1301, USA. * Boston, MA 02110-1301, USA.
*/ */
#include <atlbase.h>
#include <dmodshow.h> #include <dmodshow.h>
#include <dmoreg.h> #include <dmoreg.h>
#include "gstdshowutil.h" #include "gstdshowutil.h"
#include "gstdshowfakesrc.h" #include "gstdshowfakesrc.h"
_COM_SMARTPTR_TYPEDEF(IDMOWrapperFilter, __uuidof(IDMOWrapperFilter));
IPin * IPin *
gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir) gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir)
{ {
CComPtr<IEnumPins> enumpins; IEnumPinsPtr enumpins;
CComPtr<IPin> pin; IPinPtr pin;
HRESULT hres; HRESULT hres;
hres = filter->EnumPins (&enumpins); hres = filter->EnumPins (&enumpins);
@ -59,9 +60,9 @@ gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype,
HRESULT hres; HRESULT hres;
GUID inTypes[2]; GUID inTypes[2];
GUID outTypes[2]; GUID outTypes[2];
CComPtr<IFilterMapper2> mapper; IFilterMapper2Ptr mapper;
CComPtr<IEnumMoniker> enum_moniker; IEnumMonikerPtr enum_moniker;
CComPtr<IMoniker> moniker; IMonikerPtr moniker;
ULONG fetched; ULONG fetched;
IBaseFilter *filter; IBaseFilter *filter;
@ -73,7 +74,7 @@ gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype,
/* If the filter is a DMO, we need to do this a bit differently */ /* If the filter is a DMO, we need to do this a bit differently */
if (preferred_filters->dmo_category) if (preferred_filters->dmo_category)
{ {
CComPtr<IDMOWrapperFilter> wrapper; IDMOWrapperFilterPtr wrapper;
hres = CoCreateInstance (CLSID_DMOWrapperFilter, NULL, hres = CoCreateInstance (CLSID_DMOWrapperFilter, NULL,
CLSCTX_INPROC, CLSCTX_INPROC,

View file

@ -24,6 +24,8 @@
#define _GST_DSHOW_UTIL_H_ #define _GST_DSHOW_UTIL_H_
#include <windows.h> #include <windows.h>
#include <tchar.h>
#include <comdef.h>
#include <objbase.h> #include <objbase.h>
#include <dshow.h> #include <dshow.h>
#include <Rpc.h> #include <Rpc.h>
@ -32,6 +34,16 @@
#include <glib.h> #include <glib.h>
_COM_SMARTPTR_TYPEDEF(IBaseFilter, __uuidof(IBaseFilter));
_COM_SMARTPTR_TYPEDEF(IFilterGraph, __uuidof(IFilterGraph));
_COM_SMARTPTR_TYPEDEF(IFilterMapper2, __uuidof(IFilterMapper2));
_COM_SMARTPTR_TYPEDEF(IEnumMediaTypes, __uuidof(IEnumMediaTypes));
_COM_SMARTPTR_TYPEDEF(IEnumMoniker, __uuidof(IEnumMoniker));
_COM_SMARTPTR_TYPEDEF(IEnumPins, __uuidof(IEnumPins));
_COM_SMARTPTR_TYPEDEF(IMediaFilter, __uuidof(IMediaFilter));
_COM_SMARTPTR_TYPEDEF(IMoniker, __uuidof(IMoniker));
_COM_SMARTPTR_TYPEDEF(IPin, __uuidof(IPin));
typedef struct { typedef struct {
const GUID *filter_guid; /* The filter GUID, or DMO GUID */ const GUID *filter_guid; /* The filter GUID, or DMO GUID */
const GUID *dmo_category; /* If non-NULL, the filter is a DMO of this const GUID *dmo_category; /* If non-NULL, the filter is a DMO of this

View file

@ -47,7 +47,6 @@
#include "config.h" #include "config.h"
#endif #endif
#include <atlbase.h>
#include <dmoreg.h> #include <dmoreg.h>
#include <wmcodecdsp.h> #include <wmcodecdsp.h>
@ -593,8 +592,8 @@ gst_dshowvideodec_sink_setcaps (GstPad * pad, GstCaps * caps)
GstCaps *caps_out = NULL; GstCaps *caps_out = NULL;
AM_MEDIA_TYPE output_mediatype, input_mediatype; AM_MEDIA_TYPE output_mediatype, input_mediatype;
VIDEOINFOHEADER *input_vheader = NULL, *output_vheader = NULL; VIDEOINFOHEADER *input_vheader = NULL, *output_vheader = NULL;
CComPtr<IPin> output_pin; IPinPtr output_pin;
CComPtr<IPin> input_pin; IPinPtr input_pin;
IBaseFilter *srcfilter = NULL; IBaseFilter *srcfilter = NULL;
IBaseFilter *sinkfilter = NULL; IBaseFilter *sinkfilter = NULL;
const GValue *fps, *par; const GValue *fps, *par;
@ -968,8 +967,8 @@ gst_dshowvideodec_src_getcaps (GstPad * pad)
vdec->srccaps = gst_caps_new_empty (); vdec->srccaps = gst_caps_new_empty ();
if (vdec->decfilter) { if (vdec->decfilter) {
CComPtr<IPin> output_pin; IPinPtr output_pin;
CComPtr<IEnumMediaTypes> enum_mediatypes; IEnumMediaTypesPtr enum_mediatypes;
HRESULT hres; HRESULT hres;
ULONG fetched; ULONG fetched;
@ -1058,8 +1057,8 @@ static gboolean
gst_dshowvideodec_get_filter_output_format (GstDshowVideoDec * vdec, gst_dshowvideodec_get_filter_output_format (GstDshowVideoDec * vdec,
const GUID subtype, VIDEOINFOHEADER ** format, guint * size) const GUID subtype, VIDEOINFOHEADER ** format, guint * size)
{ {
CComPtr<IPin> output_pin; IPinPtr output_pin;
CComPtr<IEnumMediaTypes> enum_mediatypes; IEnumMediaTypesPtr enum_mediatypes;
HRESULT hres; HRESULT hres;
ULONG fetched; ULONG fetched;
BOOL ret = FALSE; BOOL ret = FALSE;
@ -1304,7 +1303,7 @@ dshow_vdec_register (GstPlugin * plugin)
for (i = 0; i < sizeof (video_dec_codecs) / sizeof (VideoCodecEntry); i++) { for (i = 0; i < sizeof (video_dec_codecs) / sizeof (VideoCodecEntry); i++) {
GType type; GType type;
CComPtr<IBaseFilter> filter; IBaseFilterPtr filter;
guint rank = GST_RANK_MARGINAL; guint rank = GST_RANK_MARGINAL;
filter = gst_dshow_find_filter ( filter = gst_dshow_find_filter (