2 * Unit tests for Media Detector
4 * Copyright (C) 2008 Google (Lei Zhang, Dan Hipschman)
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
27 #include "wine/test.h"
31 static WCHAR test_avi_filename[MAX_PATH];
32 static WCHAR test_sound_avi_filename[MAX_PATH];
34 static BOOL unpack_avi_file(int id, WCHAR name[MAX_PATH])
36 static WCHAR temp_path[MAX_PATH];
37 static WCHAR prefix[] = {'D','E','S',0};
38 static WCHAR avi[] = {'a','v','i',0};
45 res = FindResource(NULL, MAKEINTRESOURCE(id), MAKEINTRESOURCE(AVI_RES_TYPE));
49 data = LoadResource(NULL, res);
53 mem = LockResource(data);
57 size = SizeofResource(NULL, res);
61 if (!GetTempPathW(MAX_PATH, temp_path))
64 /* We might end up relying on the extension here, so .TMP is no good. */
65 if (!GetTempFileNameW(temp_path, prefix, 0, name))
69 lstrcpyW(name + lstrlenW(name) - 3, avi);
71 fh = CreateFileW(name, GENERIC_WRITE, 0, NULL, CREATE_NEW,
72 FILE_ATTRIBUTE_NORMAL, NULL);
73 if (fh == INVALID_HANDLE_VALUE)
76 if (!WriteFile(fh, mem, size, &written, NULL) || written != size)
84 static BOOL init_tests(void)
86 return unpack_avi_file(TEST_AVI_RES, test_avi_filename)
87 && unpack_avi_file(TEST_SOUND_AVI_RES, test_sound_avi_filename);
90 static void test_mediadet(void)
102 /* test.avi has one video stream. */
103 hr = CoCreateInstance(&CLSID_MediaDet, NULL, CLSCTX_INPROC_SERVER,
104 &IID_IMediaDet, (LPVOID*)&pM);
105 ok(hr == S_OK, "CoCreateInstance failed with %x\n", hr);
106 ok(pM != NULL, "pM is NULL\n");
109 hr = IMediaDet_get_Filename(pM, &filename);
110 /* Despite what MSDN claims, this returns S_OK. */
111 ok(hr == S_OK, "IMediaDet_get_Filename\n");
112 ok(filename == NULL, "IMediaDet_get_Filename\n");
114 filename = (BSTR) -1;
115 hr = IMediaDet_get_Filename(pM, &filename);
116 /* Despite what MSDN claims, this returns S_OK. */
117 ok(hr == S_OK, "IMediaDet_get_Filename\n");
118 ok(filename == NULL, "IMediaDet_get_Filename\n");
121 hr = IMediaDet_get_OutputStreams(pM, &nstrms);
122 ok(hr == E_INVALIDARG, "IMediaDet_get_OutputStreams\n");
123 ok(nstrms == -1, "IMediaDet_get_OutputStreams\n");
126 /* The stream defaults to 0, even without a file! */
127 hr = IMediaDet_get_CurrentStream(pM, &strm);
128 ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
129 ok(strm == 0, "IMediaDet_get_CurrentStream\n");
131 hr = IMediaDet_get_CurrentStream(pM, NULL);
132 ok(hr == E_POINTER, "IMediaDet_get_CurrentStream\n");
134 /* But put_CurrentStream doesn't. */
135 hr = IMediaDet_put_CurrentStream(pM, 0);
136 ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
138 hr = IMediaDet_put_CurrentStream(pM, -1);
139 ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
141 hr = IMediaDet_get_StreamMediaType(pM, &mt);
142 ok(hr == E_INVALIDARG, "IMediaDet_get_StreamMediaType\n");
144 hr = IMediaDet_get_StreamMediaType(pM, NULL);
145 ok(hr == E_POINTER, "IMediaDet_get_StreamMediaType\n");
147 filename = SysAllocString(test_avi_filename);
148 hr = IMediaDet_put_Filename(pM, filename);
149 ok(hr == S_OK, "IMediaDet_put_Filename -> %x\n", hr);
150 SysFreeString(filename);
153 /* The stream defaults to 0. */
154 hr = IMediaDet_get_CurrentStream(pM, &strm);
155 ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
156 ok(strm == 0, "IMediaDet_get_CurrentStream\n");
158 ZeroMemory(&mt, sizeof mt);
159 hr = IMediaDet_get_StreamMediaType(pM, &mt);
160 ok(hr == S_OK, "IMediaDet_get_StreamMediaType\n");
161 CoTaskMemFree(mt.pbFormat);
163 /* Even before get_OutputStreams. */
164 hr = IMediaDet_put_CurrentStream(pM, 1);
165 ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
167 hr = IMediaDet_get_OutputStreams(pM, &nstrms);
168 ok(hr == S_OK, "IMediaDet_get_OutputStreams\n");
169 ok(nstrms == 1, "IMediaDet_get_OutputStreams\n");
172 hr = IMediaDet_get_Filename(pM, &filename);
173 ok(hr == S_OK, "IMediaDet_get_Filename\n");
174 ok(lstrcmpW(filename, test_avi_filename) == 0,
175 "IMediaDet_get_Filename\n");
176 SysFreeString(filename);
178 hr = IMediaDet_get_Filename(pM, NULL);
179 ok(hr == E_POINTER, "IMediaDet_get_Filename\n");
182 hr = IMediaDet_get_CurrentStream(pM, &strm);
183 ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
184 ok(strm == 0, "IMediaDet_get_CurrentStream\n");
186 hr = IMediaDet_get_CurrentStream(pM, NULL);
187 ok(hr == E_POINTER, "IMediaDet_get_CurrentStream\n");
189 hr = IMediaDet_put_CurrentStream(pM, -1);
190 ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
192 hr = IMediaDet_put_CurrentStream(pM, 1);
193 ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
197 hr = IMediaDet_get_CurrentStream(pM, &strm);
198 ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
199 ok(strm == 0, "IMediaDet_get_CurrentStream\n");
201 hr = IMediaDet_put_CurrentStream(pM, 0);
202 ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
205 hr = IMediaDet_get_CurrentStream(pM, &strm);
206 ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
207 ok(strm == 0, "IMediaDet_get_CurrentStream\n");
209 ZeroMemory(&mt, sizeof mt);
210 hr = IMediaDet_get_StreamMediaType(pM, &mt);
211 ok(hr == S_OK, "IMediaDet_get_StreamMediaType\n");
212 ok(IsEqualGUID(&mt.majortype, &MEDIATYPE_Video),
213 "IMediaDet_get_StreamMediaType\n");
214 CoTaskMemFree(mt.pbFormat);
216 hr = IMediaDet_get_FrameRate(pM, NULL);
217 ok(hr == E_POINTER, "IMediaDet_get_FrameRate\n");
219 hr = IMediaDet_get_FrameRate(pM, &fps);
220 ok(hr == S_OK, "IMediaDet_get_FrameRate\n");
221 ok(fps == 10.0, "IMediaDet_get_FrameRate\n");
223 hr = IMediaDet_Release(pM);
224 ok(hr == 0, "IMediaDet_Release returned: %x\n", hr);
226 DeleteFileW(test_avi_filename);
228 /* test_sound.avi has one video stream and one audio stream. */
229 hr = CoCreateInstance(&CLSID_MediaDet, NULL, CLSCTX_INPROC_SERVER,
230 &IID_IMediaDet, (LPVOID*)&pM);
231 ok(hr == S_OK, "CoCreateInstance failed with %x\n", hr);
232 ok(pM != NULL, "pM is NULL\n");
234 filename = SysAllocString(test_sound_avi_filename);
235 hr = IMediaDet_put_Filename(pM, filename);
236 ok(hr == S_OK, "IMediaDet_put_Filename -> %x\n", hr);
237 SysFreeString(filename);
239 hr = IMediaDet_get_OutputStreams(pM, &nstrms);
240 ok(hr == S_OK, "IMediaDet_get_OutputStreams\n");
241 ok(nstrms == 2, "IMediaDet_get_OutputStreams\n");
244 hr = IMediaDet_get_Filename(pM, &filename);
245 ok(hr == S_OK, "IMediaDet_get_Filename\n");
246 ok(lstrcmpW(filename, test_sound_avi_filename) == 0,
247 "IMediaDet_get_Filename\n");
248 SysFreeString(filename);
250 /* I don't know if the stream order is deterministic. Just check
251 for both an audio and video stream. */
254 for (i = 0; i < 2; ++i)
256 hr = IMediaDet_put_CurrentStream(pM, i);
257 ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
260 hr = IMediaDet_get_CurrentStream(pM, &strm);
261 ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
262 ok(strm == i, "IMediaDet_get_CurrentStream\n");
264 ZeroMemory(&mt, sizeof mt);
265 hr = IMediaDet_get_StreamMediaType(pM, &mt);
266 ok(hr == S_OK, "IMediaDet_get_StreamMediaType\n");
267 flags += (IsEqualGUID(&mt.majortype, &MEDIATYPE_Video)
269 : (IsEqualGUID(&mt.majortype, &MEDIATYPE_Audio)
273 if (IsEqualGUID(&mt.majortype, &MEDIATYPE_Audio))
275 hr = IMediaDet_get_FrameRate(pM, &fps);
276 ok(hr == VFW_E_INVALIDMEDIATYPE, "IMediaDet_get_FrameRate\n");
279 CoTaskMemFree(mt.pbFormat);
281 ok(flags == 3, "IMediaDet_get_StreamMediaType\n");
283 hr = IMediaDet_put_CurrentStream(pM, 2);
284 ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
287 hr = IMediaDet_get_CurrentStream(pM, &strm);
288 ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
289 ok(strm == 1, "IMediaDet_get_CurrentStream\n");
291 hr = IMediaDet_Release(pM);
292 ok(hr == 0, "IMediaDet_Release returned: %x\n", hr);
294 DeleteFileW(test_sound_avi_filename);
301 skip("Couldn't initialize tests!\n");