blob: a2a1604354ab75e2dfd2897874a180ff06f234a8 [file] [log] [blame]
Hidenori Takeshima425acfd2002-04-08 20:13:54 +00001/*
2 * Implements MPEG Audio Decoder(CLSID_CMpegAudioCodec)
3 *
4 * FIXME - what library can we use? SMPEG??
5 *
6 * FIXME - stub
7 *
8 * Copyright (C) Hidenori TAKESHIMA <hidenori@a2.ctktv.ne.jp>
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */
24
25#include "config.h"
26
27#include "windef.h"
28#include "winbase.h"
29#include "wingdi.h"
30#include "winuser.h"
31#include "winerror.h"
32#include "strmif.h"
33#include "control.h"
34#include "amvideo.h"
35#include "vfwmsgs.h"
36#include "uuids.h"
37
38#include "wine/debug.h"
39WINE_DEFAULT_DEBUG_CHANNEL(quartz);
40
41#include "quartz_private.h"
42#include "xform.h"
43#include "mtype.h"
44
45static const WCHAR CMPEGAudioDecoderImpl_FilterName[] =
46{'M','P','E','G',' ','A','u','d','i','o',' ','D','e','c','o','d','e','r',0};
47
48
49typedef struct CMPEGAudioDecoderImpl
50{
51 int dummy;
52} CMPEGAudioDecoderImpl;
53
54
55/***************************************************************************
56 *
57 * CMPEGAudioDecoderImpl methods
58 *
59 */
60
61static HRESULT CMPEGAudioDecoderImpl_Init( CTransformBaseImpl* pImpl )
62{
63 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
64
65 TRACE("(%p)\n",This);
66
67 if ( This != NULL )
68 return NOERROR;
69
70 This = (CMPEGAudioDecoderImpl*)QUARTZ_AllocMem( sizeof(CMPEGAudioDecoderImpl) );
71 if ( This == NULL )
72 return E_OUTOFMEMORY;
73 ZeroMemory( This, sizeof(CMPEGAudioDecoderImpl) );
74 pImpl->m_pUserData = This;
75
76 /* construct */
77
78 return S_OK;
79}
80
81static HRESULT CMPEGAudioDecoderImpl_Cleanup( CTransformBaseImpl* pImpl )
82{
83 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
84
85 TRACE("(%p)\n",This);
86
87 if ( This == NULL )
88 return S_OK;
89
90 /* destruct */
91
92 QUARTZ_FreeMem( This );
93 pImpl->m_pUserData = NULL;
94
95 return S_OK;
96}
97
98static HRESULT CMPEGAudioDecoderImpl_CheckMediaType( CTransformBaseImpl* pImpl, const AM_MEDIA_TYPE* pmtIn, const AM_MEDIA_TYPE* pmtOut )
99{
100 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
101
102 FIXME("(%p)\n",This);
103 if ( This == NULL )
104 return E_UNEXPECTED;
105
106 return E_NOTIMPL;
107}
108
109static HRESULT CMPEGAudioDecoderImpl_GetOutputTypes( CTransformBaseImpl* pImpl, const AM_MEDIA_TYPE* pmtIn, const AM_MEDIA_TYPE** ppmtAcceptTypes, ULONG* pcAcceptTypes )
110{
111 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
112
113 FIXME("(%p)\n",This);
114 if ( This == NULL )
115 return E_UNEXPECTED;
116
117 return E_NOTIMPL;
118}
119
120static HRESULT CMPEGAudioDecoderImpl_GetAllocProp( CTransformBaseImpl* pImpl, const AM_MEDIA_TYPE* pmtIn, const AM_MEDIA_TYPE* pmtOut, ALLOCATOR_PROPERTIES* pProp, BOOL* pbTransInPlace, BOOL* pbTryToReuseSample )
121{
122 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
123
124 FIXME("(%p)\n",This);
125 if ( This == NULL )
126 return E_UNEXPECTED;
127
128 return E_NOTIMPL;
129}
130
131static HRESULT CMPEGAudioDecoderImpl_BeginTransform( CTransformBaseImpl* pImpl, const AM_MEDIA_TYPE* pmtIn, const AM_MEDIA_TYPE* pmtOut, BOOL bReuseSample )
132{
133 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
134
135 FIXME("(%p,%p,%p,%d)\n",This,pmtIn,pmtOut,bReuseSample);
136 if ( This == NULL )
137 return E_UNEXPECTED;
138
139 return E_NOTIMPL;
140}
141
142static HRESULT CMPEGAudioDecoderImpl_ProcessReceive( CTransformBaseImpl* pImpl, IMediaSample* pSampIn )
143{
144 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
145
146 FIXME("(%p)\n",This);
147 if ( This == NULL )
148 return E_UNEXPECTED;
149
150 return E_NOTIMPL;
151}
152
153static HRESULT CMPEGAudioDecoderImpl_EndTransform( CTransformBaseImpl* pImpl )
154{
155 CMPEGAudioDecoderImpl* This = pImpl->m_pUserData;
156
157 FIXME("(%p)\n",This);
158 if ( This == NULL )
159 return E_UNEXPECTED;
160
161 return E_NOTIMPL;
162}
163
164static const TransformBaseHandlers transhandlers =
165{
166 CMPEGAudioDecoderImpl_Init,
167 CMPEGAudioDecoderImpl_Cleanup,
168 CMPEGAudioDecoderImpl_CheckMediaType,
169 CMPEGAudioDecoderImpl_GetOutputTypes,
170 CMPEGAudioDecoderImpl_GetAllocProp,
171 CMPEGAudioDecoderImpl_BeginTransform,
172 CMPEGAudioDecoderImpl_ProcessReceive,
173 NULL,
174 CMPEGAudioDecoderImpl_EndTransform,
175};
176
177HRESULT QUARTZ_CreateCMpegAudioCodec(IUnknown* punkOuter,void** ppobj)
178{
179 return QUARTZ_CreateTransformBase(
180 punkOuter,ppobj,
181 &CLSID_CMpegAudioCodec,
182 CMPEGAudioDecoderImpl_FilterName,
183 NULL, NULL,
184 &transhandlers );
185}
186
187