1/* This file is part of the KDE project
2   Copyright (C) 2007 Shane King
3
4   This program is free software; you can redistribute it and/or
5   modify it under the terms of the GNU Library General Public
6   License as published by the Free Software Foundation; either
7   version 2 of the License, or (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   Library General Public License for more details.
13
14   You should have received a copy of the GNU Library General Public License
15   along with this program; see the file COPYING.  If not, write to
16   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17   Boston, MA 02110-1301, USA.
18*/
19
20import "unknwn.idl";
21import "strmif.idl";
22
23typedef DWORD MP_TIMEDATA;
24typedef DWORD MP_CAPS;
25typedef DWORD MP_FLAGS;
26typedef float MP_DATA;
27
28typedef enum _MP_Type {
29    MPT_INT,
30    MPT_FLOAT,
31    MPT_BOOL,
32    MPT_ENUM,
33    MPT_MAX,
34} MP_TYPE;
35
36typedef enum _MP_CURVE_TYPE {
37    MP_CURVE_JUMP       = 0x0001,
38    MP_CURVE_LINEAR     = 0x0002,
39    MP_CURVE_SQUARE     = 0x0004,
40    MP_CURVE_INVSQUARE  = 0x0008,
41    MP_CURVE_SINE       = 0x0010,
42} MP_CURVE_TYPE;
43
44typedef struct _MP_PARAMINFO {
45    MP_TYPE    mpType;
46    MP_CAPS    mopCaps;
47    MP_DATA    mpdMinValue;
48    MP_DATA    mpdMaxValue;
49    MP_DATA    mpdNeutralValue;
50    WCHAR      szUnitText[32];
51    WCHAR      szLabel[32];
52} MP_PARAMINFO;
53
54typedef struct _MP_ENVELOPE_SEGMENT {
55    REFERENCE_TIME   rtStart;
56    REFERENCE_TIME   rtEnd;
57    MP_DATA          valStart;
58    MP_DATA          valEnd;
59    MP_CURVE_TYPE    iCurve;
60    MP_FLAGS         flags;
61} MP_ENVELOPE_SEGMENT;
62
63const MP_CAPS MP_CAPS_CURVE_JUMP        = MP_CURVE_JUMP;
64const MP_CAPS MP_CAPS_CURVE_LINEAR      = MP_CURVE_LINEAR;
65const MP_CAPS MP_CAPS_CURVE_SQUARE      = MP_CURVE_SQUARE;
66const MP_CAPS MP_CAPS_CURVE_INVSQUARE   = MP_CURVE_INVSQUARE;
67const MP_CAPS MP_CAPS_CURVE_SINE        = MP_CURVE_SINE;
68
69[
70    object,
71    uuid(6d6cbb61-a223-44aa-842f-a2f06750be6e)
72]
73interface IMediaParams : IUnknown
74{
75    HRESULT AddEnvelope(
76        DWORD dwParamIndex,
77        DWORD cPoints,
78        MP_ENVELOPE_SEGMENT *pEnvelope
79    );
80
81    HRESULT FlushEnvelope(
82        DWORD dwParamIndex,
83        REFERENCE_TIME refTimeStart,
84        REFERENCE_TIME refTimeEnd
85    );
86
87    HRESULT GetParam(
88        DWORD dwParamIndex,
89        MP_DATA *pValue
90    );
91
92    HRESULT SetParam(
93        DWORD dwParamIndex,
94        MP_DATA value
95    );
96
97    HRESULT SetTimeFormat(
98        GUID guidTimeFormat,
99        MP_TIMEDATA mpTimeData
100    );
101}
102
103[
104    object,
105    uuid(6d6cbb60-a223-44aa-842f-a2f06750be6d)
106]
107interface IMediaParamInfo : IUnknown
108{
109    HRESULT GetParamCount(
110        DWORD *pdwParams
111    );
112
113    HRESULT GetParamInfo(
114        DWORD dwParamIndex,
115        MP_PARAMINFO *pInfo
116    );
117
118    HRESULT GetParamText(
119        DWORD dwParamIndex,
120        WCHAR **ppwchText
121    );
122
123    HRESULT GetNumTimeFormats(
124        DWORD *pdwNumTimeFormats
125    );
126
127    HRESULT GetSupportedTimeFormat(
128        DWORD dwFormatIndex,
129        GUID *pguidTimeFormat
130    );
131
132    HRESULT GetCurrentTimeFormat(
133        GUID *pguidTimeFormat,
134        MP_TIMEDATA *pTimeData
135    );
136}
137