mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 21:27:19 +00:00
wineqtdecoder: Do not fail state change methods if source pins are not connected.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ef7dcc7d51
commit
7905cc975f
|
@ -278,25 +278,21 @@ static void qt_splitter_destroy(struct strmbase_filter *iface)
|
||||||
static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE_TIME time)
|
static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE_TIME time)
|
||||||
{
|
{
|
||||||
QTSplitter *filter = impl_from_strmbase_filter(iface);
|
QTSplitter *filter = impl_from_strmbase_filter(iface);
|
||||||
HRESULT hr = VFW_E_NOT_CONNECTED, pin_hr;
|
HRESULT hr;
|
||||||
|
|
||||||
EnterCriticalSection(&filter->csReceive);
|
EnterCriticalSection(&filter->csReceive);
|
||||||
|
|
||||||
if (filter->pVideo_Pin)
|
if (filter->pVideo_Pin && filter->pVideo_Pin->pin.pin.peer
|
||||||
{
|
&& FAILED(hr = IMemAllocator_Commit(filter->pVideo_Pin->pin.pAllocator)))
|
||||||
if (SUCCEEDED(pin_hr = BaseOutputPinImpl_Active(&filter->pVideo_Pin->pin)))
|
ERR("Failed to commit video allocator, hr %#x.\n", hr);
|
||||||
hr = pin_hr;
|
if (filter->pAudio_Pin && filter->pAudio_Pin->pin.pin.peer
|
||||||
}
|
&& FAILED(hr = IMemAllocator_Commit(filter->pAudio_Pin->pin.pAllocator)))
|
||||||
if (filter->pAudio_Pin)
|
ERR("Failed to commit audio allocator, hr %#x.\n", hr);
|
||||||
{
|
|
||||||
if (SUCCEEDED(pin_hr = BaseOutputPinImpl_Active(&filter->pAudio_Pin->pin)))
|
|
||||||
hr = pin_hr;
|
|
||||||
}
|
|
||||||
SetEvent(filter->runEvent);
|
SetEvent(filter->runEvent);
|
||||||
|
|
||||||
LeaveCriticalSection(&filter->csReceive);
|
LeaveCriticalSection(&filter->csReceive);
|
||||||
|
|
||||||
return hr;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT qt_splitter_cleanup_stream(struct strmbase_filter *iface)
|
static HRESULT qt_splitter_cleanup_stream(struct strmbase_filter *iface)
|
||||||
|
|
|
@ -561,16 +561,18 @@ static void video_decoder_destroy(struct strmbase_filter *iface)
|
||||||
|
|
||||||
static HRESULT video_decoder_init_stream(struct strmbase_filter *iface)
|
static HRESULT video_decoder_init_stream(struct strmbase_filter *iface)
|
||||||
{
|
{
|
||||||
QTVDecoderImpl *This = impl_from_strmbase_filter(iface);
|
QTVDecoderImpl *filter = impl_from_strmbase_filter(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
OSErr err = noErr;
|
OSErr err = noErr;
|
||||||
ICMDecompressionSessionOptionsRef sessionOptions = NULL;
|
ICMDecompressionSessionOptionsRef sessionOptions = NULL;
|
||||||
ICMDecompressionTrackingCallbackRecord trackingCallbackRecord;
|
ICMDecompressionTrackingCallbackRecord trackingCallbackRecord;
|
||||||
|
|
||||||
trackingCallbackRecord.decompressionTrackingCallback = trackingCallback;
|
trackingCallbackRecord.decompressionTrackingCallback = trackingCallback;
|
||||||
trackingCallbackRecord.decompressionTrackingRefCon = (void*)This;
|
trackingCallbackRecord.decompressionTrackingRefCon = filter;
|
||||||
|
|
||||||
err = ICMDecompressionSessionCreate(NULL, This->hImageDescription, sessionOptions, This->outputBufferAttributes, &trackingCallbackRecord, &This->decompressionSession);
|
err = ICMDecompressionSessionCreate(NULL, filter->hImageDescription, sessionOptions,
|
||||||
|
filter->outputBufferAttributes, &trackingCallbackRecord, &filter->decompressionSession);
|
||||||
|
|
||||||
if (err != noErr)
|
if (err != noErr)
|
||||||
{
|
{
|
||||||
|
@ -578,18 +580,24 @@ static HRESULT video_decoder_init_stream(struct strmbase_filter *iface)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return BaseOutputPinImpl_Active(&This->source);
|
if (filter->source.pin.peer && FAILED(hr = IMemAllocator_Commit(filter->source.pAllocator)))
|
||||||
|
ERR("Failed to commit allocator, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT video_decoder_cleanup_stream(struct strmbase_filter *iface)
|
static HRESULT video_decoder_cleanup_stream(struct strmbase_filter *iface)
|
||||||
{
|
{
|
||||||
QTVDecoderImpl* This = impl_from_strmbase_filter(iface);
|
QTVDecoderImpl *filter = impl_from_strmbase_filter(iface);
|
||||||
|
|
||||||
if (This->decompressionSession)
|
if (filter->decompressionSession)
|
||||||
ICMDecompressionSessionRelease(This->decompressionSession);
|
ICMDecompressionSessionRelease(filter->decompressionSession);
|
||||||
This->decompressionSession = NULL;
|
filter->decompressionSession = NULL;
|
||||||
|
|
||||||
return BaseOutputPinImpl_Inactive(&This->source);
|
if (filter->source.pin.peer)
|
||||||
|
IMemAllocator_Decommit(filter->source.pAllocator);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct strmbase_filter_ops filter_ops =
|
static const struct strmbase_filter_ops filter_ops =
|
||||||
|
|
Loading…
Reference in a new issue