mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-06 21:29:49 +00:00
winegstreamer: Support zero-copy wg_transform_push_data in quartz_transform.c.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
This commit is contained in:
parent
2bbdd1eee6
commit
6c110bd398
|
@ -132,6 +132,8 @@ void wg_sample_release(struct wg_sample *wg_sample);
|
|||
|
||||
HRESULT wg_transform_push_mf(struct wg_transform *transform, struct wg_sample *sample,
|
||||
struct wg_sample_queue *queue);
|
||||
HRESULT wg_transform_push_quartz(struct wg_transform *transform, struct wg_sample *sample,
|
||||
struct wg_sample_queue *queue);
|
||||
HRESULT wg_transform_read_mf(struct wg_transform *transform, struct wg_sample *sample,
|
||||
struct wg_format *format);
|
||||
|
||||
|
|
|
@ -315,21 +315,7 @@ static HRESULT WINAPI transform_sink_receive(struct strmbase_sink *pin, IMediaSa
|
|||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = IMediaSample_GetTime(sample, &start_time, &end_time);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
wg_sample->pts = start_time;
|
||||
wg_sample->flags |= WG_SAMPLE_FLAG_HAS_PTS;
|
||||
}
|
||||
if (hr == S_OK)
|
||||
{
|
||||
wg_sample->duration = end_time - start_time;
|
||||
wg_sample->flags |= WG_SAMPLE_FLAG_HAS_DURATION;
|
||||
}
|
||||
|
||||
hr = wg_transform_push_data(filter->transform, wg_sample);
|
||||
wg_sample_release(wg_sample);
|
||||
|
||||
hr = wg_transform_push_quartz(filter->transform, wg_sample, filter->sample_queue);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
|
@ -364,6 +350,8 @@ static HRESULT WINAPI transform_sink_receive(struct strmbase_sink *pin, IMediaSa
|
|||
return hr;
|
||||
}
|
||||
|
||||
wg_sample_queue_flush(filter->sample_queue, false);
|
||||
|
||||
hr = IMediaSample_SetActualDataLength(output_sample, wg_sample->size);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
|
|
|
@ -298,3 +298,34 @@ HRESULT wg_transform_read_mf(struct wg_transform *transform, struct wg_sample *w
|
|||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT wg_transform_push_quartz(struct wg_transform *transform, struct wg_sample *wg_sample,
|
||||
struct wg_sample_queue *queue)
|
||||
{
|
||||
struct sample *sample = unsafe_quartz_from_wg_sample(wg_sample);
|
||||
REFERENCE_TIME start_time, end_time;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE_(quartz)("transform %p, wg_sample %p, queue %p.\n", transform, wg_sample, queue);
|
||||
|
||||
hr = IMediaSample_GetTime(sample->u.quartz.sample, &start_time, &end_time);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
wg_sample->pts = start_time;
|
||||
wg_sample->flags |= WG_SAMPLE_FLAG_HAS_PTS;
|
||||
}
|
||||
if (hr == S_OK)
|
||||
{
|
||||
wg_sample->duration = end_time - start_time;
|
||||
wg_sample->flags |= WG_SAMPLE_FLAG_HAS_DURATION;
|
||||
}
|
||||
|
||||
if (IMediaSample_IsSyncPoint(sample->u.quartz.sample) == S_OK)
|
||||
wg_sample->flags |= WG_SAMPLE_FLAG_SYNC_POINT;
|
||||
|
||||
wg_sample_queue_begin_append(queue, wg_sample);
|
||||
hr = wg_transform_push_data(transform, wg_sample);
|
||||
wg_sample_queue_end_append(queue, wg_sample);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue