[FFmpeg-devel] [PATCH] rtsp - alternate protocol

Michael Niedermayer michaelni
Fri Dec 28 23:12:14 CET 2007


On Fri, Dec 28, 2007 at 04:23:45PM -0500, Ronald S. Bultje wrote:
> Hi,
> 
> On Dec 28, 2007 3:53 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> 
> > On Fri, Dec 28, 2007 at 02:57:08PM -0500, Ronald S. Bultje wrote:
> > > On Dec 28, 2007 2:42 PM, Aurelien Jacobs <aurel at gnuage.org> wrote:
> > > > Either an #ifdef VERSION or a version bump. I personaly don't care.
> > >
> > > No need yet for a version bump, this stuff will go away by itself... New
> > > version of patch#3 attached.
> >
> > patch ok
> 
> 
> Here's a re-post of all three then, just to make it easier to apply.
> 
> Ronald

> Index: ffmpeg/libavformat/rtsp.c
> ===================================================================
> --- ffmpeg.orig/libavformat/rtsp.c	2007-12-28 13:30:50.000000000 -0500
> +++ ffmpeg/libavformat/rtsp.c	2007-12-28 13:33:47.000000000 -0500
> @@ -842,6 +842,25 @@
>      av_free(rt->rtsp_streams);
>  }
>  
> +static inline int
> +num_bits_set(int mask)
> +{
> +    int i, n = 0;;
> +    for (i = 0; i < sizeof(int) * 8; i++)
> +        if (mask & (1 << i))
> +            n++;
> +    return n;
> +}
> +static inline int
> +unset_lowest_bit(int mask)
> +{
> +    int i;
> +    for (i = 0; i < sizeof(int) * 8; i++)
> +        if (mask & (1 << i))
> +            return mask &~ (1 << i);
> +    return 0;
> +}

forget this mess
it could be done with one line x&(x-1) but besides i dont see why
any of this would be needed


> +
>  static int rtsp_read_header(AVFormatContext *s,
>                              AVFormatParameters *ap)
>  {
> @@ -883,7 +902,8 @@
>      }
>  
>      if (!protocol_mask)
> -        protocol_mask = rtsp_default_protocols;
> +        for (i = 0; i < RTSP_PROTOCOL_RTP_LAST; i++)
> +            protocol_mask |= (1 << i);

this is (1<<RTSP_PROTOCOL_RTP_LAST) - 1  but i really dont like it


>  
>      /* open the tcp connexion */
>      snprintf(tcpname, sizeof(tcpname), "tcp://%s:%d", host, port);
> @@ -978,6 +998,11 @@
>                   "Transport: %s\r\n",
>                   rtsp_st->control_url, transport);
>          rtsp_send_cmd(s, cmd, reply, NULL);
> +        if (reply->status_code == 461 /* Unsupported protocol */ && i == 0 &&
> +            num_bits_set(protocol_mask) >= 2) {
> +            protocol_mask = unset_lowest_bit(protocol_mask);

> +            j = RTSP_RTP_PORT_MIN; i--; continue;

NO, try to write clean code, please!
or it will take till 2009 to get this into commitable shape

> +        } else

else after continue, whats the sense of this?


error -> remove bit from protocol_mask
protocol_mask == 0 -> fail
else try next

Also there is NO reason why the protocols would be choosen in the same
order as the bits, unset_lowest_bit() is a fragile hack
when someone changes the order it breaks silently

[...]

[rtsp_default_protocols]

Still ok, though its badly incomplete but its ok as first step, it does
no harm as is ...

And please do not send more than a single patch per email and please do not
repost patches, always reply if needed.

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Breaking DRM is a little like attempting to break through a door even
though the window is wide open and the only thing in the house is a bunch
of things you dont want and which you would get tomorrow for free anyway
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20071228/42e9417a/attachment.pgp>



More information about the ffmpeg-devel mailing list