2016-04-25 05:40:27 +02:00
|
|
|
/* DirectShow Timeline object (QEDIT.DLL)
|
|
|
|
*
|
|
|
|
* Copyright 2016 Alex Henrie
|
|
|
|
*
|
|
|
|
* 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 <assert.h>
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
#define COBJMACROS
|
|
|
|
|
|
|
|
#include "windef.h"
|
|
|
|
#include "winbase.h"
|
|
|
|
#include "winuser.h"
|
|
|
|
#include "ole2.h"
|
|
|
|
|
|
|
|
#include "qedit_private.h"
|
|
|
|
#include "wine/debug.h"
|
|
|
|
|
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(qedit);
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
IUnknown IUnknown_inner;
|
|
|
|
IAMTimeline IAMTimeline_iface;
|
|
|
|
IUnknown *outer_unk;
|
|
|
|
LONG ref;
|
|
|
|
} TimelineImpl;
|
|
|
|
|
|
|
|
static inline TimelineImpl *impl_from_IUnknown(IUnknown *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, TimelineImpl, IUnknown_inner);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline TimelineImpl *impl_from_IAMTimeline(IAMTimeline *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, TimelineImpl, IAMTimeline_iface);
|
|
|
|
}
|
|
|
|
|
2016-04-27 07:12:47 +02:00
|
|
|
typedef struct {
|
|
|
|
IAMTimelineObj IAMTimelineObj_iface;
|
2017-10-05 07:15:45 +02:00
|
|
|
IAMTimelineGroup IAMTimelineGroup_iface;
|
2016-04-27 07:12:47 +02:00
|
|
|
LONG ref;
|
2016-04-27 07:12:48 +02:00
|
|
|
TIMELINE_MAJOR_TYPE timeline_type;
|
2016-04-27 07:12:47 +02:00
|
|
|
} TimelineObjImpl;
|
|
|
|
|
|
|
|
static inline TimelineObjImpl *impl_from_IAMTimelineObj(IAMTimelineObj *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineObj_iface);
|
|
|
|
}
|
|
|
|
|
2017-10-05 07:15:45 +02:00
|
|
|
static inline TimelineObjImpl *impl_from_IAMTimelineGroup(IAMTimelineGroup *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineGroup_iface);
|
|
|
|
}
|
|
|
|
|
2016-04-27 07:12:47 +02:00
|
|
|
static const IAMTimelineObjVtbl IAMTimelineObj_VTable;
|
2017-10-05 07:15:45 +02:00
|
|
|
static const IAMTimelineGroupVtbl IAMTimelineGroup_VTable;
|
2016-04-27 07:12:47 +02:00
|
|
|
|
2016-04-25 05:40:27 +02:00
|
|
|
/* Timeline inner IUnknown */
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IUnknown(iface);
|
|
|
|
|
|
|
|
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
|
|
|
|
2016-04-28 16:08:00 +02:00
|
|
|
if (!ppv)
|
|
|
|
return E_POINTER;
|
|
|
|
|
2016-04-25 05:40:27 +02:00
|
|
|
*ppv = NULL;
|
|
|
|
if (IsEqualIID(riid, &IID_IUnknown))
|
|
|
|
*ppv = &This->IUnknown_inner;
|
|
|
|
else if (IsEqualIID(riid, &IID_IAMTimeline))
|
|
|
|
*ppv = &This->IAMTimeline_iface;
|
|
|
|
else
|
|
|
|
WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
|
|
|
|
|
|
|
|
if (!*ppv)
|
|
|
|
return E_NOINTERFACE;
|
|
|
|
|
|
|
|
IUnknown_AddRef((IUnknown*)*ppv);
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI Timeline_AddRef(IUnknown *iface)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IUnknown(iface);
|
|
|
|
ULONG ref = InterlockedIncrement(&This->ref);
|
|
|
|
|
|
|
|
TRACE("(%p) new ref = %u\n", This, ref);
|
|
|
|
|
|
|
|
return ref;
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI Timeline_Release(IUnknown *iface)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IUnknown(iface);
|
|
|
|
ULONG ref = InterlockedDecrement(&This->ref);
|
|
|
|
|
|
|
|
TRACE("(%p) new ref = %u\n", This, ref);
|
|
|
|
|
|
|
|
if (ref == 0)
|
|
|
|
CoTaskMemFree(This);
|
|
|
|
|
|
|
|
return ref;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IUnknownVtbl timeline_vtbl =
|
|
|
|
{
|
|
|
|
Timeline_QueryInterface,
|
|
|
|
Timeline_AddRef,
|
|
|
|
Timeline_Release,
|
|
|
|
};
|
|
|
|
|
|
|
|
/* IAMTimeline implementation */
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_QueryInterface(IAMTimeline *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI Timeline_IAMTimeline_AddRef(IAMTimeline *iface)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
return IUnknown_AddRef(This->outer_unk);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI Timeline_IAMTimeline_Release(IAMTimeline *iface)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
return IUnknown_Release(This->outer_unk);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_CreateEmptyNode(IAMTimeline *iface, IAMTimelineObj **obj,
|
|
|
|
TIMELINE_MAJOR_TYPE type)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
2016-04-27 07:12:47 +02:00
|
|
|
TimelineObjImpl* obj_impl;
|
|
|
|
|
|
|
|
TRACE("(%p)->(%p,%d)\n", This, obj, type);
|
|
|
|
|
|
|
|
if (!obj)
|
|
|
|
return E_POINTER;
|
|
|
|
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case TIMELINE_MAJOR_TYPE_COMPOSITE:
|
|
|
|
case TIMELINE_MAJOR_TYPE_TRACK:
|
|
|
|
case TIMELINE_MAJOR_TYPE_SOURCE:
|
|
|
|
case TIMELINE_MAJOR_TYPE_TRANSITION:
|
|
|
|
case TIMELINE_MAJOR_TYPE_EFFECT:
|
|
|
|
case TIMELINE_MAJOR_TYPE_GROUP:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return E_INVALIDARG;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj_impl = CoTaskMemAlloc(sizeof(TimelineObjImpl));
|
|
|
|
if (!obj_impl) {
|
|
|
|
*obj = NULL;
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj_impl->ref = 1;
|
|
|
|
obj_impl->IAMTimelineObj_iface.lpVtbl = &IAMTimelineObj_VTable;
|
2017-10-05 07:15:45 +02:00
|
|
|
obj_impl->IAMTimelineGroup_iface.lpVtbl = &IAMTimelineGroup_VTable;
|
2016-04-27 07:12:48 +02:00
|
|
|
obj_impl->timeline_type = type;
|
2016-04-27 07:12:47 +02:00
|
|
|
|
|
|
|
*obj = &obj_impl->IAMTimelineObj_iface;
|
|
|
|
return S_OK;
|
2016-04-25 05:40:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_AddGroup(IAMTimeline *iface, IAMTimelineObj *group)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, group);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_RemGroupFromList(IAMTimeline *iface, IAMTimelineObj *group)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, group);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetGroup(IAMTimeline *iface, IAMTimelineObj **group, LONG index)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p,%d): not implemented!\n", This, group, index);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetGroupCount(IAMTimeline *iface, LONG *count)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, count);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_ClearAllGroups(IAMTimeline *iface)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p): not implemented!\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetInsertMode(IAMTimeline *iface, LONG *mode)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, mode);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_SetInsertMode(IAMTimeline *iface, LONG mode)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%d): not implemented!\n", This, mode);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_EnableTransitions(IAMTimeline *iface, BOOL enabled)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%d): not implemented!\n", This, enabled);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_TransitionsEnabled(IAMTimeline *iface, BOOL *enabled)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, enabled);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_EnableEffects(IAMTimeline *iface, BOOL enabled)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%d): not implemented!\n", This, enabled);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_EffectsEnabled(IAMTimeline *iface, BOOL *enabled)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, enabled);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_SetInterestRange(IAMTimeline *iface, REFERENCE_TIME start,
|
|
|
|
REFERENCE_TIME stop)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start),
|
|
|
|
wine_dbgstr_longlong(stop));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDuration(IAMTimeline *iface, REFERENCE_TIME *duration)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, duration);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDuration2(IAMTimeline *iface, double *duration)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, duration);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultFPS(IAMTimeline *iface, double fps)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%f): not implemented!\n", This, fps);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultFPS(IAMTimeline *iface, double *fps)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, fps);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_IsDirty(IAMTimeline *iface, BOOL *dirty)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, dirty);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDirtyRange(IAMTimeline *iface, REFERENCE_TIME *start,
|
|
|
|
REFERENCE_TIME *stop)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetCountOfType(IAMTimeline *iface, LONG group, LONG *value,
|
|
|
|
LONG *value_with_comps, TIMELINE_MAJOR_TYPE type)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%d,%p,%p,%04x): not implemented!\n", This, group, value, value_with_comps, type);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_ValidateSourceNames(IAMTimeline *iface, LONG flags, IMediaLocator *override,
|
|
|
|
LONG_PTR notify_event)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%d,%p,%lx): not implemented!\n", This, flags, override, notify_event);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransition(IAMTimeline *iface, GUID *guid)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransition(IAMTimeline *iface, GUID *guid)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffect(IAMTimeline *iface, GUID *guid)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffect(IAMTimeline *iface, GUID *guid)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(guid));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultTransitionB(IAMTimeline *iface, BSTR guidb)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, guidb);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultTransitionB(IAMTimeline *iface, BSTR *guidb)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, guidb);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_SetDefaultEffectB(IAMTimeline *iface, BSTR guidb)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, guidb);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI Timeline_IAMTimeline_GetDefaultEffectB(IAMTimeline *iface, BSTR *guidb)
|
|
|
|
{
|
|
|
|
TimelineImpl *This = impl_from_IAMTimeline(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, guidb);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IAMTimelineVtbl IAMTimeline_VTable =
|
|
|
|
{
|
|
|
|
Timeline_IAMTimeline_QueryInterface,
|
|
|
|
Timeline_IAMTimeline_AddRef,
|
|
|
|
Timeline_IAMTimeline_Release,
|
|
|
|
Timeline_IAMTimeline_CreateEmptyNode,
|
|
|
|
Timeline_IAMTimeline_AddGroup,
|
|
|
|
Timeline_IAMTimeline_RemGroupFromList,
|
|
|
|
Timeline_IAMTimeline_GetGroup,
|
|
|
|
Timeline_IAMTimeline_GetGroupCount,
|
|
|
|
Timeline_IAMTimeline_ClearAllGroups,
|
|
|
|
Timeline_IAMTimeline_GetInsertMode,
|
|
|
|
Timeline_IAMTimeline_SetInsertMode,
|
|
|
|
Timeline_IAMTimeline_EnableTransitions,
|
|
|
|
Timeline_IAMTimeline_TransitionsEnabled,
|
|
|
|
Timeline_IAMTimeline_EnableEffects,
|
|
|
|
Timeline_IAMTimeline_EffectsEnabled,
|
|
|
|
Timeline_IAMTimeline_SetInterestRange,
|
|
|
|
Timeline_IAMTimeline_GetDuration,
|
|
|
|
Timeline_IAMTimeline_GetDuration2,
|
|
|
|
Timeline_IAMTimeline_SetDefaultFPS,
|
|
|
|
Timeline_IAMTimeline_GetDefaultFPS,
|
|
|
|
Timeline_IAMTimeline_IsDirty,
|
|
|
|
Timeline_IAMTimeline_GetDirtyRange,
|
|
|
|
Timeline_IAMTimeline_GetCountOfType,
|
|
|
|
Timeline_IAMTimeline_ValidateSourceNames,
|
|
|
|
Timeline_IAMTimeline_SetDefaultTransition,
|
|
|
|
Timeline_IAMTimeline_GetDefaultTransition,
|
|
|
|
Timeline_IAMTimeline_SetDefaultEffect,
|
|
|
|
Timeline_IAMTimeline_GetDefaultEffect,
|
|
|
|
Timeline_IAMTimeline_SetDefaultTransitionB,
|
|
|
|
Timeline_IAMTimeline_GetDefaultTransitionB,
|
|
|
|
Timeline_IAMTimeline_SetDefaultEffectB,
|
|
|
|
Timeline_IAMTimeline_GetDefaultEffectB,
|
|
|
|
};
|
|
|
|
|
2020-03-12 03:10:09 +01:00
|
|
|
HRESULT timeline_create(IUnknown *pUnkOuter, IUnknown **ppv)
|
2016-04-25 05:40:27 +02:00
|
|
|
{
|
|
|
|
TimelineImpl* obj = NULL;
|
|
|
|
|
|
|
|
TRACE("(%p,%p)\n", pUnkOuter, ppv);
|
|
|
|
|
|
|
|
obj = CoTaskMemAlloc(sizeof(TimelineImpl));
|
|
|
|
if (NULL == obj) {
|
|
|
|
*ppv = NULL;
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
}
|
|
|
|
ZeroMemory(obj, sizeof(TimelineImpl));
|
|
|
|
|
|
|
|
obj->ref = 1;
|
|
|
|
obj->IUnknown_inner.lpVtbl = &timeline_vtbl;
|
|
|
|
obj->IAMTimeline_iface.lpVtbl = &IAMTimeline_VTable;
|
|
|
|
|
|
|
|
if (pUnkOuter)
|
|
|
|
obj->outer_unk = pUnkOuter;
|
|
|
|
else
|
|
|
|
obj->outer_unk = &obj->IUnknown_inner;
|
|
|
|
|
|
|
|
*ppv = &obj->IUnknown_inner;
|
|
|
|
return S_OK;
|
|
|
|
}
|
2016-04-27 07:12:47 +02:00
|
|
|
|
|
|
|
/* IAMTimelineObj implementation */
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_QueryInterface(IAMTimelineObj *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
|
|
|
|
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
|
|
|
|
|
|
|
if (!ppv)
|
|
|
|
return E_POINTER;
|
|
|
|
|
|
|
|
*ppv = NULL;
|
|
|
|
if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IAMTimelineObj))
|
|
|
|
*ppv = &This->IAMTimelineObj_iface;
|
2017-10-05 07:15:45 +02:00
|
|
|
else if (IsEqualIID(riid, &IID_IAMTimelineGroup))
|
|
|
|
*ppv = &This->IAMTimelineGroup_iface;
|
2016-04-27 07:12:47 +02:00
|
|
|
else
|
|
|
|
WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
|
|
|
|
|
|
|
|
if (!*ppv)
|
|
|
|
return E_NOINTERFACE;
|
|
|
|
|
|
|
|
IUnknown_AddRef((IUnknown*)*ppv);
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI TimelineObj_AddRef(IAMTimelineObj *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
ULONG ref = InterlockedIncrement(&This->ref);
|
|
|
|
|
|
|
|
TRACE("(%p) new ref = %u\n", This, ref);
|
|
|
|
|
|
|
|
return ref;
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI TimelineObj_Release(IAMTimelineObj *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
ULONG ref = InterlockedDecrement(&This->ref);
|
|
|
|
|
|
|
|
TRACE("(%p) new ref = %u\n", This, ref);
|
|
|
|
|
|
|
|
if (!ref)
|
|
|
|
CoTaskMemFree(This);
|
|
|
|
|
|
|
|
return ref;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetStartStop(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetStartStop2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_FixTimes(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_FixTimes2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetStartStop(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetStartStop2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetPropertySetter(IAMTimelineObj *iface, IPropertySetter **setter)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, setter);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetPropertySetter(IAMTimelineObj *iface, IPropertySetter *setter)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, setter);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetSubObject(IAMTimelineObj *iface, IUnknown **obj)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, obj);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetSubObject(IAMTimelineObj *iface, IUnknown *obj)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, obj);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetSubObjectGUID(IAMTimelineObj *iface, GUID guid)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_guid(&guid));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetSubObjectGUIDB(IAMTimelineObj *iface, BSTR guidb)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(guidb));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetSubObjectGUID(IAMTimelineObj *iface, GUID *guid)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, guid);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetSubObjectGUIDB(IAMTimelineObj *iface, BSTR *guidb)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, guidb);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetSubObjectLoaded(IAMTimelineObj *iface, BOOL *loaded)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, loaded);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE *type)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
2016-04-27 07:12:48 +02:00
|
|
|
TRACE("(%p)->(%p)\n", This, type);
|
|
|
|
if (!type) return E_POINTER;
|
|
|
|
*type = This->timeline_type;
|
|
|
|
return S_OK;
|
2016-04-27 07:12:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE type)
|
|
|
|
{
|
2016-04-27 07:12:49 +02:00
|
|
|
/* MSDN says that this function is "not supported" */
|
2016-04-27 07:12:47 +02:00
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
2016-04-27 07:12:49 +02:00
|
|
|
TRACE("(%p)->(%d)\n", This, type);
|
|
|
|
if (type != This->timeline_type) return E_INVALIDARG;
|
|
|
|
return S_OK;
|
2016-04-27 07:12:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetUserID(IAMTimelineObj *iface, LONG *id)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, id);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetUserID(IAMTimelineObj *iface, LONG id)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%d): not implemented!\n", This, id);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetGenID(IAMTimelineObj *iface, LONG *id)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, id);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetUserName(IAMTimelineObj *iface, BSTR *name)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, name);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetUserName(IAMTimelineObj *iface, BSTR name)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%s): not implemented!\n", This, wine_dbgstr_w(name));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetUserData(IAMTimelineObj *iface, BYTE *data, LONG *size)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, data, size);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetUserData(IAMTimelineObj *iface, BYTE *data, LONG size)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%d): not implemented!\n", This, data, size);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetMuted(IAMTimelineObj *iface, BOOL *muted)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, muted);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetMuted(IAMTimelineObj *iface, BOOL muted)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%d): not implemented!\n", This, muted);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetLocked(IAMTimelineObj *iface, BOOL *locked)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, locked);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetLocked(IAMTimelineObj *iface, BOOL locked)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%d): not implemented!\n", This, locked);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME *start, REFERENCE_TIME *stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetDirtyRange2(IAMTimelineObj *iface, REFTIME *start, REFTIME *stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p,%p): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetDirtyRange(IAMTimelineObj *iface, REFERENCE_TIME start, REFERENCE_TIME stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%s,%s): not implemented!\n", This, wine_dbgstr_longlong(start), wine_dbgstr_longlong(stop));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_SetDirtyRange2(IAMTimelineObj *iface, REFTIME start, REFTIME stop)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%f,%f): not implemented!\n", This, start, stop);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_ClearDirty(IAMTimelineObj *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p): not implemented!\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_Remove(IAMTimelineObj *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p): not implemented!\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_RemoveAll(IAMTimelineObj *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p): not implemented!\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetTimelineNoRef(IAMTimelineObj *iface, IAMTimeline **timeline)
|
|
|
|
{
|
2016-04-27 07:12:50 +02:00
|
|
|
/* MSDN says that this function is "not supported" */
|
2016-04-27 07:12:47 +02:00
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
2016-04-27 07:12:50 +02:00
|
|
|
TRACE("(%p)->(%p)\n", This, timeline);
|
|
|
|
if (!timeline) return E_POINTER;
|
|
|
|
*timeline = NULL;
|
|
|
|
return E_NOINTERFACE;
|
2016-04-27 07:12:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetGroupIBelongTo(IAMTimelineObj *iface, IAMTimelineGroup **group)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, group);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TimelineObj_GetEmbedDepth(IAMTimelineObj *iface, LONG *depth)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
|
|
|
|
FIXME("(%p)->(%p): not implemented!\n", This, depth);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IAMTimelineObjVtbl IAMTimelineObj_VTable =
|
|
|
|
{
|
|
|
|
TimelineObj_QueryInterface,
|
|
|
|
TimelineObj_AddRef,
|
|
|
|
TimelineObj_Release,
|
|
|
|
TimelineObj_GetStartStop,
|
|
|
|
TimelineObj_GetStartStop2,
|
|
|
|
TimelineObj_FixTimes,
|
|
|
|
TimelineObj_FixTimes2,
|
|
|
|
TimelineObj_SetStartStop,
|
|
|
|
TimelineObj_SetStartStop2,
|
|
|
|
TimelineObj_GetPropertySetter,
|
|
|
|
TimelineObj_SetPropertySetter,
|
|
|
|
TimelineObj_GetSubObject,
|
|
|
|
TimelineObj_SetSubObject,
|
|
|
|
TimelineObj_SetSubObjectGUID,
|
|
|
|
TimelineObj_SetSubObjectGUIDB,
|
|
|
|
TimelineObj_GetSubObjectGUID,
|
|
|
|
TimelineObj_GetSubObjectGUIDB,
|
|
|
|
TimelineObj_GetSubObjectLoaded,
|
|
|
|
TimelineObj_GetTimelineType,
|
|
|
|
TimelineObj_SetTimelineType,
|
|
|
|
TimelineObj_GetUserID,
|
|
|
|
TimelineObj_SetUserID,
|
|
|
|
TimelineObj_GetGenID,
|
|
|
|
TimelineObj_GetUserName,
|
|
|
|
TimelineObj_SetUserName,
|
|
|
|
TimelineObj_GetUserData,
|
|
|
|
TimelineObj_SetUserData,
|
|
|
|
TimelineObj_GetMuted,
|
|
|
|
TimelineObj_SetMuted,
|
|
|
|
TimelineObj_GetLocked,
|
|
|
|
TimelineObj_SetLocked,
|
|
|
|
TimelineObj_GetDirtyRange,
|
|
|
|
TimelineObj_GetDirtyRange2,
|
|
|
|
TimelineObj_SetDirtyRange,
|
|
|
|
TimelineObj_SetDirtyRange2,
|
|
|
|
TimelineObj_ClearDirty,
|
|
|
|
TimelineObj_Remove,
|
|
|
|
TimelineObj_RemoveAll,
|
|
|
|
TimelineObj_GetTimelineNoRef,
|
|
|
|
TimelineObj_GetGroupIBelongTo,
|
|
|
|
TimelineObj_GetEmbedDepth,
|
|
|
|
};
|
2017-10-05 07:15:45 +02:00
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_QueryInterface(IAMTimelineGroup *iface, REFIID riid, void **object)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
return IAMTimelineObj_QueryInterface(&This->IAMTimelineObj_iface, riid, object);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI timelinegrp_AddRef(IAMTimelineGroup *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
return IAMTimelineObj_AddRef(&This->IAMTimelineObj_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI timelinegrp_Release(IAMTimelineGroup *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
return IAMTimelineObj_Release(&This->IAMTimelineObj_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetTimeline(IAMTimelineGroup *iface, IAMTimeline *timeline)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, timeline);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetTimeline(IAMTimelineGroup *iface, IAMTimeline **timeline)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, timeline);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetPriority(IAMTimelineGroup *iface, LONG *priority)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, priority);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetMediaType(IAMTimelineGroup *iface, AM_MEDIA_TYPE *mediatype)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, mediatype);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetMediaType(IAMTimelineGroup *iface, AM_MEDIA_TYPE *mediatype)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, mediatype);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetOutputFPS(IAMTimelineGroup *iface, double fps)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%f)\n", This, fps);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetOutputFPS(IAMTimelineGroup *iface, double *fps)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, fps);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetGroupName(IAMTimelineGroup *iface, BSTR name)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%s)\n", This, debugstr_w(name));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetGroupName(IAMTimelineGroup *iface, BSTR *name)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, name);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetPreviewMode(IAMTimelineGroup *iface, BOOL preview)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%d)\n", This, preview);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetPreviewMode(IAMTimelineGroup *iface, BOOL *preview)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, preview);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetMediaTypeForVB(IAMTimelineGroup *iface, LONG type)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%d)\n", This, type);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetOutputBuffering(IAMTimelineGroup *iface, int *buffer)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, buffer);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetOutputBuffering(IAMTimelineGroup *iface, int buffer)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%d)\n", This, buffer);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetSmartRecompressFormat(IAMTimelineGroup *iface, LONG *format)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, format);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_GetSmartRecompressFormat(IAMTimelineGroup *iface, LONG **format)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, format);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_IsSmartRecompressFormatSet(IAMTimelineGroup *iface, BOOL *set)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, set);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_IsRecompressFormatDirty(IAMTimelineGroup *iface, BOOL *dirty)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, dirty);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_ClearRecompressFormatDirty(IAMTimelineGroup *iface)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->()\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI timelinegrp_SetRecompFormatFromSource(IAMTimelineGroup *iface, IAMTimelineSrc *source)
|
|
|
|
{
|
|
|
|
TimelineObjImpl *This = impl_from_IAMTimelineGroup(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, source);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IAMTimelineGroupVtbl IAMTimelineGroup_VTable =
|
|
|
|
{
|
|
|
|
timelinegrp_QueryInterface,
|
|
|
|
timelinegrp_AddRef,
|
|
|
|
timelinegrp_Release,
|
|
|
|
timelinegrp_SetTimeline,
|
|
|
|
timelinegrp_GetTimeline,
|
|
|
|
timelinegrp_GetPriority,
|
|
|
|
timelinegrp_GetMediaType,
|
|
|
|
timelinegrp_SetMediaType,
|
|
|
|
timelinegrp_SetOutputFPS,
|
|
|
|
timelinegrp_GetOutputFPS,
|
|
|
|
timelinegrp_SetGroupName,
|
|
|
|
timelinegrp_GetGroupName,
|
|
|
|
timelinegrp_SetPreviewMode,
|
|
|
|
timelinegrp_GetPreviewMode,
|
|
|
|
timelinegrp_SetMediaTypeForVB,
|
|
|
|
timelinegrp_GetOutputBuffering,
|
|
|
|
timelinegrp_SetOutputBuffering,
|
|
|
|
timelinegrp_SetSmartRecompressFormat,
|
|
|
|
timelinegrp_GetSmartRecompressFormat,
|
|
|
|
timelinegrp_IsSmartRecompressFormatSet,
|
|
|
|
timelinegrp_IsRecompressFormatDirty,
|
|
|
|
timelinegrp_ClearRecompressFormatDirty,
|
|
|
|
timelinegrp_SetRecompFormatFromSource
|
|
|
|
};
|