65 IAMMultiMediaStream_AddRef(iface);
94 IPin_Release(
This->ipin);
95 IMediaStreamFilter_Release(
This->filter);
96 IMediaStreamFilter_Release(
This->filter);
97 if (
This->media_seeking)
98 IMediaSeeking_Release(
This->media_seeking);
99 if (
This->media_control)
100 IMediaControl_Release(
This->media_control);
102 IGraphBuilder_Release(
This->graph);
115 FIXME(
"(%p/%p)->(%p,%p) stub!\n",
This, iface, pdwFlags, pStreamType);
127 return IMediaStreamFilter_GetMediaStream(mmstream->
filter,
id,
stream);
144 TRACE(
"mmstream %p, state %p.\n", mmstream,
state);
156 TRACE(
"(%p/%p)->(%u)\n",
This, iface, new_state);
160 hr = IMediaControl_Run(
This->media_control);
169 hr = IMediaControl_Stop(
This->media_control);
172 This->state = new_state;
183 return IMediaStreamFilter_GetCurrentStreamTime(
stream->filter,
time);
190 TRACE(
"mmstream %p, duration %p.\n", mmstream, duration);
214 TRACE(
"mmstream %p, eos %p.\n", mmstream, eos);
226 IMediaEventEx *eventsrc;
230 IGraphBuilder_AddRef(mmstream->
graph =
graph);
232 CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (
void **)&mmstream->
graph)))
235 hr = IGraphBuilder_QueryInterface(mmstream->
graph, &IID_IMediaSeeking, (
void **)&mmstream->
media_seeking);
237 hr = IGraphBuilder_QueryInterface(mmstream->
graph, &IID_IMediaControl, (
void **)&mmstream->
media_control);
241 hr = IGraphBuilder_QueryInterface(mmstream->
graph, &IID_IMediaEventEx, (
void **)&eventsrc);
244 hr = IMediaEventEx_GetEventHandle(eventsrc, &mmstream->
event);
247 IMediaEventEx_Release(eventsrc);
259 IGraphBuilder_Release(mmstream->
graph);
276 WARN(
"Graph already initialized, returning E_INVALIDARG.\n");
282 WARN(
"Attempt to change type from %u, returning E_INVALIDARG.\n", mmstream->
type);
299 TRACE(
"mmstream %p, graph %p.\n", mmstream,
graph);
305 IGraphBuilder_AddRef(*
graph = mmstream->
graph);
317 TRACE(
"mmstream %p, filter %p.\n", mmstream,
filter);
329 IMediaStreamFilter_AddMediaStream(mmstream->
filter,
stream);
334 IMediaStream_AddRef(*ret_stream);
346 TRACE(
"mmstream %p, stream_object %p, id %s, flags %#lx, ret_stream %p.\n",
349 if (IMediaStreamFilter_GetMediaStream(
This->filter, PurposeId, &
stream) ==
S_OK)
351 IMediaStream_Release(
stream);
352 return MS_E_PURPOSEID;
367 WARN(
"AMMSF_ADDDEFAULTRENDERER requested with id %s, returning MS_E_PURPOSEID.\n",
debugstr_guid(PurposeId));
368 return MS_E_PURPOSEID;
382 hr = IUnknown_QueryInterface(stream_object, &IID_IAMMediaStream, (
void **)&pStream);
386 hr = IAMMediaStream_GetInformation(pStream, &stream_id,
NULL);
400 IAMMediaStream_Release(pStream);
408 else if (
IsEqualGUID(PurposeId, &MSPID_PrimaryAudio))
411 return MS_E_PURPOSEID;
416 hr = IAMMediaStream_Initialize(pStream, stream_object,
dwFlags, PurposeId,
This->type);
419 IAMMediaStream_Release(pStream);
424 IAMMediaStream_Release(pStream);
453 ret = IGraphBuilder_AddSourceFilter(
This->graph,
filename,
L"Source", &BaseFilter);
456 ret = IBaseFilter_EnumPins(BaseFilter, &EnumPins);
463 ret = IPin_QueryDirection(
ipin, &pin_direction);
480 IFilterGraph2_Release(
graph);
484 FIXME(
"Failed to get IFilterGraph2 interface, hr %#lx.\n",
ret);
485 ret = IGraphBuilder_Render(
This->graph,
This->ipin);
493 if (
SUCCEEDED(
ret = IGraphBuilder_QueryInterface(
This->graph, &IID_IMediaFilter, (
void **)&media_filter)))
495 ret = IMediaFilter_SetSyncSource(media_filter,
NULL);
496 IMediaFilter_Release(media_filter);
506 IEnumPins_Release(EnumPins);
508 IBaseFilter_Release(BaseFilter);
517 FIXME(
"(%p/%p)->(%p,%p,%lx) stub!\n",
This, iface, pCtx, pMoniker,
dwFlags);
531 return IGraphBuilder_Render(
This->graph,
This->ipin);
565 if (!(
object =
calloc(1,
sizeof(*
object))))
572 CLSCTX_INPROC_SERVER, &IID_IMediaStreamFilter, (
void **)&
object->filter)))
574 ERR(
"Failed to create stream filter, hr %#lx.\n",
hr);
580 IMediaStreamFilter_AddRef(
object->filter);
582 TRACE(
"Created multimedia stream %p.\n",
object);
583 *
out = &
object->IAMMultiMediaStream_iface;
HRESULT audio_stream_create(IUnknown *outer, void **out)
HRESULT ddraw_stream_create(IUnknown *outer, void **out)
#define InterlockedIncrement
#define InterlockedDecrement
@ AM_SEEKING_NoPositioning
@ AM_SEEKING_AbsolutePositioning
enum _PinDirection PIN_DIRECTION
@ AM_RENDEREX_RENDERTOEXISTINGRENDERERS
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
const GUID IID_IBaseFilter
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
@ AMMSF_ADDDEFAULTRENDERER
GLuint GLuint GLsizei GLenum type
static IFilterGraph2 * create_graph(void)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define IsEqualGUID(rguid1, rguid2)
#define CONTAINING_RECORD(address, type, field)
#define VFW_S_PARTIAL_RENDER
#define VFW_E_CANNOT_CONNECT
#define VFW_E_CANNOT_RENDER
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
#define CLASS_E_NOAGGREGATION