mirror of
git://source.winehq.org/git/wine.git
synced 2024-08-31 22:04:29 +00:00
winegstreamer: Use IWMSyncReader2_Close in the async reader.
This commit is contained in:
parent
4a3f170c03
commit
1fab216a3a
|
@ -189,7 +189,6 @@ struct wm_reader
|
||||||
HRESULT WINAPI winegstreamer_create_wm_sync_reader(IUnknown *outer, void **out);
|
HRESULT WINAPI winegstreamer_create_wm_sync_reader(IUnknown *outer, void **out);
|
||||||
struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner);
|
struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner);
|
||||||
|
|
||||||
HRESULT wm_reader_close(struct wm_reader *reader);
|
|
||||||
HRESULT wm_reader_get_max_stream_size(struct wm_reader *reader, WORD stream_number, DWORD *size);
|
HRESULT wm_reader_get_max_stream_size(struct wm_reader *reader, WORD stream_number, DWORD *size);
|
||||||
HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output,
|
HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output,
|
||||||
DWORD index, IWMOutputMediaProps **props);
|
DWORD index, IWMOutputMediaProps **props);
|
||||||
|
|
|
@ -443,7 +443,7 @@ static ULONG WINAPI WMReader_Release(IWMReader *iface)
|
||||||
reader->cs.DebugInfo->Spare[0] = 0;
|
reader->cs.DebugInfo->Spare[0] = 0;
|
||||||
DeleteCriticalSection(&reader->cs);
|
DeleteCriticalSection(&reader->cs);
|
||||||
|
|
||||||
wm_reader_close(reader->wm_reader);
|
IWMSyncReader2_Close(reader->reader);
|
||||||
|
|
||||||
IUnknown_Release(reader->reader_inner);
|
IUnknown_Release(reader->reader_inner);
|
||||||
free(reader);
|
free(reader);
|
||||||
|
@ -465,7 +465,7 @@ static HRESULT WINAPI WMReader_Open(IWMReader *iface, const WCHAR *url,
|
||||||
|
|
||||||
if (SUCCEEDED(hr = wm_reader_open_file(reader->wm_reader, url))
|
if (SUCCEEDED(hr = wm_reader_open_file(reader->wm_reader, url))
|
||||||
&& FAILED(hr = async_reader_open(reader, callback, context)))
|
&& FAILED(hr = async_reader_open(reader, callback, context)))
|
||||||
wm_reader_close(reader->wm_reader);
|
IWMSyncReader2_Close(reader->reader);
|
||||||
|
|
||||||
LeaveCriticalSection(&reader->cs);
|
LeaveCriticalSection(&reader->cs);
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -483,7 +483,7 @@ static HRESULT WINAPI WMReader_Close(IWMReader *iface)
|
||||||
if (SUCCEEDED(hr = async_reader_queue_op(reader, ASYNC_OP_CLOSE, NULL)))
|
if (SUCCEEDED(hr = async_reader_queue_op(reader, ASYNC_OP_CLOSE, NULL)))
|
||||||
{
|
{
|
||||||
async_reader_close(reader);
|
async_reader_close(reader);
|
||||||
hr = wm_reader_close(reader->wm_reader);
|
hr = IWMSyncReader2_Close(reader->reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&reader->cs);
|
LeaveCriticalSection(&reader->cs);
|
||||||
|
@ -935,7 +935,7 @@ static HRESULT WINAPI WMReaderAdvanced2_OpenStream(IWMReaderAdvanced6 *iface,
|
||||||
|
|
||||||
if (SUCCEEDED(hr = wm_reader_open_stream(reader->wm_reader, stream))
|
if (SUCCEEDED(hr = wm_reader_open_stream(reader->wm_reader, stream))
|
||||||
&& FAILED(hr = async_reader_open(reader, callback, context)))
|
&& FAILED(hr = async_reader_open(reader, callback, context)))
|
||||||
wm_reader_close(reader->wm_reader);
|
IWMSyncReader2_Close(reader->reader);
|
||||||
|
|
||||||
LeaveCriticalSection(&reader->cs);
|
LeaveCriticalSection(&reader->cs);
|
||||||
return hr;
|
return hr;
|
||||||
|
|
|
@ -1549,37 +1549,6 @@ HRESULT wm_reader_open_file(struct wm_reader *reader, const WCHAR *filename)
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT wm_reader_close(struct wm_reader *reader)
|
|
||||||
{
|
|
||||||
EnterCriticalSection(&reader->cs);
|
|
||||||
|
|
||||||
if (!reader->wg_parser)
|
|
||||||
{
|
|
||||||
LeaveCriticalSection(&reader->cs);
|
|
||||||
return NS_E_INVALID_REQUEST;
|
|
||||||
}
|
|
||||||
|
|
||||||
wg_parser_disconnect(reader->wg_parser);
|
|
||||||
|
|
||||||
reader->read_thread_shutdown = true;
|
|
||||||
WaitForSingleObject(reader->read_thread, INFINITE);
|
|
||||||
CloseHandle(reader->read_thread);
|
|
||||||
reader->read_thread = NULL;
|
|
||||||
|
|
||||||
wg_parser_destroy(reader->wg_parser);
|
|
||||||
reader->wg_parser = NULL;
|
|
||||||
|
|
||||||
if (reader->source_stream)
|
|
||||||
IStream_Release(reader->source_stream);
|
|
||||||
reader->source_stream = NULL;
|
|
||||||
if (reader->file)
|
|
||||||
CloseHandle(reader->file);
|
|
||||||
reader->file = NULL;
|
|
||||||
|
|
||||||
LeaveCriticalSection(&reader->cs);
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct wm_stream *wm_reader_get_stream_by_stream_number(struct wm_reader *reader, WORD stream_number)
|
static struct wm_stream *wm_reader_get_stream_by_stream_number(struct wm_reader *reader, WORD stream_number)
|
||||||
{
|
{
|
||||||
if (stream_number && stream_number <= reader->stream_count)
|
if (stream_number && stream_number <= reader->stream_count)
|
||||||
|
@ -2180,7 +2149,7 @@ static ULONG WINAPI unknown_inner_Release(IUnknown *iface)
|
||||||
|
|
||||||
if (!refcount)
|
if (!refcount)
|
||||||
{
|
{
|
||||||
wm_reader_close(reader);
|
IWMSyncReader2_Close(&reader->IWMSyncReader2_iface);
|
||||||
|
|
||||||
reader->cs.DebugInfo->Spare[0] = 0;
|
reader->cs.DebugInfo->Spare[0] = 0;
|
||||||
DeleteCriticalSection(&reader->cs);
|
DeleteCriticalSection(&reader->cs);
|
||||||
|
@ -2227,7 +2196,33 @@ static HRESULT WINAPI reader_Close(IWMSyncReader2 *iface)
|
||||||
|
|
||||||
TRACE("reader %p.\n", reader);
|
TRACE("reader %p.\n", reader);
|
||||||
|
|
||||||
return wm_reader_close(reader);
|
EnterCriticalSection(&reader->cs);
|
||||||
|
|
||||||
|
if (!reader->wg_parser)
|
||||||
|
{
|
||||||
|
LeaveCriticalSection(&reader->cs);
|
||||||
|
return NS_E_INVALID_REQUEST;
|
||||||
|
}
|
||||||
|
|
||||||
|
wg_parser_disconnect(reader->wg_parser);
|
||||||
|
|
||||||
|
reader->read_thread_shutdown = true;
|
||||||
|
WaitForSingleObject(reader->read_thread, INFINITE);
|
||||||
|
CloseHandle(reader->read_thread);
|
||||||
|
reader->read_thread = NULL;
|
||||||
|
|
||||||
|
wg_parser_destroy(reader->wg_parser);
|
||||||
|
reader->wg_parser = NULL;
|
||||||
|
|
||||||
|
if (reader->source_stream)
|
||||||
|
IStream_Release(reader->source_stream);
|
||||||
|
reader->source_stream = NULL;
|
||||||
|
if (reader->file)
|
||||||
|
CloseHandle(reader->file);
|
||||||
|
reader->file = NULL;
|
||||||
|
|
||||||
|
LeaveCriticalSection(&reader->cs);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI reader_GetMaxOutputSampleSize(IWMSyncReader2 *iface, DWORD output, DWORD *max)
|
static HRESULT WINAPI reader_GetMaxOutputSampleSize(IWMSyncReader2 *iface, DWORD output, DWORD *max)
|
||||||
|
|
Loading…
Reference in a new issue