[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    Re: [PATCH 1/2] winegstreamer: Implement IMFMediaSource::Stop.
From:       Derek Lesho <dlesho () codeweavers ! com>
Date:       2020-11-30 17:00:47
Message-ID: b4992777-24a3-9357-8150-1cbd5f658cf8 () codeweavers ! com
[Download RAW message or body]


On 11/30/20 11:56 AM, Zebediah Figura (she/her) wrote:
> On 11/30/20 10:45 AM, Derek Lesho wrote:
> > Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
> > ---
> > dlls/winegstreamer/media_source.c | 29 +++++++++++++++++++++++++++--
> > 1 file changed, 27 insertions(+), 2 deletions(-)
> > 
> > diff --git a/dlls/winegstreamer/media_source.c \
> > b/dlls/winegstreamer/media_source.c index 5c502cf3ed5..7d677e39feb 100644
> > --- a/dlls/winegstreamer/media_source.c
> > +++ b/dlls/winegstreamer/media_source.c
> > @@ -64,6 +64,7 @@ struct media_stream
> > enum source_async_op
> > {
> > SOURCE_ASYNC_START,
> > +    SOURCE_ASYNC_STOP,
> > SOURCE_ASYNC_REQUEST_SAMPLE,
> > };
> > 
> > @@ -343,6 +344,22 @@ static void start_pipeline(struct media_source *source, \
> > struct source_async_comm gst_element_set_state(source->container, \
> > GST_STATE_PLAYING); }
> > 
> > +static void stop_pipeline(struct media_source *source)
> > +{
> > +    gst_element_set_state(source->container, GST_STATE_PAUSED);
> > +
> > +    for (unsigned int i = 0; i < source->stream_count; i++)
> Another misplaced variable initializer here. Please try harder to watch
> for these.
Whoops, sorry.   It's muscle memory at this point for me to use this 
form, so I'll try to create a commit hook to avoid this in the future.
> 
> > +    {
> > +        struct media_stream *stream = source->streams[i];
> > +        if (stream->state != STREAM_INACTIVE)
> > +            IMFMediaEventQueue_QueueEventParamVar(stream->event_queue, \
> > MEStreamStopped, &GUID_NULL, S_OK, NULL); +    }
> > +
> > +    IMFMediaEventQueue_QueueEventParamVar(source->event_queue, MESourceStopped, \
> > &GUID_NULL, S_OK, NULL); +
> > +    source->state = SOURCE_STOPPED;
> > +}
> > +
> > static void dispatch_end_of_presentation(struct media_source *source)
> > {
> > PROPVARIANT empty = {.vt = VT_EMPTY};
> > @@ -417,6 +434,9 @@ static HRESULT WINAPI \
> > source_async_commands_Invoke(IMFAsyncCallback *iface, IMFA case \
> > SOURCE_ASYNC_START: start_pipeline(source, command);
> > break;
> > +        case SOURCE_ASYNC_STOP:
> > +            stop_pipeline(source);
> > +            break;
> > case SOURCE_ASYNC_REQUEST_SAMPLE:
> > wait_on_sample(command->u.request_sample.stream, \
> > command->u.request_sample.token); break;
> > @@ -1087,13 +1107,18 @@ static HRESULT WINAPI media_source_Start(IMFMediaSource \
> > *iface, IMFPresentationD static HRESULT WINAPI media_source_Stop(IMFMediaSource \
> > *iface) {
> > struct media_source *source = impl_from_IMFMediaSource(iface);
> > +    struct source_async_command *command;
> > +    HRESULT hr;
> > 
> > -    FIXME("(%p): stub\n", source);
> > +    TRACE("(%p)\n", source);
> > 
> > if (source->state == SOURCE_SHUTDOWN)
> > return MF_E_SHUTDOWN;
> > 
> > -    return E_NOTIMPL;
> > +    if (SUCCEEDED(hr = source_create_async_op(SOURCE_ASYNC_STOP, &command)))
> > +        hr = MFPutWorkItem(source->async_commands_queue, \
> > &source->async_commands_callback, &command->IUnknown_iface); +
> > +    return hr;
> > }
> > 
> > static HRESULT WINAPI media_source_Pause(IMFMediaSource *iface)
> > 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic