[FFmpeg-devel] [RFC] Separating the RTSP muxer/demuxer and SDP demuxer
Aurelien Jacobs
aurel
Thu Oct 7 22:18:01 CEST 2010
On Thu, Oct 07, 2010 at 01:01:16PM +0300, Martin Storsj? wrote:
> Hi,
>
> Currently, the RTSP demuxer, muxer and the SDP demuxer are quite tightly
> coupled, forcing the dependencies of the SDP demuxer to be built even if
> only the RTSP muxer is desired, and vice versa.
>
> A quick recap of what the three muxers/demuxers do and their actual
> dependencies:
>
> [...]
>
> I tried doing the split, and the attached diff isn't something that could
> be used as such, but it's an initial proof of concept.
>
> Since the common code paths calls out to the use case specific code,
> splitting of the code is a bit trickier and needs function prototypes for
> the use case specific parts, and needs to enclose the callers within small
> #ifdefs within the functions, like this for example:
>
> - if (s->iformat)
> + if (s->iformat) {
> +#if CONFIG_RTSP_DEMUXER
> err = rtsp_setup_input_streams(s, reply);
> - else
> +#endif
> + } else {
> +#if CONFIG_RTSP_MUXER
> err = rtsp_setup_output_streams(s, host);
> +#endif
> + }
Would be cleaner like this:
if (CONFIG_RTSP_DEMUXER && s->iformat)
err = rtsp_setup_input_streams(s, reply);
else if (CONFIG_RTSP_MUXER)
err = rtsp_setup_output_streams(s, host);
> This is in the common RTSP connection code, while the setup_*_streams
> functions are in either the demuxer or in the muxer. We already have some
> similar code in rtsp_fetch_packet, like this one:
>
> switch(rt->lower_transport) {
> default:
> #if CONFIG_RTSP_DEMUXER
> case RTSP_LOWER_TRANSPORT_TCP:
> len = tcp_read_packet(s, &rtsp_st, rt->recvbuf, RECVBUF_SIZE);
> break;
> #endif
> case RTSP_LOWER_TRANSPORT_UDP:
>
> The attached patch splits the current code from rtsp.c and rtspenc.c into
> the following files:
>
> rtsp.c - handling of RTSP protocol things, shared by the RTSP muxer
> and demuxer
> rtspenc.c - RTSP muxer only
> rtspcommon.c - common code shared by all three components, such as opening
> of the transport contexts, cleanup of transport contexts,
> common parsing helpers such as get_word(), get_word_sep(),
> get_word_until_chars()
> rtprecv.c - functions for receiving RTP packets, shared by the RTSP and
> SDP demuxers
> rtspdec.c - RTSP demuxer only
> sdpdec.c - SDP demuxer only
This looks like a good plan. I like it.
> Then there's of course the question of how to name all the files.
I have no strong feeling about the naming. Your proposition is not bad.
Maybe you should find a better name for rtspcommon. Maybe a name which
don't contain "rtsp" ?
Aurel
More information about the ffmpeg-devel
mailing list