[vlc-devel] [PATCH] sout: add operations structure
Thomas Guillem
thomas at gllm.fr
Mon Apr 20 13:11:53 CEST 2020
On Mon, Apr 20, 2020, at 12:43, Rémi Denis-Courmont wrote:
> And then if the first patch is rejected, I have wasted many hours of work on all the other un-mergeable patches. Thanks but no thanks.
That's what I always did in the past. I can't count the number of hours lost because I had to rewrite a branch. Anyway, I don't regret it, as Steve said, it's easier to review when you can see the change induced by an API change.
>
> Le 20 avril 2020 10:18:04 GMT+03:00, Thomas Guillem <thomas at gllm.fr> a écrit :
>>
>> On Mon, Apr 20, 2020, at 09:10, Rémi Denis-Courmont wrote:
>>> That's a catch-22 requirement. I can't do the transition without this patch.
>>
>> I don't get your catch-22, you can do the transition on your private branch and propose the whole branch then.
>>
>> Having said that, I'm OK with this patch, it can be pushed now.
>>
>>>
>>> Le 20 avril 2020 08:49:23 GMT+03:00, Steve Lhomme <robux4 at ycbcr.xyz> a écrit :
>>>> It seems to just double the code to do something. What is the use for that ?
>>>> Maybe it's better to wait until we have some real examples that use it
>>>> before merging.
>>>>
>>>> On 2020-04-19 13:27, Rémi Denis-Courmont wrote:
>>>>> include/vlc_sout.h | 42 ++++++++++++++++++++++++++-----
>>>>> src/stream_output/stream_output.c | 1 +
>>>>> 2 files changed, 37 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/include/vlc_sout.h b/include/vlc_sout.h
>>>>> index 9b9c898cfc..a6fcf2b028 100644
>>>>> --- a/include/vlc_sout.h
>>>>> +++ b/include/vlc_sout.h
>>>>> @@ -188,6 +188,14 @@ enum sout_stream_query_e {
>>>>> SOUT_STREAM_ID_SPU_HIGHLIGHT, /* arg1=void *, arg2=const vlc_spu_highlight_t *, res=can fail */
>>>>> };
>>>>>
>>>>> +struct sout_stream_operations {
>>>>> + void *(*add)(sout_stream_t *, const es_format_t *);
>>>>> + void (*del)(sout_stream_t *, void *);
>>>>> + int (*send)(sout_stream_t *, void *, block_t *);
>>>>> + int (*control)( sout_stream_t *, int, va_list );
>>>>> + void (*flush)( sout_stream_t *, void *);
>>>>> +};
>>>>> +
>>>>> struct sout_stream_t
>>>>> {
>>>>> struct vlc_object_t obj;
>>>>> @@ -199,6 +207,8 @@ struct sout_stream_t
>>>>> config_chain_t *p_cfg;
>>>>> sout_stream_t *p_next;
>>>>>
>>>>> + const struct sout_stream_operations *ops;
>>>>> +
>>>>> /* add, remove a stream */
>>>>> void *(*pf_add)( sout_stream_t *, const es_format_t * );
>>>>> void (*pf_del)( sout_stream_t *, void * );
>>>>> @@ -218,31 +228,51 @@ VLC_API sout_stream_t *sout_StreamChainNew(sout_instance_t *p_sout,
>>>>> static inline void *sout_StreamIdAdd( sout_stream_t *s,
>>>>> const es_format_t *fmt )
>>>>> {
>>>>> - return s->pf_add( s, fmt );
>>>>> + if (s->ops == NULL)
>>>>> + return s->pf_add(s, fmt);
>>>>> + return s->ops->add(s, fmt);
>>>>> }
>>>>>
>>>>> static inline void sout_StreamIdDel( sout_stream_t *s,
>>>>> void *id )
>>>>> {
>>>>> - s->pf_del( s, id );
>>>>> + if (s->ops == NULL) {
>>>>> + s->pf_del(s, id);
>>>>> + return;
>>>>> + }
>>>>> + s->ops->del(s, id);
>>>>> }
>>>>>
>>>>> static inline int sout_StreamIdSend( sout_stream_t *s,
>>>>> void *id, block_t *b )
>>>>> {
>>>>> - return s->pf_send( s, id, b );
>>>>> + if (s->ops == NULL)
>>>>> + return s->pf_send(s, id, b);
>>>>> + return s->ops->send(s, id, b);
>>>>> }
>>>>>
>>>>> static inline void sout_StreamFlush( sout_stream_t *s,
>>>>> void *id )
>>>>> {
>>>>> - if (s->pf_flush)
>>>>> - s->pf_flush( s, id );
>>>>> + if (s->ops == NULL) {
>>>>> + if (s->pf_flush != NULL)
>>>>> + s->pf_flush(s, id);
>>>>> + return;
>>>>> + }
>>>>> + if (s->ops->flush != NULL)
>>>>> + s->ops->flush(s, id);
>>>>> }
>>>>>
>>>>> static inline int sout_StreamControlVa( sout_stream_t *s, int i_query, va_list args )
>>>>> {
>>>>> - return s->pf_control ? s->pf_control( s, i_query, args ) : VLC_EGENERIC;
>>>>> + if (s->ops == NULL) {
>>>>> + if (s->pf_control == NULL)
>>>>> + return VLC_EGENERIC;
>>>>> + return s->pf_control(s, i_query, args);
>>>>> + }
>>>>> + if (s->ops->control == NULL)
>>>>> + return VLC_EGENERIC;
>>>>> + return s->ops->control(s, i_query, args);
>>>>> }
>>>>>
>>>>> static inline int sout_StreamControl( sout_stream_t *s, int i_query, ... )
>>>>> diff --git a/src/stream_output/stream_output.c b/src/stream_output/stream_output.c
>>>>> index a89b6601c5..524b1a65ca 100644
>>>>> --- a/src/stream_output/stream_output.c
>>>>> +++ b/src/stream_output/stream_output.c
>>>>> @@ -810,6 +810,7 @@ static sout_stream_t *sout_StreamNew( sout_instance_t *p_sout, char *psz_name,
>>>>> p_stream->psz_name = psz_name;
>>>>> p_stream->p_cfg = p_cfg;
>>>>> p_stream->p_next = p_next;
>>>>> + p_stream->ops = NULL;
>>>>> p_stream->pf_flush = NULL;
>>>>> p_stream->pf_control = NULL;
>>>>> p_stream->pace_nocontrol = false;
>>>>> --
>>>>> 2.26.1vlc-devel mailing list
>>>>> To unsubscribe or modify your subscription options:
>>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>> vlc-devel mailing list
>>>> To unsubscribe or modify your subscription options:
>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>
>>> --
>>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
>>> _______________________________________________
>>> vlc-devel mailing list
>>> To unsubscribe or modify your subscription options:
>>> https://mailman.videolan.org/listinfo/vlc-devel
>>
>
> --
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20200420/dce10b05/attachment.html>
More information about the vlc-devel
mailing list