[PATCH 2/4] mp3dmod: Implement IMediaObject::GetInputSizeInfo().
Zebediah Figura
z.figura12 at gmail.com
Mon Feb 24 23:36:13 CST 2020
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
dlls/mp3dmod/mp3dmod.c | 18 ++++++++++---
dlls/mp3dmod/tests/mp3dmod.c | 50 +++++++++++++++++++++++++++++++++++-
2 files changed, 63 insertions(+), 5 deletions(-)
diff --git a/dlls/mp3dmod/mp3dmod.c b/dlls/mp3dmod/mp3dmod.c
index c89f32e9ed6..5e232f0443f 100644
--- a/dlls/mp3dmod/mp3dmod.c
+++ b/dlls/mp3dmod/mp3dmod.c
@@ -52,7 +52,7 @@ struct mp3_decoder
mpg123_handle *mh;
DMO_MEDIA_TYPE intype, outtype;
- BOOL intype_set;
+ BOOL intype_set, outtype_set;
IMediaBuffer *buffer;
REFERENCE_TIME timestamp;
@@ -262,6 +262,7 @@ static HRESULT WINAPI MediaObject_SetOutputType(IMediaObject *iface, DWORD index
if (flags & DMO_SET_TYPEF_CLEAR)
{
MoFreeMediaType(&This->outtype);
+ This->outtype_set = FALSE;
return S_OK;
}
@@ -287,6 +288,7 @@ static HRESULT WINAPI MediaObject_SetOutputType(IMediaObject *iface, DWORD index
return DMO_E_TYPE_NOT_ACCEPTED;
}
MoCopyMediaType(&This->outtype, type);
+ This->outtype_set = TRUE;
}
return S_OK;
@@ -306,11 +308,19 @@ static HRESULT WINAPI MediaObject_GetOutputCurrentType(IMediaObject *iface, DWOR
return E_NOTIMPL;
}
-static HRESULT WINAPI MediaObject_GetInputSizeInfo(IMediaObject *iface, DWORD index, DWORD *size, DWORD *max_lookahead, DWORD *alignment)
+static HRESULT WINAPI MediaObject_GetInputSizeInfo(IMediaObject *iface,
+ DWORD index, DWORD *size, DWORD *lookahead, DWORD *alignment)
{
- FIXME("(%p)->(%d, %p, %p, %p) stub!\n", iface, index, size, max_lookahead, alignment);
+ struct mp3_decoder *dmo = impl_from_IMediaObject(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, index %u, size %p, lookahead %p, alignment %p.\n", iface, index, size, lookahead, alignment);
+
+ if (!dmo->intype_set || !dmo->outtype_set)
+ return DMO_E_TYPE_NOT_SET;
+
+ *size = 0;
+ *alignment = 1;
+ return S_OK;
}
static HRESULT WINAPI MediaObject_GetOutputSizeInfo(IMediaObject *iface, DWORD index, DWORD *size, DWORD *alignment)
diff --git a/dlls/mp3dmod/tests/mp3dmod.c b/dlls/mp3dmod/tests/mp3dmod.c
index 1e410861eed..78471c42bcb 100644
--- a/dlls/mp3dmod/tests/mp3dmod.c
+++ b/dlls/mp3dmod/tests/mp3dmod.c
@@ -288,7 +288,36 @@ static void test_aggregation(void)
static void test_stream_info(void)
{
- DWORD input_count, output_count, flags;
+ static const MPEGLAYER3WAVEFORMAT input_format =
+ {
+ .wfx.nChannels = 2,
+ .wfx.nSamplesPerSec = 48000,
+ };
+ DMO_MEDIA_TYPE input_mt =
+ {
+ .majortype = MEDIATYPE_Audio,
+ .subtype = WMMEDIASUBTYPE_MP3,
+ .formattype = FORMAT_WaveFormatEx,
+ .cbFormat = sizeof(input_format),
+ .pbFormat = (BYTE *)&input_format,
+ };
+
+ static const WAVEFORMATEX output_format =
+ {
+ .nChannels = 1,
+ .nSamplesPerSec = 48000,
+ .nAvgBytesPerSec = 2 * 48000,
+ .nBlockAlign = 2,
+ .wBitsPerSample = 16,
+ };
+ DMO_MEDIA_TYPE output_mt =
+ {
+ .formattype = FORMAT_WaveFormatEx,
+ .cbFormat = sizeof(output_format),
+ .pbFormat = (BYTE *)&output_format,
+ };
+
+ DWORD input_count, output_count, flags, size, lookahead, alignment;
IMediaObject *dmo;
HRESULT hr;
@@ -311,6 +340,25 @@ static void test_stream_info(void)
ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(!flags, "Got flags %#x.\n", flags);
+ hr = IMediaObject_GetInputSizeInfo(dmo, 0, &size, &lookahead, &alignment);
+ ok(hr == DMO_E_TYPE_NOT_SET, "Got hr %#x.\n", hr);
+
+ hr = IMediaObject_SetInputType(dmo, 0, &input_mt, 0);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IMediaObject_GetInputSizeInfo(dmo, 0, &size, &lookahead, &alignment);
+ ok(hr == DMO_E_TYPE_NOT_SET, "Got hr %#x.\n", hr);
+
+ hr = IMediaObject_SetOutputType(dmo, 0, &output_mt, 0);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ size = lookahead = alignment = 0xdeadbeef;
+ hr = IMediaObject_GetInputSizeInfo(dmo, 0, &size, &lookahead, &alignment);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(!size, "Got size %u.\n", size);
+ ok(lookahead == 0xdeadbeef, "Got lookahead %u.\n", lookahead);
+ ok(alignment == 1, "Got alignment %u.\n", alignment);
+
IMediaObject_Release(dmo);
}
--
2.25.0
More information about the wine-devel
mailing list