2 * Copyright (C) 2003 Michael Günnewig
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library 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 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #define WIN32_NO_STATUS
24 #define COM_NO_WINDOWS_H
32 #include <wine/debug.h>
34 WINE_DEFAULT_DEBUG_CHANNEL(msdmo
);
36 /***********************************************************************
37 * MoCreateMediaType (MSDMO.@)
39 * Allocate a new media type structure
41 HRESULT WINAPI
MoCreateMediaType(DMO_MEDIA_TYPE
** ppmedia
, DWORD cbFormat
)
45 TRACE("%p %u\n", ppmedia
, cbFormat
);
50 *ppmedia
= CoTaskMemAlloc(sizeof(DMO_MEDIA_TYPE
));
54 r
= MoInitMediaType(*ppmedia
, cbFormat
);
57 CoTaskMemFree(*ppmedia
);
64 /***********************************************************************
65 * MoInitMediaType (MSDMO.@)
67 * Initialize media type structure
69 HRESULT WINAPI
MoInitMediaType(DMO_MEDIA_TYPE
* pmedia
, DWORD cbFormat
)
71 TRACE("%p %u\n", pmedia
, cbFormat
);
76 memset(pmedia
, 0, sizeof(DMO_MEDIA_TYPE
));
80 pmedia
->pbFormat
= CoTaskMemAlloc(cbFormat
);
81 if (!pmedia
->pbFormat
)
84 pmedia
->cbFormat
= cbFormat
;
90 /***********************************************************************
91 * MoDeleteMediaType (MSDMO.@)
93 * Delete a media type structure
95 HRESULT WINAPI
MoDeleteMediaType(DMO_MEDIA_TYPE
* pmedia
)
97 TRACE("%p\n", pmedia
);
102 MoFreeMediaType(pmedia
);
103 CoTaskMemFree(pmedia
);
108 /***********************************************************************
109 * MoFreeMediaType (MSDMO.@)
111 * Free allocated members of a media type structure
113 HRESULT WINAPI
MoFreeMediaType(DMO_MEDIA_TYPE
* pmedia
)
115 TRACE("%p\n", pmedia
);
122 IUnknown_Release(pmedia
->pUnk
);
126 CoTaskMemFree(pmedia
->pbFormat
);
127 pmedia
->pbFormat
= NULL
;
132 /***********************************************************************
133 * MoDuplicateMediaType (MSDMO.@)
135 * Duplicates a media type structure
137 HRESULT WINAPI
MoDuplicateMediaType(DMO_MEDIA_TYPE
** ppdst
,
138 const DMO_MEDIA_TYPE
* psrc
)
142 TRACE("%p %p\n", ppdst
, psrc
);
147 *ppdst
= CoTaskMemAlloc(sizeof(DMO_MEDIA_TYPE
));
149 return E_OUTOFMEMORY
;
151 r
= MoCopyMediaType(*ppdst
, psrc
);
154 MoFreeMediaType(*ppdst
);
161 /***********************************************************************
162 * MoCopyMediaType (MSDMO.@)
164 * Copy a new media type structure
166 HRESULT WINAPI
MoCopyMediaType(DMO_MEDIA_TYPE
* pdst
,
167 const DMO_MEDIA_TYPE
* psrc
)
169 TRACE("%p %p\n", pdst
, psrc
);
174 pdst
->majortype
= psrc
->majortype
;
175 pdst
->subtype
= psrc
->subtype
;
176 pdst
->formattype
= psrc
->formattype
;
178 pdst
->bFixedSizeSamples
= psrc
->bFixedSizeSamples
;
179 pdst
->bTemporalCompression
= psrc
->bTemporalCompression
;
180 pdst
->lSampleSize
= psrc
->lSampleSize
;
181 pdst
->cbFormat
= psrc
->cbFormat
;
183 if (psrc
->pbFormat
&& psrc
->cbFormat
> 0)
185 pdst
->pbFormat
= CoTaskMemAlloc(psrc
->cbFormat
);
187 return E_OUTOFMEMORY
;
189 memcpy(pdst
->pbFormat
, psrc
->pbFormat
, psrc
->cbFormat
);
192 pdst
->pbFormat
= NULL
;
196 pdst
->pUnk
= psrc
->pUnk
;
197 IUnknown_AddRef(pdst
->pUnk
);