mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 21:39:43 +00:00
qedit: Implement IMediaDet_(put|get)_CurrentStream.
This commit is contained in:
parent
d3061d48e1
commit
33f270afc0
|
@ -37,6 +37,8 @@ typedef struct MediaDetImpl {
|
||||||
IGraphBuilder *graph;
|
IGraphBuilder *graph;
|
||||||
IBaseFilter *source;
|
IBaseFilter *source;
|
||||||
IBaseFilter *splitter;
|
IBaseFilter *splitter;
|
||||||
|
long num_streams;
|
||||||
|
long cur_stream;
|
||||||
} MediaDetImpl;
|
} MediaDetImpl;
|
||||||
|
|
||||||
static void MD_cleanup(MediaDetImpl *This)
|
static void MD_cleanup(MediaDetImpl *This)
|
||||||
|
@ -47,6 +49,8 @@ static void MD_cleanup(MediaDetImpl *This)
|
||||||
This->splitter = NULL;
|
This->splitter = NULL;
|
||||||
if (This->graph) IGraphBuilder_Release(This->graph);
|
if (This->graph) IGraphBuilder_Release(This->graph);
|
||||||
This->graph = NULL;
|
This->graph = NULL;
|
||||||
|
This->num_streams = -1;
|
||||||
|
This->cur_stream = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI MediaDet_AddRef(IMediaDet* iface)
|
static ULONG WINAPI MediaDet_AddRef(IMediaDet* iface)
|
||||||
|
@ -116,6 +120,12 @@ static HRESULT WINAPI MediaDet_get_OutputStreams(IMediaDet* iface, long *pVal)
|
||||||
if (!This->splitter)
|
if (!This->splitter)
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
if (This->num_streams != -1)
|
||||||
|
{
|
||||||
|
*pVal = This->num_streams;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
*pVal = 0;
|
*pVal = 0;
|
||||||
|
|
||||||
hr = IBaseFilter_EnumPins(This->splitter, &pins);
|
hr = IBaseFilter_EnumPins(This->splitter, &pins);
|
||||||
|
@ -138,21 +148,42 @@ static HRESULT WINAPI MediaDet_get_OutputStreams(IMediaDet* iface, long *pVal)
|
||||||
}
|
}
|
||||||
IEnumPins_Release(pins);
|
IEnumPins_Release(pins);
|
||||||
|
|
||||||
|
This->num_streams = *pVal;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MediaDet_get_CurrentStream(IMediaDet* iface, long *pVal)
|
static HRESULT WINAPI MediaDet_get_CurrentStream(IMediaDet* iface, long *pVal)
|
||||||
{
|
{
|
||||||
MediaDetImpl *This = (MediaDetImpl *)iface;
|
MediaDetImpl *This = (MediaDetImpl *)iface;
|
||||||
FIXME("(%p)->(%p): not implemented!\n", This, pVal);
|
TRACE("(%p)\n", This);
|
||||||
return E_NOTIMPL;
|
|
||||||
|
if (!pVal)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
|
*pVal = This->cur_stream;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MediaDet_put_CurrentStream(IMediaDet* iface, long newVal)
|
static HRESULT WINAPI MediaDet_put_CurrentStream(IMediaDet* iface, long newVal)
|
||||||
{
|
{
|
||||||
MediaDetImpl *This = (MediaDetImpl *)iface;
|
MediaDetImpl *This = (MediaDetImpl *)iface;
|
||||||
FIXME("(%p)->(%ld): not implemented!\n", This, newVal);
|
HRESULT hr;
|
||||||
return E_NOTIMPL;
|
|
||||||
|
TRACE("(%p)->(%ld)\n", This, newVal);
|
||||||
|
|
||||||
|
if (This->num_streams == -1)
|
||||||
|
{
|
||||||
|
long n;
|
||||||
|
hr = MediaDet_get_OutputStreams(iface, &n);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newVal < 0 || This->num_streams <= newVal)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
This->cur_stream = newVal;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MediaDet_get_StreamType(IMediaDet* iface, GUID *pVal)
|
static HRESULT WINAPI MediaDet_get_StreamType(IMediaDet* iface, GUID *pVal)
|
||||||
|
@ -469,6 +500,8 @@ HRESULT MediaDet_create(IUnknown * pUnkOuter, LPVOID * ppv) {
|
||||||
obj->graph = NULL;
|
obj->graph = NULL;
|
||||||
obj->source = NULL;
|
obj->source = NULL;
|
||||||
obj->splitter = NULL;
|
obj->splitter = NULL;
|
||||||
|
obj->num_streams = -1;
|
||||||
|
obj->cur_stream = 0;
|
||||||
*ppv = obj;
|
*ppv = obj;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -120,11 +120,37 @@ static void test_mediadet(void)
|
||||||
ok(hr == E_INVALIDARG, "IMediaDet_get_OutputStreams\n");
|
ok(hr == E_INVALIDARG, "IMediaDet_get_OutputStreams\n");
|
||||||
ok(nstrms == -1, "IMediaDet_get_OutputStreams\n");
|
ok(nstrms == -1, "IMediaDet_get_OutputStreams\n");
|
||||||
|
|
||||||
|
strm = -1;
|
||||||
|
/* The stream defaults to 0, even without a file! */
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
||||||
|
ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
||||||
|
ok(strm == 0, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, NULL);
|
||||||
|
ok(hr == E_POINTER, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
|
/* But put_CurrentStream doesn't. */
|
||||||
|
hr = IMediaDet_put_CurrentStream(pM, 0);
|
||||||
|
ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
|
hr = IMediaDet_put_CurrentStream(pM, -1);
|
||||||
|
ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
filename = SysAllocString(test_avi_filename);
|
filename = SysAllocString(test_avi_filename);
|
||||||
hr = IMediaDet_put_Filename(pM, filename);
|
hr = IMediaDet_put_Filename(pM, filename);
|
||||||
ok(hr == S_OK, "IMediaDet_put_Filename -> %x\n", hr);
|
ok(hr == S_OK, "IMediaDet_put_Filename -> %x\n", hr);
|
||||||
SysFreeString(filename);
|
SysFreeString(filename);
|
||||||
|
|
||||||
|
strm = -1;
|
||||||
|
/* The stream defaults to 0. */
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
||||||
|
ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
||||||
|
ok(strm == 0, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
|
/* Even before get_OutputStreams. */
|
||||||
|
hr = IMediaDet_put_CurrentStream(pM, 1);
|
||||||
|
ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
hr = IMediaDet_get_OutputStreams(pM, &nstrms);
|
hr = IMediaDet_get_OutputStreams(pM, &nstrms);
|
||||||
ok(hr == S_OK, "IMediaDet_get_OutputStreams\n");
|
ok(hr == S_OK, "IMediaDet_get_OutputStreams\n");
|
||||||
ok(nstrms == 1, "IMediaDet_get_OutputStreams\n");
|
ok(nstrms == 1, "IMediaDet_get_OutputStreams\n");
|
||||||
|
@ -139,13 +165,33 @@ static void test_mediadet(void)
|
||||||
hr = IMediaDet_get_Filename(pM, NULL);
|
hr = IMediaDet_get_Filename(pM, NULL);
|
||||||
ok(hr == E_POINTER, "IMediaDet_get_Filename\n");
|
ok(hr == E_POINTER, "IMediaDet_get_Filename\n");
|
||||||
|
|
||||||
|
strm = -1;
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
||||||
|
ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
||||||
|
ok(strm == 0, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, NULL);
|
||||||
|
ok(hr == E_POINTER, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
|
hr = IMediaDet_put_CurrentStream(pM, -1);
|
||||||
|
ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
|
hr = IMediaDet_put_CurrentStream(pM, 1);
|
||||||
|
ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
|
/* Try again. */
|
||||||
|
strm = -1;
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
||||||
|
ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
||||||
|
ok(strm == 0, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
hr = IMediaDet_put_CurrentStream(pM, 0);
|
hr = IMediaDet_put_CurrentStream(pM, 0);
|
||||||
todo_wine ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
|
ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
strm = -1;
|
strm = -1;
|
||||||
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
||||||
todo_wine ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
||||||
todo_wine ok(strm == 0, "IMediaDet_get_CurrentStream\n");
|
ok(strm == 0, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
ZeroMemory(&mt, sizeof mt);
|
ZeroMemory(&mt, sizeof mt);
|
||||||
hr = IMediaDet_get_StreamMediaType(pM, &mt);
|
hr = IMediaDet_get_StreamMediaType(pM, &mt);
|
||||||
|
@ -185,7 +231,7 @@ static void test_mediadet(void)
|
||||||
flags = 0;
|
flags = 0;
|
||||||
|
|
||||||
hr = IMediaDet_put_CurrentStream(pM, 0);
|
hr = IMediaDet_put_CurrentStream(pM, 0);
|
||||||
todo_wine ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
|
ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
ZeroMemory(&mt, sizeof mt);
|
ZeroMemory(&mt, sizeof mt);
|
||||||
hr = IMediaDet_get_StreamMediaType(pM, &mt);
|
hr = IMediaDet_get_StreamMediaType(pM, &mt);
|
||||||
|
@ -197,7 +243,12 @@ static void test_mediadet(void)
|
||||||
: 0));
|
: 0));
|
||||||
|
|
||||||
hr = IMediaDet_put_CurrentStream(pM, 1);
|
hr = IMediaDet_put_CurrentStream(pM, 1);
|
||||||
todo_wine ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
|
ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
|
strm = -1;
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
||||||
|
ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
||||||
|
ok(strm == 1, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
ZeroMemory(&mt, sizeof mt);
|
ZeroMemory(&mt, sizeof mt);
|
||||||
hr = IMediaDet_get_StreamMediaType(pM, &mt);
|
hr = IMediaDet_get_StreamMediaType(pM, &mt);
|
||||||
|
@ -210,6 +261,14 @@ static void test_mediadet(void)
|
||||||
|
|
||||||
todo_wine ok(flags == 3, "IMediaDet_get_StreamMediaType\n");
|
todo_wine ok(flags == 3, "IMediaDet_get_StreamMediaType\n");
|
||||||
|
|
||||||
|
hr = IMediaDet_put_CurrentStream(pM, 2);
|
||||||
|
ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream\n");
|
||||||
|
|
||||||
|
strm = -1;
|
||||||
|
hr = IMediaDet_get_CurrentStream(pM, &strm);
|
||||||
|
ok(hr == S_OK, "IMediaDet_get_CurrentStream\n");
|
||||||
|
ok(strm == 1, "IMediaDet_get_CurrentStream\n");
|
||||||
|
|
||||||
hr = IMediaDet_Release(pM);
|
hr = IMediaDet_Release(pM);
|
||||||
ok(hr == 0, "IMediaDet_Release returned: %x\n", hr);
|
ok(hr == 0, "IMediaDet_Release returned: %x\n", hr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue