diff options
Diffstat (limited to 'gst-libs/gst')
-rw-r--r-- | gst-libs/gst/Makefile.am | 2 | ||||
-rw-r--r-- | gst-libs/gst/dshow/Makefile.am | 11 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshow.cpp | 355 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshow.h | 79 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshowfakesink.cpp | 126 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshowfakesink.h | 50 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshowfakesrc.cpp | 205 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshowfakesrc.h | 72 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshowinterface.cpp | 35 | ||||
-rw-r--r-- | gst-libs/gst/dshow/gstdshowinterface.h | 169 |
10 files changed, 1 insertions, 1103 deletions
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am index b123a4c6..e48cdd80 100644 --- a/gst-libs/gst/Makefile.am +++ b/gst-libs/gst/Makefile.am @@ -2,4 +2,4 @@ SUBDIRS = interfaces signalprocessor video noinst_HEADERS = gst-i18n-plugin.h gettext.h -DIST_SUBDIRS = dshow interfaces signalprocessor video +DIST_SUBDIRS = interfaces signalprocessor video diff --git a/gst-libs/gst/dshow/Makefile.am b/gst-libs/gst/dshow/Makefile.am deleted file mode 100644 index 04d84c31..00000000 --- a/gst-libs/gst/dshow/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -lib_LTLIBRARIES = libgstdshow-@GST_MAJORMINOR@.la - -libgstdshow_@GST_MAJORMINOR@_la_SOURCES = gstdshow.cpp gstdshowfakesink.cpp gstdshowfakesrc.cpp gstdshowinterface.cpp -libgstdshow_@GST_MAJORMINOR@_la_CXXFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) \ - $(GST_PLUGINS_BASE_CFLAGS) -DLIBDSHOW_EXPORTS -libgstdshow_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) -libgstdshow_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_ALL_LDFLAGS) -libgstdshow_@GST_MAJORMINOR@_la_LIBTOOLFLAGS = --tag=disable-static - -libgstdshow_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/dshow -libgstdshow_@GST_MAJORMINOR@include_HEADERS = gstdshow.h gstdshowfakesink.h gstdshowfakesrc.h gstdshowinterface.h diff --git a/gst-libs/gst/dshow/gstdshow.cpp b/gst-libs/gst/dshow/gstdshow.cpp deleted file mode 100644 index 4d419d16..00000000 --- a/gst-libs/gst/dshow/gstdshow.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshow.cpp: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstdshow.h" -#include "gstdshowfakesink.h" -#include "gstdshowfakesrc.h" - -CFactoryTemplate g_Templates[]= -{ - { - L"DSHOW fake sink filter" - , &CLSID_DshowFakeSink - , CDshowFakeSink::CreateInstance - , NULL - , NULL - }, - { - L"DSHOW fake src filter" - , &CLSID_DshowFakeSrc - , CDshowFakeSrc::CreateInstance - , NULL - , NULL - }, - -}; - -int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]); -static HINSTANCE g_hModule = NULL; - -extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID); -BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) -{ - if (!g_hModule) - g_hModule = (HINSTANCE)hModule; - - return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved); -} - -STDAPI DllRegisterServer() -{ - return AMovieDllRegisterServer2 (TRUE); -} - -STDAPI DllUnregisterServer() -{ - return AMovieDllRegisterServer2 (FALSE); -} - -BOOL gst_dshow_register_fakefilters () -{ - return (DllRegisterServer() == S_OK) ? TRUE : FALSE; -} - -void -gst_dshow_free_mediatype (AM_MEDIA_TYPE *pmt) -{ - if (pmt != NULL) { - if (pmt->cbFormat != 0) { - CoTaskMemFree((PVOID)pmt->pbFormat); - pmt->cbFormat = 0; - pmt->pbFormat = NULL; - } - if (pmt->pUnk != NULL) { - /* Unecessary because pUnk should not be used, but safest. */ - pmt->pUnk->Release(); - pmt->pUnk = NULL; - } - - CoTaskMemFree(pmt); - } -} - -void -gst_dshow_free_pin_mediatype (gpointer pt) -{ - GstCapturePinMediaType * pin_mediatype = (GstCapturePinMediaType *) pt; - if (pin_mediatype) { - if (pin_mediatype->capture_pin) { - pin_mediatype->capture_pin->Release(); - pin_mediatype->capture_pin = NULL; - } - if (pin_mediatype->mediatype) { - gst_dshow_free_mediatype (pin_mediatype->mediatype); - pin_mediatype->mediatype = NULL; - } - } -} - - -void -gst_dshow_free_pins_mediatypes (GList *pins_mediatypes) -{ - guint i = 0; - for (; i < g_list_length (pins_mediatypes); i++) { - GList *mylist = g_list_nth (pins_mediatypes, i); - if (mylist && mylist->data) - gst_dshow_free_pin_mediatype ((GstCapturePinMediaType *)mylist->data); - } - g_list_free (pins_mediatypes); -} - -gboolean -gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir, IPin **pin) -{ - gboolean ret = FALSE; - IEnumPins *enumpins = NULL; - IPin *pintmp = NULL; - HRESULT hres; - *pin = NULL; - - hres = filter->EnumPins (&enumpins); - if (FAILED(hres)) { - return ret; - } - - while (enumpins->Next (1, &pintmp, NULL) == S_OK) - { - PIN_DIRECTION pindirtmp; - hres = pintmp->QueryDirection (&pindirtmp); - if (hres == S_OK && pindir == pindirtmp) { - *pin = pintmp; - ret = TRUE; - break; - } - pintmp->Release (); - } - enumpins->Release (); - - return ret; -} - -gboolean gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype, - CLSID output_majortype, CLSID output_subtype, - gchar * prefered_filter_name, IBaseFilter **filter) -{ - gboolean ret = FALSE; - HRESULT hres; - GUID arrayInTypes[2]; - GUID arrayOutTypes[2]; - IFilterMapper2 *mapper = NULL; - IEnumMoniker *enum_moniker = NULL; - IMoniker *moniker = NULL; - ULONG fetched; - gchar *prefered_filter_upper = NULL; - gboolean exit = FALSE; - - /* initialize output parameter */ - if (filter) - *filter = NULL; - - /* create a private copy of prefered filter substring in upper case */ - if (prefered_filter_name) { - prefered_filter_upper = g_strdup (prefered_filter_name); - strupr (prefered_filter_upper); - } - - hres = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC, - IID_IFilterMapper2, (void **) &mapper); - if (FAILED(hres)) - goto clean; - - memcpy(&arrayInTypes[0], &input_majortype, sizeof (CLSID)); - memcpy(&arrayInTypes[1], &input_subtype, sizeof (CLSID)); - memcpy(&arrayOutTypes[0], &output_majortype, sizeof (CLSID)); - memcpy(&arrayOutTypes[1], &output_subtype, sizeof (CLSID)); - - hres = mapper->EnumMatchingFilters (&enum_moniker, 0, FALSE, MERIT_DO_NOT_USE+1, - TRUE, 1, arrayInTypes, NULL, NULL, FALSE, - TRUE, 1, arrayOutTypes, NULL, NULL); - if (FAILED(hres)) - goto clean; - - enum_moniker->Reset (); - - while(hres = enum_moniker->Next (1, &moniker, &fetched),hres == S_OK - && !exit) { - IBaseFilter *filter_temp = NULL; - IPropertyBag *property_bag = NULL; - gchar * friendly_name = NULL; - - hres = moniker->BindToStorage (NULL, NULL, IID_IPropertyBag, (void **)&property_bag); - if(SUCCEEDED(hres) && property_bag) { - VARIANT varFriendlyName; - VariantInit (&varFriendlyName); - - hres = property_bag->Read (L"FriendlyName", &varFriendlyName, NULL); - if(hres == S_OK && varFriendlyName.bstrVal) { - friendly_name = g_utf16_to_utf8((const gunichar2*)varFriendlyName.bstrVal, - wcslen(varFriendlyName.bstrVal), NULL, NULL, NULL); - if (friendly_name) - strupr (friendly_name); - SysFreeString (varFriendlyName.bstrVal); - } - property_bag->Release (); - } - - hres = moniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&filter_temp); - if(SUCCEEDED(hres) && filter_temp) { - ret = TRUE; - if (filter) { - if (*filter) - (*filter)->Release (); - - *filter = filter_temp; - (*filter)->AddRef (); - - if (prefered_filter_upper && friendly_name && - strstr(friendly_name, prefered_filter_upper)) - exit = TRUE; - } - - /* if we just want to know if the formats are supported OR - if we don't care about what will be the filter used - => we can stop enumeration */ - if (!filter || !prefered_filter_upper) - exit = TRUE; - - filter_temp->Release (); - } - - if (friendly_name) - g_free (friendly_name); - moniker->Release (); - } - -clean: - if (prefered_filter_upper) - g_free (prefered_filter_upper); - if (enum_moniker) - enum_moniker->Release (); - if (mapper) - mapper->Release (); - - return ret; -} - - -gchar * -gst_dshow_getdevice_from_devicename (GUID *device_category, gchar **device_name) -{ - gchar *ret = NULL; - ICreateDevEnum *devices_enum = NULL; - IEnumMoniker *enum_moniker = NULL; - IMoniker *moniker = NULL; - HRESULT hres = S_FALSE; - ULONG fetched; - gboolean bfound = FALSE; - - hres = CoCreateInstance (CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, - IID_ICreateDevEnum, (void**)&devices_enum); - if(hres != S_OK) { - /*error*/ - goto clean; - } - - hres = devices_enum->CreateClassEnumerator (*device_category, - &enum_moniker, 0); - if (hres != S_OK || !enum_moniker) { - /*error*/ - goto clean; - } - - enum_moniker->Reset (); - - while(hres = enum_moniker->Next (1, &moniker, &fetched),hres == S_OK - && !bfound) { - IPropertyBag *property_bag = NULL; - hres = moniker->BindToStorage(NULL, NULL, IID_IPropertyBag, (void **)&property_bag); - if(SUCCEEDED(hres) && property_bag) { - VARIANT varFriendlyName; - VariantInit (&varFriendlyName); - - hres = property_bag->Read (L"FriendlyName", &varFriendlyName, NULL); - if(hres == S_OK && varFriendlyName.bstrVal) { - gchar * friendly_name = g_utf16_to_utf8((const gunichar2*)varFriendlyName.bstrVal, - wcslen(varFriendlyName.bstrVal), NULL, NULL, NULL); - - if (!*device_name) { - *device_name = g_strdup (friendly_name); - } - - if (_stricmp(*device_name, friendly_name) == 0) { - WCHAR *wszDisplayName = NULL; - hres = moniker->GetDisplayName (NULL, NULL, &wszDisplayName); - if(hres == S_OK && wszDisplayName) { - ret = g_utf16_to_utf8((const gunichar2*)wszDisplayName, - wcslen(wszDisplayName), NULL, NULL, NULL); - CoTaskMemFree (wszDisplayName); - } - bfound = TRUE; - } - SysFreeString (varFriendlyName.bstrVal); - } - property_bag->Release (); - } - moniker->Release (); - } - -clean: - if (enum_moniker) { - enum_moniker->Release (); - } - - if (devices_enum) { - devices_enum->Release (); - } - - return ret; -} - -gboolean -gst_dshow_show_propertypage (IBaseFilter *base_filter) -{ - gboolean ret = FALSE; - ISpecifyPropertyPages *pProp = NULL; - HRESULT hres = base_filter->QueryInterface (IID_ISpecifyPropertyPages, (void **)&pProp); - if (SUCCEEDED(hres)) - { - /* Get the filter's name and IUnknown pointer.*/ - FILTER_INFO FilterInfo; - CAUUID caGUID; - IUnknown *pFilterUnk = NULL; - hres = base_filter->QueryFilterInfo (&FilterInfo); - base_filter->QueryInterface (IID_IUnknown, (void **)&pFilterUnk); - - /* Show the page. */ - pProp->GetPages (&caGUID); - pProp->Release (); - OleCreatePropertyFrame(GetDesktopWindow(), 0, 0, FilterInfo.achName, - 1, &pFilterUnk, caGUID.cElems, caGUID.pElems, 0, 0, NULL); - - pFilterUnk->Release (); - FilterInfo.pGraph->Release (); - CoTaskMemFree(caGUID.pElems); - } - return ret; -} diff --git a/gst-libs/gst/dshow/gstdshow.h b/gst-libs/gst/dshow/gstdshow.h deleted file mode 100644 index 3d1520d5..00000000 --- a/gst-libs/gst/dshow/gstdshow.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshow.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GSTDSHOW_ -#define _GSTDSHOW_ - -#include <windows.h> - -#include <glib.h> - -#ifdef LIBDSHOW_EXPORTS -#include <streams.h> -#include <atlbase.h> -#define DSHOW_API __declspec(dllexport) -#else -#define DSHOW_API __declspec(dllimport) -#endif - -typedef struct _GstCapturePinMediaType -{ - AM_MEDIA_TYPE *mediatype; - IPin *capture_pin; -} GstCapturePinMediaType; - -#ifdef __cplusplus -extern "C" { -#endif - -/* register fake filters as COM object and as Direct Show filters in the registry */ -BOOL gst_dshow_register_fakefilters (); - -/* free memory of the input pin mediatype */ -void gst_dshow_free_pin_mediatype (gpointer pt); - -/* free memory of the input dshow mediatype */ -void gst_dshow_free_mediatype (AM_MEDIA_TYPE *pmt); - -/* free the memory of all mediatypes of the input list if pin mediatype */ -void gst_dshow_free_pins_mediatypes (GList *mediatypes); - -/* get a pin from directshow filter */ -gboolean gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir, IPin **pin); - -/* find and return a filter according to the input and output types */ -gboolean gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype, - CLSID output_majortype, CLSID output_subtype, - gchar * prefered_filter_name, IBaseFilter **filter); - -/* get the dshow device path from device friendly name. -If friendly name is not set, it will return the first available device */ -gchar *gst_dshow_getdevice_from_devicename (GUID *device_category, gchar **device_name); - -/* show the capture filter property page (generally used to setup the device). the page is modal*/ -gboolean gst_dshow_show_propertypage (IBaseFilter *base_filter); - - -#ifdef __cplusplus -} -#endif - -#endif /* _GSTDSHOW_ */
\ No newline at end of file diff --git a/gst-libs/gst/dshow/gstdshowfakesink.cpp b/gst-libs/gst/dshow/gstdshowfakesink.cpp deleted file mode 100644 index e3a5f0b9..00000000 --- a/gst-libs/gst/dshow/gstdshowfakesink.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshowfakesink.cpp: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstdshowfakesink.h" - - -CDshowFakeSink::CDshowFakeSink() - : m_hres(S_OK), CBaseRenderer(CLSID_DshowFakeSink, "DshowFakeSink", NULL, &m_hres) -{ - m_callback = NULL; -} - -CDshowFakeSink::~CDshowFakeSink() -{ - -} - -//Object creation. -CUnknown* WINAPI CDshowFakeSink::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) -{ - CDshowFakeSink *pNewObject = new CDshowFakeSink(); - if (pNewObject == NULL) { - *pHr = E_OUTOFMEMORY; - } - return pNewObject; -} - -STDMETHODIMP CDshowFakeSink::QueryInterface(REFIID riid, void **ppvObject) -{ - if (riid == IID_IGstDshowInterface) { - *ppvObject = (IGstDshowInterface*) this; - AddRef(); - return S_OK; - } - else - return CBaseRenderer::QueryInterface (riid, ppvObject); -} - -ULONG STDMETHODCALLTYPE CDshowFakeSink::AddRef() -{ - return CBaseRenderer::AddRef(); -} - -ULONG STDMETHODCALLTYPE CDshowFakeSink::Release() -{ - return CBaseRenderer::Release(); -} - - -STDMETHODIMP CDshowFakeSink::gst_set_media_type (AM_MEDIA_TYPE *pmt) -{ - m_MediaType.Set (*pmt); - return S_OK; -} - -STDMETHODIMP CDshowFakeSink::gst_set_buffer_callback (push_buffer_func push, byte *data) -{ - m_callback = push; - m_data = data; - return S_OK; -} - -STDMETHODIMP CDshowFakeSink::gst_push_buffer (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CDshowFakeSink::gst_flush () -{ - return E_NOTIMPL; -} - -STDMETHODIMP CDshowFakeSink::gst_set_sample_size(unsigned int size) -{ - return E_NOTIMPL; -} - -HRESULT CDshowFakeSink::CheckMediaType(const CMediaType *pmt) -{ - VIDEOINFOHEADER *p1; - VIDEOINFOHEADER *p2; - if(pmt != NULL) - { - p1 = (VIDEOINFOHEADER *)pmt->Format(); - p2 = (VIDEOINFOHEADER *)m_MediaType.Format(); - if (*pmt == m_MediaType) - return S_OK; - } - - return S_FALSE; -} - -HRESULT CDshowFakeSink::DoRenderSample(IMediaSample *pMediaSample) -{ - if(pMediaSample && m_callback) - { - BYTE *pBuffer = NULL; - LONGLONG lStart = 0, lStop = 0; - pMediaSample->GetPointer(&pBuffer); - long size = pMediaSample->GetActualDataLength(); - pMediaSample->GetTime(&lStart, &lStop); - lStart*=100; - lStop*=100; - m_callback(pBuffer, size, m_data, lStart, lStop); - } - - return S_OK; -} diff --git a/gst-libs/gst/dshow/gstdshowfakesink.h b/gst-libs/gst/dshow/gstdshowfakesink.h deleted file mode 100644 index 7f419b27..00000000 --- a/gst-libs/gst/dshow/gstdshowfakesink.h +++ /dev/null @@ -1,50 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshowfakesink.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstdshowinterface.h" - -class CDshowFakeSink : public CBaseRenderer, - public IGstDshowInterface -{ -public: - CDshowFakeSink (); - virtual ~CDshowFakeSink (); - - static CUnknown * WINAPI CreateInstance (LPUNKNOWN pUnk, HRESULT *pHr); - - virtual HRESULT CheckMediaType (const CMediaType *pmt); - virtual HRESULT DoRenderSample (IMediaSample *pMediaSample); - - STDMETHOD (QueryInterface)(REFIID riid, void **ppvObject); - ULONG STDMETHODCALLTYPE AddRef(); - ULONG STDMETHODCALLTYPE Release(); - STDMETHOD (gst_set_media_type) (AM_MEDIA_TYPE *pmt); - STDMETHOD (gst_set_buffer_callback) (push_buffer_func push, byte *data); - STDMETHOD (gst_push_buffer) (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount); - STDMETHOD (gst_flush) (); - STDMETHOD (gst_set_sample_size) (unsigned int size); - -protected: - HRESULT m_hres; - CMediaType m_MediaType; - push_buffer_func m_callback; - byte *m_data; -};
\ No newline at end of file diff --git a/gst-libs/gst/dshow/gstdshowfakesrc.cpp b/gst-libs/gst/dshow/gstdshowfakesrc.cpp deleted file mode 100644 index 2c6bcc88..00000000 --- a/gst-libs/gst/dshow/gstdshowfakesrc.cpp +++ /dev/null @@ -1,205 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshowfakesrc.cpp: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstdshowfakesrc.h" - -static CCritSec g_pCriticSec; - -/* output pin*/ -CDshowFakeOutputPin::CDshowFakeOutputPin (CBaseFilter *pFilter, CCritSec *sec): - CBaseOutputPin("FakeOutputPin", pFilter, sec, &m_hres, L"output") -{ -} - -CDshowFakeOutputPin::~CDshowFakeOutputPin() -{ - -} - -HRESULT CDshowFakeOutputPin::GetMediaType(int iPosition, CMediaType *pMediaType) -{ - if(iPosition == 0) { - *pMediaType = m_MediaType; - return S_OK; - } - - return VFW_S_NO_MORE_ITEMS; -} - -HRESULT CDshowFakeOutputPin::CheckMediaType(const CMediaType *pmt) -{ - if (m_MediaType == *pmt) { - return S_OK; - } - - return S_FALSE; -} - -HRESULT CDshowFakeOutputPin::DecideBufferSize (IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) -{ - ALLOCATOR_PROPERTIES properties; - ppropInputRequest->cbBuffer = m_SampleSize; - ppropInputRequest->cBuffers = 1; - HRESULT hres = pAlloc->SetProperties(ppropInputRequest, &properties); - pAlloc->Commit(); - - return S_OK; -} - -STDMETHODIMP CDshowFakeOutputPin::SetMediaType (AM_MEDIA_TYPE *pmt) -{ - m_MediaType.Set (*pmt); - m_SampleSize = m_MediaType.GetSampleSize(); - return S_OK; -} - -STDMETHODIMP CDshowFakeOutputPin::PushBuffer(byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount) -{ - IMediaSample *pSample = NULL; - - if (start != -1) { - start /= 100; - stop /= 100; - } - - HRESULT hres = GetDeliveryBuffer(&pSample, NULL, NULL, 0); - if (hres == S_OK && pSample) - { - BYTE *sample_buffer; - pSample->GetPointer(&sample_buffer); - if(sample_buffer) - { - memcpy (sample_buffer, buffer, size); - pSample->SetActualDataLength(size); - } - if (discount) - pSample->SetDiscontinuity(TRUE); - else - pSample->SetDiscontinuity(FALSE); - - pSample->SetSyncPoint(TRUE); - pSample->SetPreroll(FALSE); - - if (start != -1) - pSample->SetTime(&start, &stop); - - hres = Deliver(pSample); - pSample->Release(); - } - - return S_OK; -} - -STDMETHODIMP CDshowFakeOutputPin::Flush () -{ - DeliverBeginFlush(); - DeliverEndFlush(); - return S_OK; -} - -STDMETHODIMP CDshowFakeOutputPin::SetSampleSize (unsigned int size) -{ - m_SampleSize = size; - return S_OK; -} - -/* filter */ -CDshowFakeSrc::CDshowFakeSrc():CBaseFilter("DshowFakeSink", NULL, &g_pCriticSec, CLSID_DshowFakeSrc) -{ - m_pOutputPin = new CDshowFakeOutputPin((CSource *)this, m_pLock); -} - -CDshowFakeSrc::~CDshowFakeSrc() -{ - if (m_pOutputPin) - delete m_pOutputPin; -} - -//Object creation. -CUnknown* WINAPI CDshowFakeSrc::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) -{ - CDshowFakeSrc *pNewObject = new CDshowFakeSrc(); - if (pNewObject == NULL) { - *pHr = E_OUTOFMEMORY; - } - return pNewObject; -} - -int CDshowFakeSrc::GetPinCount() -{ - return 1; -} - -CBasePin *CDshowFakeSrc::GetPin(int n) -{ - return (CBasePin *)m_pOutputPin; -} - - -STDMETHODIMP CDshowFakeSrc::QueryInterface(REFIID riid, void **ppvObject) -{ - if (riid == IID_IGstDshowInterface) { - *ppvObject = (IGstDshowInterface*) this; - AddRef(); - return S_OK; - } - else - return CBaseFilter::QueryInterface (riid, ppvObject); -} - -ULONG STDMETHODCALLTYPE CDshowFakeSrc::AddRef() -{ - return CBaseFilter::AddRef(); -} - -ULONG STDMETHODCALLTYPE CDshowFakeSrc::Release() -{ - return CBaseFilter::Release(); -} - -STDMETHODIMP CDshowFakeSrc::gst_set_media_type (AM_MEDIA_TYPE *pmt) -{ - m_pOutputPin->SetMediaType(pmt); - return S_OK; -} - -STDMETHODIMP CDshowFakeSrc::gst_set_buffer_callback (push_buffer_func push, byte *data) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CDshowFakeSrc::gst_push_buffer (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount) -{ - m_pOutputPin->PushBuffer(buffer, start, stop, size, discount); - return S_OK; -} - -STDMETHODIMP CDshowFakeSrc::gst_flush () -{ - m_pOutputPin->Flush(); - return S_OK; -} - -STDMETHODIMP CDshowFakeSrc::gst_set_sample_size(unsigned int size) -{ - m_pOutputPin->SetSampleSize(size); - return S_OK; -}
\ No newline at end of file diff --git a/gst-libs/gst/dshow/gstdshowfakesrc.h b/gst-libs/gst/dshow/gstdshowfakesrc.h deleted file mode 100644 index 06884313..00000000 --- a/gst-libs/gst/dshow/gstdshowfakesrc.h +++ /dev/null @@ -1,72 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshowfakesrc.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstdshowinterface.h" -#include <gst/gst.h> - -class CDshowFakeOutputPin : public CBaseOutputPin -{ -protected: -/* members */ - HRESULT m_hres; - CMediaType m_MediaType; - unsigned int m_SampleSize; - -public: -/* methods */ - CDshowFakeOutputPin (CBaseFilter *pFilter, CCritSec *sec); - ~CDshowFakeOutputPin (); - - virtual HRESULT CheckMediaType(const CMediaType *pmt); - HRESULT GetMediaType(int iPosition, CMediaType *pMediaType); - virtual HRESULT DecideBufferSize (IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest); - STDMETHOD (SetMediaType) (AM_MEDIA_TYPE *pmt); - STDMETHOD (PushBuffer) (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount); - STDMETHOD (Flush) (); - STDMETHOD (SetSampleSize) (unsigned int size); -}; - -class CDshowFakeSrc : public CBaseFilter, - public IGstDshowInterface -{ -public: -/* members */ - CDshowFakeOutputPin *m_pOutputPin; - -/* methods */ - CDshowFakeSrc (); - virtual ~CDshowFakeSrc (); - - static CUnknown * WINAPI CreateInstance (LPUNKNOWN pUnk, HRESULT *pHr); - - virtual int GetPinCount(); - virtual CBasePin *GetPin(int n); - - STDMETHOD (QueryInterface)(REFIID riid, void **ppvObject); - ULONG STDMETHODCALLTYPE AddRef(); - ULONG STDMETHODCALLTYPE Release(); - - STDMETHOD (gst_set_media_type) (AM_MEDIA_TYPE *pmt); - STDMETHOD (gst_set_buffer_callback) (push_buffer_func push, byte *data); - STDMETHOD (gst_push_buffer) (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount); - STDMETHOD (gst_flush) (); - STDMETHOD (gst_set_sample_size) (unsigned int size); -};
\ No newline at end of file diff --git a/gst-libs/gst/dshow/gstdshowinterface.cpp b/gst-libs/gst/dshow/gstdshowinterface.cpp deleted file mode 100644 index 3dba7c25..00000000 --- a/gst-libs/gst/dshow/gstdshowinterface.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshowinterface.cpp: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstdshowinterface.h" - - -//{6A780808-9725-4d0b-8695-A4DD8D210773} -const GUID CLSID_DshowFakeSink - = { 0x6a780808, 0x9725, 0x4d0b, { 0x86, 0x95, 0xa4, 0xdd, 0x8d, 0x21, 0x7, 0x73 } }; - -// {1E38DAED-8A6E-4DEA-A482-A878761D11CB} -const GUID CLSID_DshowFakeSrc = -{ 0x1e38daed, 0x8a6e, 0x4dea, { 0xa4, 0x82, 0xa8, 0x78, 0x76, 0x1d, 0x11, 0xcb } }; - -// {FC36764C-6CD4-4C73-900F-3F40BF3F191A} -static const GUID IID_IGstDshowInterface = -{ 0xfc36764c, 0x6cd4, 0x4c73, { 0x90, 0xf, 0x3f, 0x40, 0xbf, 0x3f, 0x19, 0x1a } }; diff --git a/gst-libs/gst/dshow/gstdshowinterface.h b/gst-libs/gst/dshow/gstdshowinterface.h deleted file mode 100644 index 1a19a611..00000000 --- a/gst-libs/gst/dshow/gstdshowinterface.h +++ /dev/null @@ -1,169 +0,0 @@ -/* GStreamer - * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net> - * - * gstdshowinterface.h: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_DHOW_INTERFACE_H__ -#define __GST_DHOW_INTERFACE_H__ - -#include "gstdshow.h" - -#ifdef LIBDSHOW_EXPORTS -typedef bool (*push_buffer_func) (byte *buffer, long size, byte *src_object, UINT64 start, UINT64 stop); -#endif /* LIBDSHOW_EXPORTS */ - -/* verify that the <rpcndr.h> version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 440 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of <rpcndr.h> -#endif // __RPCNDR_H_VERSION__ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifdef __cplusplus -extern "C"{ -#endif - - -extern DSHOW_API const GUID CLSID_DshowFakeSink; -extern DSHOW_API const GUID CLSID_DshowFakeSrc; -extern DSHOW_API const GUID IID_IGstDshowInterface; - -#define CLSID_DSHOWFAKESINK_STRING "{6A780808-9725-4d0b-8695-A4DD8D210773}" -#define CLSID_DSHOWFAKESRC_STRING "{1E38DAED-8A6E-4DEA-A482-A878761D11CB}" - -typedef interface IGstDshowInterface IGstDshowInterface; - -/* header files for imported files */ -#include "oaidl.h" -#include "ocidl.h" - -void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t); -void __RPC_USER MIDL_user_free( void __RPC_FAR * ); - -#ifndef __IGstDshowInterface_INTERFACE_DEFINED__ -#define __IGstDshowInterface_INTERFACE_DEFINED__ - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("542C0A24-8BD1-46cb-AA57-3E46D006D2F3") - IGstDshowInterface : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE gst_set_media_type( - AM_MEDIA_TYPE __RPC_FAR *pmt) = 0; - - virtual HRESULT STDMETHODCALLTYPE gst_set_buffer_callback( - push_buffer_func push, byte *data) = 0; - - virtual HRESULT STDMETHODCALLTYPE gst_push_buffer( - byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount) = 0; - - virtual HRESULT STDMETHODCALLTYPE gst_flush() = 0; - - virtual HRESULT STDMETHODCALLTYPE gst_set_sample_size(unsigned int size) = 0; - }; - -#else /* C style interface */ - - typedef struct IGstDshowInterfaceVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( - IGstDshowInterface __RPC_FAR * This, - REFIID riid, - void __RPC_FAR *__RPC_FAR *ppvObject); - - ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( - IGstDshowInterface __RPC_FAR * This); - - ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( - IGstDshowInterface __RPC_FAR * This); - - HRESULT (STDMETHODCALLTYPE *gst_set_media_type )( - IGstDshowInterface __RPC_FAR * This, - AM_MEDIA_TYPE *pmt); - - HRESULT (STDMETHODCALLTYPE *gst_set_buffer_callback) ( - IGstDshowInterface __RPC_FAR * This, - byte * push, byte *data); - - HRESULT (STDMETHODCALLTYPE *gst_push_buffer) ( - IGstDshowInterface __RPC_FAR * This, - byte *buffer, __int64 start, __int64 stop, - unsigned int size, boolean discount); - - HRESULT (STDMETHODCALLTYPE *gst_flush) ( - IGstDshowInterface __RPC_FAR * This); - - HRESULT (STDMETHODCALLTYPE *gst_set_sample_size) ( - IGstDshowInterface __RPC_FAR * This, - unsigned int size); - - END_INTERFACE - } IGstDshowInterfaceVtbl; - - interface IGstDshowInterface - { - CONST_VTBL struct IGstDshowInterfaceVtbl __RPC_FAR *lpVtbl; - }; - -#define IGstDshowInterface_QueryInterface(This,riid,ppvObject) \ - (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) - -#define IGstDshowInterface_AddRef(This) \ - (This)->lpVtbl -> AddRef(This) - -#define IGstDshowInterface_Release(This) \ - (This)->lpVtbl -> Release(This) - -#define IGstDshowInterface_gst_set_media_type(This, mediatype) \ - (This)->lpVtbl -> gst_set_media_type(This, mediatype) - -#define IGstDshowInterface_gst_set_buffer_callback(This, push, data) \ - (This)->lpVtbl -> gst_set_buffer_callback(This, push, data) - -#define IGstDshowInterface_gst_push_buffer(This, buffer, start, stop, size, discount) \ - (This)->lpVtbl -> gst_push_buffer(This, buffer, start, stop, size, discount) - -#define IGstDshowInterface_gst_flush(This) \ - (This)->lpVtbl -> gst_flush(This) - -#define IGstDshowInterface_gst_set_sample_size(This, size) \ - (This)->lpVtbl -> gst_set_sample_size(This, size) - -#endif /* C style interface */ - -#endif /* __IGstDshowInterface_INTERFACE_DEFINED__ */ - -#ifdef __cplusplus -} -#endif - -#endif /* __GST_DSHOW_INTERFACE_H__ */
\ No newline at end of file |