winegstreamer: Move the IWMProfile3 implementation to a separate object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c4d5010fbf
commit
2d0dc2d47c
|
@ -1,7 +1,7 @@
|
|||
MODULE = winegstreamer.dll
|
||||
UNIXLIB = winegstreamer.so
|
||||
IMPORTLIB = winegstreamer
|
||||
IMPORTS = strmbase strmiids uuid ole32 mfuuid
|
||||
IMPORTS = strmbase ole32
|
||||
DELAYIMPORTS = mfplat
|
||||
EXTRAINCL = $(GSTREAMER_CFLAGS)
|
||||
EXTRALIBS = $(GSTREAMER_LIBS) $(PTHREAD_LIBS)
|
||||
|
@ -14,6 +14,7 @@ C_SRCS = \
|
|||
quartz_parser.c \
|
||||
wg_parser.c \
|
||||
wm_asyncreader.c \
|
||||
wm_reader.c \
|
||||
wm_syncreader.c
|
||||
|
||||
IDL_SRCS = \
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#define NONAMELESSUNION
|
||||
#include "dshow.h"
|
||||
#include "mfidl.h"
|
||||
#include "wmsdk.h"
|
||||
#include "wine/debug.h"
|
||||
#include "wine/strmbase.h"
|
||||
|
||||
|
@ -112,4 +113,20 @@ HRESULT winegstreamer_stream_handler_create(REFIID riid, void **obj) DECLSPEC_HI
|
|||
|
||||
HRESULT audio_converter_create(REFIID riid, void **ret) DECLSPEC_HIDDEN;
|
||||
|
||||
struct wm_reader
|
||||
{
|
||||
IWMProfile3 IWMProfile3_iface;
|
||||
LONG refcount;
|
||||
|
||||
const struct wm_reader_ops *ops;
|
||||
};
|
||||
|
||||
struct wm_reader_ops
|
||||
{
|
||||
void *(*query_interface)(struct wm_reader *reader, REFIID iid);
|
||||
void (*destroy)(struct wm_reader *reader);
|
||||
};
|
||||
|
||||
void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops);
|
||||
|
||||
#endif /* __GST_PRIVATE_INCLUDED__ */
|
||||
|
|
|
@ -20,17 +20,19 @@
|
|||
|
||||
#define WINE_NO_NAMELESS_EXTENSION
|
||||
|
||||
#define EXTERN_GUID DEFINE_GUID
|
||||
#include "initguid.h"
|
||||
#include "gst_private.h"
|
||||
#include "winternl.h"
|
||||
#include "rpcproxy.h"
|
||||
|
||||
#include "initguid.h"
|
||||
#include "gst_guids.h"
|
||||
|
||||
static unixlib_handle_t unix_handle;
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(quartz);
|
||||
|
||||
DEFINE_GUID(GUID_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
bool array_reserve(void **elements, size_t *capacity, size_t count, size_t size)
|
||||
{
|
||||
unsigned int new_capacity, max_capacity;
|
||||
|
|
|
@ -19,9 +19,10 @@
|
|||
|
||||
#include "gst_private.h"
|
||||
|
||||
#include "mfapi.h"
|
||||
#include "ks.h"
|
||||
#include "ksmedia.h"
|
||||
#include "initguid.h"
|
||||
#include "mfapi.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
|
|
|
@ -17,12 +17,13 @@
|
|||
*/
|
||||
|
||||
#include "gst_private.h"
|
||||
#include "wmsdk.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
|
||||
|
||||
struct async_reader
|
||||
{
|
||||
struct wm_reader reader;
|
||||
|
||||
IWMReader IWMReader_iface;
|
||||
IWMReaderAdvanced6 IWMReaderAdvanced6_iface;
|
||||
IWMReaderAccelerator IWMReaderAccelerator_iface;
|
||||
|
@ -34,9 +35,7 @@ struct async_reader
|
|||
IWMHeaderInfo3 IWMHeaderInfo3_iface;
|
||||
IWMLanguageList IWMLanguageList_iface;
|
||||
IReferenceClock IReferenceClock_iface;
|
||||
IWMProfile3 IWMProfile3_iface;
|
||||
IWMPacketSize2 IWMPacketSize2_iface;
|
||||
LONG ref;
|
||||
};
|
||||
|
||||
static struct async_reader *impl_from_IWMReader(IWMReader *iface)
|
||||
|
@ -44,116 +43,25 @@ static struct async_reader *impl_from_IWMReader(IWMReader *iface)
|
|||
return CONTAINING_RECORD(iface, struct async_reader, IWMReader_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID riid, void **ppv)
|
||||
static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID iid, void **out)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMReader(iface);
|
||||
struct async_reader *reader = impl_from_IWMReader(iface);
|
||||
|
||||
if(IsEqualGUID(riid, &IID_IUnknown)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReader_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReader)) {
|
||||
TRACE("(%p)->(IID_IWMReader %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReader_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderAdvanced)) {
|
||||
TRACE("(%p)->(IID_IWMReaderAdvanced %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderAdvanced6_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderAdvanced2)) {
|
||||
TRACE("(%p)->(IID_IWMReaderAdvanced2 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderAdvanced6_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderAdvanced3)) {
|
||||
TRACE("(%p)->(IID_IWMReaderAdvanced3 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderAdvanced6_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderAdvanced4)) {
|
||||
TRACE("(%p)->(IID_IWMReaderAdvanced4 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderAdvanced6_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderAdvanced5)) {
|
||||
TRACE("(%p)->(IID_IWMReaderAdvanced5 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderAdvanced6_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderAdvanced6)) {
|
||||
TRACE("(%p)->(IID_IWMReaderAdvanced6 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderAdvanced6_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderAccelerator)) {
|
||||
TRACE("(%p)->(IID_IWMReaderAccelerator %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderAccelerator_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderNetworkConfig)) {
|
||||
TRACE("(%p)->(IWMReaderNetworkConfig %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderNetworkConfig2_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderNetworkConfig2)) {
|
||||
TRACE("(%p)->(IWMReaderNetworkConfig2 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderNetworkConfig2_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderStreamClock)) {
|
||||
TRACE("(%p)->(IWMReaderStreamClock %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderStreamClock_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderTypeNegotiation)) {
|
||||
TRACE("(%p)->(IWMReaderTypeNegotiation %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderTypeNegotiation_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderTimecode)) {
|
||||
TRACE("(%p)->(IWMReaderTimecode %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderTimecode_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMReaderPlaylistBurn)) {
|
||||
TRACE("(%p)->(IWMReaderPlaylistBurn %p)\n", This, ppv);
|
||||
*ppv = &This->IWMReaderPlaylistBurn_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMHeaderInfo)) {
|
||||
TRACE("(%p)->(IWMHeaderInfo %p)\n", This, ppv);
|
||||
*ppv = &This->IWMHeaderInfo3_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMHeaderInfo2)) {
|
||||
TRACE("(%p)->(IWMHeaderInfo2 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMHeaderInfo3_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMHeaderInfo3)) {
|
||||
TRACE("(%p)->(IWMHeaderInfo3 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMHeaderInfo3_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMLanguageList)) {
|
||||
TRACE("(%p)->(IWMLanguageList %p)\n", This, ppv);
|
||||
*ppv = &This->IWMLanguageList_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IReferenceClock)) {
|
||||
TRACE("(%p)->(IWMLanguageList %p)\n", This, ppv);
|
||||
*ppv = &This->IReferenceClock_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMProfile)) {
|
||||
TRACE("(%p)->(IWMProfile %p)\n", This, ppv);
|
||||
*ppv = &This->IWMProfile3_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMProfile2)) {
|
||||
TRACE("(%p)->(IWMProfile2 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMProfile3_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMProfile3)) {
|
||||
TRACE("(%p)->(IWMProfile3 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMProfile3_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMPacketSize)) {
|
||||
TRACE("(%p)->(IWMPacketSize %p)\n", This, ppv);
|
||||
*ppv = &This->IWMPacketSize2_iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IWMPacketSize2)) {
|
||||
TRACE("(%p)->(IWMPacketSize2 %p)\n", This, ppv);
|
||||
*ppv = &This->IWMPacketSize2_iface;
|
||||
}else {
|
||||
*ppv = NULL;
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
return IWMProfile3_QueryInterface(&reader->reader.IWMProfile3_iface, iid, out);
|
||||
}
|
||||
|
||||
static ULONG WINAPI WMReader_AddRef(IWMReader *iface)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMReader(iface);
|
||||
LONG ref = InterlockedIncrement(&This->ref);
|
||||
struct async_reader *reader = impl_from_IWMReader(iface);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
return ref;
|
||||
return IWMProfile3_AddRef(&reader->reader.IWMProfile3_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI WMReader_Release(IWMReader *iface)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMReader(iface);
|
||||
LONG ref = InterlockedDecrement(&This->ref);
|
||||
struct async_reader *reader = impl_from_IWMReader(iface);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
if(!ref)
|
||||
free(This);
|
||||
|
||||
return ref;
|
||||
return IWMProfile3_Release(&reader->reader.IWMProfile3_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WMReader_Open(IWMReader *iface, const WCHAR *url, IWMReaderCallback *callback, void *context)
|
||||
|
@ -1692,289 +1600,6 @@ static const IReferenceClockVtbl ReferenceClockVtbl =
|
|||
refclock_Unadvise
|
||||
};
|
||||
|
||||
static struct async_reader *impl_from_IWMProfile3(IWMProfile3 *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct async_reader, IWMProfile3_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_QueryInterface(IWMProfile3 *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI profile3_AddRef(IWMProfile3 *iface)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
return IWMReader_AddRef(&This->IWMReader_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI profile3_Release(IWMProfile3 *iface)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
return IWMReader_Release(&This->IWMReader_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetVersion(IWMProfile3 *iface, WMT_VERSION *version)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, version);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetName(IWMProfile3 *iface, WCHAR *name, DWORD *length)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p, %p\n", This, name, length);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_SetName(IWMProfile3 *iface, const WCHAR *name)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %s\n", This, debugstr_w(name));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetDescription(IWMProfile3 *iface, WCHAR *description, DWORD *length)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p, %p\n", This, description, length);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_SetDescription(IWMProfile3 *iface, const WCHAR *description)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %s\n", This, debugstr_w(description));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetStreamCount(IWMProfile3 *iface, DWORD *count)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, count);
|
||||
|
||||
if (!count)
|
||||
return E_INVALIDARG;
|
||||
|
||||
*count = 0;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetStream(IWMProfile3 *iface, DWORD index, IWMStreamConfig **config)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %d, %p\n", This, index, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetStreamByNumber(IWMProfile3 *iface, WORD stream, IWMStreamConfig **config)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %d, %p\n", This, stream, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_RemoveStream(IWMProfile3 *iface, IWMStreamConfig *config)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_RemoveStreamByNumber(IWMProfile3 *iface, WORD stream)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %d\n", This, stream);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_AddStream(IWMProfile3 *iface, IWMStreamConfig *config)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_ReconfigStream(IWMProfile3 *iface, IWMStreamConfig *config)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_CreateNewStream(IWMProfile3 *iface, REFGUID type, IWMStreamConfig **config)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %s, %p\n", This, debugstr_guid(type), config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetMutualExclusionCount(IWMProfile3 *iface, DWORD *count)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, count);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetMutualExclusion(IWMProfile3 *iface, DWORD index, IWMMutualExclusion **mutual)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %d, %p\n", This, index, mutual);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_RemoveMutualExclusion(IWMProfile3 *iface, IWMMutualExclusion *mutual)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, mutual);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_AddMutualExclusion(IWMProfile3 *iface, IWMMutualExclusion *mutual)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, mutual);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_CreateNewMutualExclusion(IWMProfile3 *iface, IWMMutualExclusion **mutual)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, mutual);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetProfileID(IWMProfile3 *iface, GUID *guid)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, guid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetStorageFormat(IWMProfile3 *iface, WMT_STORAGE_FORMAT *storage)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, storage);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_SetStorageFormat(IWMProfile3 *iface, WMT_STORAGE_FORMAT storage)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %d\n", This, storage);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetBandwidthSharingCount(IWMProfile3 *iface, DWORD *count)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, count);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetBandwidthSharing(IWMProfile3 *iface, DWORD index, IWMBandwidthSharing **bandwidth)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %d, %p\n", This, index, bandwidth);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_RemoveBandwidthSharing( IWMProfile3 *iface, IWMBandwidthSharing *bandwidth)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, bandwidth);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_AddBandwidthSharing(IWMProfile3 *iface, IWMBandwidthSharing *bandwidth)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, bandwidth);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_CreateNewBandwidthSharing( IWMProfile3 *iface, IWMBandwidthSharing **bandwidth)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, bandwidth);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetStreamPrioritization(IWMProfile3 *iface, IWMStreamPrioritization **stream)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, stream);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_SetStreamPrioritization(IWMProfile3 *iface, IWMStreamPrioritization *stream)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, stream);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_RemoveStreamPrioritization(IWMProfile3 *iface)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_CreateNewStreamPrioritization(IWMProfile3 *iface, IWMStreamPrioritization **stream)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %p\n", This, stream);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile3_GetExpectedPacketCount(IWMProfile3 *iface, QWORD duration, QWORD *packets)
|
||||
{
|
||||
struct async_reader *This = impl_from_IWMProfile3(iface);
|
||||
FIXME("%p, %s, %p\n", This, wine_dbgstr_longlong(duration), packets);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IWMProfile3Vtbl WMProfile3Vtbl =
|
||||
{
|
||||
profile3_QueryInterface,
|
||||
profile3_AddRef,
|
||||
profile3_Release,
|
||||
profile3_GetVersion,
|
||||
profile3_GetName,
|
||||
profile3_SetName,
|
||||
profile3_GetDescription,
|
||||
profile3_SetDescription,
|
||||
profile3_GetStreamCount,
|
||||
profile3_GetStream,
|
||||
profile3_GetStreamByNumber,
|
||||
profile3_RemoveStream,
|
||||
profile3_RemoveStreamByNumber,
|
||||
profile3_AddStream,
|
||||
profile3_ReconfigStream,
|
||||
profile3_CreateNewStream,
|
||||
profile3_GetMutualExclusionCount,
|
||||
profile3_GetMutualExclusion,
|
||||
profile3_RemoveMutualExclusion,
|
||||
profile3_AddMutualExclusion,
|
||||
profile3_CreateNewMutualExclusion,
|
||||
profile3_GetProfileID,
|
||||
profile3_GetStorageFormat,
|
||||
profile3_SetStorageFormat,
|
||||
profile3_GetBandwidthSharingCount,
|
||||
profile3_GetBandwidthSharing,
|
||||
profile3_RemoveBandwidthSharing,
|
||||
profile3_AddBandwidthSharing,
|
||||
profile3_CreateNewBandwidthSharing,
|
||||
profile3_GetStreamPrioritization,
|
||||
profile3_SetStreamPrioritization,
|
||||
profile3_RemoveStreamPrioritization,
|
||||
profile3_CreateNewStreamPrioritization,
|
||||
profile3_GetExpectedPacketCount
|
||||
};
|
||||
|
||||
static struct async_reader *impl_from_IWMPacketSize2(IWMPacketSize2 *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct async_reader, IWMPacketSize2_iface);
|
||||
|
@ -2037,6 +1662,80 @@ static const IWMPacketSize2Vtbl WMPacketSize2Vtbl =
|
|||
packetsize_SetMinPacketSize
|
||||
};
|
||||
|
||||
static struct async_reader *impl_from_wm_reader(struct wm_reader *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct async_reader, reader);
|
||||
}
|
||||
|
||||
static void *async_reader_query_interface(struct wm_reader *iface, REFIID iid)
|
||||
{
|
||||
struct async_reader *reader = impl_from_wm_reader(iface);
|
||||
|
||||
TRACE("reader %p, iid %s.\n", reader, debugstr_guid(iid));
|
||||
|
||||
if (IsEqualIID(iid, &IID_IReferenceClock))
|
||||
return &reader->IReferenceClock_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMHeaderInfo)
|
||||
|| IsEqualIID(iid, &IID_IWMHeaderInfo2)
|
||||
|| IsEqualIID(iid, &IID_IWMHeaderInfo3))
|
||||
return &reader->IWMHeaderInfo3_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMLanguageList))
|
||||
return &reader->IWMLanguageList_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMPacketSize)
|
||||
|| IsEqualIID(iid, &IID_IWMPacketSize2))
|
||||
return &reader->IWMPacketSize2_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReader))
|
||||
return &reader->IWMReader_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReaderAccelerator))
|
||||
return &reader->IWMReaderAccelerator_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReaderAdvanced)
|
||||
|| IsEqualIID(iid, &IID_IWMReaderAdvanced2)
|
||||
|| IsEqualIID(iid, &IID_IWMReaderAdvanced3)
|
||||
|| IsEqualIID(iid, &IID_IWMReaderAdvanced4)
|
||||
|| IsEqualIID(iid, &IID_IWMReaderAdvanced5)
|
||||
|| IsEqualIID(iid, &IID_IWMReaderAdvanced6))
|
||||
return &reader->IWMReaderAdvanced6_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReaderNetworkConfig)
|
||||
|| IsEqualIID(iid, &IID_IWMReaderNetworkConfig2))
|
||||
return &reader->IWMReaderNetworkConfig2_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReaderPlaylistBurn))
|
||||
return &reader->IWMReaderPlaylistBurn_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReaderStreamClock))
|
||||
return &reader->IWMReaderStreamClock_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReaderTimecode))
|
||||
return &reader->IWMReaderTimecode_iface;
|
||||
|
||||
if (IsEqualIID(iid, &IID_IWMReaderTypeNegotiation))
|
||||
return &reader->IWMReaderTypeNegotiation_iface;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void async_reader_destroy(struct wm_reader *iface)
|
||||
{
|
||||
struct async_reader *reader = impl_from_wm_reader(iface);
|
||||
|
||||
TRACE("reader %p.\n", reader);
|
||||
|
||||
free(reader);
|
||||
}
|
||||
|
||||
static const struct wm_reader_ops async_reader_ops =
|
||||
{
|
||||
.query_interface = async_reader_query_interface,
|
||||
.destroy = async_reader_destroy,
|
||||
};
|
||||
|
||||
HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader)
|
||||
{
|
||||
struct async_reader *object;
|
||||
|
@ -2046,11 +1745,12 @@ HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader)
|
|||
if (!(object = calloc(1, sizeof(*object))))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
wm_reader_init(&object->reader, &async_reader_ops);
|
||||
|
||||
object->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl;
|
||||
object->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl;
|
||||
object->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl;
|
||||
object->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl;
|
||||
object->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl;
|
||||
object->IWMReader_iface.lpVtbl = &WMReaderVtbl;
|
||||
object->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl;
|
||||
object->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl;
|
||||
|
@ -2059,7 +1759,6 @@ HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader)
|
|||
object->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl;
|
||||
object->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl;
|
||||
object->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl;
|
||||
object->ref = 1;
|
||||
|
||||
TRACE("Created async reader %p.\n", object);
|
||||
*reader = (IWMReader *)&object->IWMReader_iface;
|
||||
|
|
|
@ -0,0 +1,308 @@
|
|||
/*
|
||||
* Copyright 2012 Austin English
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "gst_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
|
||||
|
||||
static struct wm_reader *impl_from_IWMProfile3(IWMProfile3 *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct wm_reader, IWMProfile3_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_QueryInterface(IWMProfile3 *iface, REFIID iid, void **out)
|
||||
{
|
||||
struct wm_reader *reader = impl_from_IWMProfile3(iface);
|
||||
|
||||
TRACE("reader %p, iid %s, out %p.\n", reader, debugstr_guid(iid), out);
|
||||
|
||||
if (IsEqualIID(iid, &IID_IUnknown)
|
||||
|| IsEqualIID(iid, &IID_IWMProfile)
|
||||
|| IsEqualIID(iid, &IID_IWMProfile2)
|
||||
|| IsEqualIID(iid, &IID_IWMProfile3))
|
||||
{
|
||||
*out = &reader->IWMProfile3_iface;
|
||||
}
|
||||
else if (!(*out = reader->ops->query_interface(reader, iid)))
|
||||
{
|
||||
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown *)*out);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI profile_AddRef(IWMProfile3 *iface)
|
||||
{
|
||||
struct wm_reader *reader = impl_from_IWMProfile3(iface);
|
||||
ULONG refcount = InterlockedIncrement(&reader->refcount);
|
||||
|
||||
TRACE("%p increasing refcount to %u.\n", reader, refcount);
|
||||
|
||||
return refcount;
|
||||
}
|
||||
|
||||
static ULONG WINAPI profile_Release(IWMProfile3 *iface)
|
||||
{
|
||||
struct wm_reader *reader = impl_from_IWMProfile3(iface);
|
||||
ULONG refcount = InterlockedDecrement(&reader->refcount);
|
||||
|
||||
TRACE("%p decreasing refcount to %u.\n", reader, refcount);
|
||||
|
||||
if (!refcount)
|
||||
reader->ops->destroy(reader);
|
||||
|
||||
return refcount;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetVersion(IWMProfile3 *iface, WMT_VERSION *version)
|
||||
{
|
||||
FIXME("iface %p, version %p, stub!\n", iface, version);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetName(IWMProfile3 *iface, WCHAR *name, DWORD *length)
|
||||
{
|
||||
FIXME("iface %p, name %p, length %p, stub!\n", iface, name, length);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_SetName(IWMProfile3 *iface, const WCHAR *name)
|
||||
{
|
||||
FIXME("iface %p, name %s, stub!\n", iface, debugstr_w(name));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetDescription(IWMProfile3 *iface, WCHAR *description, DWORD *length)
|
||||
{
|
||||
FIXME("iface %p, description %p, length %p, stub!\n", iface, description, length);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_SetDescription(IWMProfile3 *iface, const WCHAR *description)
|
||||
{
|
||||
FIXME("iface %p, description %s, stub!\n", iface, debugstr_w(description));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetStreamCount(IWMProfile3 *iface, DWORD *count)
|
||||
{
|
||||
FIXME("iface %p, count %p, stub!\n", iface, count);
|
||||
|
||||
if (!count)
|
||||
return E_INVALIDARG;
|
||||
|
||||
*count = 0;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetStream(IWMProfile3 *iface, DWORD index, IWMStreamConfig **config)
|
||||
{
|
||||
FIXME("iface %p, index %d, config %p, stub!\n", iface, index, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetStreamByNumber(IWMProfile3 *iface, WORD stream_number, IWMStreamConfig **config)
|
||||
{
|
||||
FIXME("iface %p, stream_number %u, config %p, stub!\n", iface, stream_number, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_RemoveStream(IWMProfile3 *iface, IWMStreamConfig *config)
|
||||
{
|
||||
FIXME("iface %p, config %p, stub!\n", iface, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_RemoveStreamByNumber(IWMProfile3 *iface, WORD stream_number)
|
||||
{
|
||||
FIXME("iface %p, stream_number %u, stub!\n", iface, stream_number);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_AddStream(IWMProfile3 *iface, IWMStreamConfig *config)
|
||||
{
|
||||
FIXME("iface %p, config %p, stub!\n", iface, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_ReconfigStream(IWMProfile3 *iface, IWMStreamConfig *config)
|
||||
{
|
||||
FIXME("iface %p, config %p, stub!\n", iface, config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_CreateNewStream(IWMProfile3 *iface, REFGUID type, IWMStreamConfig **config)
|
||||
{
|
||||
FIXME("iface %p, type %s, config %p, stub!\n", iface, debugstr_guid(type), config);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetMutualExclusionCount(IWMProfile3 *iface, DWORD *count)
|
||||
{
|
||||
FIXME("iface %p, count %p, stub!\n", iface, count);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetMutualExclusion(IWMProfile3 *iface, DWORD index, IWMMutualExclusion **excl)
|
||||
{
|
||||
FIXME("iface %p, index %u, excl %p, stub!\n", iface, index, excl);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_RemoveMutualExclusion(IWMProfile3 *iface, IWMMutualExclusion *excl)
|
||||
{
|
||||
FIXME("iface %p, excl %p, stub!\n", iface, excl);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_AddMutualExclusion(IWMProfile3 *iface, IWMMutualExclusion *excl)
|
||||
{
|
||||
FIXME("iface %p, excl %p, stub!\n", iface, excl);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_CreateNewMutualExclusion(IWMProfile3 *iface, IWMMutualExclusion **excl)
|
||||
{
|
||||
FIXME("iface %p, excl %p, stub!\n", iface, excl);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetProfileID(IWMProfile3 *iface, GUID *id)
|
||||
{
|
||||
FIXME("iface %p, id %p, stub!\n", iface, id);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetStorageFormat(IWMProfile3 *iface, WMT_STORAGE_FORMAT *format)
|
||||
{
|
||||
FIXME("iface %p, format %p, stub!\n", iface, format);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_SetStorageFormat(IWMProfile3 *iface, WMT_STORAGE_FORMAT format)
|
||||
{
|
||||
FIXME("iface %p, format %#x, stub!\n", iface, format);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetBandwidthSharingCount(IWMProfile3 *iface, DWORD *count)
|
||||
{
|
||||
FIXME("iface %p, count %p, stub!\n", iface, count);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetBandwidthSharing(IWMProfile3 *iface, DWORD index, IWMBandwidthSharing **sharing)
|
||||
{
|
||||
FIXME("iface %p, index %d, sharing %p, stub!\n", iface, index, sharing);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_RemoveBandwidthSharing( IWMProfile3 *iface, IWMBandwidthSharing *sharing)
|
||||
{
|
||||
FIXME("iface %p, sharing %p, stub!\n", iface, sharing);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_AddBandwidthSharing(IWMProfile3 *iface, IWMBandwidthSharing *sharing)
|
||||
{
|
||||
FIXME("iface %p, sharing %p, stub!\n", iface, sharing);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_CreateNewBandwidthSharing( IWMProfile3 *iface, IWMBandwidthSharing **sharing)
|
||||
{
|
||||
FIXME("iface %p, sharing %p, stub!\n", iface, sharing);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetStreamPrioritization(IWMProfile3 *iface, IWMStreamPrioritization **stream)
|
||||
{
|
||||
FIXME("iface %p, stream %p, stub!\n", iface, stream);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_SetStreamPrioritization(IWMProfile3 *iface, IWMStreamPrioritization *stream)
|
||||
{
|
||||
FIXME("iface %p, stream %p, stub!\n", iface, stream);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_RemoveStreamPrioritization(IWMProfile3 *iface)
|
||||
{
|
||||
FIXME("iface %p, stub!\n", iface);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_CreateNewStreamPrioritization(IWMProfile3 *iface, IWMStreamPrioritization **stream)
|
||||
{
|
||||
FIXME("iface %p, stream %p, stub!\n", iface, stream);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI profile_GetExpectedPacketCount(IWMProfile3 *iface, QWORD duration, QWORD *count)
|
||||
{
|
||||
FIXME("iface %p, duration %s, count %p, stub!\n", iface, debugstr_time(duration), count);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IWMProfile3Vtbl profile_vtbl =
|
||||
{
|
||||
profile_QueryInterface,
|
||||
profile_AddRef,
|
||||
profile_Release,
|
||||
profile_GetVersion,
|
||||
profile_GetName,
|
||||
profile_SetName,
|
||||
profile_GetDescription,
|
||||
profile_SetDescription,
|
||||
profile_GetStreamCount,
|
||||
profile_GetStream,
|
||||
profile_GetStreamByNumber,
|
||||
profile_RemoveStream,
|
||||
profile_RemoveStreamByNumber,
|
||||
profile_AddStream,
|
||||
profile_ReconfigStream,
|
||||
profile_CreateNewStream,
|
||||
profile_GetMutualExclusionCount,
|
||||
profile_GetMutualExclusion,
|
||||
profile_RemoveMutualExclusion,
|
||||
profile_AddMutualExclusion,
|
||||
profile_CreateNewMutualExclusion,
|
||||
profile_GetProfileID,
|
||||
profile_GetStorageFormat,
|
||||
profile_SetStorageFormat,
|
||||
profile_GetBandwidthSharingCount,
|
||||
profile_GetBandwidthSharing,
|
||||
profile_RemoveBandwidthSharing,
|
||||
profile_AddBandwidthSharing,
|
||||
profile_CreateNewBandwidthSharing,
|
||||
profile_GetStreamPrioritization,
|
||||
profile_SetStreamPrioritization,
|
||||
profile_RemoveStreamPrioritization,
|
||||
profile_CreateNewStreamPrioritization,
|
||||
profile_GetExpectedPacketCount,
|
||||
};
|
||||
|
||||
void wm_reader_init(struct wm_reader *reader, const struct wm_reader_ops *ops)
|
||||
{
|
||||
reader->IWMProfile3_iface.lpVtbl = &profile_vtbl;
|
||||
reader->refcount = 1;
|
||||
reader->ops = ops;
|
||||
}
|
|
@ -17,8 +17,6 @@
|
|||
*/
|
||||
|
||||
#include "gst_private.h"
|
||||
#include "initguid.h"
|
||||
#include "wmsdk.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
|
||||
|
||||
|
|
Loading…
Reference in New Issue