/*              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);
}

typedef struct {
    IAMTimelineObj IAMTimelineObj_iface;
    LONG ref;
    TIMELINE_MAJOR_TYPE timeline_type;
} TimelineObjImpl;

static inline TimelineObjImpl *impl_from_IAMTimelineObj(IAMTimelineObj *iface)
{
    return CONTAINING_RECORD(iface, TimelineObjImpl, IAMTimelineObj_iface);
}

static const IAMTimelineObjVtbl IAMTimelineObj_VTable;

/* 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);

    if (!ppv)
        return E_POINTER;

    *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);
    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;
    obj_impl->timeline_type = type;

    *obj = &obj_impl->IAMTimelineObj_iface;
    return S_OK;
}

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,
};

HRESULT AMTimeline_create(IUnknown *pUnkOuter, LPVOID *ppv)
{
    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;
}

/* 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;
    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);
    TRACE("(%p)->(%p)\n", This, type);
    if (!type) return E_POINTER;
    *type = This->timeline_type;
    return S_OK;
}

static HRESULT WINAPI TimelineObj_SetTimelineType(IAMTimelineObj *iface, TIMELINE_MAJOR_TYPE type)
{
    /* MSDN says that this function is "not supported" */
    TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
    TRACE("(%p)->(%d)\n", This, type);
    if (type != This->timeline_type) return E_INVALIDARG;
    return S_OK;
}

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)
{
    /* MSDN says that this function is "not supported" */
    TimelineObjImpl *This = impl_from_IAMTimelineObj(iface);
    TRACE("(%p)->(%p)\n", This, timeline);
    if (!timeline) return E_POINTER;
    *timeline = NULL;
    return E_NOINTERFACE;
}

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,
};
